Wekan
Open source kanban board application built with Meteor
Alternative to: trello
v9.80
2026-07-06v9.80 2026-07-06 WeKan ® release
This release adds the following new features:
- Admin Panel Domains table: pagination, column sort and search (like the Board Table view):
The Admin Panel > People > Domains table loaded every domain (aggregated from all users) into the
browser at once, with a fixed order and no search. It now behaves like the Board Table view: the
server aggregates the domains and returns only one small page, so the whole list is never sent to
the browser. You can order by the Domain or Users column (click the header to toggle ascending /
descending, with a ▲/▼ indicator) and filter with a search box; prev/next controls page through the
results. The search + sort + slice runs in the new pure, unit-tested
models/lib/domainTablePage.jsbehind a newgetDomainsWithUserCountsPageadmin method (server/models/users.js), and thedomainGeneraltemplate (client/components/settings/peopleBody.{jade,js,css}) is now self-contained and fetches only the current page. Covered bytests/domainTablePage.test.cjs. Thanks to xet7.
and adds the following tests:
- Verified and added a regression test for the board-invitation email language:
Confirmed that a board-invitation email is localised in the existing recipient’s own profile
language, or — when the invitee is a new account created by the invite — in the inviter’s profile
language, defaulting to
en(en.i18n.json) when none is set. The behaviour was already correct; the language choice is now extracted into the pure, unit-testedmodels/lib/inviteEmailLanguage.jsused byinviteUserToBoard, and locked in bytests/inviteEmailLanguage.test.cjs. Thanks to xet7.
and fixes the following bugs:
-
Linked-card minicard now shows the cover image of the real card: A linked card (created by “Link card to this card”) on one board did not show the cover image of the real card it points at on another board, even though the card’s other fields did. A linked card is only a placeholder — its real content lives on the card at
linkedId— and every other minicard getter resolves through the real card (getTitle/getReceived/getDue/…), but the cover helpers readthis.coverIddirectly, and a linked card has nocoverIdof its own. The real card’s cover attachment is already published to the linking board (see the “linked cards” / “attachments for linked cards” children of theboardpublication), so this was purely a client-side resolution gap.Card.cover()and the minicardcover()helper now resolve the cover id through the real card via the pure, unit-testedmodels/lib/linkedCardCover.js; normal cards are unaffected. Covered bytests/linkedCardCover.test.cjs. Thanks to 32Dexter and xet7. -
Fix date-picker calendar stays fully visible when opened low on a scrolled page: Opening a date field (due/start/end date, or a date custom field) low on the screen showed the calendar popup extending past the visible area, and — because the pop-over is
position: absolute(document coordinates) — scrolling to reach it moved the calendar along with the page, so the full calendar could never be seen (the workaround was to close it, drag the field to the center and reopen).Popup._getOffsetcomputed the space above/below the opener and the clampedtopfrom the opener’s DOCUMENT offset mixed with the VIEWPORT height, ignoring the page scroll, so on a scrolled page the anchored popup landed outside the visible viewport. The geometry now runs in viewport coordinates (subtracting the page scroll) and clamps the popup fully within the visible viewport, then converts back to document coordinates for the absolute style; when the page is not scrolled the output is unchanged. Extracted the math into the pure, unit-testedclient/lib/popupOffset.js, used byclient/lib/popup.js. Covered bytests/popupOffset.test.cjs. Thanks to MarcusDger and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.