Coder

Self-hosted, browser-based remote development environments

  • ghcr.io/hsinghhira/coder:latest
  • port 6145
  • Developer
Coder screenshot 1: WorkspacesCoder screenshot 2: TemplatesCoder screenshot 3: WorkspaceCoder screenshot 4: Web terminalCoder screenshot 5: VS Code in the browserCoder screenshot 6: Template editorCoder screenshot 7: UsersCoder screenshot 8: Deployment settingsCoder screenshot 9: Audit log

Web App

/
http://localhost:6145/

Coder turns your server into a cloud development platform: full development environments that open in your browser or in your own IDE, like a self-hosted GitHub Codespaces. This is Coder in a single container, with PostgreSQL inside, one port and one data folder. The database password is made for you on first start.

Features

  • Development environments and terminals in the browser, with no local setup
  • Connect from VS Code, JetBrains or any SSH editor
  • Workspaces defined as code with Terraform templates
  • Sign in with Pocket ID or any OIDC provider, or with GitHub, next to Coder's own accounts
  • Docker workspaces when you add the Docker socket (below)
  • PostgreSQL 17 inside, no second container to look after

How to use

  1. Open Coder from your dashboard.
  2. The first person to open it makes the admin account in the browser.
  3. Open Templates and start from a starter template, or import your own.
  4. Create a workspace from a template to get a browser IDE and terminal.
  5. Connect your own VS Code or JetBrains IDE to the same workspace if you like.
  6. For Pocket ID, GitHub sign-in or email, add the settings from the Variables tab.

Docker workspaces

Most starter templates make each workspace a Docker container. For that, Coder needs your server's Docker socket. In the app settings, add a volume with host path /var/run/docker.sock and container path /var/run/docker.sock, then restart. The log then says "Docker socket found". This gives Coder full control of Docker on your server, so only do it if you trust everyone who can sign in to Coder.

Sign in with Pocket ID

  1. In Pocket ID, make a new OIDC client. Set its callback URL to your PUBLIC_URL followed by /api/v2/users/oidc/callback, for example http://192.168.1.20:6145/api/v2/users/oidc/callback.
  2. In the Coder app settings, add CODER_OIDC_ISSUER_URL (your Pocket ID address), CODER_OIDC_CLIENT_ID and CODER_OIDC_CLIENT_SECRET. Add CODER_OIDC_SIGN_IN_TEXT=Sign in with Pocket ID if you like.
  3. Restart Coder and sign in with the new button.
  4. Only after that works, you can add CODER_DISABLE_PASSWORD_AUTH=true.

Before you install

Set PUBLIC_URL to your ZimaOS IP, like http://192.168.1.20:6145 (or your HTTPS domain). Workspaces connect back to Coder at that address, so localhost only works on the server itself. The first start takes about three minutes while the database is set up. The first person to open Coder makes the admin account, so do it right away. More settings, like Pocket ID, GitHub sign-in and email, are in the Variables tab; add them in the app settings.

The settings in the first table are already in the app settings. To use any other one, open the app settings, add the variable with your value, save, and the app restarts with it. A setting you leave out uses its default.

In the app settings

VariableDefault valueDescription
TZ$TZYour time zone. It is filled in from your ZimaOS time zone. Leave it unless you need another.
PUBLIC_URLhttp://localhost:6145The address you open Coder at. Change localhost to your ZimaOS IP, like http://192.168.1.20:6145, or use your own HTTPS domain like https://coder.example.com. Workspaces connect back to Coder at this address, so it must work from other devices.

Sign in with Pocket ID / OIDC

VariableDefault valueDescription
CODER_OIDC_ISSUER_URL—Your sign-in provider's address, like https://pocketid.example.com. Leave it out to use only Coder's own accounts.
CODER_OIDC_CLIENT_ID—The Client ID of the app you made for Coder in Pocket ID (or another OIDC provider).
CODER_OIDC_CLIENT_SECRET—The Client Secret of that app. In the provider, set the callback URL to your PUBLIC_URL followed by /api/v2/users/oidc/callback.
CODER_OIDC_SIGN_IN_TEXTOpenID ConnectThe text on the sign-in button, like Sign in with Pocket ID.
CODER_OIDC_ICON_URL—A link to an icon shown on the sign-in button.
CODER_OIDC_ALLOW_SIGNUPStrueSet to false so only people who already have a Coder account can sign in with OIDC.
CODER_OIDC_EMAIL_DOMAIN—Only let people with an email at these domains sign in, like example.com. Separate several with commas.
CODER_OIDC_SCOPESopenid,profile,emailThe scopes Coder asks your provider for. Add groups to sync groups.
CODER_OIDC_IGNORE_EMAIL_VERIFIEDfalseSet to true if your provider does not mark emails as verified.
CODER_OIDC_USERNAME_FIELDpreferred_usernameWhich field from the provider becomes the Coder user name.
CODER_OIDC_GROUP_FIELD—The field that holds the user's groups, like groups. Leave it out to not sync groups.
CODER_OIDC_GROUP_AUTO_CREATEfalseSet to true to make missing Coder groups when they come from the provider.
CODER_OIDC_SIGNUPS_DISABLED_TEXT—The message people see when sign-up is off and they have no account.

