IDE Component
Overview
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.
Purpose
The primary purposes of the IDE component are:
Package and distribute IDE binaries for use in Gitpod workspaces
Configure IDEs to work within the Gitpod environment
Provide integration between IDEs and the Gitpod platform
Support multiple IDE types (VS Code, JetBrains)
Enable both web-based and desktop IDE experiences
Manage IDE versions and updates
Provide IDE-specific extensions and plugins
Architecture
The IDE component is organized into several sub-components, each responsible for a specific IDE or IDE family:
Code: Packages VS Code (OpenVSCode Server) for web-based usage
Code-Desktop: Packages VS Code for desktop usage
JetBrains: Packages various JetBrains IDEs (IntelliJ, GoLand, PyCharm, etc.)
Xterm: Provides terminal functionality
Each IDE sub-component typically includes:
Dockerfiles for building IDE images
Configuration files for IDE integration
Scripts for downloading and setting up IDE binaries
Plugins or extensions for Gitpod integration
Key Files and Structure
VS Code (Code)
code/BUILD.yaml
: Build configuration for VS Codecode/leeway.Dockerfile
: Dockerfile for building VS Code imagecode/codehelper/
: Helper utilities for VS Codecode/gitpod-web-extension/
: Gitpod-specific VS Code extension
JetBrains
jetbrains/image/
: JetBrains IDE image buildingjetbrains/image/BUILD.js
: Build script for JetBrains IDE imagesjetbrains/image/leeway.Dockerfile
: Dockerfile for JetBrains IDE imagesjetbrains/image/supervisor-ide-config_*.json
: IDE-specific configuration filesjetbrains/backend-plugin/
: Backend plugin for JetBrains IDEsjetbrains/gateway-plugin/
: Gateway plugin for JetBrains remote developmentjetbrains/launcher/
: Launcher for JetBrains IDEsjetbrains/cli/
: Command-line interface for JetBrains IDEs
Supported IDEs
VS Code
Web-based VS Code (OpenVSCode Server)
Desktop VS Code
JetBrains
IntelliJ IDEA
GoLand
PyCharm
PhpStorm
RubyMine
WebStorm
Rider
CLion
RustRover
Each JetBrains IDE is available in two versions:
Stable: Regular release version
Latest: Latest EAP (Early Access Program) or RC (Release Candidate) version
Build Process
VS Code
Clones the OpenVSCode Server repository
Builds the web and desktop versions
Packages the built binaries into a Docker image
Configures the image for use with Gitpod
JetBrains
Downloads the specified JetBrains IDE binary
Creates a Docker image with the IDE binary
Configures the IDE for use with Gitpod
Sets up the necessary plugins and extensions
Integration Points
The IDE component integrates with:
Supervisor: For launching and managing IDEs within workspaces
Workspace: For accessing workspace content
IDE Service: For resolving IDE requirements
Blobserve: For serving static IDE assets
Registry Facade: For providing IDE images
Configuration
Each IDE has specific configuration requirements:
VS Code
Extensions to be pre-installed
Web configuration for browser-based usage
Desktop configuration for desktop usage
JetBrains
IDE-specific configuration files
Backend plugin configuration
Gateway plugin configuration
CLI configuration
Dependencies
Internal Dependencies
supervisor
: For IDE lifecycle managementide-service
: For IDE resolutionblobserve
: For serving static assetsregistry-facade
: For image management
External Dependencies
VS Code (OpenVSCode Server) source code
JetBrains IDE binaries
Various build tools (Node.js, npm, etc.)
Common Usage Patterns
The IDE component is typically used to:
Build and package IDE images for use in Gitpod workspaces
Configure IDEs for optimal use within Gitpod
Provide integration between IDEs and the Gitpod platform
Support both web-based and desktop IDE experiences
Manage IDE versions and updates
Related Components
IDE Service: Resolves IDE requirements and manages IDE configurations
IDE Proxy: Proxies requests to IDEs
Supervisor: Manages IDE lifecycle within workspaces
Blobserve: Serves static IDE assets
Registry Facade: Provides IDE images