Wekan logo

Wekan

Open source kanban board application built with Meteor

Alternative to: trello


About Versions (218)

v10.64

2026-08-04

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 fork 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
arm64FerretDBwekan/FerretDBlatestverified275ae50ac97e6a70…
arm64FerretDBwekan/FerretDBlatestverified275ae50ac97e6a70…
arm64Node.jsnodejs.orgv24.19.0verified01443c1e1a29e531…
arm64Node.jsnodejs.orgv24.19.0verified01443c1e1a29e531…
mac-arm64FerretDBwekan/FerretDBlatestverified639ed58b84820b3d…
mac-arm64FerretDBwekan/FerretDBlatestverified639ed58b84820b3d…
mac-arm64Node.jsnodejs.orgv24.19.0verified8294b7aa9b039974…
mac-arm64Node.jsnodejs.orgv24.19.0verified8294b7aa9b039974…
ppc64leFerretDBwekan/FerretDBv1.45.0verifiedde4518c7774d3025…
ppc64leFerretDBwekan/FerretDBv1.45.0verifiedde4518c7774d3025…
ppc64leNode.jsofficialv24.19.0verifiedc510c6ce12f07010…
ppc64leNode.jsofficialv24.19.0verifiedc510c6ce12f07010…
riscv64FerretDBwekan/FerretDBv1.45.0verified7dc2952f554e8800…
riscv64FerretDBwekan/FerretDBv1.45.0verified7dc2952f554e8800…
riscv64Node.jsunofficialv24.19.0verifiedcd1f14af28121480…
riscv64Node.jsunofficialv24.19.0verifiedcd1f14af28121480…
s390xFerretDBwekan/FerretDBv1.45.0verified0ae2e2f2cffdc5dd…
s390xFerretDBwekan/FerretDBv1.45.0verified0ae2e2f2cffdc5dd…
s390xNode.jsofficialv24.19.0verifieda4792e65962ffa0a…
s390xNode.jsofficialv24.19.0verifieda4792e65962ffa0a…
win64FerretDBwekan/FerretDBlatestverifiedf6337994368a52d0…
win64FerretDBwekan/FerretDBlatestverifiedf6337994368a52d0…
win64Node.jsnodejs.orgv24.19.0verified57f71ab3652e797d…
win64Node.jsnodejs.orgv24.19.0verified57f71ab3652e797d…

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.64 2026-08-04 WeKan ® release

In short: this release hardens how the multi-platform release is assembled. The Node.js and FerretDB inside every platform bundle become named, checksummed binaries, so the release provenance table can say exactly which build each platform carries - the thing you need when a Node.js CVE lands; the four native bundles used to ship whatever Node the GitHub runner carried (cp $(command -v node)), and arm64 was even shipping Node 22 because its job had no setup-node. Separately, the base bundles (amd64, arm64) are now attached to the release loudly and verified, and - the real fix behind that - the release job checks out before downloading the bundles instead of after: the after-checkout deleted the just-downloaded zips (that is what shipped v10.63 and v10.64 with no amd64/arm64 bundle, 404’ing every snap build). And i386/armhf are skipped when no Node.js exists for them anywhere instead of failing the run every release. It also fixes an Admin Panel bug where a report opened by its own URL came up empty over data that was plainly there, because the subscription was cancelled by its own count re-render.

This release fixes the following release-build issues:

Bundle provenance - which Node.js and FerretDB binary each platform ships.

Every native bundle ships a named, checksummed Node.js and FerretDB instead of the runner's node. Thanks to xet7.

The amd64, arm64, win64 and mac-arm64 bundles embedded Node.js with cp $(command -v node) - the runner’s node. A bare binary extracted onto the runner publishes no checksum, so releases/record-provenance.sh could only write no checksum published, and the provenance table at the top of the release could not name the exact Node.js build a platform carried. It was also the wrong build on arm64: build-arm64 has no setup-node step, so $(command -v node) was ubuntu-24.04-arm’s DEFAULT Node 22.x, not the pinned Node 24 every other bundle shipped - and nothing recorded the disagreement. A new releases/embed-verified-node.sh downloads the pinned Node.js for the bundle’s OS+CPU from nodejs.org, verifies the archive against the published SHASUMS256.txt (fatal on a mismatch), and puts its node into the bundle; each native job now calls it and records nodejs.org + the exact version + the verified SHA256. FerretDB is verified the same way, against the .sha256sum wekan/FerretDB now publishes beside every binary, and win64 and mac-arm64 - which recorded no provenance at all - now upload a provenance artifact like amd64 and arm64, so every platform is accounted for. The emulated arches already did this through install-node-for-arch.sh. tests/releaseNodeVerified.test.cjs pins that no native bundle can go back to the runner’s node or an unverified download.

