# Coder

Provisions remote development environments for developers and AI agents.

- Replaces: [GitHub Codespaces](https://openlogs.fyi/alternatives/github-codespaces)
- Summary: Paid cloud development environment services, such as GitHub Codespaces.
- Stack: Go (language), PostgreSQL (database)
- Deployment: docker_compose
- License: AGPL-3.0 (osi) [source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/README.md), read 2026-10-22)
- 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.
- Requirements: not stated
- Repository: [coder/coder](https://github.com/coder/coder)

## Install

1. Docker with the Compose plugin ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/compose.yaml))

   ```text
   A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
   ```

2. Save the compose file as compose.yaml ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/compose.yaml))

   ```yaml
   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:
   ```

3. Set the values the compose file needs ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/compose.yaml))

   ```text
   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.
   ```

4. Start it ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/compose.yaml))

   ```bash
   docker compose up -d
   ```

5. Open the app ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/compose.yaml))

   ```text
   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. ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/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). ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/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. ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/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. ([source](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/compose.yaml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 1228
- Stars: 17136, forks: 1637
- Last push: 2026-10-22 (0 days ago)
- Latest release: v2.37.5 on 2026-10-19 (2 days ago)

## Sources

- [Repository: https://github.com/coder/coder](https://github.com/coder/coder)
- [License: https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/LICENSE](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/LICENSE)
- [Business model: https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/README.md](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/README.md)
- [Compose file: https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/compose.yaml](https://github.com/coder/coder/blob/04d7d4da9c868e3f1b6ff05ff68517d322ffd8d5/compose.yaml)

---
Canonical: https://openlogs.fyi/tools/coder  
Last updated: 2026-10-22
