This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+2 more
Summary
AI summaryBroad release touches report, https://github.com/wekan/wekan/commit/50dd05ceee9aa954bb09c239ed057334de63015a, https://github.com/wekan/wekan/commit/061eba8b7aa4c96e356c46c0e47fb22b1b773f8d, and https://github.com/wekan/wekan/commit/687a4af8617c0b06f98e20b283b0a2fd329a76a3.
Full changelog
v10.00 2026-07-18 WeKan ® release
This release adds the following updates:
- Updated Sandstorm Backup docs. Thanks to robertdahlem and xet7.
and adds the following features:
-
WeKan has been translated to 154 languages. Thanks to xet7. Every language file in
imports/i18n/data/is now filled in (previously most were largely English). Each language matches its own
existing terminology as a glossary plus standard Kanban terms; product/brand names, acronyms, placeholders and
markup are preserved; regional variants were seeded from their base language; and a few wrong ones were corrected
(Wu Chinesewuu-Hanswas registered; thewa-RRfile is Waray/war, not a Walloon variant, so it was
re-translated; Wolof/Malay display names were fixed) so that all languages are browser-detectable and visible in
the Change Language popup.releases/translations/push-all-translations.shforce-pushes every language to
Transifex. Commits:- Finnish: translate newest UI strings (theme, font, size, colors, Sandstorm)
- i18n: translate new admin/import-export strings to Finnish
- releases: add translations-push-all-translations.sh (force-push all languages)
- i18n: translate untranslated strings (wave 1: zh-TW, pt-BR, da, he, sv)
- i18n: translate untranslated strings (wave 2: 15 major languages)
- i18n: seed 32 regional variants from their translated base languages
- i18n: seed close-relative lects as baselines (cmn, wuu, yue, ja-Hira, vls, ary)
- i18n: register generic Chinese (zh) so it is selectable and browser-detectable
- i18n: translate untranslated strings (wave 4: 15 languages + 9 variants)
- i18n: translate untranslated strings (wave 5: 15 languages + 5 variants)
- i18n: translate untranslated strings (wave 6: 15 languages + 2 variants)
- i18n: translate untranslated strings (wave 7, final: 14 languages + 5 variants)
- WeKan has been translated to 154 languages
- i18n: register wuu-Hans, fix Wolof/Malay names, add wuu browser alias
- Changelog: WeKan translated to 154 languages, with commit links
- Moved translation script to correct directory. Thanks to xet7
- i18n: fix wa-RR — translate as Waray (war), not Walloon
- Changelog: add Part 12 (Waray wa-RR fix) to the 154-languages entry
- releases: fix push-all-translations.sh cd depth for its translations/ location
-
Member menu / Change Color — global theme override, visible swatches, applies everywhere, no Save button
(#5778,docs/Theme/Theme.md). The member menu gets a Change
Color entry that works like Board Settings / Change Color but is a per-user global override saved to your
profile, so the chosen theme applies to the whole UI — All Boards, Search, Admin Panel, My Cards, Due Cards
and board pages — via aboard-color-<name>class on<body>/header (while you are on a board, that board's own
color still wins). This makes a dark theme everywhere possible. Done differently from the first cut: the
picker was initially built as two-level dropdowns (category then theme); that was replaced by visible color
swatches grouped by category (Flat / Clear / Dark / Special, category name above each group), and the Save
button was removed — clicking a swatch applies immediately. Flat themes allow 1 custom color and
clear themes 2 (a gradient) via the native color wheel; dark/special are fixed. Custom colors are
validated server-side as#rrggbband applied as CSS variables (--theme-accent/--theme-accent-2). Category
titles are left-aligned and the popup has a title. Thanks to xet7. Commits:- Member Menu / Change Color: global per-user theme override (#5778)
- Select Color: theme categories core + design doc (docs/Theme/Theme.md)
- Select Color: two-level dropdown picker + custom colors (#5778)
- Select Color: global override applies everywhere + visible grouped swatches (#5778)
- Change Color popup: immediate apply (no Save), left-aligned titles, title, spacing
- Change Color popup: remove the "Preview" text from the custom-color preview swatch
-
Member Settings / Font — pick an installed UI font, size and text colors
(part of #4759). A new Font member-menu entry lets you choose a
UI font that already exists in your browser (canvas-detected; names are plain text, never HTML/markdown,
validated server-side against a curated whitelist — only a known font name and a preset percentage ever reach the
DOM), a font size, and custom text and text-background colors (each unsettable). Done differently
from the first cut: the font and size were first built as dropdowns; that was replaced by buttons — one
font-name button per detected font, each rendered in its own font, and a row of size buttons (smaller …
100% in the middle … larger) — that apply immediately on click (no Save). A preview pangram shows below
the font buttons, the Unset links are styled as buttons, and the popup has a title. Stored asprofile.uiFont
/profile.uiFontSize/profile.uiTextColor/profile.uiTextBgColor. (Only the font part of #4759, so the
issue stays open.) Thanks to xet7. Commits:- Member Settings / Font: pick an installed font + preset size (#4759)
- Member Settings / Font / Color: custom text + background color (#4759)
- Fix #4759 regression: uiTextColor/uiTextBgColor custom() rejected every user insert
- Member Settings / Font popup: add a title (changeFontPopup-title)
- Member Settings / Font: font-name + size buttons, immediate apply (no dropdowns)
- Member Settings / Font: show the preview pangram below the font-name buttons
- Font popup: style the "Unset" colour reset links as buttons
-
Soft delete + Undo/Redo + change-History — deleting is reversible, and moves can be undone
(#1023, #6478,
docs/Features/Undo/Undo.md). Deleting a list no longer destroys it: the list and its cards are marked
deleted (deletedAt/deletedBy/deleteBatchId), hidden from the board, and restorable vialists.restore
orCtrl+Z— the first slice of a general "no permanent delete in ordinary use" principle (physical deletion
limited to GDPR/account erasure and an explicit Global-Admin purge behind an off-by-default Admin Panel /
Features / Delete flag). Card/list/swimlane moves are now undoable/redoable withCtrl+Z/Ctrl+Y(the
userPositionHistorycollection was silently not recording — its guard checked an un-imported global — and had
no redo or key bindings; all fixed, selection logic unit-tested). Design unifies this into one universal
change-History with scoped views. Activities were confirmed to already load progressively. Thanks to xet7.
Commits:- Soft delete for lists: delete = mark, restorable + undoable (#1023)
- Undo docs: soft-delete design (delete = mark, never destroy)
- #6478: undo/redo for card/list/swimlane moves + confirm high-impact list move on touch
- Docs: design for per-group card History (view + restore)
- Docs: undo/redo + high-impact confirmation feature doc
- Docs: unify undo/redo into one universal change-History (every change) with many scoped views
- Activities already load progressively (infinite scroll), like visible cards
-
Home board — set a board that opens automatically after login
(#2220). A per-user default "home" board (profile.defaultBoardId)
opens automatically after login on all deployments (a once-per-session router redirect), and on Sandstorm a
grain with exactly one board again opens straight into it (without saving anything; a saved Home board wins, a
many-board grain with no choice shows All Boards). You set the Home board from the All Boards page via
Multi-Selection: turn Multi-Selection on, select a board, and click the home action in the new
"Selected:" row (which also has a star action); the Home board then shows a home badge and sits at the
top of Starred. Done differently: the earlier per-board-tile home toggle was hidden, but setting a Home
board was brought back through the Multi-Selection "Selected:" action — so the feature is available, not
disabled, and not Sandstorm-only — and the initial Sandstorm "save the single-board choice" was changed to
no-save. Thanks to xet7. Commits:- Feature #2220: mark a board to open automatically after login (home board)
- Sandstorm: auto-open a single-board grain (no save) (#2220)
- All Boards: hide Home-board icons and disable setting a Home board (#2220)
- All Boards: "Selected:" star/home actions + Home board badge (#2220)
- Tests: cover the remaining Upcoming changes (#2220 default board, #6465 UI, #6478 confirm)
-
Add List moved from a standing column to a per-list header button
(#6465). The Swimlanes/Lists views no longer show a permanent "Add
List" composer column; each list header has a far-right add-list button that opens the composer as a column
immediately after that list (right in LTR, left in RTL), and an empty swimlane/board shows a + button.
Also fixes the composer's Save doing nothing (createListAfter'scheck()used a non-Optionalmatcher for
nextListId, so the inline composer 400'd with "Match failed"). (First cut — desktop/main views.) Thanks to
csonkaoszimt (report) and xet7. Commits: -
All Boards, board header, top bar and popups — a large batch of layout/theming polish. Highlights: the
right-sidebar hamburger is pinned to the right edge at every width with an ~8px gap, and the duplicate Board
Settings cog was removed; the All Boards My Boards toolbar wraps (order Multi-Selection then Sort then
Search), the Multi-Selection button matches the Swimlanes view, the empty grey band was removed, "+ Add …"
tiles match board-tile height, the board-tile drag handle sits at the right middle (transparent, icon only),
and the search box is half width with the multi-selection hint beneath it; the mobile/desktop toggle and
zoom swapped places; the Change Language popup shows multiple columns; the Change Avatar upload
button and the Search All Boards / Archived boards buttons follow the theme colors; the Archived
boards modal is full width and starts below the header; the Notifications drawer is full width with a black
hamburger + X and black menu icons; and the member menu's duplicate Notifications entry was removed. Done
differently: an "icons only — always hide button text labels" board-header change was tried and then
reverted, so button text labels stay. Thanks to xet7. Commits:- Board header: keep the sidebar hamburger pinned to the right edge at all widths
- Board header: remove empty space around the sidebar hamburger button
- Board header: hamburger right gap matches the user-name gap (~8px)
- Board header: hide button text labels on narrow windows (icons only)
- Board header: remove the Board Settings cog (it is already in the right sidebar)
- Board header: icons only — always hide button text labels
- Revert board-header icons-only; update CHANGELOG Upcoming with newest changes
- Header/All Boards: reorder Multi-Selection/Sort/Search and swap mobile-toggle/zoom
- All Boards: + Add Board / + Add Template Container tile same height as board icons
- All Boards: remove empty .board-list-header dead grey space above the layout
- All Boards: My Boards bar wraps so Sort/Multi-Selection/Clear stay visible
- All Boards: Multi-Selection button looks the same as in Swimlanes View
- All Boards: move board tile drag handle to the right middle
- All Boards: transparent board tile drag-handle background (icon only)
- All Boards: vertically center the Search boards input text
- All Boards: move the Search boards input text 4px further down (top: 6px)
- All Boards: move the Search boards input text 2px further down (top: 8px)
- All Boards: move "+ Add Board" text 4px up (keep tile height)
- All Boards: move "+ Add Board" text 2px further up (padding 18/8/24/8)
- All Boards: move "+ Add Template Container" text 2px down (separate from Add Board)
- All Boards: half-width search, hint below Multi-Selection, title beside icon
- Change Language popup: show languages in multiple columns when there is width
- Change Avatar popup: Upload button uses theme colors (blue bg, white text)
- Archived boards modal: full width + extends to the bottom of the window
- Archived boards modal: start below the header bar so its top is visible
- Archived boards: Restore/Delete buttons follow the theme override colors
- Search All Boards: new-search button follows theme override colors
- Search All Boards: label the clear button "Clear" using existing trello-clear-job key
- Member menu: remove the Notifications entry (duplicates the header bell icon)
- Notifications drawer header: black X + hamburger, X near the top-right edge
- Notifications drawer: full width + robust flex header (black hamburger + X)
- Notifications drawer: fix X position — cancel the global absolute .close rule
- Notifications menu: make the dropdown item icons black
-
Denser default layout: thinner lists, board tiles and card dock; taller-looking minicards
(#6465). List width default 272 to 220px (minimum 270 to
200px), All Boards board tiles min-height 100 to 72px, and the card-detail right dock max-width 800 to
520px — all overridable, user customizations untouched. Minicards no longer reserve a tall empty band under a
one-line title (the title viewer getsmin-height: 0), and the swimlane header no longer clips at non-100% zoom.
Thanks to csonkaoszimt (report) and xet7. Commits:
and fixes the following bugs:
-
Confirmation dialogs work again — clicking any
.js-confirmbutton (e.g. "Remove Member") did
nothing becausePopup.afterConfirm()stashed the pending action on the Blaze data context (an immutable
Minimongo doc that Blaze re-creates on re-render); it is now stored on the Popup instance
(#6479). Thanks to mueschel (report) and xet7. -
Moving a card between swimlanes is no longer broken with long lists — jQuery UI sortable cached
geometry at drag-start and never re-cached on WeKan's manual auto-scroll, so the drop re-homed the card in the
source swimlane; fixed withsortable('refreshPositions')after a scroll
(#6477). Thanks to mueschel (report) and xet7. -
Filter by date -> Overdue no longer lists cards with no due date —
$lte/range selectors
matchednullunder both FerretDB and minimongo;DateFilter._getMongoSelectornow adds$ne: null(reported by
email). Thanks to the reporter and xet7. -
A board-wide list no longer disappears from other swimlanes when nudged — the drop handler
treated any small drag of a board-wide list (swimlaneId === null) as a swimlane change; it now also requires an
original swimlane (reported by email). Thanks to the reporter and xet7. -
FerretDB (bundled) — #6476 crash-loop root cause fixed, and label/title/date filters pushed down to SQLite
(#6476). A startup SyncedCron upsert hit an orphaned-table error
(table "…connections_<hash>" already exists) that became an unhandledRejection and crash-looped WeKan so its
port never opened; the bundled FerretDB now creates tables/indexes withIF NOT EXISTS. It also pushes label
($in), title ($regex) anddueAtrange filters down to SQLite instead of scanning every card in Go. (Details
in the fork's own CHANGELOG.) Thanks to uusijani, a1bert01 and xet7. Changelog commits: -
Snap release, CI and dev tooling. The exotic
ppc64el/s390xsnaps now build on GitHub Actions under
QEMU instead of Launchpad (which returned exit 0 with no artifact);rebuild-wekan.shCURRENT-IP detection is
subnet-agnostic (no morehttp://:3000); and the Playwright E2E workflow was disabled. Commits: -
Changelog, docs and test housekeeping. Commits:
Thanks to above for their contributions.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About wekan
The Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . New English strings for new features at imports/i18n/data/en.i18n.json . Non-English translations at https://app.transifex.com/wekan/wekan only.
Beta — feedback welcome: [email protected]