Wekan
Open source kanban board application built with Meteor
Alternative to: trello
v11.01
2026-08-17Binaries 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 to prevent their descriptions from diverging. Tests pin its placement after the current Delete guidance and its reuse in both panes.
Board Archive - restoring or permanently removing archived boards.
Permanent delete acts on selected archived boards. Thanks to xet7.
Board icons no longer carry a trashcan that can permanently delete one board by accident. With Multi-Selection active, a Global Admin who enabled Admin Panel → Problems → Delete sees one red Delete button in the Archive’s right sidebar. It shows the existing irreversible board-and-content warning before sending the whole selection to one server method.
The server trusts none of those display conditions: it independently requires a Global Admin, the enabled feature flag, a bounded string-id selection and only archived boards. It validates every selected board before deleting the first, so an invalid or live-board id cannot leave a half-applied batch. Positive and negative tests cover the missing per-board control, both UI gates, confirmation, successful reset, retained selection on failure and every server-side gate.
The disabled Delete gate explains how to enable it. Thanks to xet7.
When permanent delete is disabled, Archive’s Multi-Selection sidebar no longer shows “Click checkboxes to select boards” without an action beneath it. It instead explains that enabling Admin Panel → Problems → Delete makes the Delete button visible. When enabled for a Global Admin, the normal selection instruction and red Delete action return together. Positive and negative tests pin both branches, and the new ordered translation key is available in every language file without replacing human translations.
Only a Global Admin sees and can use Delete. Thanks to xet7.
The Archive Delete action now requires the site-wide Users.isAdmin flag to be
exactly true in both its sidebar helper and server method. A board-admin role,
a missing flag or a truthy non-Boolean value can neither expose the button nor
authorize a forged method call. The permanent-delete setting and archived-only
validation remain additional required gates, with regression coverage for the
strict client and server checks.
Select All and Select None control the visible archived boards. Thanks to xet7.
When Multi-Selection is active in Board Archive, two buttons now sit in the right page between its heading and board icons. Select All checks every icon in the exact Archive list currently rendered after searching; it does not silently select boards outside that visible result. Select None clears the shared board selection. Tests pin their Archive-only visibility, placement, translated names, compact layout and both selection operations.
Select None uses the same theme colour as Select All. Thanks to xet7.
Both Archive multi-selection controls now use the primary themed button style. The regression test requires the same class on both buttons, so one cannot fall back to the browser’s unthemed grey while the other follows the site theme.
Archived selections target only Remaining and existing Workspaces. Thanks to xet7.
While Multi-Selection is active in Archive, only Remaining and existing Workspace rows receive the green valid-target highlight. Home, Archive, sharing targets and the other board sections refuse the drag before accepting an HTML5 drop. A Workspace drop restores every archived board and assigns it there; regression tests cover the allowed targets, rejected targets and green styling.
Archived tiles have no lower-left archive glyph. Thanks to xet7.
The archive glyph inside the “Archived at” metadata inherited broad board-tile hover styling, which moved it to the lower-left corner and made it look like a per-board action. Both tile variants now keep the useful archived date as plain text without that icon. Permanent deletion remains exclusively in the right sidebar, with regression coverage for the absent glyph and retained date.
All Boards - its named sections and their shared multi-selection controls.
Every named section can select all or none of its visible boards. Thanks to xet7.
Remaining, Starred, Home, Templates and Archive now show the same themed Select All and Select None buttons above their board icons while Multi-Selection is on. Select All reads the exact section/search result used to render those icons, so it cannot silently include a hidden board; Select None clears the shared board selection. Home deliberately keeps Multi-Selection too: Select All simply checks its one visible Home board when present. Tests cover all five sections, both entry points, both operations, placement and matching theme classes.
Existing Workspaces show Select All and Select None. Thanks to xet7.
An existing Workspace now shows the same themed Select All and Select None
buttons as Remaining, Starred, Home, Templates and Archive whenever
Multi-Selection is active. Select All uses the exact Workspace/search result
currently rendered by boardsForView, so hidden boards are not selected;
Select None clears the shared selection. Positive tests cover visibility,
rendered-board scope and clearing.
The Multi-Selection sidebar stays visible while selection is on. Thanks to xet7.
Close, toggle, Escape, Search and Home actions can no longer hide or replace the pane that operates selected boards. Every sidebar state change resolves back to the visible Multi-Selection view until the mode is turned off; its off controls then unlock and close the pane in that order. Positive and negative tests cover both sides of the transition.
The sidebar X turns Multi-Selection off and closes it. Thanks to xet7.
The right-sidebar X previously called the guarded close operation while Multi-Selection was active, so the guard immediately kept the sidebar open. The X now disables selection mode first and then closes the unlocked sidebar, matching the explicit Multi-Selection Off action in one click. Other sidebar views retain their ordinary close behavior, and regression coverage pins the required operation order.
Selection actions remain visible before a board is checked. Thanks to xet7.
The instruction, every action applicable to the current section and the way to turn Multi-Selection off are now always present in the right sidebar. An action clicked with no checked boards reports “You did not select any boards” and stops before opening a confirmation or calling the server. One shared guard and regression tests cover star, Home, archive, duplicate and permanent delete.
Set as Home board accepts exactly one selected board. Thanks to xet7.
The action no longer silently chooses the first board from a larger selection.
Only one selected id reaches toggleDefaultBoard, matching the fact that login
can open only one Home board. Regression tests cover the accepted single-board
selection and both rejected selection counts.
An empty Home action asks for exactly one board. Thanks to xet7.
Set and Unset as Home board now use the same “Please select only one board” message for both invalid counts: zero and several selected boards. The other bulk actions retain their separate empty-selection warning. The Home action still stops before calling the server unless exactly one board is checked.
Home rejects a drag containing multiple boards. Thanks to xet7.
Dropping several selected boards onto Home now reports “Please select only one board” instead of silently making the first one Home. The rejected drop changes nothing and keeps Multi-Selection intact so the user can narrow it. A one-board drag continues to set Home normally, with regression coverage for both paths.
Remaining boards can be dragged to Starred and Archive. Thanks to xet7.
Dragging one or several boards from Remaining now highlights Starred and Archive in green alongside its existing valid targets. A Starred drop adds only missing stars, so every board stays in Remaining and an already-starred board is not accidentally unstarred. An Archive drop keeps the existing confirmation and moves the whole drag into Archive. Tests cover the source marker, target hints, additive starring and confirmed archive path.
Workspace boards can be dragged to Starred and Archive. Thanks to xet7.
Dragging one or several boards from an existing Workspace now highlights Starred and Archive as green valid targets. A Starred drop adds only missing stars, leaves every board assigned to its current Workspace and makes it appear in Starred too. An Archive drop asks for confirmation and then archives every dragged board, removing it from the Workspace. Regression tests cover the source marker, both hints, additive stars, retained assignments, confirmation and batch archive calls.
The empty Home asks for only one dragged board. Thanks to xet7.
The empty-state instruction now reads “Drag only one board here to open it after login”, making Home’s one-board limit visible before a drag starts. The existing translation key remains in place, and the Home regression suite pins the exact English wording.
The Home section offers Unset without Archive or Duplicate. Thanks to xet7.
The Home section’s Multi-Selection sidebar now calls its toggle “Unset as Home board”, matching what clicking its current Home board does. Move Board to Archive and Duplicate Board are hidden in that section while remaining available for the other live-board sections. A regression test pins both the Home-specific label and the absent actions.
and fixes the following bugs:
The Admin Panel - server-wide safety and performance settings.
The permanent-delete checkbox stays checked after saving. Thanks to xet7.
The server accepted and stored enablePermanentDelete, but the settings
publication omitted the field. The next reactive render therefore read
undefined and immediately replaced the optimistic checkmark with an unchecked
box. The publication now returns the stored value, with a negative regression
test that ties the checkbox helper, update handler and published field together.
The CPU governor observes FerretDB before slowing it. Thanks to xet7.
A high host-CPU event used to apply the first FerretDB delay before its status response could say which process was busy, and a maximum delay of zero still applied that first delay. The first request is now status-only. A zero cap is a clean monitoring-only setting, and an idle WeKan does not escalate delays while FerretDB’s own process CPU is above its threshold. The existing backoff, recovery logging and labelled WeKan-operation mitigation remain in place.
All Boards - loading and filtering the overview.
The global publication sends board summaries without cards or lists. Thanks to xet7.
The overview previously opened composite child cursors for every board, making its first paint wait for lists and cards it does not render. It now publishes a projected set of board documents only. Template-container boards have their own projected subscription, active in Templates and cross-category search, so the dashboard retains the appearance, access, ordering and sharing data it uses without turning into a second board view.
Empty share lists no longer add non-selective visibility branches. Thanks to xet7.
The shared board-visibility selector used to emit organization, team and domain
branches even when the caller had no ids for them. Those empty branches could
not match, but still complicated every dashboard query. They are now omitted;
non-empty branches retain the same-element $elemMatch and isActive: true
requirements, with negative coverage against revoked-share access.
Pagination runs in the database. Thanks to xet7.
The page method no longer fetches every visible board, filters and sorts the
array in Node.js, and slices only at the end. Section, workspace and search
conditions are encoded before a database count and a title/id-sorted query with
skip and limit. Cross-category search subscribes to template summaries too,
so moving the work into the database does not hide template results.
Board Archive - permanent deletion from a multi-selection.
Permanent deletion checks its argument before asynchronous work. Thanks to xet7.
The bulk-delete method looked up its caller before handing boardIds to
Meteor’s check(). With audit-argument-checks enabled, that asynchronous
boundary made Meteor report “Did not check() all arguments” and reject the
operation even though validation appeared later in the method. Validation now
runs before the first await; malformed attempts still resolve their actor in
the failure path and are written to Recovery without masking the original
error. Positive ordering and audit-path tests cover the regression.
Board views - lazy loading of a board’s cards.
FerretDB card windows use bounded snapshots. Thanks to xet7.
The lazy window publication previously returned a limited live card cursor. FerretDB’s polling observer could repeatedly scan and diff that moving window, including while a board was otherwise idle. On FerretDB the bounded card batch is now fetched once and published as a snapshot; MongoDB keeps its live cursor, and the other child publications remain reactive on both databases.
and improves translations:
Recent board controls are translated into ten major languages. Thanks to xet7.
Seven new All Boards and permanent-delete strings are translated directly into Arabic, Chinese, Finnish, French, German, Italian, Japanese, Brazilian Portuguese, Russian and Spanish. They cover the permanent-delete setting and disabled hint, empty and one-board selection errors, unsetting Home, and Select None. The guarded fill writes only English placeholders, so it preserved each language’s existing human translation of the Home-board drag instruction.
Recent board translations expand to 69 locales. Thanks to xet7.
The same seven All Boards and permanent-delete strings now cover 69 locale files. The expansion adds Czech, Danish, Dutch, Greek, Hebrew, Hindi, Indonesian, Korean, Norwegian, Polish, Swedish, Turkish, Ukrainian and Vietnamese, plus the appropriate Arabic, Chinese, European, Japanese, Portuguese, Russian and other regional variants of the completed languages. Existing non-English values remain untouched. A regression test checks every string in every covered locale and distinguishes permanent deletion from ordinary archiving.
Thanks to above GitHub users for their contributions and translators for their translations.