Wekan
Open source kanban board application built with Meteor
Alternative to: trello
v11.70
2026-09-11Binaries 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.78.0 | verified | 523a96e832e5947a… |
| amd64 | Node.js | nodejs.org | v24.21.0 | verified | fd8e59d5a511510f… |
| arm64 | FerretDB | wekan/FerretDB | v1.78.0 | verified | d8bb85c7ff49fe02… |
| arm64 | Node.js | nodejs.org | v24.21.0 | verified | 6ad1325edbdb5649… |
| armhf | FerretDB | wekan/FerretDB | v1.78.0 | verified | c4df2f4e6fe8fa9a… |
| armhf | Node.js | wekan/node-patches | v24.21.0 | verified | fcd7558bda05a44b… |
| armv6 | FerretDB | wekan/FerretDB | v1.78.0 | verified | eeb962ba8d7b76d7… |
| armv6 | Node.js | wekan/node-patches | v24.21.0 | verified | ea68d25e1eef47cb… |
| armv7 | FerretDB | wekan/FerretDB | v1.78.0 | verified | c4df2f4e6fe8fa9a… |
| armv7 | Node.js | wekan/node-patches | v24.21.0 | verified | 561b357700e2019c… |
| i386 | FerretDB | wekan/FerretDB | v1.78.0 | verified | c855b2f74a7c8b13… |
| i386 | Node.js | wekan/node-patches | v24.21.0 | verified | d3a55c1b0e22c164… |
| mac-arm64 | FerretDB | wekan/FerretDB | v1.78.0 | verified | 34d45b3eee2f322f… |
| mac-arm64 | Node.js | nodejs.org | v24.21.0 | verified | 6239d4cf92d86448… |
| mac-x64 | FerretDB | wekan/FerretDB | v1.78.0 | verified | 1fd4a358aae472d9… |
| mac-x64 | Node.js | nodejs.org | v24.21.0 | verified | 0ae5a24c24bb7d01… |
| ppc64le | FerretDB | wekan/FerretDB | v1.78.0 | verified | ae5e77d7e26ff668… |
| ppc64le | Node.js | nodejs.org | v24.21.0 | verified | 1936fd64623a2f98… |
| riscv64 | FerretDB | wekan/FerretDB | v1.78.0 | verified | c52b5d9b477d8a73… |
| riscv64 | Node.js | unofficial-builds.nodejs.org | v24.21.0 | verified | 5c4e83d46cc1f8ee… |
| s390x | FerretDB | wekan/FerretDB | v1.78.0 | verified | 5f6e44510345e653… |
| s390x | Node.js | nodejs.org | v24.21.0 | verified | 2ef7e2ecbf7a6c2f… |
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.70 2026-09-11 WeKan ® release
In short: this release adds every way to log in that Meteor’s accounts system offers - Google, GitHub, Facebook, X (Twitter), Meteor Developer, Weibo, Meetup and passwordless email codes - configurable with environment variables on every platform and overridable in Admin Panel / People / Login, where a badge beside each field names the source in effect and a change applies without a restart. It also fixes the release bump job, which failed on the generated OpenAPI spec.
This release adds the following new features:
Login - every way to log in that Meteor’s accounts system offers.
Google, GitHub, Facebook, X, Meteor Developer, Weibo, Meetup and passwordless login. Thanks to xet7.
Meteor’s own accounts packages - accounts-google, accounts-github, accounts-facebook, accounts-twitter, accounts-meteor-developer, accounts-weibo, accounts-meetup and accounts-passwordless - are added, so every login method Meteor’s accounts system offers is now in WeKan beside password, 2FA, OIDC, LDAP, CAS and SAML.
models/lib/oauthProviders.js is the pure catalog of the seven providers:
the OAUTH_<PROVIDER>_ENABLED, _CLIENT_ID (_APP_ID for Facebook,
_CONSUMER_KEY for X) and _SECRET env vars, each credential also read
from a <NAME>_FILE Docker secret; the shared
OAUTH_PROVIDERS_LOGIN_STYLE (popup or redirect) and
OAUTH_PROVIDERS_MERGE_EXISTING_USERS; and PASSWORDLESS_ENABLED. An
Admin Panel value wins over the env var, and a provider is enabled only
with the flag AND both credentials.
server/lib/oauthProviders.js writes Meteor’s ServiceConfiguration for
every enabled provider at startup and whenever the Admin Panel saves, and
REMOVES it for a disabled one, so switching a provider off takes effect
without a restart. A first login through a provider becomes a WeKan user
the way OIDC does, fail-closed: an existing account made by another login
method is linked only when merging is on and the provider verified the
address; otherwise the login is refused with oauth-account-conflict and
the attempt is recorded on the new oauth.account-conflict canary, so
Admin Panel -> Problems shows who tried. Passwordless is refused at both
the token-request method and the login attempt while it is off, so the
package cannot create accounts or send codes when nobody enabled it.
The login form shows one button per enabled provider under the SAML
button, and a two-step “Email me a sign-in code” form (address, then code)
when passwordless is on; errors land in the same region as the password
form. getAuthenticationsEnabled reports keys only - no credential ever
reaches a browser. tests/oauthProviders.test.cjs pins the catalog shape,
the env, _FILE and Admin Panel resolution, the enabled and takeover
decisions, the upsert/remove, the canary, the form and the negative
no-secret-on-the-client sweep.
Admin Panel override of the OAuth login provider and passwordless env vars. Thanks to xet7.
Admin Panel / People / Login gets a section for Meteor’s own accounts-*
login services (Google, GitHub, Facebook, X/Twitter, Meteor Developer, Weibo,
Meetup) and for passwordless login, built the same way as the LDAP section
above it: every OAUTH_<PROVIDER>_ENABLED / _CLIENT_ID / _SECRET env
var, the shared OAUTH_PROVIDERS_LOGIN_STYLE and
OAUTH_PROVIDERS_MERGE_EXISTING_USERS, and PASSWORDLESS_ENABLED can be
set there, a value set in the Admin Panel wins over the env var
(models/lib/configResolver.js), and a badge beside each field says
whether the env var, the Admin Panel or nothing is in effect.
The secret is stored in Settings.oauthProviders.<key>.secret and, like the
LDAP bind password, never reaches a browser: the setting publication
carries only enabled, id, loginStyle and the boolean secretSet
per provider, an empty secret submission leaves the stored one untouched,
and the sources method reports the secret through hasConfigValue() as
“is set (source)” only. saveOauthProviderSettings validates the provider
key against the catalog, and both it and savePasswordlessSettings are
admin-only and call reconfigureOauthProviders() so a change takes effect
without a server restart.
tests/oauthProvidersAdminOverride.test.cjs pins the schema, the published
field list (secret absent, secretSet present), the admin gate, the key
validation, the empty-secret rule, the reconfigure call and the jade badges;
the whole-tree secret sweep in tests/ldapAdminOverrideSecurity.test.cjs
now also matches hyphenated sub-document keys such as
oauthProviders.meteor-developer.secret.
The provider and passwordless settings documented on every platform, with docs. Thanks to xet7.
A setting that exists in the code but not where a user configures WeKan is
invisible, so OAUTH_<PROVIDER>_ENABLED / _CLIENT_ID (_APP_ID for
Facebook, _CONSUMER_KEY for Twitter) / _SECRET / _SECRET_FILE for
Google, GitHub, Facebook, Twitter, Meteor Developer, Weibo and Meetup,
OAUTH_PROVIDERS_LOGIN_STYLE, OAUTH_PROVIDERS_MERGE_EXISTING_USERS and
PASSWORDLESS_ENABLED now appear, commented out with the same explanation,
everywhere the OAUTH2_* and SAML_* settings already do: docker-compose.yml
and its FerretDB v1 (PostgreSQL, MySQL, MariaDB, SAP HANA), FerretDB v2 and
MongoDB variants, the Dockerfile and devcontainer ENV block (every
*_ENABLED defaulting to false, login style to popup), start-wekan.sh,
start-wekan.bat, the Snap’s config (keys list plus a
DESCRIPTION_/DEFAULT_/KEY_ triple each, so snap set wekan oauth-google-enabled='true' works) and wekan-help, the Sandstorm package
definition, the stacksmith Docker-secrets reader, secrets/README.md and the
Helm chart’s values.yaml in wekan/charts. Each comment names the callback
URL to register at the provider, <ROOT_URL>/_oauth/<service>, and says that
Admin Panel / People / Login overrides the environment.
Two new docs pages: OAuth Providers
(where to create the app at each provider, the callback URL, the variables,
the Admin Panel section, login style, merging, troubleshooting) and
Passwordless, both linked from the docs
index. tests/oauthProvidersPlatformEnv.test.cjs pins every variable on every
platform, the Snap triples and their kebab-case keys, the Sandstorm defaults,
and that the docs pages exist and are linked; the compose-parity suite keeps
the five FerretDB v1 files identical.
and fixes the following bug:
The release bump job no longer fails on the generated OpenAPI spec. Thanks to xet7.
The bump job of release-all.yml regenerates public/api/wekan.yml from the
models’ JSDoc and renders it with @redocly/cli, which stopped the release
with “bad indentation of a mapping entry (1232:2)”. A @param whose
description continues on the next JSDoc lines (the chart export’s
chartKey) was emitted under description: | with only its first line
indented, so the continuation lines fell out of the block scalar and the
whole spec failed to parse. The generator now indents every line. It also
stopped warning “unknown type object” for the rules API’s trigger/action
parameters: OpenAPI 2.0 has no object for a path/query/form parameter, so
they are emitted as a JSON string. Reproduced locally and verified with the
same @redocly/cli render; tests/openapiParamMultiline.test.cjs pins the
emitter and parses the regenerated spec.
and improves the translation workflow:
- Add the OAuth-provider and passwordless login i18n keys to every locale file, with the seven provider names treated as invariant proper nouns by the fill tool. Thanks to xet7.
- Translate the OAuth-provider and passwordless login strings for the major languages and their regional variants, 88 locale files. Thanks to xet7.
- Translate them for the European and Central-Asian languages, 62 locale files, in the language each locale tag names. Thanks to xet7.
- Translate them for the South and Southeast Asian languages, 29 locale files. Thanks to xet7.
- Translate them for the remaining languages, 53 locale files, so no locale has an untranslated string left. Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.