Coder
Provisions remote development environments for developers and AI agents.
- Replaces
-
Paid cloud development environment services, such as GitHub Codespaces.
All open-source alternatives to GitHub Codespaces
- Difficulty
-
Difficulty: Medium
2 services (1 database or broker: postgres), 3 volume mounts, 1 env value to set, host access: docker_socket. Heuristic score 5 of 11: medium.
- Stack
Go (language), PostgreSQL (database)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
AGPL-3.0(OSI-approved open source) - Business model
-
Unknown
The README at the pinned commit does not state a business model, so it stays unknown.
Source: github.com/coder/coder/blob/04d7d4d/README.md, read on .
- Repository
GitHub stats
- Stars
- 17,136
- Forks
- 1,637
- Open issues and pull requests
- 1,228
- Last push
- 2026-10-22
- Latest release
- v2.37.5
- Released
- 2026-10-19
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as AGPL-3.0.
Compose file
services:
coder:
# This MUST be stable for our documentation and
# other automations.
image: ${CODER_REPO:-ghcr.io/coder/coder}:${CODER_VERSION:-latest}
ports:
- "7080:7080"
environment:
CODER_PG_CONNECTION_URL: "postgresql://${POSTGRES_USER:-username}:${POSTGRES_PASSWORD:-password}@database/${POSTGRES_DB:-coder}?sslmode=disable"
CODER_HTTP_ADDRESS: "0.0.0.0:7080"
# You'll need to set CODER_ACCESS_URL to an IP or domain
# that workspaces can reach. This cannot be localhost
# or 127.0.0.1 for non-Docker templates!
CODER_ACCESS_URL: "${CODER_ACCESS_URL}"
# If the coder user does not have write permissions on
# the docker socket, you can uncomment the following
# lines and set the group ID to one that has write
# permissions on the docker socket.
#group_add:
# - "998" # docker group on host
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Run "docker volume rm coder_coder_home" to reset the dev tunnel url (https://abc.xyz.try.coder.app).
# This volume is not required in a production environment - you may safely remove it.
# Coder can recreate all the files it needs on restart.
- coder_home:/home/coder
depends_on:
database:
condition: service_healthy
database:
# Minimum supported version is 13.
# More versions here: https://hub.docker.com/_/postgres
image: "postgres:17"
# Uncomment the next two lines to allow connections to the database from outside the server.
#ports:
# - "5432:5432"
environment:
POSTGRES_USER: ${POSTGRES_USER:-username} # The PostgreSQL user (useful to connect to the database)
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password} # The PostgreSQL password (useful to connect to the database)
POSTGRES_DB: ${POSTGRES_DB:-coder} # The PostgreSQL default database (automatically created at first launch)
volumes:
- coder_data:/var/lib/postgresql/data # Use "docker volume rm coder_coder_data" to reset Coder
healthcheck:
test:
[
"CMD-SHELL",
"pg_isready -U ${POSTGRES_USER:-username} -d ${POSTGRES_DB:-coder}",
]
interval: 5s
timeout: 5s
retries: 5
volumes:
coder_data:
coder_home:
From the app's own repository: github.com/coder/coder/blob/04d7d4d/compose.yaml.
Compose file from the app repository.
Install
- Docker with the Compose plugin (github.com/coder/coder/blob/04d7d4d/compose.yaml)
A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
- Save the compose file as compose.yaml (github.com/coder/coder/blob/04d7d4d/compose.yaml)
Use the compose file shown above.
- Set the values the compose file needs (github.com/coder/coder/blob/04d7d4d/compose.yaml)
These variables have no default in the compose file: CODER_ACCESS_URL. Compose reads them from the shell or from a .env file next to the compose file. Replace the placeholder values listed under Gotchas.
- Start it (github.com/coder/coder/blob/04d7d4d/compose.yaml)
docker compose up -d - Open the app (github.com/coder/coder/blob/04d7d4d/compose.yaml)
Open http://localhost:7080. The compose file publishes host port 7080 for the coder service.
Compose file check: config_ok on 2026-10-22.
Gotchas and maintenance
Gotchas
- Some images use the latest tag or no tag. Images without a pinned version: coder: ${CODER_REPO:-ghcr.io/coder/coder}:${CODER_VERSION:-latest}. A later pull can get a different version. (github.com/coder/coder/blob/04d7d4d/compose.yaml, checked 2026-10-22)
- The compose file has placeholder values. Placeholder values: CODER_PG_CONNECTION_URL is "password" (coder), POSTGRES_PASSWORD is "password" (database). (github.com/coder/coder/blob/04d7d4d/compose.yaml, checked 2026-10-22)
- The compose file publishes host ports. Host ports: 7080 (coder). A port without a host address listens on all host network interfaces. (github.com/coder/coder/blob/04d7d4d/compose.yaml, checked 2026-10-22)
- Some services get elevated host access. coder mounts the Docker socket, which gives it control of Docker on the host. (github.com/coder/coder/blob/04d7d4d/compose.yaml, checked 2026-10-22)
Signals
- Open issues and pull requests: 1228
- Last push: 2026-10-22 (0 days before this page was built)
- Latest release: v2.37.5 on 2026-10-19 (2 days before this page was built)