Thank you for your interest in contributing to DevPod! This guide will help you get started with development.
CLI Development:
Desktop Application Development:
Linux Desktop Dependencies:
sudo apt-get install libappindicator3-1 libgdk-pixbuf2.0-0 libbsd0 libxdmcp6 \
libwmf-0.2-7 libwmf-0.2-7-gtk libgtk-3-0 libwmf-dev libwebkit2gtk-4.0-37 \
librust-openssl-sys-dev librust-glib-sys-dev
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev \
libayatana-appindicator3-dev librsvg2-dev-
Clone the repository:
git clone https://github.com/skevetter/devpod.git cd devpod -
If you want to change DevPod agent code:
- Exchange the URL in DefaultAgentDownloadURL with a custom public repository release
- Build devpod via:
task cli:build:dev - Upload
dist/devpod-dev_linux_amd64_v1/devpod-linux-amd64and ARM64 variant to your public repository release assets
Using Task (recommended):
# Build CLI for development
task cli:build:dev
# Build CLI for production
task cli:build
# Build with Pro features
task cli:build:dev:proUsing Go directly:
CGO_ENABLED=0 go build -ldflags "-s -w" -o devpodThe binary will be output as devpod in the current directory.
Using Task (recommended):
# Setup Tauri environment (first time only)
task desktop:tauri:setup
# Run in development mode
task desktop:tauri:dev
# Build the application
task desktop:tauri:build-appManual build:
cd desktop
yarn install --frozen-lockfile
yarn desktop:build:devThe application will be in desktop/src-tauri/target/release
# Tidy dependencies
task cli:tidy
# Run linters
task cli:lint
# Run unit tests
task cli:test
# Build for development
task cli:build:dev# Install dependencies
cd desktop
yarn install --frozen-lockfile
# Check code quality
task desktop:check
# Run linters
yarn lint:ci
# Check formatting
yarn format:check
# Type check
yarn types:check
# Generate TypeScript types from Rust
task desktop:tauri:generate-types
# Update dependencies
task desktop:update-deps# Build for e2e tests
task cli:test:e2e:build
# Run all e2e tests
task cli:test:e2e
# Run specific test suite
task cli:test:e2e:suite -- "suite-name"
# Run focused tests
task cli:test:e2e:focus -- "test-pattern"
# Setup kind cluster for testing
task cli:test:e2e:kind:setup
# Teardown kind cluster
task cli:test:e2e:kind:teardownIf you need to modify the gRPC tunnel code:
task cli:build:grpcThis requires:
protobuf-compiler(install viasudo apt install protobuf-compiler)- Go protobuf plugins (installed automatically by the task)
-
Build DevPod:
task cli:build:dev
-
Add a provider:
./dist/devpod-dev_linux_amd64_v1/devpod-linux-amd64 provider add docker
-
Configure the provider:
./dist/devpod-dev_linux_amd64_v1/devpod-linux-amd64 provider use docker
-
Start a workspace:
./dist/devpod-dev_linux_amd64_v1/devpod-linux-amd64 up examples/simple
# Build UI using act
task desktop:act:build:ui
# Build desktop app using act
task desktop:act:build:app
# Build flatpak using act
task desktop:act:build:flatpak
# Run e2e tests with focus
task cli:test:e2e:act:focus -- "test-pattern"Read the docs for an introduction to developing your own providers.
Once your provider is ready:
- Update
community.yamlwith your provider information - Update
docs/pages/managing-providers/add-provider.mdxwith documentation
This will feature your provider in both the documentation and the UI.
DevPod Desktop can handle deep links to perform various actions.
URL Scheme:
devpod://command?param1=value1¶m2=value2
Open a workspace based on a source (similar to devpod up, but shareable):
devpod://open?source=<url-encoded-source>&workspace=<name>&provider=<provider>&ide=<ide>
Parameters:
source(required): URL-encoded workspace sourceworkspace(optional): Workspace nameprovider(optional): Provider to useide(optional): IDE to open
Example:
devpod://open?source=https%3A%2F%2Fgithub.com%2Fuser%2Frepo&workspace=my-workspace&provider=docker&ide=vscode
Import a remote DevPod.Pro workspace into your local client:
devpod://import?workspace_id=<id>&workspace_uid=<uid>&devpod_pro_host=<host>&options=<options>
Parameters:
workspace_id(required): Workspace IDworkspace_uid(required): Workspace UIDdevpod_pro_host(required): DevPod Pro host URLoptions(optional): Additional options
# View all available tasks
task --list
# CLI tasks
task cli:build # Build CLI for production
task cli:build:dev # Build CLI for development
task cli:lint # Run linters
task cli:test # Run unit tests
task cli:tidy # Tidy go.mod and go.sum
# Desktop tasks
task desktop:build # Build desktop application
task desktop:check # Check code quality
task desktop:tauri:dev # Run in development mode
task desktop:tauri:setup # Setup Tauri environment
# E2E testing
task cli:test:e2e # Run all e2e tests
task cli:test:e2e:suite # Run specific test suite
task cli:test:e2e:focus # Run focused tests/cmd- CLI command implementations/pkg- Core packages and libraries/desktop- Desktop application (Tauri + React)/e2e- End-to-end tests/docs- Documentation website/examples- Example devcontainer configurations/hack- Build and development scripts
Please be respectful and constructive in all interactions with the community.