---
title: "Deploy EmDash CMS"
description: "Open-source Astro CMS on Postgres. Locked setup wizard, auto-updated."
category: "CMS"
url: https://railway.com/deploy/emdash-cms
---

# Deploy EmDash CMS

Open-source Astro CMS on Postgres. Locked setup wizard, auto-updated.

**[Deploy EmDash CMS on Railway](https://railway.com/template/emdash-cms)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/emdash-cms/manifest.json

- **Creator:** Aydin
- **Category:** CMS

## Template content

### Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### EmDash https://raw.githubusercontent.com/emdash-cms/emdash/6524921152ed0e985ae909a42c6f862336826e84/docs/public/favicon.svg

- **Source:** aimranov27/emdash-railway
- **Health check:** /_emdash/api/health
- **Public domain:** Yes

## Documentation

# Deploy and Host EmDash CMS on Railway

[EmDash](https://github.com/emdash-cms/emdash) is an open-source CMS built on Astro and written in TypeScript. It has a block editor, a media library, users and roles, revisions, scheduled publishing, plugins and passkey login. This template runs it on Node.js with PostgreSQL.

## About Hosting EmDash CMS

The template deploys two services: the EmDash site, built from the official Blog starter, and Railway's PostgreSQL. Uploaded media and login sessions are kept on a volume at `/data`, so they survive redeploys. EmDash runs its database migrations when it starts.

EmDash normally lets the first visitor create the admin account. This template locks the setup wizard behind a generated password, so nobody else can claim your site before you do.

First steps:

1. Open your site's URL and go to `/_emdash/admin`.
2. Sign in with any username and the `EMDASH_SETUP_PASSWORD` value from the EmDash service's **Variables** tab.
3. Follow the setup wizard: site title, optional sample content, your email, then create a passkey.

If you want a custom domain, add it and update `EMDASH_SITE_URL` before step 1. Passkeys are tied to the domain they were created on.

Updates: the EmDash version, starter template, Astro and Node.js are pinned. A GitHub Action checks for new releases every day, smoke-tests them and only then updates the repository. Railway then shows an update notice in your project, and you choose when to apply it.

## Common Use Cases

- A blog or personal site with posts, categories, tags and RSS
- A marketing or portfolio site edited by non-developers
- A self-hosted WordPress replacement with passkey login and roles for several editors

## Dependencies for EmDash CMS Hosting

- PostgreSQL (included)
- A volume for media and sessions (included)

### Deployment Dependencies

- EmDash: https://github.com/emdash-cms/emdash
- EmDash documentation: https://docs.emdashcms.com
- Official starter templates: https://github.com/emdash-cms/templates
- This template's source: https://github.com/aimranov27/emdash-railway

### Implementation Details

- Content, users and settings live in PostgreSQL. Media lives in `/data/uploads` and sessions in `/data/sessions` on the volume. Back up both.
- `EMDASH_TEMPLATE` picks the starter (`blog`, `starter`, `marketing` or `portfolio`). Choose it before running setup.
- `EMDASH_ENCRYPTION_KEY` encrypts plugin secrets and is not stored in the database. Keep a copy.
- The theme is the unmodified starter template. Content, menus, widgets and settings are edited in the admin. To change the theme's code, create your own project with `npm create emdash@latest`.
- EmDash's full-text search only works with SQLite. On PostgreSQL the Blog starter's search page returns no results.
- Sandboxed marketplace plugins need EmDash's `workerd` sandbox runner, which is not included.

## Why Deploy EmDash CMS on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying EmDash CMS on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.

## Similar templates

- [Libredesk - Complete Setup](https://railway.com/deploy/libredesk-complete-setup) — Complete self-hosted omnichannel customer support desk.
- [Paperless-ngx](https://railway.com/deploy/paperless-ngx-3) — Paperless-ngx — document management with OCR and full-text search
- [Instatic CMS - Postgres](https://railway.com/deploy/instatic-cms-postgres) — Design, build and manage powerful static sites from state-of-the-art CMS

Open this page in a browser: https://railway.com/deploy/emdash-cms
