Deploy Wekan
Trello alternative. Open-source kanban board
Just deployed
/data/db
wekan
Just deployed
/data

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.

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.

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(branchmain). Private on port 27017, volume at/data/db, single-node replica setrs0with 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 and its wiki
- MongoDB: 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, #6602). v10.95 is the last clean release; bump the tag once a later one is good.
Template Content
