---
title: "Deploy KurrentDB | (Just Updated) EventStoreDB Event Sourcing Database, Auth On, Data Survives Redeploys"
description: "KurrentDB (EventStoreDB) event store, HTTP API, auth on, generated password"
category: "Storage"
url: https://railway.com/deploy/kurrentdb-or-just--1
---

# Deploy KurrentDB | (Just Updated) EventStoreDB Event Sourcing Database, Auth On, Data Survives Redeploys

KurrentDB (EventStoreDB) event store, HTTP API, auth on, generated password

**[Deploy KurrentDB | (Just Updated) EventStoreDB Event Sourcing Database, Auth On, Data Survives Redeploys on Railway](https://railway.com/template/kurrentdb-or-just--1)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/kurrentdb-or-just--1/manifest.json

- **Creator:** SuperSlowSloth
- **Category:** Storage

## Template content

### kurrentdb

- **Image:** kurrentplatform/kurrentdb:26.2.3@sha256:3be282a8ecab408c73a656acb634e85edfb72e5b0355781aaee94192f168666d
- **Start command:** `/bin/sh -c 'eval "$(echo IyEvYmluL3NoCiMgUmFpbHdheSBib290IGZvciBLdXJyZW50REIgKEV2ZW50U3RvcmVEQik6IFRMUyBvZmYsIGF1dGhlbnRpY2F0aW9uIE9OLCBhZG1pbiBwYXNzd29yZCByb3RhdGVkLgojCiMgUmFpbHdheSdzIGVkZ2UgZW5kcyBUTFMsIHNvIHRoZSBzZXJ2ZXIgY2Fubm90IHByZXNlbnQgaXRzIG93biBjZXJ0aWZpY2F0ZSB0byB0aGUgcHVibGljIHNpZGUuCiMgLS1kaXNhYmxlLXRscyBrZWVwcyBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbiBhY3RpdmUgKHVubGlrZSAtLWluc2VjdXJlLCB3aGljaCBkcm9wcyB0aGVtKQojIGFuZCBuZWVkcyBhIGNsdXN0ZXIgc2VjcmV0LiBUaGUgc3RvY2sgYWRtaW4gdXNlciBpcyBhZG1pbi9jaGFuZ2VpdCwgd2hpY2ggYW55b25lIG9uIHRoZSBpbnRlcm5ldAojIHdvdWxkIGtub3csIHNvIHRoaXMgc2NyaXB0IHJvdGF0ZXMgaXQgdG8gQURNSU5fUEFTU1dPUkQgYmVmb3JlIHRoZSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgdXAuCiMKIyBUaGluZ3MgYSB0ZW1wbGF0ZSBjYW5ub3QgY2FycnkgYXMgbGl0ZXJhbHMgYXJlIGV4cG9ydGVkIGhlcmU6CiMgIC0gdGhlIEhUVFAvZ1JQQyBsaXN0ZW5lciBvbiBSYWlsd2F5J3MgaW5qZWN0ZWQgUE9SVCAodGhlIGhlYWx0aGNoZWNrIGRpYWxzIHRoYXQgcG9ydCwgbm90IHRoZQojICAgIGRvbWFpbidzIHRhcmdldCBwb3J0KSBhbmQgb24gOjogc28gdGhlIElQdjYgcHJpdmF0ZSBuZXR3b3JrIGFuZCBJUHY0IGJvdGggcmVhY2ggaXQsCiMgIC0gcHJvamVjdGlvbnMgb24gYW5kIHRoZSBzdGFuZGFyZCBwcm9qZWN0aW9ucyBzdGFydGVkLCBBdG9tUHViIG92ZXIgSFRUUCBvbiwKIyAgLSB0ZWxlbWV0cnkgb3B0LW91dC4Kc2V0IC1ldQoKOiAiJHtBRE1JTl9QQVNTV09SRDo/QURNSU5fUEFTU1dPUkQgbXVzdCBiZSBzZXR9Igo6ICIke0NMVVNURVJfU0VDUkVUOj9DTFVTVEVSX1NFQ1JFVCBtdXN0IGJlIHNldH0iCkRBVEE9L3Zhci9saWIva3VycmVudGRiClBPUlQ9IiR7UE9SVDotODA4MH0iCm1rZGlyIC1wICIkREFUQSIKIyBSYWlsd2F5IG1vdW50cyB0aGUgdm9sdW1lIHJvb3Qtb3duZWQgYW5kIHRoZSBpbWFnZSBydW5zIGFzIHVpZCAxMDAxLgpjaG93biAtUiBrdXJyZW50Omt1cnJlbnQgIiREQVRBIgoKZXhwb3J0IEtVUlJFTlREQl9ESVNBQkxFX1RMUz10cnVlCmV4cG9ydCBLVVJSRU5UREJfQ0xVU1RFUl9TRUNSRVQ9IiRDTFVTVEVSX1NFQ1JFVCIKZXhwb3J0IEtVUlJFTlREQl9OT0RFX0lQPSI6OiIKZXhwb3J0IEtVUlJFTlREQl9SRVBMSUNBVElPTl9JUD0iMTI3LjAuMC4xIgpleHBvcnQgS1VSUkVOVERCX05PREVfUE9SVD0iJFBPUlQiCmV4cG9ydCBLVVJSRU5UREJfREI9IiREQVRBIgpleHBvcnQgS1VSUkVOVERCX1JVTl9QUk9KRUNUSU9OUz1BbGwKZXhwb3J0IEtVUlJFTlREQl9TVEFSVF9TVEFOREFSRF9QUk9KRUNUSU9OUz10cnVlCmV4cG9ydCBLVVJSRU5UREJfRU5BQkxFX0FUT01fUFVCX09WRVJfSFRUUD10cnVlCmV4cG9ydCBLVVJSRU5UREJfVEVMRU1FVFJZX09QVE9VVD10cnVlCmV4cG9ydCBLVVJSRU5UREJfTE9HPS90bXAKZXhwb3J0IEtVUlJFTlREQl9ESVNBQkxFX0xPR19GSUxFPXRydWUKZXhwb3J0IEhPTUU9IiREQVRBIgoKZWNobyAiW3JhaWx3YXldIGt1cnJlbnRkYiB1aWQ9JChpZCAtdSkgb3duZXI9JChzdGF0IC1jICV1OiVnICIkREFUQSIpIHBvcnQ9JFBPUlQiCnNldHByaXYgLS1yZXVpZD1rdXJyZW50IC0tcmVnaWQ9a3VycmVudCAtLWluaXQtZ3JvdXBzIC9vcHQva3VycmVudGRiL2t1cnJlbnRkICYKU0VSVkVSPSQhCnRyYXAgJ2tpbGwgLVRFUk0gJFNFUlZFUiAyPi9kZXYvbnVsbDsgd2FpdCAkU0VSVkVSOyBleGl0IDE0MycgVEVSTSBJTlQKCmk9MAp1bnRpbCBjdXJsIC1mcyAiaHR0cDovLzEyNy4wLjAuMTokUE9SVC9oZWFsdGgvbGl2ZSIgPi9kZXYvbnVsbCAyPiYxOyBkbwogIGtpbGwgLTAgIiRTRVJWRVIiIDI+L2Rldi9udWxsIHx8IHsgZWNobyAiW3JhaWx3YXldIGt1cnJlbnRkYiBleGl0ZWQgZHVyaW5nIHN0YXJ0IjsgZXhpdCAxOyB9CiAgaT0kKChpICsgMSkpOyBbICIkaSIgLWd0IDI0MCBdICYmIHsgZWNobyAiW3JhaWx3YXldIGt1cnJlbnRkYiBub3QgYW5zd2VyaW5nIGFmdGVyIDI0MHMiOyBraWxsICIkU0VSVkVSIjsgZXhpdCAxOyB9CiAgc2xlZXAgMQpkb25lCgojIFRoZSB1c2VycyBzdWJzeXN0ZW0gY29tZXMgdXAgYSBtb21lbnQgYWZ0ZXIgdGhlIG5vZGUgcmVwb3J0cyBsaXZlLiBSb3RhdGUgYWRtaW4vY2hhbmdlaXQgb25jZTsKIyBvbiBhIHJlZGVwbG95IHRoZSBuZXcgcGFzc3dvcmQgYWxyZWFkeSB3b3Jrcywgc28gdGhlIHJvdGF0aW9uIGlzIHNraXBwZWQuCm49MAp3aGlsZSA6OyBkbwogIGNvZGU9JChjdXJsIC1zIC1vIC9kZXYvbnVsbCAtdyAnJXtodHRwX2NvZGV9JyAtdSAiYWRtaW46JEFETUlOX1BBU1NXT1JEIiAiaHR0cDovLzEyNy4wLjAuMTokUE9SVC91c2Vycy9hZG1pbiIgfHwgdHJ1ZSkKICBpZiBbICIkY29kZSIgPSAyMDAgXTsgdGhlbgogICAgZWNobyAiW3JhaWx3YXldIGFkbWluIHBhc3N3b3JkIGluIHBsYWNlIgogICAgYnJlYWsKICBmaQogIGNvZGU9JChjdXJsIC1zIC1vIC9kZXYvbnVsbCAtdyAnJXtodHRwX2NvZGV9JyAtdSBhZG1pbjpjaGFuZ2VpdCAtWCBQT1NUIFwKICAgICJodHRwOi8vMTI3LjAuMC4xOiRQT1JUL3VzZXJzL2FkbWluL2NvbW1hbmQvY2hhbmdlLXBhc3N3b3JkIiBcCiAgICAtSCAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcCiAgICAtLWRhdGEgIntcImN1cnJlbnRQYXNzd29yZFwiOlwiY2hhbmdlaXRcIixcIm5ld1Bhc3N3b3JkXCI6XCIkQURNSU5fUEFTU1dPUkRcIn0iIHx8IHRydWUpCiAgaWYgWyAiJGNvZGUiID0gMjAwIF07IHRoZW4KICAgIGVjaG8gIltyYWlsd2F5XSBhZG1pbiBwYXNzd29yZCByb3RhdGVkIGZyb20gdGhlIHN0b2NrIGRlZmF1bHQiCiAgICBicmVhawogIGZpCiAga2lsbCAtMCAiJFNFUlZFUiIgMj4vZGV2L251bGwgfHwgeyBlY2hvICJbcmFpbHdheV0ga3VycmVudGRiIGV4aXRlZCB3aGlsZSBzZXR0aW5nIHRoZSBhZG1pbiBwYXNzd29yZCI7IGV4aXQgMTsgfQogIG49JCgobiArIDEpKTsgWyAiJG4iIC1ndCA5MCBdICYmIHsgZWNobyAiW3JhaWx3YXldIGNvdWxkIG5vdCBzZXQgdGhlIGFkbWluIHBhc3N3b3JkIChsYXN0IHN0YXR1cyAkY29kZSkiOyBraWxsICIkU0VSVkVSIjsgZXhpdCAxOyB9CiAgc2xlZXAgMgpkb25lCgp3YWl0ICIkU0VSVkVSIgplY2hvICJbcmFpbHdheV0ga3VycmVudGRiIGV4aXRlZDsgc3RvcHBpbmcgY29udGFpbmVyIHNvIFJhaWx3YXkgcmVzdGFydHMgaXQiCmV4aXQgMQo= | base64 -d)"'`
- **Health check:** /health/live
- **Public domain:** Yes

## Documentation

# Deploy and Host KurrentDB on Railway

**Built for an LLM agent to deploy and use.** There is no setup step and nothing to fill in: the stock `admin / changeit` login that every KurrentDB install ships with is replaced at first boot by a generated 32-character password, and every call to the public URL must present it. The contract below lists every URL, variable name and the one script that proves it works.

KurrentDB (formerly EventStoreDB) is an open-source event-native database for event sourcing: append-only streams, optimistic concurrency, catch-up and persistent subscriptions, and server-side projections. This template runs a single node of the current KurrentDB release with authentication on.

## About Hosting KurrentDB

This template runs one service, the official **KurrentDB 26.2.3** image (`kurrentplatform/kurrentdb`, pinned by digest) with its data on a volume at `/var/lib/kurrentdb`. Railway's edge ends TLS, so the node runs with TLS off but with authentication and authorization still on (the `--disable-tls` mode, not `--insecure`, which would also drop authentication). The boot script waits for the node to be healthy, then replaces the default `changeit` admin password with `ADMIN_PASSWORD`, so there is no window in which the public URL accepts the default. The HTTP API, AtomPub, the web UI and projections are all on the one public port. Data survives redeploys, and the admin password is stable across them.

### Agent contract

- Public URL: `https://` plus `RAILWAY_PUBLIC_DOMAIN`, given as `DB_PUBLIC_URL`. It serves the HTTP API and AtomPub under `/streams/`, projections under `/projections/`, and the web UI at `/web/index.html`.
- Private URL: `http://kurrentdb.railway.internal:8080` (same port, for services in the same project).
- Credentials: user `admin`, password in `ADMIN_PASSWORD`.
- Auth: HTTP basic auth on every request (`curl -u admin:PASSWORD`). Anonymous reads and writes answer 401.
- Health: `GET /health/live` returns 204 with no credentials.

```bash
# run with DB_PUBLIC_URL and ADMIN_PASSWORD set; needs curl
U="admin:$ADMIN_PASSWORD"
S="orders-$(cat /proc/sys/kernel/random/uuid | cut -c1-8)"
curl -s -o /dev/null -w 'health %{http_code}\n' "$DB_PUBLIC_URL/health/live"
curl -s -o /dev/null -w 'anonymous %{http_code}\n' "$DB_PUBLIC_URL/streams/$S/0"
curl -s -o /dev/null -w 'default-password %{http_code}\n' -u admin:changeit "$DB_PUBLIC_URL/streams/$S/0"
curl -fsS -o /dev/null -w 'append %{http_code}\n' -u "$U" -X POST "$DB_PUBLIC_URL/streams/$S" -H 'Content-Type: application/vnd.eventstore.events+json' -d "[{\"eventId\":\"$(cat /proc/sys/kernel/random/uuid)\",\"eventType\":\"OrderPlaced\",\"data\":{\"item\":\"book\"}}]"
curl -fsS -u "$U" -H 'Accept: application/json' "$DB_PUBLIC_URL/streams/$S/0" | grep -o '"item": *"book"'
```

A fresh deploy prints `health 204`, `anonymous 401`, `default-password 401`, `append 201` and `"item": "book"`. The native gRPC protocol is served on the same port; official KurrentDB clients (.NET, Java, Node.js, Go, Python, Rust) connect from services in the same project with `kurrentdb://admin:PASSWORD@kurrentdb.railway.internal:8080?tls=false`. The scripted check above uses the HTTP API only.

## Why Deploy KurrentDB 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 KurrentDB 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.

- **Agent-ready** - generated password, contract block and one working script; no wizard, no default credentials left behind.
- **Closed by default** - authentication is on and the stock `changeit` password is rotated before the service reports up.
- **State survives redeploys** - streams, projections and the rotated admin password live on a volume.
- **Pinned image** - the KurrentDB version is pinned, so a redeploy never changes the server underneath you.
- **Current image** - built from the Kurrent registry image, not the stale `eventstore/eventstore` Docker Hub image.

## Common Use Cases

- **Event sourcing for AI agent workflows** - append every agent decision and tool call as an immutable event, then replay a stream to audit or rebuild state.
- **Audit logs and activity feeds** - append-only streams with ordering and optimistic concurrency.
- **CQRS read models** - subscribe to streams and build projections for query-side stores.

## Dependencies for KurrentDB Hosting

- None. KurrentDB stores its own data on the volume at `/var/lib/kurrentdb`.

### Deployment Dependencies

- [kurrent-io/KurrentDB](https://github.com/kurrent-io/KurrentDB) - upstream project


## Similar templates

- [RustFS | (Just Updated) S3 Object Store, Public URL and Keys Set](https://railway.com/deploy/rustfs-or-just-updated-s3-object-store-p) — S3-compatible object store, keys and public URL preset, volume kept
- [TimescaleDB](https://railway.com/deploy/timescaledb-railway-template) — A PostgreSQL-based time-series database for analytics on Railway.
- [Garage S3 Storage](https://railway.com/deploy/garage-s3-storage) — Ultra-light S3 server: fast, open-source, plug-and-play.

Open this page in a browser: https://railway.com/deploy/kurrentdb-or-just--1
