---
title: "Deploy Wekan"
description: "Trello alternative. Open-source kanban board"
category: "Other"
url: https://railway.com/deploy/wekan
---

# Deploy Wekan

Trello alternative. Open-source kanban board

**[Deploy Wekan on Railway](https://railway.com/template/wekan)**

- **Creator:** A3A
- **Category:** Other
- **Total deploys:** 1

## Template content

### mongodb https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mongodb.svg

- **Source:** https://github.com/gridalpha/wekan-mongodb-railway

### wekan https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/wekan.svg

- **Image:** ghcr.io/wekan/wekan:v10.95
- **Start command:** `/bin/sh -c 'mkdir -p /data && chown -R wekan:wekan /data && export HOME=/home/wekan && setpriv --reuid=wekan --regid=wekan --init-groups id && exec setpriv --reuid=wekan --regid=wekan --init-groups bash /build/wekan-entrypoint.sh'`
- **Health check:** /
- **Public domain:** Yes

## Documentation

![WeKan logo](https://wekan.fi/wekan-logo.png)

# Deploy and Host WeKan on Railway

WeKan is an open source kanban board — boards, lists, cards, swimlanes, checklists and drag-and-drop — built with Meteor on MongoDB and released under the MIT license. It is the closest self-hosted match to Trello's interface, so a migrating team keeps the workflow it already knows without per-seat billing. Agencies, universities and engineering teams use it for sprint boards, content calendars and support triage. Because every card stays in a database you control, WeKan also answers the GDPR and data-residency rules that rule out hosted SaaS.

Self-host WeKan on Railway and you get the production topology upstream recommends, not the lightweight demo one. Two services deploy together: `wekan`, the Meteor application from the official `ghcr.io/wekan/wekan:v10.95` image, public on port 8080 with a volume at `/data` for attachments; and `mongodb`, a private MongoDB 7.0 service on port 27017 with a volume at `/data/db`, built from the `gridalpha/wekan-mongodb-railway` repository as a single-node replica set with keyfile authentication. Traffic terminates TLS at Railway's edge and reaches WeKan on 8080; WeKan reaches MongoDB only over the private network, so the database is never public. Connection strings, the oplog URL and volume permissions are pre-set.

![WeKan Railway architecture](https://res.cloudinary.com/rroe4rtk/image/upload/v1786897895/239a4804-a5e9-401e-a1fc-46ef3638841e.png)

## Getting Started with WeKan on Railway

When the deploy goes green, open the generated Railway domain. WeKan serves a brief "waiting for database" page until MongoDB finishes electing itself, so give the first load a moment. **The first account that registers becomes the administrator** — there is no admin password in the template and no CLI to create one — so register straight away, before sharing the URL. Use the Register link on the sign-in screen; account creation only works through that form, as WeKan refuses to create accounts over the REST API or raw DDP. Once in, open Admin Panel → People → Login, switch **Self-registration** off, and add teammates there. The `/sign-up` route still renders its form afterwards, but the methods behind it refuse new accounts. Then create a board, add Backlog, In Progress and Done lists, and drag a card across. Admin Panel → Settings → Version reports the reactivity mode; `oplog` or `changeStreams` rather than `polling` proves the replica set is working, and card moves will then show up in other open tabs with no refresh.

![WeKan kanban board with four lists of roadmap cards](https://res.cloudinary.com/rroe4rtk/image/upload/v1786896282/wekan-product-roadmap-board.png)
![WeKan card detail showing labels, dates, members and description](https://res.cloudinary.com/rroe4rtk/image/upload/v1786896299/wekan-card-detail.png)
![WeKan admin panel reporting version, Meteor and MongoDB details](https://res.cloudinary.com/rroe4rtk/image/upload/v1786896317/wekan-admin-version-info.png)

## About Hosting WeKan

Teams self-host WeKan when project data must stay in a given jurisdiction, when headcount makes per-user pricing painful, or when boards need scripting rather than clicking.

- Boards, lists, cards, swimlanes, labels, due dates, checklists and attachments
- WIP limits, custom fields, subtasks, card voting, board templates and a no-code Rules automation engine
- REST API, outgoing webhooks (Slack, Mattermost, Rocket.Chat, n8n), Trello JSON import, JSON/CSV export
- LDAP, SAML, CAS and OAuth2/OIDC sign-on (Keycloak, Google, Azure AD, GitLab)

The two services split cleanly. `wekan` is a single Node.js process serving the UI, the REST API and the websocket that pushes live board updates; it holds Meteor sessions in memory and runs its own schedulers, so keep it at one replica. `mongodb` stores every board, card and user, and is a replica set on purpose: Meteor's reactive drivers — change streams first, OpLog tailing second — both need a replica-set member. A standalone MongoDB silently demotes WeKan to poll-and-diff, which upstream measures at 3-5x the CPU and 2000 ms latency instead of 50 ms.

## Why Deploy WeKan on Railway

Railway removes the server work around a Meteor plus MongoDB stack:

- Both services, volumes and private networking from one template
- HTTPS domain and TLS certificates issued automatically
- MongoDB stays private, with no database port to firewall
- Volumes keep boards and attachments across redeploys
- Scaling and metrics without touching a VM

## Common Use Cases for Self-Hosted WeKan

- **Trello replacement** — import Trello JSON boards and swap per-seat fees for a flat infrastructure bill
- **Agile sprint and roadmap boards** — swimlanes per squad, WIP limits per column, story-point custom fields
- **Regulated or internal work** — client, HR and contractual boards that must stay in your infrastructure
- **Automated intake** — open cards from alerts or CI failures via the REST API, and fan activity out over webhooks

## Dependencies for WeKan

- **wekan** — `ghcr.io/wekan/wekan:v10.95`. The Meteor app: UI, REST API and realtime websocket. Public on port 8080, volume at `/data`.
- **mongodb** — MongoDB 7.0 from `gridalpha/wekan-mongodb-railway` (branch `main`). Private on port 27017, volume at `/data/db`, single-node replica set `rs0` with keyfile auth.

### WeKan Environment Variables Reference

| Variable | Service | Purpose |
|---|---|---|
| `ROOT_URL` | wekan | Public URL used for links and websockets |
| `MONGO_URL` | wekan | Application database connection string |
| `MONGO_OPLOG_URL` | wekan | Connection to `local` for OpLog tailing |
| `WEKAN_DB` | wekan | `mongodb`, so the demo database is skipped |
| `WITH_API` | wekan | Enables the REST API and board export |
| `MAIL_URL` / `MAIL_FROM` | wekan | Optional SMTP for notifications and resets |

### Deployment Dependencies for WeKan

- Runtime: Node.js 24 and Meteor 3.5, inside the WeKan image
- Images: `ghcr.io/wekan/wekan`, mirrored on Docker Hub and Quay
- Docs: [wekan/wekan](https://github.com/wekan/wekan) and its [wiki](https://github.com/wekan/wekan/wiki)
- MongoDB: [gridalpha/wekan-mongodb-railway](https://github.com/gridalpha/wekan-mongodb-railway)

## Hardware Requirements for Self-Hosting WeKan

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU each service | 2 vCPU each |
| RAM | 1 GB WeKan, 1 GB MongoDB | 4 GB WeKan, 2 GB MongoDB |
| Storage | 1 GB volume per service | 10 GB+, sized to attachments |
| Runtime | Node.js 24, MongoDB 7.0 replica set | Same, plus scheduled backups |

WeKan has no undo, so back the MongoDB volume up on a schedule. Node sizes its heap from host memory, not the container limit, so the template caps it with `NODE_OPTIONS`.

## Self-Hosting WeKan with Docker

The same two-container shape runs anywhere Docker does. Start MongoDB as a one-node replica set, then initiate it once it responds:

```
docker run -d --name wekan-db -v wekan-db:/data/db mongo:7.0 \
  mongod --replSet rs0 --bind_ip_all
docker exec wekan-db mongosh --eval 'rs.initiate()'
```

Then start WeKan against it:

```
docker run -d --name wekan --link wekan-db -p 8080:8080 -v wekan-data:/data \
  -e PORT=8080 -e ROOT_URL=http://localhost:8080 -e WEKAN_DB=mongodb \
  -e MONGO_URL='mongodb://wekan-db:27017/wekan?directConnection=true' \
  -e WITH_API=true -e WRITABLE_PATH=/data ghcr.io/wekan/wekan:v10.95
```

## How Much Does WeKan Cost to Self-Host?

WeKan is free and open source under the MIT license, with no cap on users, boards or teams and no paid edition to upgrade to. Optional commercial support and a small managed SaaS exist, but nothing in the software is gated behind them. Self-hosting on Railway costs only what the two services consume in compute, memory and storage, and does not grow with headcount — unlike per-seat kanban SaaS at $5 to $17.50 per user per month.

## FAQ About Deploying WeKan on Railway

**What is WeKan?**

An MIT-licensed open source kanban board built with Meteor and MongoDB: boards, swimlanes, checklists, WIP limits, custom fields, a Rules automation engine and a REST API. It is widely used as a self-hosted Trello alternative.

**What does this Railway template deploy?**

A public `wekan` service from `ghcr.io/wekan/wekan:v10.95` on port 8080 with a volume for attachments, plus a private MongoDB 7.0 replica set with its own volume.

**Why does the template run its own MongoDB instead of a managed database?**

Meteor's realtime drivers — change streams and OpLog tailing — only work against a replica set. Managed MongoDB is usually standalone, which would quietly downgrade WeKan to polling and multiply CPU use and latency.

**How do I create the admin user in self-hosted WeKan?**

Register the first account through the sign-up form; WeKan makes the first user an administrator. There is no admin environment variable, so register immediately, then disable self-registration under Admin Panel → People → Login.

**How does WeKan compare to Trello, and can I import my Trello boards?**

WeKan mirrors Trello's board, list and card model closely enough that a migrating team needs no retraining, and costs infrastructure rather than per seat. Export a Trello board as JSON and WeKan's built-in import recreates its lists, cards, labels and checklists. Kanboard is leaner but has fewer features, and standalone Focalboard is no longer maintained.

**Why is the WeKan image pinned instead of tracking `latest`?**

WeKan releases very frequently, and v10.96 and v10.97 both fail to boot on upstream packaging regressions ([#6601](https://github.com/wekan/wekan/issues/6601), [#6602](https://github.com/wekan/wekan/issues/6602)). v10.95 is the last clean release; bump the tag once a later one is good.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — [Jul'26] 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/wekan
