docs/Platforms/FOSS/Snap/CPU-platforms.md
This page documents, for the WeKan snap, which CPU architectures are built, which database binaries each one ships, how new installs choose their database, and how the one-time MongoDB 3 → FerretDB v1 migration works.
mongodump, mongorestore, mongofiles, mongoexport, …), on every
architecture.mongosh is NOT bundled at all. WeKan already ships Node.js 24 and the
mongodb driver, and all scripted database access (readiness checks,
replica-set init, schema migration) uses that via $SNAP/bin/db-eval instead of
the MongoDB Shell. This removes a large, CVE-prone binary and works identically
on every architecture. See MongoDB client binaries.mongodump-<arch> etc. from
wekan/mongo-tools.| CPU arch | MongoDB 7 server (mongod) | MongoDB Database Tools | FerretDB v1 server | MongoDB 3 → FerretDB migration | Default DB (new install) |
|---|---|---|---|---|---|
| amd64 | ✅ | ✅ | ✅ | ✅ (if MongoDB 3 data present) | FerretDB v1 |
| arm64 | ✅ | ✅ | ✅ | ❌ | FerretDB v1 |
| s390x | ❌ | ✅ | ✅ | ❌ | FerretDB v1 |
| ppc64le | ❌ | ✅ | ✅ | ❌ | FerretDB v1 |
| riscv64 | ❌ | ✅ | ✅ | ❌ | FerretDB v1 |
mongodb driver ($SNAP/bin/db-eval).All architectures default new installs to FerretDB v1 with DDP_TRANSPORT=sockjs
and polling reactivity.
On a fresh install, every architecture starts on FerretDB v1 (SQLite) with
these snap defaults (in snap-src/bin/config):
database = ferretdb — FerretDB v1 is the default backend.ddp-transport (DDP_TRANSPORT) = sockjs — maximum proxy compatibility.On amd64/arm64 you can still switch an install to the bundled MongoDB 7 server:
sudo snap set wekan database=mongodb # amd64/arm64 only (mongod is bundled there)
sudo snap set wekan database=ferretdb # the default
WeKan does not download MongoDB clients from the MongoDB website:
build-binaries.yml workflow cross-compiles every
architecture (bsondump, mongodump, mongoexport, mongofiles,
mongoimport, mongorestore, mongostat, mongotop), including arches MongoDB
never shipped tools for (riscv64, loong64). Every WeKan build (snap, bundle,
Docker, Sandstorm) downloads the one <tool>-<arch> it needs from the newest
release.mongosh is not used at all. It is a large Node.js-packaged binary (it
embeds its own Node and drags in a heavy, CVE-prone dependency tree) that cannot
be cross-compiled for s390x/ppc64le/riscv64. Since WeKan already bundles Node.js
24 and the mongodb driver, every scripted MongoDB/FerretDB operation the snap
used mongosh for — readiness ping, replica-set initiate/status, the v8.43
schema migration — now runs through $SNAP/bin/db-eval (a tiny wrapper around
the bundled Node + driver). This works identically on every architecture and
removed the mongosh binary from the snap entirely.The mongo shell that IS still present is only the legacy MongoDB 3.2 mongo
(from migratemongo, amd64 only), used at migration time to read old MongoDB 3
data — the modern driver cannot speak to a 3.2 server. It is not used at runtime.
Only the amd64 snap ships the MongoDB 3-specific binaries (the legacy MongoDB
3.2 mongo shell + mongofiles, bundled via migratemongo). They are used at
migration time only — a one-time conversion of old data — and are never a
runtime component: after the migration WeKan runs on FerretDB v1 and the
MongoDB 3 binaries are not used again. No other architecture ships them at all
(s390x/ppc64le/riscv64 never had a MongoDB 3, so there is nothing to migrate).
The migration runs only on amd64, and only when existing MongoDB 3 data (from an old WeKan 6.09-era snap) is present. During the migration both databases run at the same time on different ports — MongoDB 3 on its port and FerretDB v1 on its port — and data moves directly from one to the other:
mongofiles command, and written to:
$SNAP_COMMON/files/attachments/$SNAP_COMMON/files/avatars/mongo CLI (mongo shell); the
modern mongosh cannot talk to a MongoDB 3 server.After a successful migration the snap switches to database=ferretdb.
Architectures other than amd64 ship no MongoDB server and no MongoDB 3 client, so there is nothing to migrate from — they are FerretDB v1 from the first boot.
FerretDB v1 is built and released separately in
wekan/FerretDB as one binary per
architecture (ferretdb-<arch>; there is no ferretdb.zip). Each WeKan build
downloads only the single binary for the platform it targets, e.g.:
https://github.com/wekan/FerretDB/releases/latest/download/ferretdb-amd64
https://github.com/wekan/FerretDB/releases/latest/download/ferretdb-arm64
https://github.com/wekan/FerretDB/releases/latest/download/ferretdb-s390x
https://github.com/wekan/FerretDB/releases/latest/download/ferretdb-riscv64
https://github.com/wekan/FerretDB/releases/latest/download/ferretdb-ppc64le
For the snap, that binary is embedded inside the wekan-<version>-<arch>.zip
bundle the snap's wekan part downloads, and staged to $SNAP/ferretdb
(started by ferretdb-control).
bump job in
.github/workflows/release-all.yml
runs releases/version.sh, which probes
upstream and rewrites the pinned MongoDB 7 server version (and the WeKan bundle
version/URLs) in snapcraft.yaml.ferretdb-<arch> from wekan/FerretDB,
<tool>-<arch> from wekan/mongo-tools,
and mongosh-<arch> from wekan/mongosh.The default snapcraft.yaml is built on base: core24, which allows the
candidate channel (core26 does not). The automated release workflow publishes
it to the candidate, beta, and edge channels; the stable channel is
published manually later, once it is proven.
snapcraft-core26.yaml is the same WeKan on the newer base: core26
(build-base: devel, grade: devel), kept for testing the next base; it can only
go to Beta/Edge until core26 is a released stable base.