Releases: wekan/wekan
Release list
v11.05
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | cefef799be4d3abd… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | d6fc40d8657dc989… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.54.0 | verified | 82e6a8e078b366ec… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 14da6f60445fcce2… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 82e6a8e078b366ec… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.54.0 | verified | e80b2672d833d38d… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | cac5e99177cb9c98… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 6a12e289a83c32d4… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.54.0 | verified | 1cdde969f9d888b9… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 748372f58a70a3d0… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.54.0 | verified | bb6028ef6fc61f86… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 37e005e17eb1c3c7… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 870c892e7bcab272… |
| 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.
v11.05 2026-08-19 WeKan ® release
In short: opened cards with saved dates render normally again, retain
their labels and remain editable instead of stopping Blaze reactivity with a
date-template context error. Launchpad snap builds now wait for their
release bundles and preserve valid artifacts when Snapcraft only fails during
post-download cleanup.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release fixes the following bug:
Cards with saved dates open and remain editable. Thanks to ClemStrummer and xet7.
Named Blaze arguments had replaced each opened-card date template's Card
context with a plain argument object. Reactive date helpers then called Card
methods on that object, stopping card-detail rendering and leaving the board in
a refresh loop after a date save. Card details now passes the Card explicitly,
while the shared date code accepts both that wrapped context and the direct
context used by minicards and Table view. Browser coverage opens a labeled card
with all four dates, verifies every badge and label, edits its title, and checks
that no date-context exception occurs.
and fixes the following developer-tooling bug:
Launchpad waits for release bundles and keeps validated snaps. Thanks to xet7.
Launchpad snap jobs used to start alongside the extra-architecture bundle jobs,
so s390x and ppc64el repeatedly downloaded release assets that did not exist
yet. They now wait for those jobs and verify the exact architecture-specific
asset before starting a remote build. A missing optional bundle is skipped with
its real cause instead of spending hours retrying a permanent 404.
A Snapcraft SSL error during cleanup also used to discard an armhf snap that
had already downloaded successfully. The workflow now keeps an artifact only
after checking its minimum size and squashfs magic, regardless of the later
cleanup status. Release-workflow tests cover the dependency, bundle-name
mapping, missing-asset path, step gates, successful cleanup-failure path and
invalid-artifact rejection.
Thanks to above GitHub users for their contributions and translators for their translations.
v11.03
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | cefef799be4d3abd… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | d6fc40d8657dc989… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
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.
v11.03 2026-08-19 WeKan ® release
In short: accessibility gives shared tabs, dialogs, images, password
controls and card edit targets coherent names and keyboard order throughout
WeKan, with one common keyboard utility keeping those behaviors consistent.
Card details restore checkbox custom fields, keep their saved values
separate from field visibility, save currency values, provide independent
opened-card and minicard visibility settings, make every custom-field value
copyable, use compact accessible pencil icons for Edit actions, restore the
grid/one-per-row layout switch, restore cross-board card links, omit deleted
custom fields from exports, and make attachment previews use the available
viewport. JFIF image uploads receive portable JPEG download names. Linked cards
mirror every visible source field across boards and
authorized members can edit that shared content from either board. Card
locations recognize both map URLs and plain coordinate pairs. Positive,
negative and browser regression coverage keeps each interaction working.
Existing boards also receive the new default-on opened-card custom-fields
setting during schema upgrade. Opened cards can be resized wider as well as
narrower on desktop. All Boards keeps the complete
invitation message and its actions visible on phone-sized layouts.
Developer tooling keeps long-running Rspack development watchers from
retaining cache state until they exhaust the JavaScript heap, and lets Flatpak
terminals run the Firefox/WebKit matrix through host Docker. Dependencies
refresh S3 storage, build analysis, keyboard shortcuts, CSV parsing and browser
automation.
Admin Panel / Problems / Offices groups login addresses by person and shows
each address family, available location, per-person login count and available
initials instead of empty avatar circles.
Admin Panel / People / People summarizes each person's login countries and
opens country-by-country city, IPv4, IPv6 and login-time details. Problems
pagination no longer mixes a specialized pane's state with the shared reports.
The complete browser run restores inline title and date editing, popup focus,
loading-state accessibility and phone board scrolling while bringing its
selectors in step with the current UI.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release fixes the following bugs:
The Admin Panel - reports about people and where they log in from.
Offices groups login addresses by person with locations and counts. Thanks to xet7.
The Offices report was inverted: each row represented an address and placed all
people using it inside one cell. It now pages people and keeps every address for
one person together. Each row has separate IPv4 and IPv6 columns, the latest
country flag and city supplied by Cloudflare or another supported proxy, and
that person's successful-login count and first/last times for that address.
Location is recorded when a login succeeds; existing address tallies are not
retroactively geolocated. With Cloudflare, the proxied hostname must enable the
Add visitor location headers Managed Transform so CF-IPCountry, CF-IPCity,
CF-Region, CF-IPLatitude and CF-IPLongitude reach WeKan. Caddy passes
these request headers through by default; any header_up override belongs
inside its reverse_proxy block.
People sharing one address remain separate groups with separate counts. Search
still matches names, addresses and locations, while location metadata for a
page is fetched in one batch. Positive and negative coverage checks both IP
families, shared addresses, supported location headers and absent geography.
Offices shows available initials instead of empty avatar circles. Thanks to xet7.
The server already computed initials for every person, but person grouping
dropped that field and the shared table tried to find the user again in the
client cache. When the full user document was not published there, the fallback
had no letters to draw and rendered an empty grey circle.
Initials now travel with the person through the response, grouped rows and
shared table cell. The existing avatar template uses them directly and retains
its reactive user lookup as the fallback everywhere else. Regression coverage
checks both the Offices path and the generic table conversion.
People shows country login counters with city and address details. Thanks to xet7.
A Location column immediately before Status now shows each person's country
flags and successful-login counts. Selecting a counter opens that person's
location report: countries are the left menu, busiest first, and the selected
country's shared Table.md table lists city, IPv4, IPv6 and the person's first
and last login times for every address.
The detail view has the shared search, pagination and Back controls. Location
data is fetched once per People page and restricted through the same site-admin
or tenant-admin scope as the People list. Unknown locations are not guessed,
stale page responses are discarded, and new logins retain the available proxy
location on the person's own address tally.
Positive and negative coverage checks country totals and ordering, both IP
families, city rows, timestamps, menu and table wiring, authorization limits
and absent geography.
Problems pagination keeps each pane's state separate. Thanks to xet7.
Pagination events from specialized Problems panes bubbled into the containing
shared report handler. Their pane ids intentionally have no shared report
configuration, so clicking Next could try to read a count from undefined and
stop the requested action with a browser exception.
Event-stream and Offices controls now keep their events inside their own pane.
The shared Previous, Next and search handlers also safely ignore missing or
transitional report state. Regression coverage exercises both specialized
pagers and the defensive shared-handler path.
Card details - fields, attachments and links on an opened card.
Existing boards keep default-on opened-card custom fields. Thanks to xet7.
The board schema made opened-card custom fields visible by default, but the
schema-upgrade list omitted that new flag. Boards created before the setting
therefore retained no stored default when their other default-on feature flags
were repaired. The upgrade now backfills allowsCustomFields: true while still
preserving an administrator's explicit false choice.
The com...
v11.02
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | cefef799be4d3abd… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | d6fc40d8657dc989… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.54.0 | verified | 82e6a8e078b366ec… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 14da6f60445fcce2… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 82e6a8e078b366ec… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.54.0 | verified | e80b2672d833d38d… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | cac5e99177cb9c98… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 6a12e289a83c32d4… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.54.0 | verified | 1cdde969f9d888b9… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 748372f58a70a3d0… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.54.0 | verified | bb6028ef6fc61f86… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 37e005e17eb1c3c7… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | 870c892e7bcab272… |
| 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.
v11.02 2026-08-18 WeKan ® release
In short: nothing here yet. This paragraph is the first thing a reader sees,
so replace it as entries are added: say what the release amounts to, which areas
changed and what changed about them, with the notable names in bold, and
account for the rest in a closing clause. The table below is carried over from
the release under this one, and is refilled from each build's provenance.tsv
when this release is made.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
v11.01
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | cefef799be4d3abd… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.54.0 | verified | d6fc40d8657dc989… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
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.
v11.01 2026-08-18 WeKan ® release
In short: Admin Panel / Problems gains the missing Delete settings pane,
where a Global Admin can enable the existing, default-off permanent-delete gate.
The pane sits above Notifications, has a stable address of its own, and explains
that enabling the gate does not delete content by itself. Its checkbox also stays
checked after saving because the reactive settings publication returns the stored
value. Below that: regression coverage keeps the menu order, pane rendering, URL,
setting handler and publication together, with the corresponding Admin Panel
documentation and English source strings. The newest All Boards and
permanent-delete controls are also translated into 69 languages and regional
variants.
Permanent-delete setting changes and
board-purge attempts, including unauthorized and failed ones, are audited in
Recovery with Boolean status, acting user, proxy-aware IP address, board IDs
and titles; coloured icons distinguish success, failure and deleted data, and a
dropdown filters the audit to All, Done, Failed or Deleted events. A second
description below the database-recovery explanation names the permanent-delete
events and fields recorded here.
The Delete settings pane repeats that audit explanation below its existing text,
so an administrator sees what Recovery will record before changing the gate.
Board Archive removes permanent delete from individual board icons and
offers it as one confirmed red action on a multi-selection, with the same gate
enforced again on the server without Meteor argument-audit failures. When that
gate is disabled, the sidebar explains
where to enable it instead of showing an inapplicable selection instruction. Its
enabled Delete button and server method both require the site-wide Global Admin
flag. Select All and Select None above the icons make that selection explicit
and quick.
Dragging that archived selection now highlights only Remaining and existing
Workspaces as valid restore targets. Archived tiles no longer show an
action-looking archive glyph at their lower-left corner.
The same themed controls now cover Remaining, Starred, Home and Templates,
always following the visible section and search result. While that mode is on,
its action sidebar now stays visible until Multi-Selection is turned off, and
its actions remain available before the first board is checked. Closing that
sidebar with its X also turns Multi-Selection off. Setting a Home board now
requires exactly one checked board, and the Home section offers only the actions
that make sense for its current board. Dragging a selection onto Home follows
the same one-board rule. Remaining can now drag boards onto
Starred or Archive as green targets. Home's empty state also states its
one-board limit before dragging begins. All Boards and board loading now
publish only dashboard board fields, keep templates separate, omit empty share
branches, paginate in the database and snapshot lazy card windows on FerretDB.
Workspace boards can also be dragged additively to Starred or, after
confirmation, moved to Archive, and existing Workspace views now show Select
All and Select None while Multi-Selection is active.
The CPU governor also observes FerretDB before acting and never slows its read
path when its configured cap is zero or an idle WeKan sees FerretDB itself busy.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release adds the following features:
The Admin Panel - server-wide safety settings.
The Delete settings pane appears above Notifications. Thanks to xet7.
The removed Features page left no place to operate the existing
enablePermanentDelete gate. Problems now has a directly linkable Delete pane
whose checkbox exposes that default-off setting to Global Admins. Turning the
gate on does not delete anything by itself; it only permits an explicit purge.
Menu-order, pane-rendering, URL and setting-handler tests cover the addition.
Recovery audits permanent-delete changes and board purges. Thanks to xet7.
Enabling or disabling Admin Panel → Problems → Delete now goes through a strict
Global Admin server method and records the actual changed state in Recovery with
the actor's username and user ID. Each successfully and permanently removed
archived board records its ID and JSON-quoted title with the same actor. No-op
setting writes, unauthorized calls and failed removals cannot create misleading
success records. Tests pin the ordering of write before audit, stable event
types and every required detail.
Recovery shows every permanent-delete attempt and its outcome. Thanks to xet7.
Unauthorized and failed setting changes or board purges are now audited beside
successful ones, without swallowing the original error. Structured fields keep
Boolean Done/deleted-data state, user ID, username, trusted-proxy-resolved IPv4
or IPv6, and bounded requested board IDs and titles. Done is the report's first
column: success is a green check, failure a red warning, and a successful
physical deletion adds a yellow trashcan. Partial batches show both the boards
already deleted and the failed whole-batch attempt. Tests cover storage,
address classification, negative paths, icon rendering and colours.
Recovery can filter events by outcome. Thanks to xet7.
The shared controls row now offers All, Done, Failed and Deleted filters above
the Recovery table. The server applies the selected outcome together with search
before counting and pagination, so page totals and rows stay consistent. Legacy
events without the newer Boolean field remain under Done. Positive, combined and
negative selector tests cover the filter and its UI wiring.
Recovery explains its permanent-delete audit trail. Thanks to xet7.
A second description below the existing database-recovery explanation now tells
admins that this report also logs permanent-delete setting changes and successful,
failed or unauthorized purge attempts. It names the recorded Done status, user ID,
username, trusted IPv4 or IPv6 address, and attempted board IDs and titles. A UI
wiring test pins both the content and its position below the original paragraph.
Delete settings explain their Recovery audit trail. Thanks to xet7.
The Recovery audit explanation now also appears below the existing text in Admin
Panel → Problems → Delete, so the administrator sees exactly what will be recorded
before enabling or disabling permanent deletion. Delete and Recovery use one
shared sentence t...
v11.00
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | eae1f0a8f73bfc97… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | bdc50caee3ac2849… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 34f5f553dcd2bff3… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 515b1189b4c7d58f… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | cb14ffe93e285903… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | d97dfa9afa60aa05… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.53.0 | verified | 481d36a80ec73673… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 4b43f86eb0f3fa0b… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.53.0 | verified | fe74e03894b84897… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f1186c310a4dd144… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | c6dad7bc8ad56f47… |
| 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.
v11.00 2026-08-17 WeKan ® release
In short: RouteBleed, found by GitHub CodeQL, removes an incompletely
escaped dynamic regular expression from board-export route coverage. All
Boards on phones uses one native page scroller in mobile and desktop UI modes,
so ordinary boards, invitation controls and table rows remain reachable with
the same vertical swipe; the shared layout extends that behavior to every page.
Snap database recovery can read retained MongoDB 4.x, 5.0,
6 and 7 data and merge it into the live FerretDB without opening SQLite twice.
Helm containers size the Node.js heap from their memory limit, and the
official chart supplies enough memory for startup plus native allocations.
Minicard titles save again from their inline editor, and card dates can
be reopened, changed or deleted again after they have been saved. Full-suite repairs
keep the shared date form registered before its events, preserve the one mobile
page scroller in mobile-view mode, and make the standalone E2E browser selection
architecture-safe. Translations reuse 3,838 unambiguous same-language
values, and the new reports are complete in Finnish. Regression coverage
now exercises inline minicard title editing in the browser and guards the
Finnish Office and API report vocabulary directly. Requested By and Assigned
By say Edit when their free-text value already exists and Add when it is empty.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release fixes the following SECURITY ISSUES found by GitHub CodeQL code
scanning:
RouteBleed: route coverage compares exact text instead of an incompletely escaped pattern. Thanks to GitHub CodeQL code scanning and xet7.
RouteBleed - code scanning alert
#434, rule js/incomplete-sanitization (CWE-20, CWE-80 and CWE-116), in
tests/boardExportScope.test.cjs: an export path was interpolated into a
dynamic regular expression after escaping only forward slashes. Backslashes
and every actual regular-expression metacharacter remained active, so the test
could match a different route, fail to match the intended one or fail to
compile.
The code was test-only, read a hardcoded route table and is never shipped in a
WeKan bundle, so there was no runtime or user-input exposure. There is no
denied operation to attribute in Admin Panel → Problems. The fix removes the
pattern rather than adding another sanitizer: the test wants an exact route
literal and now checks that exact string with includes().
Positive and negative cases cover backslashes and the full metacharacter set,
and a repository-wide guard rejects the reported slash-only escape shape in
tracked JavaScript. The same sweep removed a second partial dynamic pattern
from release-bundle coverage.
and fixes the following bugs:
All Boards - scrolling the overview on a phone.
One vertical swipe reaches every board and invitation control. Thanks to mimZD and xet7.
The page had nested vertical overflow panes on #content, its wrapper, the left
menu, the icon grid and the table view. A swipe could be captured by the wrong
pane, and an invited-board tile's Accept and Decline controls made its grid row
taller than the percentage-height chain expected, leaving boards below it
unreachable.
#content is now the one native vertical scroller. The wrapper, both columns,
the board gr...
v10.99
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | eae1f0a8f73bfc97… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | bdc50caee3ac2849… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 34f5f553dcd2bff3… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 515b1189b4c7d58f… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | cb14ffe93e285903… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | d97dfa9afa60aa05… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.53.0 | verified | 481d36a80ec73673… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 4b43f86eb0f3fa0b… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.53.0 | verified | fe74e03894b84897… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f1186c310a4dd144… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | c6dad7bc8ad56f47… |
| 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.99 2026-08-17 WeKan ® release
In short: the unified export dialog can finally be changed, visibly
shows its selection with the Admin Panel's own checkbox, and passes that
selection to every export format. PDF and Excel exports now share one card
document, use the saved user language or browser fallback, keep the opened
card's date format, preserve multilingual text, and name downloads for the
localized board, swimlane, list or card exported. Their shared card layout now
includes locations, stickers, dependencies and sort position; PDF also embeds
JPEG and PNG attachment previews plus Unicode-plane fonts. Admin Panel / Problems keeps
avatars at avatar size, and All Boards keeps its Add Board and Home
placeholder tiles as tall as the boards beside them. Requested By and Assigned
By can select board members while retaining their free-text fields. Below
that: fourteen export fixes, one export-layout consolidation, one people-picker
fix, two shared-checkbox fixes, two UI sizing fixes, restored subtask creation,
and the documentation move into its feature and platform hierarchy with every
local link checked.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release adds the following new feature:
Opened cards - the people responsible for requesting and assigning work.
Requested By and Assigned By can select board members. Thanks to xet7.
Their round + now opens a searchable board-member picker like Members and
Assignee. Selected people appear as avatars, while the Add link stays below
the + and continues to open the existing free-text editor. The two forms are
independent, so a card can retain an external name or note beside its selected
members.
Cards store selected people in requesters and assigners user-ID arrays,
with assign, unassign and toggle operations matching assignees. WeKan JSON and
scoped imports preserve them, whole-board imports remap their user IDs, and
user removal cleans them up. PDF, detailed and table Excel, and CSV resolve the
selected people beside the original text fields. The implementation completes
the existing Requested By / Assigned By design document.
and fixes the following bugs:
Opened cards - the people responsible for requesting and assigning work.
The new people pickers have titles and stay below their buttons. Thanks to xet7.
Requested By and Assigned By opened headerless popups because their generated
title keys did not exist. They now reuse the fields' existing translated names,
so every language gets a title without adding a second English placeholder to
all translation files.
The general popup geometry also chose whichever side of an opener had more
space. That made Assigned By jump above the card while Members and Assignee
happened to open below. All four card-people pickers now anchor directly below
their + button, use the remaining space there, and retain the same member-list
body and styling.
Subtasks - creating their hidden helper-board records.
A new subtask is created even before its helper-board cache refreshes. Thanks to xet7.
Creating the first subtask also creates its hidden helper board and default
swimlane. The server immediately looked for that swimlane through a reactive
cache which could still hold the earlier empty r...
v10.98
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | eae1f0a8f73bfc97… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | bdc50caee3ac2849… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 34f5f553dcd2bff3… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 515b1189b4c7d58f… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | cb14ffe93e285903… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | d97dfa9afa60aa05… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.53.0 | verified | 481d36a80ec73673… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 4b43f86eb0f3fa0b… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.53.0 | verified | fe74e03894b84897… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f1186c310a4dd144… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | c6dad7bc8ad56f47… |
| 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.98 2026-08-16 WeKan ® release
In short: one CRITICAL fix, and the whole of logging in reworked
around it. WeKan's brute-force lockout counted an attacker's failed logins
against the victim's account rather than against the address they came from,
so anyone who knew a username could lock its owner out from every address,
repeatably — and a correct password was refused while the lock held, and
counted as another failure. Usernames are public, so any account was a target
and an administrator was as easy to lock out as anyone else. Reported by daniais
as JamBleed. Two GitHub CodeQL alerts on one line of release tooling go with
it. Around that fix: increasing delays after a wrong password, per source
address rather than per account; a record of who logs in from where, both
directions, which is what the new Problems / Offices pane groups into the
offices an admin recognises — "London", with the flag, rather than
100.100.100.100; and the reason it exists, which is that blocking an ADDRESS
would take a whole office off WeKan at once, so WeKan blocks the account.
Admin Panel / Problems now keeps ONE summary row per problem — a count, a
window, and who tried it how often — instead of a document per event that grew
with the attack it was recording, and gains an API pane answering the
opposite question: not what went wrong, but who called which REST endpoint and
how often. Then: v10.97 shipped a bundle that could not
start, the third release in a row stopped by the same habit. Trimming what a
bundle carries is measured by a graph of what the server can reach, and that
graph read require() only. Meteor compiles an ESM import to module.link(),
so every ESM import in every Meteor package was invisible to it: it called
live code dead, and the bundle shipped without nodemailer-openpgp, which
packages/email.js links on its first tick. The reachable count goes from 211
to 450 with the fix — the measurement was wrong rather than merely optimistic —
and the category it justified is withdrawn: 61.3 MiB becomes 40.0 MiB. What
changes beyond that one fault is the check: a release now has to start the
bundle it built and see it reach its database before it may carry it.
That fix had a cost nobody saw for a day: its package loaded on the CLIENT
too, so require('crypto') reached the browser bundle and every page died
on load with Cannot find module 'stream' — fixed here, and the whole class
is now guarded. CHANGELOG.md is 2.5 MB lighter of history, keeping the
current MONTH while older months and years move to old-CHANGELOG/. And
Build WeKan release bundle is a menu entry now, building what a release
would publish rather than
a plain meteor build — so "does it start at all" no longer takes a release to
answer. Below that: the Sandstorm pack that was throwing its own trim away,
Admin Panel / People showing who is locked again, a location in an admin table
opening a map through the card's own chooser, the Problems route and template
finally called what the menu calls them, and the documentation refiled to match
the menu — including Directory-Structure.md, which had been describing the
tree as it was in 2017.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release fixes the following CRITICAL SECURITY ISSUE of JamBleed:
Logging in - who the brute-force lockout is protecting, and from whom.
v10.97
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | eae1f0a8f73bfc97… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | bdc50caee3ac2849… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 34f5f553dcd2bff3… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 515b1189b4c7d58f… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | cb14ffe93e285903… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | d97dfa9afa60aa05… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.53.0 | verified | 481d36a80ec73673… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 4b43f86eb0f3fa0b… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.53.0 | verified | fe74e03894b84897… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f1186c310a4dd144… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | c6dad7bc8ad56f47… |
| 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.97 2026-08-16 WeKan ® release
In short: v10.96 shipped a bundle that could not start. Trimming what a
bundle carries went one file too far: boot.js reads every source map NAMED in
programs/server/program.json, unconditionally, so removing the maps left 63
dangling names and the server died before opening its port. The names go with
the files now, and the fix was checked by BOOTING a trimmed bundle rather than
by reading the code again. Then the snap, which had been taking itself
offline at every restart: the startup comparison of the two database copies ran
unbounded with nothing on the web port, on an ambiguity that its own reading of
MongoDB kept recreating. Below that: another 61 MiB off every bundle, from
packages no require() can reach, and a guard that keeps all 246 translations
loading one at a time.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release fixes the following bugs:
Bundles and images - what a build carries, and what it no longer does.
Dropping a source map must un-name it too, or the server will not boot. Thanks to xet7.
The entry above removed the source maps from every platform. A released image
then crash-looped:
Error: ENOENT: no such file or directory,
open '/build/programs/server/packages/ecmascript.js.map'
at /build/programs/server/boot.js:101:29
"Nothing on any loading path reads a .map" was true of the client and false
of the server. boot.js reads every map NAMED in
programs/server/program.json, at boot, unconditionally:
serverJson.load.forEach(function (fileInfo) {
if (fileInfo.sourceMap) {
var rawSourceMap = fs.readFileSync(
path.resolve(serverDir, fileInfo.sourceMap), 'utf8');
63 of the 102 load entries name one — 60 MiB — so deleting the files left 63
dangling names and the server died before it opened its port.
The names now go with the files: the same pass deletes sourceMap and
sourceMapRoot from every load entry. The client was never affected and still
is not — its program.json names no maps at all (678 manifest entries, zero
sourceMap fields) and webapp reads only program.json itself at startup.
Verified by BOOTING a trimmed bundle rather than by reading the code again: with
uWebSockets.js, the legacy client and all 4766 maps removed, node main.js
loads the whole server and reaches AccountsServer.init, failing only on the
deliberately unreachable MONGO_URL it was given. That is the check that was
missing the first time, and tests/bundleTrim.test.cjs now pins the invariant
boot.js actually requires — every map the manifest names exists on disk — for
both settings of --keep-maps.
The snap's two copies of the database - after a migration both stay on disk,
and starting is where that gets decided.
Reading MongoDB to compare the copies must not look like writing to it. Thanks to xet7.
An instance serving FerretDB printed this at every restart:
WeKan: BOTH databases have been written to since the migration.
MongoDB last written 2026-08-16 01:41 (WiredTiger.wt)
FerretDB last written 2026-08-16 01:38
Nothing had opened that MongoDB in a month. The giveaway is in the report
itself: the MongoDB timestamp is the minute the snap started, three minutes
AFTER the FerretDB it is being compared against.
bin/ferretdb-migration-stale decides *MongoDB has been writt...
v10.96
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | eae1f0a8f73bfc97… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | bdc50caee3ac2849… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 34f5f553dcd2bff3… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 515b1189b4c7d58f… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | cb14ffe93e285903… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | d97dfa9afa60aa05… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.53.0 | verified | 481d36a80ec73673… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 4b43f86eb0f3fa0b… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.53.0 | verified | fe74e03894b84897… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f1186c310a4dd144… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | c6dad7bc8ad56f47… |
| 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.96 2026-08-16 WeKan ® release
In short: one CRITICAL fix. With registration turned OFF in the Admin
Panel, POST /users/register created accounts anyway — for anybody who asked,
on an instance whose administrator had decided nobody else may join. The guard
that was supposed to stop it read a Meteor option WeKan never sets, so it was
always false and the endpoint had never refused anyone. It was found while
reviewing a pull request about the opposite symptom. Then the release
workflow: pressing Cancel did not stop a run, so docker went on building
an image for a release being abandoned, and the Sandstorm .spk gets under
its 1 GiB limit at last, now that its size report says what filled the gigabyte.
What that measurement found ended up changing every platform, not just
Sandstorm: uws is not reliable enough yet, so every default is now
sockjs, and no bundle carries uWebSockets.js (121M), the legacy client
(81M) or source maps (152M) — around 354M a bundle, none of it on any
loading path. Below that: two AWS SDK updates for the S3 attachment path.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release fixes the following CRITICAL SECURITY ISSUE of SignupBleed:
Account creation - who may make an account, and who decides.
SignupBleed: registration disabled, and the REST API created accounts anyway. Thanks to AhmedLukman and xet7.
Turning Registration off in the Admin Panel closes the sign-up form. It did
not close POST /users/register, which went on creating accounts and handing
back login tokens to anyone who asked. A closed instance was open.
The endpoint did have a guard. It asked
Accounts._options.forbidClientAccountCreation — and nothing in WeKan ever
sets that:
- the only
Accounts.config()call, inserver/accounts-common.js, sets
loginExpirationInDaysand nothing else; forbidClientAccountCreation: disableRegistrationinconfig/accounts.jsis
passed toAccountsTemplates.configure(), which is the useraccounts package's
own options object, not Meteor'sAccounts;- and that
disableRegistrationis only assigned inside an async
Meteor.call('isDisableRegistration', …)callback that fires AFTER
configure()has already run — something the file's own comment records, for
a different reason, a few lines above.
Three near-misses, and the condition was always falsy. The guard read as though
it worked, which is why it lasted: the name says exactly what it ought to do.
It reads the setting from where the setting lives now - the same
getCurrentSetting().disableRegistration === true that the
isDisableRegistration Meteor method behind the sign-up form uses, so the form
and the API can no longer disagree about whether the door is open. An instance
with no Settings document yet still allows registration rather than locking
itself out.
Every call that reaches the refusal is recorded and shows in Admin Panel /
Problems under authz.register. That is safe to log without drowning the page
precisely because there is no legitimate caller: the administrator has turned
registration off.
How it was found. #6598 by
AhmedLukman changed this guard to read WeKan's setting, filed against
#4774 — a 403 Forbidden from
this endpoint that nobody had been able to reproduce, and which this...
v10.95
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.
| Bundle | Binary | From | Version | Checked | SHA256 |
|---|---|---|---|---|---|
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | eae1f0a8f73bfc97… |
| amd64 | Node.js | nodejs.org | v24.19.0 | verified | 14b342e71204f811… |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | bdc50caee3ac2849… |
| arm64 | Node.js | nodejs.org | v24.19.0 | verified | 01443c1e1a29e531… |
| armhf | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armhf | Node.js | wekan/node-patches | v24.19.0 | verified | b55350f3071b765a… |
| armv6 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 34f5f553dcd2bff3… |
| armv6 | Node.js | wekan/node-patches | v24.19.0 | verified | 128ded0cda638c1f… |
| armv7 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f7f050207e656d65… |
| armv7 | Node.js | wekan/node-patches | v24.19.0 | verified | 8dbe0a9aa8550ad5… |
| i386 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 515b1189b4c7d58f… |
| i386 | Node.js | wekan/node-patches | v24.19.0 | verified | 3b0b3bbfe27daf58… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | cb14ffe93e285903… |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 3f1cf157479c1480… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | d97dfa9afa60aa05… |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | verified | d35e95230f46f6f0… |
| ppc64le | FerretDB | wekan/FerretDB | v1.53.0 | verified | 481d36a80ec73673… |
| ppc64le | Node.js | nodejs.org | v24.19.0 | verified | c510c6ce12f07010… |
| riscv64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | 4b43f86eb0f3fa0b… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.19.0 | verified | cd1f14af28121480… |
| s390x | FerretDB | wekan/FerretDB | v1.53.0 | verified | fe74e03894b84897… |
| s390x | Node.js | nodejs.org | v24.19.0 | verified | a4792e65962ffa0a… |
| win-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | f1186c310a4dd144… |
| win-arm64 | Node.js | nodejs.org | v24.19.0 | verified | 8502f4a50b458d4c… |
| win64 | FerretDB | wekan/FerretDB | v1.53.0 | verified | c6dad7bc8ad56f47… |
| 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.95 2026-08-16 WeKan ® release
In short: the Sandstorm .spk still will not pack - Sandstorm refuses an
app over 1 GiB uncompressed - and v10.94 was supposed to say what filled it.
It said nothing, because the size report ran BEFORE meteor-spk pack, and pack
is what builds the trees it was trying to measure. The sizes are taken after
pack now, on failure and on success, dereferencing the symlink that hid most of
them; and the bundle is pruned of its build-only toolchain and packed once more
before the job gives up, which is the same pruning every other bundle already
gets and the one reduction available without guessing.
| Platform | Binary | From | Version | SHA256 |
|---|---|---|---|---|
| amd64 | Node.js | nodejs.org | v24.19.0 | 14b342e71204f811bde6153be8e04b62aef63c236fef92b55f9c83154b409647 |
| amd64 | FerretDB | wekan/FerretDB | v1.53.0 | eae1f0a8f73bfc979738bfff7284d40fd1bc55de2cc56514721fc155c3624f7d |
| arm64 | Node.js | nodejs.org | v24.19.0 | 01443c1e1a29e531ccad5a46fefa6df490d2189c49f7955904aecdbb0fe86fdc |
| arm64 | FerretDB | wekan/FerretDB | v1.53.0 | bdc50caee3ac28495b42d2130b94a042a9dd6d3a38f732cac02b648f36c891da |
| mac-arm64 | Node.js | nodejs.org | v24.19.0 | 3f1cf157479c1480352083105e13faf9d008ede98e7e157746b6df940d197b94 |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.53.0 | cb14ffe93e285903e5a8a9c1821687ddb5b8a979a11c584bf4af534b272c6d3e |
| mac-x64 | Node.js | nodejs.org | v24.19.0 | d35e95230f46f6f0751df497c56622c6735e05d5e1fb1630996a005b9d328fe4 |
| mac-x64 | FerretDB | wekan/FerretDB | v1.53.0 | d97dfa9afa60aa05f25384327de82efe7b71d958ed24c1f66618284294a65cd3 |
This release fixes the following build failures:
The release workflow - the bundles a release is supposed to carry.
The Sandstorm .spk fails on a size limit, and now says what filled it. Thanks to xet7.
build-sandstorm fails with App exceeds uncompressed size limit of 1 GiB and
nothing else. Because Sandstorm refuses to pack, no .spk is written, so there
is no artifact to open and no list of what filled it.
The first attempt at that added a size report before meteor-spk pack, and
the next run showed it printing nothing at all:
--- packing (Sandstorm refuses over 1 GiB uncompressed)
Building Meteor app...
meteor-spk pack is what BUILDS the Meteor app - Building Meteor app... comes
after it starts - so .meteor-spk/deps and .meteor-spk/bundle do not exist
until it has run. The report was measuring two directories that were not there,
found neither, and skipped both silently. A diagnostic that runs before the
thing it diagnoses says nothing at all.
The sizes are taken AFTER pack now: on failure, where they are the whole point,
and on success, where the headroom against 1 GiB is worth knowing before the
next thing is added. du -shL DEREFERENCES, because deps is a symlink to the
tree sandstorm-src/build-deps.sh assembles and a plain du -sh on a symlink
reports the link rather than the gigabyte behind it. The bundle's server
packages are listed separately, because they are the part every other bundle
prunes.
And one bounded RETRY, which is an attempt at the fix rather than more looking.
meteor-spk pack runs npm install inside the bundle's programs/server -
that is where tar@6.2.1 and node-gyp's tree come from in the log - and the
Sandstorm leg is the only one that never removes them afterwards.
prune-build-only-modules.mjs drops 83 of 120 packages everywhere else, and
nothing in a packed app runs any of them. Whether it is enough turns on
something no log has answered yet: does a second pack REUSE
.meteor-spk/bundle, or rebuild it and undo the prune? Both answers are useful
and neither is worse than the hard failure that is there now - if it rebuilds,
the second failure is identical and the log says the prune was undone; if it
reuses, the .spk packs. It runs once, only after a failure, and only if the
bundle is actually there.
Thanks to above GitHub users for their contributions and translators for their translations.