Wekan
Open source kanban board application built with Meteor
Alternative to: trello
v10.88
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.50.0 | verified | 9e001227107f244b… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.50.0 | verified | 4e63385a721f1c04… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.50.0 | verified | 0864e1d8c74a0cd4… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.50.0 | verified | 83d6fde4b70088a8… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
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.88 2026-08-12 WeKan ® release
In short: the rest of the afternoon github.com spent returning 503,
and one repository that had nothing to do with WeKan at all. Two more release
runs died: one downloading FerretDB, where curl --retry 5 --retry-delay 10 is fifty seconds of patience, and one on apt-get update, which fails as a
whole when any configured repository — the runner’s Google Chrome one,
here — serves an index mid-republish. Both wait the outage out now. The other
half of both fixes is that a real failure is still immediate: a 404 is an
answer, not an outage, and an existence check that reads a 503 as “that
binary was never published” would drop an architecture that is sitting right
there on the release.
The binaries below are carried over from v10.87 and have NOT been checked
against a newer build; releases/provenance-table.sh prints the real table
from the provenance each build job records.
| 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 release-tooling bugs:
A package index that is mid-republish no longer ends a release. Thanks to xet7.
The bump job of the same afternoon died on a repository the release does not
use:
E: Failed to fetch https://dl.google.com/linux/chrome-stable/deb/dists/stable/main/binary-amd64/Packages.gz Hash Sum mismatch
E: Some index files failed to download.
Error: Process completed with exit code 100.
It was installing python3 and curl. A GitHub runner comes with
google-chrome, microsoft-prod, azure-cli and docker repositories configured,
and apt-get update fails as a whole when any one of them serves an index
that does not match its own hashes - which is what a mirror looks like while it
is being republished.
releases/apt-install.sh installs the packages instead. It retries the update,
clearing the cached lists first - a Hash Sum mismatch is a cached index
disagreeing with the server, so re-reading it reports the same thing - and if
it still fails it moves the third-party lists aside and updates from the
distribution archive alone, which is where every package a release job installs
comes from. Both steps say what they did: a silent change of package sources
would be worse than the failure. A mirror that never comes back still fails the
job, saying it is the mirror.
Every apt-get update + apt-get install pair in Release All, Release All
Missing, the Sandstorm, meteor-spk and Flatpak workflows, and the emulated
build container, goes through it. tests/releaseAptInstall.test.cjs drives it
with a fake apt-get that mismatches on demand and a fake sudo that records
rather than runs - a test must not move the package sources of the machine it
runs on.
A download that 503s is retried for a quarter of an hour, and a 404 still fails at once. Thanks to xet7.
The second run of the same afternoon died one step later than the first, in
build-amd64, on the FerretDB binary:
curl: (22) The requested URL returned error: 503
Warning: Problem : HTTP error. Will retry in 10 seconds. 5 retries left.
...
curl: (56) Connection died, tried 5 times before giving up
Nothing was wrong with WeKan, and nothing was wrong with nodejs.org either -
the bundled Node.js downloaded and verified in the same step, seconds earlier.
It was github.com, and --retry 5 --retry-delay 10 gives it fifty seconds.
releases/fetch.sh is now what downloads a file in a release. It retries
5xx, 429, 408 and the connection errors on a backoff that adds up to
about fifteen minutes, and every download in Release All, Release All Missing,
the preflight scripts and the emulated build containers goes through it - with
the Dockerfile carrying it alongside resolve-node-source.sh, which now asks
it which Node.js builds exist.
The distinction it adds is the one a longer --retry cannot: a 404 is not
an outage. Several callers here legitimately ask “is this published for this
CPU?” and get “no” - the preflight that skips an architecture with no Node.js
build yet, the MongoDB Database Tools that are not built for every platform,
the .sha256sum a source may not publish. Those fail immediately and quietly.
Everything else waits.
And an existence check now has three answers instead of two: present,
absent, or the server would not say. That third one used to be
indistinguishable from “absent”, which is how an outage could silently drop a
platform from the Docker image or skip an architecture whose binary was
published all along - a ::warning:: nobody reads until somebody on ppc64le
asks where their image went. It now stops the job and says to re-run it.
tests/releaseDownloads.test.cjs runs the script against a local server that
503s, 404s and 429s on demand, and reads the workflows for a download that
still goes straight to curl.
and has the following test-tooling fix:
One browser test logging in no longer logs the other tabs out. Thanks to xet7.
The last WeKan test run failed one test in all three browsers - a test that had passed for a month:
02-cards-open-view.e2e.js:66 copy-link button produces a URL that
opens the card in full-screen view
Error: Token login failed: You've been logged out by the server.
Driving the running server over DDP with a token seeded the way the fixtures seed one shows what it is:
session A: ok tokens: [CfgBWImyytla]
session B: ok tokens: [CfgBWImyytla] <- two sessions, one token
after B logged out tokens: [] <- logout removed it
session C (same token): ERROR You've been logged out by the server.
A seeded test user has one resume token, and Meteor.logout() deletes it on
the SERVER — for every session using it. The login helper called it when a page
was logged in as somebody else, so switching users in one page stranded every
other page of that test. Only the copy-link test logs a second page in, which is
why it was the one that failed.
The helper now ends the previous session in the CLIENT instead: it drops the
three Accounts keys and reloads, which the helper already knows how to do for
its own first load. The token is untouched, and the page still arrives with no
user on it. logout() stays as its own helper, because logging out is a real
thing to test — 05-admin-users logs out and back in with a password.
Two pages are two browsers, so they now get two tokens: db.addResumeToken()
adds one to an existing user, and the second tab uses it. That tab also stopped
waiting for networkidle before looking for the card — a card is rendered when
the subscriptions land, which is not a network event a browser can be idle
about, and on a loaded machine the wait ended before the card existed.
tests/e2eSessionTokens.test.cjs pins both rules, including a scan of every
spec for two logins sharing one token.
Thanks to above GitHub users for their contributions and translators for their translations.