---
title: "Deploy Code Server"
description: "VS Code running on a server, opened in a web browser"
category: "Other"
url: https://railway.com/deploy/codeserver
---

# Deploy Code Server

VS Code running on a server, opened in a web browser

**[Deploy Code Server on Railway](https://railway.com/template/codeserver)**

- **Creator:** A3A
- **Category:** Other

## Template content

### code-server https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/code-server.png

- **Source:** https://github.com/gridalpha/code-server-railway
- **Health check:** /healthz
- **Public domain:** Yes

## Documentation

# Deploy and Host code-server on Railway

code-server is Visual Studio Code compiled to run as a server, so the full editor — extensions, terminal, debugger, source control — loads in a browser tab instead of on your laptop. Built by Coder under an MIT licence, it suits anyone wanting a real development environment on a machine other than the one in front of them: coding from a tablet, keeping a long build off a laptop battery, or having the same open files and shell history on every device.

Deploying code-server on Railway puts that environment on a URL, behind a password, with TLS at the edge. This template runs one service, built from a public GitHub repository on top of the official `codercom/code-server` image, with a persistent volume at `/home/coder`. That volume is the point: project files, extensions, settings, `~/.ssh` keys and `~/.gitconfig` live on it and survive every redeploy. The image also bakes in a toolchain — a C/C++ compiler, Python 3 with `venv` and `pip`, Node.js 22 LTS, `git`, `ripgrep`, `jq`, `tmux`, `sqlite3` — because anything installed later with `apt` lands in the container's temporary layer and is gone on the next deploy.

![Diagram of the code-server service and its home volume on Railway](https://res.cloudinary.com/rroe4rtk/image/upload/v1788068627/code-server-architecture.png)

## Getting Started with code-server on Railway

Set a `PASSWORD` when you deploy, or let the template generate one and read it from the service's Variables tab. There is no username and no registration: the public URL shows a login page, then the editor. The service refuses to start without a password — left alone, code-server invents one and writes it inside the container, leaving a deployment nobody can sign in to.

You land in `/home/coder/project` with a `WELCOME.md` describing what persists. Open a shell (Terminal → New Terminal) and `git clone` a repository. Run `ssh-keygen -t ed25519` and add the public key to GitHub as a deploy key — `~/.ssh` is on the volume, so you do it once — then set your `git config --global` identity. Install extensions from the Extensions panel, wired to Open VSX. To confirm the deployment end to end, start a dev server on any port and open `https://your-domain/proxy/3000/`: the port is forwarded through code-server's own authenticated proxy, so the preview reaches you and nobody else.

![code-server editing a Python file beside a running terminal](https://res.cloudinary.com/rroe4rtk/image/upload/v1788068630/code-server-editor-terminal.png)
![code-server extensions panel listing an installed marketplace extension](https://res.cloudinary.com/rroe4rtk/image/upload/v1788068631/code-server-extensions.png)
![code-server source control view showing a git commit graph](https://res.cloudinary.com/rroe4rtk/image/upload/v1788068632/code-server-source-control.png)

## About Hosting code-server

code-server is the upstream VS Code source with the desktop shell swapped for a web front end and a small Node.js HTTP server. What reaches the browser is the real editor: the same keybindings, the same settings JSON, the same extension host, the same terminal on a genuine shell. The visible difference is the marketplace — Microsoft licenses theirs for their own products only, so code-server ships pointed at Open VSX.

- The complete VS Code editor in any modern browser, tablets too
- A real Linux shell, compilers and runtimes already installed
- Extensions, settings and workspace state stored server-side
- An authenticated port forwarder at `/proxy//`
- Password authentication built in, with an argon2 hash option


The editor's whole state is one home directory, so code-server is single-instance and single-user by design — no database, queue or worker tier to split out.

## Why Deploy code-server on Railway

Railway removes the annoying parts of self-hosting an IDE:

- TLS, a public hostname and HTTP/2 at the edge — no reverse proxy to configure
- A persistent volume keeping code, extensions and keys across deploys
- Custom domains attach in a click
- Scaling is a slider, so a heavy language server just needs more RAM
- Deploys come from a public GitHub repo, so extending the image is a commit

## Common Use Cases

- **Coding from a tablet or a borrowed machine** — a full editor and shell, nothing installed locally.
- **A long-lived scratch environment** — a workspace, its dependencies and its shell history stay alive between sessions.
- **Working beside your infrastructure** — the editor sits next to your other Railway services, on one private network.
- **Onboarding and pairing** — a URL and a password, not a setup doc.

## Dependencies for code-server

One service and one volume.

- **code-server** — built from [gridalpha/code-server-railway](https://github.com/gridalpha/code-server-railway) on top of [`codercom/code-server:latest`](https://hub.docker.com/r/codercom/code-server). The repository adds a startup script that prepares the volume and drops to the unprivileged `coder` user, plus the toolchain above.
- **Volume at `/home/coder`** — holds `project/`, `.local/share/code-server` (extensions and editor state), `.config`, `.ssh` and `.npm-global`.

### Environment Variables Reference

| Variable | Required | Description |
|---|---|---|
| `PASSWORD` | Yes | Password used to sign in to the editor |
| `PORT` | Yes | Port code-server listens on, set to `8080` |
| `WORKSPACE_DIR` | No | Folder opened after sign-in; `/home/coder/project` |
| `CODE_SERVER_APP_NAME` | No | Name shown in the browser tab and login |
| `HASHED_PASSWORD` | No | argon2 hash, used instead of `PASSWORD` when set |
| `CODE_SERVER_EXTRA_ARGS` | No | Extra flags for the `code-server` command |
| `CS_DISABLE_PROXY` | No | Set to `1` to turn off the `/proxy//` forwarder |

### Deployment Dependencies

- Source repo: https://github.com/gridalpha/code-server-railway
- Upstream: https://github.com/coder/code-server
- Docs: https://coder.com/docs/code-server
- Image: https://hub.docker.com/r/codercom/code-server
- Extensions: https://open-vsx.org

## Hardware Requirements for Self-Hosting code-server

The editor is light; language servers and builds use the machine.

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2–4 vCPU |
| RAM | 1 GB | 4–8 GB |
| Storage | 5 GB volume | 10–50 GB volume |
| Runtime | Node.js 22 (bundled) | Node.js 22 (bundled) |

A session with a few files open sits under 1 GB. TypeScript, Rust and Java language servers use whatever you give them, so raise memory before assuming something is broken. The service reads the container's memory limit on each boot and sizes the editor's JavaScript heap from it, so a resize needs no configuration.

## Self-Hosting code-server

To run the official image locally with Docker, mount a directory for the home volume and pass a password:

```
docker run -it -p 8080:8080 \
  -v "$PWD:/home/coder/project" -u "$(id -u):$(id -g)" \
  -e PASSWORD="change-me" codercom/code-server:latest
```

To build the image this template uses, clone the repository:

```
git clone https://github.com/gridalpha/code-server-railway
cd code-server-railway
docker build -t code-server-railway .
docker run -p 8080:8080 -e PASSWORD="change-me" -e PORT=8080 code-server-railway
```

Upstream also publishes an installer, `curl -fsSL https://code-server.dev/install.sh | sh`, which installs a system package rather than a container. Either way, put it behind TLS and a password — that terminal is a real shell.

## How Much Does code-server Cost to Self-Host?

code-server is free and open source under the MIT licence: no paid tier, no seat count, no feature gating. It is not a trial version of GitHub Codespaces or Gitpod, which are separate hosted products with their own pricing. Self-hosting costs only the machine it runs on — on Railway, the CPU, memory and volume storage the service uses. Coder's commercial platform is a separate, larger product for team workspaces.

## FAQ

**What is code-server?**
Visual Studio Code running as a server process and reached through a web browser. It is open source, MIT licensed, and maintained by Coder. The editor, terminal and extensions run on the server; only the interface is in your browser.

**What does this Railway template deploy?**
One service built from a public GitHub repository on top of the official `codercom/code-server` image, plus a persistent volume at `/home/coder`. No database or cache — code-server does not use one.

**Why does the template include a volume?**
Everything code-server treats as yours lives in the home directory — project files, extensions, settings, SSH keys, git config. Railway rebuilds the container from the image on every deploy, so without a volume all of that would be discarded.

**Will packages I install with `apt` still be there tomorrow?**
Only if you add them to the image. The `coder` user has passwordless `sudo`, so `apt install` works, but it writes to the container's temporary layer. Fork the repository, add the package to the `Dockerfile` and push; Railway rebuilds automatically. Anything under `/home/coder`, virtual environments and global npm packages included, persists anyway.

**How do I install extensions in self-hosted code-server?**
Use the Extensions panel exactly as in desktop VS Code. It is connected to Open VSX rather than Microsoft's marketplace, a licensing restriction on Microsoft's side. Most popular extensions are published there; a few Microsoft-owned ones, such as C# and remote development, are not.

**Can several people share one deployment?**
Not really. One password and one home directory means everyone shares the same files, terminals and editor state. For per-user workspaces, deploy one service per person, or look at Coder's workspace platform.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/codeserver
