|
| 1 | +# IDE Component |
| 2 | + |
| 3 | +## Overview |
| 4 | + |
| 5 | +The IDE component in Gitpod is responsible for packaging and managing the various Integrated Development Environments (IDEs) that are available to users within Gitpod workspaces. It includes support for VS Code (both web and desktop versions) and JetBrains IDEs, providing the necessary files, configurations, and integration points for these IDEs to work seamlessly within the Gitpod environment. |
| 6 | + |
| 7 | +## Purpose |
| 8 | + |
| 9 | +The primary purposes of the IDE component are: |
| 10 | +- Package and distribute IDE binaries for use in Gitpod workspaces |
| 11 | +- Configure IDEs to work within the Gitpod environment |
| 12 | +- Provide integration between IDEs and the Gitpod platform |
| 13 | +- Support multiple IDE types (VS Code, JetBrains) |
| 14 | +- Enable both web-based and desktop IDE experiences |
| 15 | +- Manage IDE versions and updates |
| 16 | +- Provide IDE-specific extensions and plugins |
| 17 | + |
| 18 | +## Architecture |
| 19 | + |
| 20 | +The IDE component is organized into several sub-components, each responsible for a specific IDE or IDE family: |
| 21 | + |
| 22 | +1. **Code**: Packages VS Code (OpenVSCode Server) for web-based usage |
| 23 | +2. **Code-Desktop**: Packages VS Code for desktop usage |
| 24 | +3. **JetBrains**: Packages various JetBrains IDEs (IntelliJ, GoLand, PyCharm, etc.) |
| 25 | +4. **Xterm**: Provides terminal functionality |
| 26 | + |
| 27 | +Each IDE sub-component typically includes: |
| 28 | +- Dockerfiles for building IDE images |
| 29 | +- Configuration files for IDE integration |
| 30 | +- Scripts for downloading and setting up IDE binaries |
| 31 | +- Plugins or extensions for Gitpod integration |
| 32 | + |
| 33 | +## Key Files and Structure |
| 34 | + |
| 35 | +### VS Code (Code) |
| 36 | +- `code/BUILD.yaml`: Build configuration for VS Code |
| 37 | +- `code/leeway.Dockerfile`: Dockerfile for building VS Code image |
| 38 | +- `code/codehelper/`: Helper utilities for VS Code |
| 39 | +- `code/gitpod-web-extension/`: Gitpod-specific VS Code extension |
| 40 | + |
| 41 | +### JetBrains |
| 42 | +- `jetbrains/image/`: JetBrains IDE image building |
| 43 | +- `jetbrains/image/BUILD.js`: Build script for JetBrains IDE images |
| 44 | +- `jetbrains/image/leeway.Dockerfile`: Dockerfile for JetBrains IDE images |
| 45 | +- `jetbrains/image/supervisor-ide-config_*.json`: IDE-specific configuration files |
| 46 | +- `jetbrains/backend-plugin/`: Backend plugin for JetBrains IDEs |
| 47 | +- `jetbrains/gateway-plugin/`: Gateway plugin for JetBrains remote development |
| 48 | +- `jetbrains/launcher/`: Launcher for JetBrains IDEs |
| 49 | +- `jetbrains/cli/`: Command-line interface for JetBrains IDEs |
| 50 | + |
| 51 | +## Supported IDEs |
| 52 | + |
| 53 | +### VS Code |
| 54 | +- Web-based VS Code (OpenVSCode Server) |
| 55 | +- Desktop VS Code |
| 56 | + |
| 57 | +### JetBrains |
| 58 | +- IntelliJ IDEA |
| 59 | +- GoLand |
| 60 | +- PyCharm |
| 61 | +- PhpStorm |
| 62 | +- RubyMine |
| 63 | +- WebStorm |
| 64 | +- Rider |
| 65 | +- CLion |
| 66 | +- RustRover |
| 67 | + |
| 68 | +Each JetBrains IDE is available in two versions: |
| 69 | +- Stable: Regular release version |
| 70 | +- Latest: Latest EAP (Early Access Program) or RC (Release Candidate) version |
| 71 | + |
| 72 | +## Build Process |
| 73 | + |
| 74 | +### VS Code |
| 75 | +1. Clones the OpenVSCode Server repository |
| 76 | +2. Builds the web and desktop versions |
| 77 | +3. Packages the built binaries into a Docker image |
| 78 | +4. Configures the image for use with Gitpod |
| 79 | + |
| 80 | +### JetBrains |
| 81 | +1. Downloads the specified JetBrains IDE binary |
| 82 | +2. Creates a Docker image with the IDE binary |
| 83 | +3. Configures the IDE for use with Gitpod |
| 84 | +4. Sets up the necessary plugins and extensions |
| 85 | + |
| 86 | +## Integration Points |
| 87 | + |
| 88 | +The IDE component integrates with: |
| 89 | +1. **Supervisor**: For launching and managing IDEs within workspaces |
| 90 | +2. **Workspace**: For accessing workspace content |
| 91 | +3. **IDE Service**: For resolving IDE requirements |
| 92 | +4. **Blobserve**: For serving static IDE assets |
| 93 | +5. **Registry Facade**: For providing IDE images |
| 94 | + |
| 95 | +## Configuration |
| 96 | + |
| 97 | +Each IDE has specific configuration requirements: |
| 98 | + |
| 99 | +### VS Code |
| 100 | +- Extensions to be pre-installed |
| 101 | +- Web configuration for browser-based usage |
| 102 | +- Desktop configuration for desktop usage |
| 103 | + |
| 104 | +### JetBrains |
| 105 | +- IDE-specific configuration files |
| 106 | +- Backend plugin configuration |
| 107 | +- Gateway plugin configuration |
| 108 | +- CLI configuration |
| 109 | + |
| 110 | +## Dependencies |
| 111 | + |
| 112 | +### Internal Dependencies |
| 113 | +- `supervisor`: For IDE lifecycle management |
| 114 | +- `ide-service`: For IDE resolution |
| 115 | +- `blobserve`: For serving static assets |
| 116 | +- `registry-facade`: For image management |
| 117 | + |
| 118 | +### External Dependencies |
| 119 | +- VS Code (OpenVSCode Server) source code |
| 120 | +- JetBrains IDE binaries |
| 121 | +- Various build tools (Node.js, npm, etc.) |
| 122 | + |
| 123 | +## Common Usage Patterns |
| 124 | + |
| 125 | +The IDE component is typically used to: |
| 126 | +1. Build and package IDE images for use in Gitpod workspaces |
| 127 | +2. Configure IDEs for optimal use within Gitpod |
| 128 | +3. Provide integration between IDEs and the Gitpod platform |
| 129 | +4. Support both web-based and desktop IDE experiences |
| 130 | +5. Manage IDE versions and updates |
| 131 | + |
| 132 | +## Related Components |
| 133 | + |
| 134 | +- **IDE Service**: Resolves IDE requirements and manages IDE configurations |
| 135 | +- **IDE Proxy**: Proxies requests to IDEs |
| 136 | +- **Supervisor**: Manages IDE lifecycle within workspaces |
| 137 | +- **Blobserve**: Serves static IDE assets |
| 138 | +- **Registry Facade**: Provides IDE images |
0 commit comments