GitHub Codespaces bills by usage: compute time per hour, storage by space used; personal accounts get a monthly allowance (GitHub Docs, as of Nov 8, 2026).
A VPS with code-server, by contrast, bills by server runtime, not by IDE usage; current prices at /en/use-case/cloud-ide. You have root access, and your code sits on your server. With code-server, extensions come from the Open VSX gallery, not the Microsoft Marketplace (code-server FAQ, as of Nov 8, 2026).
This guide presents four self-hosted cloud IDEs, shows the setup and explains when self-hosting makes sense.
Why run your own cloud IDE?
Billing
Codespaces is convenient but bills by usage (see above). What a VPS costs for your team is shown by the calculator at /en/use-case/cloud-ide, with price date.
Data location and privacy
With Codespaces, the region is set by default based on your location and can be chosen manually (GitHub Docs, as of Nov 8, 2026).
With a self-hosted cloud IDE on a VPS (Hetzner, IONOS, Netcup): data on your server, location of your choice; if you process other people's data, you remain responsible for GDPR compliance, usually with a data processing agreement with the host.
No vendor lock-in
You are not tied to one provider. Moving to another VPS provider means: copy the Compose files, migrate the data, switch DNS.
Four self-hosted cloud IDEs at a glance
code-server and OpenVSCode Server bring VS Code into the browser; Coder and DevPod provide development environments that various editors connect to. Details per the project pages, as of Nov 8, 2026 (sources in the sections below).
| Tool | Type | Multi-user | Minimum per the project | Notes |
|---|---|---|---|---|
| code-server | VS Code in the browser | No (one password) | 1 GB RAM, 2 CPU cores | one container, password login |
| Coder | Workspace platform | Yes (templates + SSO) | 2 CPU cores, 4 GB (Docker install) | templates, SSO, admin dashboard |
| OpenVSCode Server | VS Code in the browser | No | not stated by the project | starts without Docker, project by Gitpod |
| DevPod | Client tool | not applicable (client tool) | per workspace, by project | devcontainer.json, no server daemon |
code-server
code-server by Coder runs e.g. as a Docker container with password login, VS Code in the browser; as a minimum requirement the project names 1 GB RAM and 2 CPU cores (code-server docs, as of Nov 8, 2026). Suits individuals who access their projects from different devices.
code-server knows a single password; for several people the project recommends a separate VM per person (code-server FAQ, as of Nov 8, 2026).
Coder
Coder is a platform for team workspaces: every developer gets a workspace from a Terraform template. Coder supports password login, GitHub OAuth and OpenID Connect, e.g. with Okta (Coder docs, as of Nov 8, 2026), and has a REST API (Coder docs, as of Nov 8, 2026). Some features require a paid license (Coder docs, as of Nov 8, 2026).
For production, Coder recommends an external PostgreSQL from version 13; the built-in database is meant for proofs of concept. The Docker installation names 2 CPU cores and 4 GB of memory (Coder docs, as of Nov 8, 2026).
OpenVSCode Server
OpenVSCode Server by Gitpod starts from the release archive with ./bin/openvscode-server, without Docker. Since v1.64 the web UI starts without authentication; it can be secured with --connection-token, and the Docker image runs with --without-connection-token (README, as of Nov 8, 2026). Put a reverse proxy with authentication or a VPN such as Tailscale in front.
Fits if you secure access via the network or a VPN.
DevPod
DevPod, an open-source project under github.com/loft-sh, is a pure client tool: it uses devcontainer.json files and starts workspaces locally, on Kubernetes, on remote machines or cloud VMs; besides VS Code it supports JetBrains, other editors via SSH (README, as of Nov 8, 2026).
Advantage: no running server daemon. Resource needs depend on the dev container.
Which VPS is enough? Hardware requirements
The IDE itself is lean – the load comes from language servers (TypeScript, Python, Go), linters, compilers and Docker containers. Guidance from RackDiff, not a vendor figure:
| Scenario | RAM | CPU | Storage |
|---|---|---|---|
| Solo dev (code-server) | 4 GB | 2 vCPU | 40 GB NVMe |
| 2–3 devs (Coder) | 8 GB | 2–4 vCPU | 80 GB NVMe |
| Small team 5+ (Coder) | 16 GB | 4–8 vCPU | 160 GB NVMe |
| DevPod (per workspace) | by dev container | by dev container | by project |
Matching offers with price date: cloud IDE calculator and VPS comparison.
Note: Language servers read many small files; NVMe storage can help with that.
The interactive cloud IDE calculator estimates RAM and CPU by team size and tool.
Setup: code-server with Docker Compose
The simplest setup: code-server behind Caddy as a reverse proxy with automatic HTTPS.
Requirements
- VPS with Ubuntu 22.04/24.04 and Docker installed
- Domain or subdomain (e.g. code.example.com) with DNS pointing to the VPS IP
Docker Compose
On the VPS, create the file /opt/code-server/docker-compose.yml:
services:
code-server:
image: codercom/code-server:<version>
container_name: code-server
restart: unless-stopped
environment:
- HASHED_PASSWORD=<your-argon2-hash, every $ as $$>
volumes:
- code-data:/home/coder
networks:
- web
caddy:
image: caddy:2-alpine
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy-data:/data
networks:
- web
volumes:
code-data:
caddy-data:
networks:
web:
code-server reads PASSWORD or HASHED_PASSWORD (code-server source, as of Nov 8, 2026). If you put the hash directly into the Compose file, every $ becomes $$ (code-server FAQ, as of Nov 8, 2026). The code-server port is not published; only Caddy is reachable from outside; replace <version> with a fixed version.
Create the file Caddyfile in the same directory:
code.example.com {
reverse_proxy code-server:8080
}
Start:
cd /opt/code-server
docker compose up -d
VS Code is then reachable at https://code.example.com. Caddy fetches a certificate automatically (Let's Encrypt, ZeroSSL as fallback) if the DNS record points to the server and ports 80 and 443 are reachable (Caddy docs, as of Nov 8, 2026).
Careful with the Docker socket: Whoever controls the Docker daemon effectively has root on the host (Docker docs, as of Nov 8, 2026). Mounting the socket into code-server only suits single-user setups you use alone; the Docker CLI is not in the image (code-server FAQ, as of Nov 8, 2026).
Setup: Coder for teams
For production, Coder recommends an external PostgreSQL. Use the project's official Compose file as a template (coder/coder compose.yaml, as of Nov 8, 2026). Adjust three points:
- HTTP address: The file sets
CODER_HTTP_ADDRESS=0.0.0.0:7080; without it, Coder only listens on127.0.0.1:3000(Coder docs, as of Nov 8, 2026). - No public port: Publish the port only on
127.0.0.1("127.0.0.1:7080:7080") or not at all, and attach Caddy to the same network. Ports published by Docker bypass ufw (Docker docs, as of Nov 8, 2026). - Docker group and password: For the Docker socket, add
group_addwith the GID of the docker group (Coder docs, as of Nov 8, 2026), and set a long password of your own for the database.
CODER_ACCESS_URL must point to the public URL that users and workspaces reach from outside (Coder docs, as of Nov 8, 2026).
Set up the reverse proxy with HTTPS first, then create the admin account at https://coder.example.com right away; the account created during setup is the owner account (Coder docs, as of Nov 8, 2026).
Workspace templates
Coder uses Terraform templates to define workspaces. You upload a template with templates push (Coder CLI reference, as of Nov 8, 2026):
coder templates push docker \
--directory ./templates/docker
For Git, Coder uses external auth tokens or an automatically generated SSH key pair per user (Coder docs, as of Nov 8, 2026).
Billing: self-hosted vs. Codespaces
Codespaces bills by usage (see above); a VPS bills by server runtime. Offers with price date are at /en/use-case/cloud-ide. In return, you handle setup, updates and security yourself.
Security: HTTPS, auth and network
A cloud IDE on the internet without protection is an open invitation. The code-server docs warn never to expose the IDE directly to the internet without authentication and encryption (code-server docs, as of Nov 8, 2026). Minimum requirements:
- HTTPS: required. Caddy fetches the certificate automatically (see above).
- Authentication: code-server has a rate-limited password login (code-server docs, as of Nov 8, 2026). For Coder: set up GitHub OAuth or OIDC.
- Firewall: Do not publish internal services with
ports:, or bind them to127.0.0.1only; Docker ports bypass ufw (Docker docs, as of Nov 8, 2026). - SSH alternative: Instead of browser access you can use VS Code Remote-SSH and treat the VPS as a back-end server. Then you need no reverse proxy.
- Zero trust: Tailscale or WireGuard as a VPN layer in front of the IDE – then the IDE itself is not publicly reachable.
Tips from practice
Language servers need RAM: Language servers can take a lot of RAM on large projects; check usage in operation (e.g. with htop) and plan reserves.
Git credentials: git credential-store stores passwords unencrypted on disk (Git docs, as of Nov 8, 2026). Use an SSH agent or git credential-cache. With Coder, external auth or the per-user SSH key apply.
Automate dotfiles: With Coder, use coder dotfiles <repo> or a dotfiles module in the template (Coder docs, as of Nov 8, 2026).
Monitoring: Install htop or btop on the VPS to watch RAM and CPU usage.
Conclusion
code-server suits individuals, Coder suits teams. Both run on your own VPS, billed by runtime, not by IDE usage.
Whether it pays off depends on usage and team size; compare your current service's billing with the VPS prices at /en/use-case/cloud-ide. Plus control over data location and configuration.
Cloud IDE Server Calculator
How much RAM and CPU do you need? Enter team size and tool – our calculator shows suitable VPS offers with price date.
To the cloud IDE calculator