Sign-up and accounts

VariableDefault valueDescription
CODER_DISABLE_PASSWORD_AUTHfalseSet to true to turn off Coder's own user name and password sign-in. Only do this after you have signed in with OIDC or GitHub once, or you lock yourself out.
CODER_SESSION_DURATION24h0m0sHow long a browser sign-in lasts, like 72h.
CODER_MAX_TOKEN_LIFETIME876600h0m0sThe longest time an API token may last.

Sign in with GitHub

VariableDefault valueDescription
CODER_OAUTH2_GITHUB_CLIENT_ID—The Client ID of a GitHub OAuth app. Leave it out to keep GitHub sign-in off.
CODER_OAUTH2_GITHUB_CLIENT_SECRET—The Client Secret of that GitHub OAuth app. Its callback URL is your PUBLIC_URL followed by /api/v2/users/oauth2/github/callback.
CODER_OAUTH2_GITHUB_ALLOW_SIGNUPSfalseSet to true so new people can sign up with GitHub.
CODER_OAUTH2_GITHUB_ALLOWED_ORGS—Only members of these GitHub organizations may sign in. Separate several with commas.
CODER_OAUTH2_GITHUB_ALLOWED_TEAMS—Only members of these teams may sign in, written as org/team.
CODER_OAUTH2_GITHUB_ALLOW_EVERYONEfalseSet to true to let any GitHub user sign in, whatever their organization.
CODER_OAUTH2_GITHUB_ENTERPRISE_BASE_URL—Your GitHub Enterprise address, if you use one instead of github.com.
CODER_OAUTH2_GITHUB_DEFAULT_PROVIDER_ENABLEtrueCoder offers a shared GitHub sign-in until you set your own app. Set to false to turn that off.
CODER_EXTERNAL_AUTH_GITHUB_DEFAULT_PROVIDER_ENABLEtrueSet to false to turn off Coder's shared GitHub login for git in workspaces.

Email (SMTP)

VariableDefault valueDescription
CODER_EMAIL_SMARTHOST—Your mail server and port, like smtp.gmail.com:587. Leave it out and Coder sends no emails.
CODER_EMAIL_FROM—The sender address on emails, like [email protected].
CODER_EMAIL_AUTH_USERNAME—The user name for your mail server.
CODER_EMAIL_AUTH_PASSWORD—The password for your mail server.
CODER_EMAIL_HELLOlocalhostThe name Coder gives the mail server when it says hello.
CODER_EMAIL_FORCE_TLSfalseSet to true for a server on port 465 that uses TLS from the start.
CODER_EMAIL_TLS_STARTTLSfalseSet to true to always upgrade the connection with STARTTLS.
CODER_EMAIL_TLS_SKIPVERIFYfalseSet to true to accept a mail server with a self-signed certificate.

Server

VariableDefault valueDescription
CODER_WILDCARD_ACCESS_URL—A wildcard domain for workspace apps, like *.coder.example.com. Needs matching DNS and HTTPS. Leave it out to serve apps on a path.
CODER_REDIRECT_TO_ACCESS_URLfalseSet to true to send everyone to PUBLIC_URL when they open Coder at another address.
CODER_SECURE_AUTH_COOKIEfalseSet to true when Coder is only used over HTTPS.
CODER_STRICT_TRANSPORT_SECURITY0Seconds browsers should only use HTTPS, like 31536000. Only for HTTPS.
CODER_PROXY_TRUSTED_HEADERS—Headers from your reverse proxy that carry the visitor's IP, like X-Forwarded-For.
CODER_PROXY_TRUSTED_ORIGINS—The IP ranges of your reverse proxy, like 172.17.0.0/16.
CODER_DERP_SERVER_STUN_ADDRESSESstun.l.google.com:19302,stun1.l.google.com:19302,stun2.l.google.com:19302,stun3.l.google.com:19302,stun4.l.google.com:19302STUN servers for direct connections to workspaces. Set to disable to use none.
CODER_BLOCK_DIRECTfalseSet to true so all workspace traffic goes through Coder, never direct.

Features

VariableDefault valueDescription
CODER_PROVISIONER_DAEMONS3How many workspace builds can run at the same time.
CODER_DISABLE_PATH_APPSfalseSet to true to stop serving workspace apps on a path. Safer with a wildcard domain.
CODER_DISABLE_OWNER_WORKSPACE_ACCESSfalseSet to true so admins cannot open other people's workspaces.
CODER_EXPERIMENTS—Experimental features to turn on, separated by commas.
CODER_TELEMETRY_ENABLEtrueSet to false to stop sending usage data to Coder.
CODER_UPDATE_CHECKfalseSet to true to show a message when a new Coder version is out.

Logs

