Deploy EmDash CMS

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

Deploy EmDash CMS

/var/lib/postgresql/data

Just deployed

/data

Deploy and Host EmDash CMS on Railway

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

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.


Template Content

More templates in this category

View Template
Libredesk - Complete Setup
Complete self-hosted omnichannel customer support desk.

codestorm
2
View Template
Paperless-ngx
Paperless-ngx — document management with OCR and full-text search

INAPP
1
View Template
Instatic CMS - Postgres
Design, build and manage powerful static sites from state-of-the-art CMS

Instatic
169