Release assembly - attaching the base bundles, and the arches that can be built at all.

The base amd64/arm64 bundles are attached loudly and verified, not silently by softprops. Thanks to xet7.

Every bundle except amd64 and arm64 attaches itself with gh release upload --clobber, which fails on a missing file and is verified from the release side. The two base bundles were the exception: the central release job attached them with softprops files:, which does NOT fail on an unmatched file. So when a run produced no base zip, softprops created the release with none of them and reported success - and v10.63 shipped with no amd64 or arm64 bundle at all, which 404’d every snap build (native, wekan-ondra, wekan-gantt-gpl) on wekan-10.63-amd64.zip. softprops also never listed the .sha256sum, so the base bundles had no checksum beside them. The release job now creates the release with softprops (so it exists for the self-attaching jobs) and attaches amd64/arm64 in a following step with gh release upload --clobber - failing the release if a base bundle is missing or empty, rather than 404’ing ten downstream jobs - and it checksums the exact bytes it attaches, so the base bundles get a .sha256sum like the rest. (Why the base zip was missing in the first place is the next entry - the loud, verified attach is what turned that silent gap into a failed release that names it.)

The release job checks out before downloading the bundles, so the checkout stops deleting them. Thanks to xet7.

The real reason v10.63 (and then v10.64) shipped with no amd64/arm64 bundle was not softprops - it was the checkout. The release job downloaded the bundles into the workspace and THEN ran actions/checkout for the provenance script. The workspace is not a git repository at that point, so checkout’s very first act is “Deleting the contents of ‘<workspace>’” to make room for a fresh clone - and it does this even with clean: false, which only skips the git clean in an already-checked-out repo, not the initial wipe. The just-downloaded wekan-<version>-{amd64,arm64}.zip were deleted before the attach step, which then failed with “wekan--amd64.zip is missing or empty” - and, because of the loud attach above, that now failed the release outright rather than shipping an empty one. The checkout runs FIRST now, into the empty workspace, and the bundles are downloaded on top of the checked-out tree, where nothing removes them. tests/releaseBundlesSurviveCheckout.test.cjs pins the order (checkout before the bundle download) rather than clean: false, which was never enough.

i386 and armhf are skipped when no Node.js exists for them, instead of failing the run. Thanks to xet7.

build-extra-arches failed on i386 and armhf because there is no Node.js to build them against: Node has no linux-x86 build at all, and no source builds Node 24 for armv7l (nodejs.org and unofficial-builds have neither, and the wekan/node fork has not built them yet). A red job every release for a CPU nothing can currently produce a Node for is noise, not news. Both are now marked best-effort (optional: true), and when a best-effort arch’s Node.js is absent everywhere releases/check-arch-binaries.sh emits skip=true (a warning, exit 0) rather than a fatal error; every build step in the job is gated on it, so the arch is skipped cleanly with nothing built. It returns on its own the first release after wekan/node publishes node-i386 / node-armhf. A required arch whose Node.js is missing is still fatal, as before. tests/releaseArchSkipAndBaseAttach.test.cjs pins both this and the base-bundle attachment above.

and fixes the following Admin Panel bug:

Admin Panel reports - loading a report by its own URL.

An admin report opened by its URL keeps the subscription its own count re-render used to cancel. Thanks to xet7.

Opening an admin report by its address - /admin/problems/files typed, bookmarked or refreshed - drew the column headers, “No results” and a “1 / 1” pager over data that was plainly there, while the count method reported five. An earlier fix addressed one half (re-subscribe once the login lands), but the report still came up empty. The onCreated autorun opens the pane and subscribes when the open-pane or the logged-in user changes, and it called openReportPane() / loadReport() directly in its reactive body - so it became reactive on cfg.count (which loadReport reads through pageInfo), and loadReport’s own count method then did cfg.count.set(...). That re-ran the autorun, and a Meteor.subscribe made inside an autorun is AUTO-CANCELLED when the autorun re-runs; the re-run took the “same user, same pane” path, did not re-subscribe, and left the report with no subscription - attachments in minimongo: 0. From the left menu it worked, because that opens the pane from an event rather than a computation, so the subscribe was never auto-managed; only the URL path hit it. The autorun now reads only the pane id and the user reactively and runs its body inside Tracker.nonreactive, so a count re-render no longer cancels the subscription, whose lifetime is managed explicitly (a new onDestroyed stops the last one). tests/adminReportsSubscriptionLifetime.test.cjs pins it.

Thanks to above GitHub users for their contributions and translators for their translations.