Wekan logo

Wekan

Open source kanban board application built with Meteor

Alternative to: trello


About Versions (218)

v10.88

2026-08-12

Binaries 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.

BundleBinaryFromVersionCheckedSHA256
amd64FerretDBwekan/FerretDBv1.50.0verified9e001227107f244b…
amd64Node.jsnodejs.orgv24.19.0verified14b342e71204f811…
arm64FerretDBwekan/FerretDBv1.50.0verified4e63385a721f1c04…
arm64Node.jsnodejs.orgv24.19.0verified01443c1e1a29e531…
mac-arm64FerretDBwekan/FerretDBv1.50.0verified0864e1d8c74a0cd4…
mac-arm64Node.jsnodejs.orgv24.19.0verified3f1cf157479c1480…
mac-x64FerretDBwekan/FerretDBv1.50.0verified83d6fde4b70088a8…
mac-x64Node.jsnodejs.orgv24.19.0verifiedd35e95230f46f6f0…

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.

PlatformBinaryFromVersionSHA256
amd64Node.jsnodejs.orgv24.19.014b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647
amd64FerretDBwekan/FerretDBv1.49.07c74941ff043f26aa4411ef5065d6b2d0766e369fc2a4458364c2f5571c12762
arm64Node.jsnodejs.orgv24.19.001443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc
arm64FerretDBwekan/FerretDBv1.49.0092132531555a39eac12566240a5f1ed02f62148b2dca0540a74c68e5957f6b5
armhfNode.jswekan/node-patchesv24.19.0b55350f3071b765a98ed66fdc410657ff168a937935057077fd7ab33cb30b9aa
armhfFerretDBwekan/FerretDBv1.49.0144404fb9793dc8e039874812f4e2cb3e6d8b1df0ffdbe50254e7790a342a2f4
armv6Node.jswekan/node-patchesv24.19.0128ded0cda638c1f144eadb23ad249889515df017d298fd49c8faf3db110f0f1
armv6FerretDBwekan/FerretDBv1.49.07c27b2c15448709a24eace9b3c951c62fbe33413f7d20d56cb5520f4436efe2d
armv7Node.jswekan/node-patchesv24.19.08dbe0a9aa8550ad5275c5538ebf868eb2037f0c4d9cccbe319f63b7e5854cd45
armv7FerretDBwekan/FerretDBv1.49.0144404fb9793dc8e039874812f4e2cb3e6d8b1df0ffdbe50254e7790a342a2f4
i386Node.jswekan/node-patchesv24.19.03b0b3bbfe27daf583b3a0f432efacc508407a012cdd9e8847250e7c015565bac
i386FerretDBwekan/FerretDBv1.49.01f70cb1687411b2a0fa9ac3b5bfc8c4ed9ce25ec2ddfa17e6fd3efb38136a39c
mac-arm64Node.jsnodejs.orgv24.19.03f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94
mac-arm64FerretDBwekan/FerretDBv1.49.0576364db59dfce3ba564b9a3e484496eb57f95d76d2007b9f83241acdbd2f4fa
mac-x64Node.jsnodejs.orgv24.19.0d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4
mac-x64FerretDBwekan/FerretDBv1.49.037d70cd90aad6d3867b6686507ff1888f1edf6791818c31d014d130e8f39fc14
ppc64leNode.jsnodejs.orgv24.19.0c510c6ce12f07010f771e6edb22a3fe23f4f2e6f40b1ffd4941aed0646a0d8b3
ppc64leFerretDBwekan/FerretDBv1.49.07c61d4853d5163ad8761449d693fd458ebbb8611a2351c718014876242c5b1fb
riscv64Node.jsunofficial-builds.nodejs.orgv24.19.0cd1f14af2812148002f58b58a5f9af512a50e3b8e8c148e0db44019dcb68edfd
riscv64FerretDBwekan/FerretDBv1.49.0bd4912da70f5e6c1475ab989668c76b4ab7db4ee06c44357693df64f5e1d0e0b
s390xNode.jsnodejs.orgv24.19.0a4792e65962ffa0af42627aacf1122a60c3c88dbf4e4184f06820d66f9da8ba4
s390xFerretDBwekan/FerretDBv1.49.0no checksum published
win-arm64Node.jsnodejs.orgv24.19.08502f4a50b458d4cc38ed8f2001556c2cd239d464920f74017926ccb1e1c157f
win-arm64FerretDBwekan/FerretDBv1.49.0792166623e774b0af2aced31ed3ae39f545ca5268dc4c2b8d1a329228ff52cbc
win64Node.jsnodejs.orgv24.19.057f71ab3652e797d84acddc79c81cc9ff1c6ddb2a1974cdb83f00fee9bff4c73
win64FerretDBwekan/FerretDBv1.49.0f42c50aa84095a9616b00f27a584c66b7bf79e3b109450c62a5f146ba3c85478

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.