Wekan
Open source kanban board application built with Meteor
Alternative to: trello
v10.84
2026-08-12Binaries in these bundles
Each bundle carries a Node.js, a FerretDB and the MongoDB Database Tools. Which source has a given CPU varies from release to release - nodejs.org builds some architectures, unofficial-builds others, and the wekan/node-patches build the ones neither of them does - and not every source publishes a checksum. This is what went into this release, and which downloads were checked against a published SHA256.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.49.0 | verified | 7c74941ff043f26a… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.49.0 | verified | 092132531555a39e… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.49.0 | verified | 144404fb9793dc8e… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.49.0 | verified | 7c27b2c15448709a… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.49.0 | verified | 144404fb9793dc8e… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.49.0 | verified | 1f70cb1687411b2a… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.49.0 | verified | 576364db59dfce3b… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.49.0 | verified | 37d70cd90aad6d38… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.49.0 | verified | 7c61d4853d5163ad… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.49.0 | verified | bd4912da70f5e6c1… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.49.0 | verified | 62900110fc3e8165… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.49.0 | verified | 792166623e774b0a… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.49.0 | verified | f42c50aa84095a96… |
| win64 | Node.js | nodejs.org | v24.19.0 | verified | 57f71ab3652e797d… |
A row saying no checksum published is not a failed check - it is a source that publishes nothing to check against. Those are the ones worth fixing at the source.
v10.84 2026-08-12 WeKan ® release
In short: one fix, to the snap, and it is a fix to the previous release’s fix. The guard v10.82 added so an out-of-date FerretDB copy could not be served had the opposite failure of the bug it fixed: it decided which copy was newer by comparing MongoDB’s file timestamps against the migration marker, and STARTING mongod rewrites those files - so a single service start during a refresh made a frozen MongoDB look newer than the FerretDB that had been live for two weeks, and the snap was switched onto the frozen one. It now asks the question of BOTH copies, and when both have been written to since the migration it switches nothing and says so, because a timestamp says when a file was touched and not how much is in it. Below that, the three newest interface strings are translated into 133 languages. The binaries below are v10.83’s: nothing here rebuilds them.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.49.0 | 7c74941ff043f26aa4411ef5065d6b2d0766e369fc2a4458364c2f5571c12762 |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.49.0 | 092132531555a39eac12566240a5f1ed02f62148b2dca0540a74c68e5957f6b5 |
| armhf | Node.js | wekan/node-patches | v24.19.0 | b55350f3071b765a98ed66fdc410657ff168a937935057077fd7ab33cb30b9aa |
| armhf | FerretDB | wekan/FerretDB | v1.49.0 | 144404fb9793dc8e039874812f4e2cb3e6d8b1df0ffdbe50254e7790a342a2f4 |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | 128ded0cda638c1f144eadb23ad249889515df017d298fd49c8faf3db110f0f1 |
| armv6 | FerretDB | wekan/FerretDB | v1.49.0 | 7c27b2c15448709a24eace9b3c951c62fbe33413f7d20d56cb5520f4436efe2d |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | 8dbe0a9aa8550ad5275c5538ebf868eb2037f0c4d9cccbe319f63b7e5854cd45 |
| armv7 | FerretDB | wekan/FerretDB | v1.49.0 | 144404fb9793dc8e039874812f4e2cb3e6d8b1df0ffdbe50254e7790a342a2f4 |
| i386 | Node.js | wekan/node-patches | v24.19.0 | 3b0b3bbfe27daf583b3a0f432efacc508407a012cdd9e8847250e7c015565bac |
| i386 | FerretDB | wekan/FerretDB | v1.49.0 | 1f70cb1687411b2a0fa9ac3b5bfc8c4ed9ce25ec2ddfa17e6fd3efb38136a39c |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.49.0 | 576364db59dfce3ba564b9a3e484496eb57f95d76d2007b9f83241acdbd2f4fa |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.49.0 | 37d70cd90aad6d3867b6686507ff1888f1edf6791818c31d014d130e8f39fc14 |
| ppc64le | Node.js | nodejs.org | v24.19.0 | c510c6ce12f07010f771e6edb22a3fe23f4f2e6f40b1ffd4941aed0646a0d8b3 |
| ppc64le | FerretDB | wekan/FerretDB | v1.49.0 | 7c61d4853d5163ad8761449d693fd458ebbb8611a2351c718014876242c5b1fb |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | cd1f14af2812148002f58b58a5f9af512a50e3b8e8c148e0db44019dcb68edfd |
| riscv64 | FerretDB | wekan/FerretDB | v1.49.0 | bd4912da70f5e6c1475ab989668c76b4ab7db4ee06c44357693df64f5e1d0e0b |
| s390x | Node.js | nodejs.org | v24.19.0 | a4792e65962ffa0af42627aacf1122a60c3c88dbf4e4184f06820d66f9da8ba4 |
| s390x | FerretDB | wekan/FerretDB | v1.49.0 | no checksum published |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | 8502f4a50b458d4cc38ed8f2001556c2cd239d464920f74017926ccb1e1c157f |
| win-arm64 | FerretDB | wekan/FerretDB | v1.49.0 | 792166623e774b0af2aced31ed3ae39f545ca5268dc4c2b8d1a329228ff52cbc |
| win64 | Node.js | nodejs.org | v24.19.0 | 57f71ab3652e797d84acddc79c81cc9ff1c6ddb2a1974cdb83f00fee9bff4c73 |
| win64 | FerretDB | wekan/FerretDB | v1.49.0 | f42c50aa84095a9616b00f27a584c66b7bf79e3b109450c62a5f146ba3c85478 |
This release fixes the following bug:
Snap: a started mongod is not a used mongod, so stop calling the live copy stale. Thanks to lukechao, markusst1982 and xet7.
The staleness guard added for #6583 had the opposite failure of the bug it fixed:
A couple of weeks ago, I did a snap revert … but then completed the migration successfully. Today, my database suddenly reverted to an old version from what looks like weeks ago. Upgrading to 10.83 did not fix the problem automatically.
Their FerretDB was the live database and had been for two weeks; MongoDB was the
frozen one. The guard decided otherwise because it compared exactly two things:
the newest mtime under the MongoDB data directory, and the migration marker.
Starting mongod rewrites those files - recovery, and the checkpoint it writes
on startup - so one service start during a refresh put MongoDB’s newest mtime at
today against a marker from two weeks ago. The guard called the live copy stale,
wekan-control set database=mongodb, and what came up was the data as it
stood on the day of the migration. Upgrading could not help, because the upgrade
was the cause: this runs at every start, so every start re-applied it.
An mtime cannot tell somebody used this database from this database was started, so asking it of one copy cannot answer the question. Asking it of both can, because the case the guard exists for has a shape the mistaken one does not. The migrated copy untouched since the migration while MongoDB moved on is STALE - nothing has been using FerretDB. The migrated copy moved on while MongoDB did not is CURRENT, the normal state after a successful switch. Both moved on is AMBIGUOUS: two databases have been written to since they were copies of each other, and there is no answer there, only a choice, and it is the admin’s.
Only the first may be acted on automatically. The ambiguous case switches
nothing, prints both databases’ last-written times and the two commands to look
at each, and says that nothing was changed or deleted - both copies live in
$SNAP_COMMON, which snap revert does not roll back. That restraint matters
most in the branch of mongodb-control that DELETES files/db to migrate again
when mongod cannot start at all: on ambiguity the SQLite holds work of its
own, so wiping it would destroy the very copy in doubt.
The message has no database=ferretdb condition on it, deliberately. An
instance the old guard already moved to database=mongodb is sitting on the
wrong copy now and that setting persists, so speaking up only when FerretDB is
selected would leave it there silently. Whichever side is selected, the admin
hears that the other one holds writes of its own.
tests/ferretdbMigrationStale.test.cjs gains the reported regression - a
two-week-old migration, a FerretDB written to a minute ago, a mongod started
an hour ago - and pins that ambiguity can never reach the deletion.
and improves the translations:
The three new Version-pane and checklist strings, in 133 languages. Thanks to xet7.
invalid-year, collapse-checklist and expand-checklist shipped in
en.i18n.json with the card-date fix and the collapsible checklists; every
other language file carried them as English placeholders. Translated directly,
as CLAUDE.md requires - no external translation service, API or key - from
each language’s OWN existing strings, so the wording matches what that file
already says rather than being invented beside it.
Three anchors did most of the work. checklist and collapse / uncollapse
give each language its established terms, and invalid-domain is the same shape
of sentence as the new one - a rejection, then an instruction with an example -
so its phrasing, punctuation and register carried over directly.
Where an anchor was itself wrong the correct term was used instead of copying the mistake forward. Several files have terms that drifted in from another language: Italian Non collassare in the Greek and Romanian files, Russian in the Georgian and Mongolian ones, Vietnamese in the Thai one, Serbian in the Slovenian and Bulgarian ones. Others use a literal sense of “collapse” that is not the UI one - Azerbaijani Yıxılma, Estonian Kokkupõrge, Khmer ដួលរលំ and Chinese 崩溃 are structural collapse, a building falling down. The new strings use the folding sense each language actually uses for this control.
Nine languages are deliberately left as English placeholders rather than guessed
at: Klingon, Volapük, Tamazight, Walloon, Wolof, Uzbek in Arabic script, and the
three ve files, whose contents disagree with their own locale tags - ve-CC
reads as Venetian and ve-PP as Veps, so which language to write is a question
about the file, not about the string. A placeholder says “nobody has translated
this yet”, which is true; a fabrication would say something false in a shipped
product.
Applied with fill-translations.mjs --apply, which writes ONLY into
placeholders: every language reported filled 3, skipped 0 existing human
translation(s), so no human translation was touched. Key order and the 2-space
indent are preserved, all 154 files still parse, and
verify-human-preference.mjs passes 10/10.
Thanks to above GitHub users for their contributions and translators for their translations.