Wekan
Open source kanban board application built with Meteor
Alternative to: trello
About
Versions (218)
v9.94
2026-07-15v9.94 2026-07-15 WeKan ® release
This release adds the following new features:
- Snap: the
databasesetting is now authoritative, with asnap run wekan.database mongodb|ferretdbcommand and no-downtime handling of a failed migration (snap-src/bin/wekan-database,snap-src/bin/wekan-control,snap-src/bin/mongodb-control,snap-src/bin/ferretdb-control,snap-src/bin/migration-control,snap-src/bin/migration-pending). Previously the control scripts force-switched to FerretDB whenever a*.sqlitefile existed, sosnap set wekan database=mongodbwould not stick and there was no way to keep WeKan on MongoDB while fixing a migration — a failed migration meant downtime. Now thedatabasesetting decides which database WeKan runs on, andsnap run wekan.database mongodbswitches WeKan to MongoDB (and pauses auto-migration,migrate=off) whilesnap run wekan.database ferretdbswitches to the migrated FerretDB. Auto-migration can be paused withsnap set wekan migrate=offand, crucially, a migration that FAILS now pauses itself and hands back to MongoDB automatically (migration-controlfail_and_run_mongodb) so WeKan keeps working on MongoDB instead of retrying-and-failing every start; re-run it withsnap run wekan.migrate. A successful migration also restartswekan.wekanso it reconnects to FerretDB. The only remaining auto-override is the safety guard that refuses to start an empty FerretDB while MongoDB still holds data. Thanks to xet7.
and fixes the following bugs:
- Snap: the MongoDB → FerretDB migration failed on GridFS collections and left a half-migrated
database behind (
releases/migrate-mongodb-to-ferretdb.mjs,snap-src/bin/migrate-mongo3-to-ferretdb.mjs,snap-src/bin/migration-control). FerretDB v1 rejects collection names containing a dot (“invalid key: ‘attachments.chunks’ (key must not contain ’.’ sign)”), and the importers tried to copy the GridFS internals collections (attachments.chunks,attachments.files,avatars.*,cfs_gridfs.*) and the CollectionFScfs.<bucket>.filerecordcollections as text, so the migration aborted. Now the text phase skips every dotted collection — none of WeKan’s real data collections contain a dot, and the dotted ones are all GridFS internals (extracted in the file phase), CollectionFS filerecords (turned into bareattachments/avatarsrecords in the file phase, now created with an upsert) orsystem.*collections. And crucially, when a migration fails partway it now deletes the partial FerretDB SQLite it wrote (migration-control’sdiscard_partial_ferretdb): otherwise that non-empty-but-incompletefiles/db/wekan.sqlitelooked “migrated” to the data check, so the snap disabled MongoDB and tried to serve an incomplete FerretDB. Now a failed migration cleanly keeps MongoDB and retries. Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.