VariableDefault valueDescription
CODER_AUDIT_LOGS_RETENTION0How long to keep audit logs, like 2160h for 90 days. 0 keeps them forever.
CODER_WORKSPACE_AGENT_LOGS_RETENTION7dHow long to keep workspace start-up logs.
CODER_VERBOSEfalseSet to true for detailed logs while you fix a problem.
CODER_LOG_FILTER—Only show log lines that match this pattern.
docker-compose.yml
name: coder

services:
  coder:
    image: ghcr.io/hsinghhira/coder:latest
    container_name: coder
    restart: unless-stopped
    stop_grace_period: 90s
    privileged: true
    environment:
      - TZ=$TZ
      - PUBLIC_URL=http://localhost:6145
    ports:
      - target: 8080
        published: "6145"
        protocol: tcp
    volumes:
      - type: bind
        source: /DATA/AppData/$AppID/data
        target: /data
        bind:
          create_host_path: true
    healthcheck:
      test: ["CMD", "curl", "-fsS", "-o", "/dev/null", "http://127.0.0.1:8080/healthz"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 180s
    deploy:
      resources:
        limits:
          cpus: "2.00"
          memory: 4096M
        reservations:
          cpus: "0.25"
          memory: 512M
    labels:
      icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/icon.png
    x-casaos:
      id: com.icestore.coder
      envs:
        - container: TZ
          description:
            en_US: >-
              Your time zone. It is filled in from your ZimaOS time zone.
              Leave it unless you need another.
        - container: PUBLIC_URL
          description:
            en_US: >-
              The address you open Coder at. Change localhost to your ZimaOS
              IP, like http://192.168.1.20:6145, or use your own HTTPS domain
              like https://coder.example.com. Workspaces connect back to
              Coder at this address, so it must work from other devices.
      ports:
        - container: "8080"
          description:
            en_US: Coder web UI, API, web terminals and workspace connections, published on host as 6145
      volumes:
        - container: /data
          description:
            en_US: >-
              The database (users, templates, workspaces, audit logs), the
              Terraform cache in coder/, and the database password in
              state/. Back up this folder.

x-casaos:
  id: com.icestore.coder
  architectures:
    - amd64
    - arm64
  main: coder
  author: HSinghHira
  category: Developer
  developer: Coder Technologies, Inc.
  icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/icon.png
  thumbnail: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-1.png
  screenshot_link:
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-1.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-2.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-3.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-4.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-5.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-6.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-7.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-8.png
    - https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/coder/screenshot-9.png
  title:
    en_US: Coder
  tagline:
    en_US: Self-hosted, browser-based remote development environments
  description:
    en_US: >-
      Coder turns your server into a cloud development platform: full
      development environments that open in your browser or in your own IDE,
      like a self-hosted GitHub Codespaces. This is Coder in a single
      container, with PostgreSQL inside, one port and one data folder. The
      database password is made for you on first start.


      **Features**


      - Development environments and terminals in the browser, with no
        local setup


      - Connect from VS Code, JetBrains or any SSH editor


      - Workspaces defined as code with Terraform templates


      - Sign in with Pocket ID or any OIDC provider, or with GitHub,
        next to Coder's own accounts


      - Docker workspaces when you add the Docker socket (see the README)


      - PostgreSQL 17 inside, no second container to look after


      **How to use?**


      1. Open Coder from the Zima OS dashboard.


      2. The first person to open it makes the admin account in the
         browser.


      3. Open Templates and start from a starter template, or import your
         own.


      4. Create a workspace from a template to get a browser IDE and
         terminal.


      5. Connect your own VS Code or JetBrains IDE to the same workspace
         if you like.


      6. For Pocket ID, GitHub sign-in or email, add the settings from the
         Variables tab on the IceStore page.
  tips:
    before_install:
      en_US: >-
        1. Open the app settings before you install.


        2. Find PUBLIC_URL. Change localhost to your ZimaOS IP, for example
           http://192.168.1.20:6145 (your own IP will differ).


        3. Want Docker workspaces? Add a volume: host
           /var/run/docker.sock, container /var/run/docker.sock.


        4. More settings, like Pocket ID or GitHub sign-in and email, are
           listed on the Coder page at
           https://icestore.hsinghhira.me/app/coder/ (Variables tab). You
           can add them now or later in the app settings.


        5. Start the installation.


        6. Wait about three minutes. The first start sets up the database.


        7. Open http://your-zimaos-ip:6145.


        8. The first person to open Coder makes the admin account. Do it
           right away.


        9. Open Templates, pick a starter template, and make your first
           workspace.
  index: /
  port_map: "6145"
  scheme: http
  is_uncontrolled: false
  version: "v2.38.2"
  update_at: "2026-10-25"
  release_notes:
    en_US: |-
      - Single-container Coder with one port (6145) and one data folder
      - The database password is made on first start, so each install gets its own
      - Optional Docker workspaces: mount /var/run/docker.sock and Coder can use it
      - Pocket ID / OIDC, GitHub sign-in and email settings are in the Variables tab
      - coder/coder v2.38.2
      - PostgreSQL 17 inside
  repo: "https://github.com/coder/coder"
  support: "https://github.com/coder/coder/issues"
  docs: "https://coder.com/docs"