dotMage 2.1 — one verb, one command, less to remember
2.1 is a friction release. Nothing about the model changed — still end-to-end encrypted, still your own tiny server — but the day-to-day got shorter: one verb instead of remembering pull vs push, one command to open the panel, Tab that actually completes, and an admin panel you can do things in.
Highlights
dmage sync — one verb for the 90%
It decides for you: pulls when the server is ahead, pushes your local changes, and if both moved it shows a key-level diff and asks — no silent merge.
$ dmage sync
✓ in sync (rev 7).
$ dmage sync # after editing .env
local changes → pushing
✓ Pushed revision 8.
Bare dmage in a project now hints when you have unpushed changes.
dmage open — the admin panel, already logged in
$ dmage open
✓ Opening admin panel — http://your-server:9471
Logging you in automatically (one-time link, valid 5 min).
Finds the panel from /health and signs you in with a one-time token carried in the URL
fragment — it never reaches the server's logs.
dmage completions — stop memorizing flags
$ dmage completions zsh > ~/.zfunc/_dmage
bash / zsh / fish / elvish / powershell. Homebrew installs them automatically.
An admin panel you can actually use
A Settings page with the server version and an update banner (flip a toggle to follow the dev channel); team management — change roles, remove members; and Add a device — mint a one-time enrollment link right from the browser. Still metadata-only: the panel never sees your secret values.
Fixes worth calling out
dmage gen-ci-token was failing with missing field token_expires_at — fixed on both
client and server. The server Docker image builds cleanly again.
Changelog
Added
dmage sync— pull / push / resolve in one verb; baredmagehints unpushed changes.dmage open— open the web admin already logged in.dmage completions <shell>— shell completions to stdout.dmage upgrade --channel dev— opt into prerelease builds.--jsononstatus,diff,history,apps,whoami.- Admin panel: Settings + update banner + dev-channel toggle, team role/remove, Add-a-device.
/healthadvertises the web port; tagging a release now publishes a GitHub Release.
Fixed
dmage gen-ci-tokenfailed withmissing field token_expires_at— fixed on client and server.- Server Docker build (
ModuleNotFoundError: No module named 'src'). dmage env new --copy-fromanddmage rotate-keyedge cases.
Downloads
CLI binaries and SHA256SUMS: github.com/dotMage/dotmage/releases/tag/v2.1.0
brew upgrade dotmage # Homebrew
dmage upgrade # self-update from any direct-binary install
Server & web ship as ghcr.io/dotmage/{server,web}:2.1.0 (and :2). Re-run the installer to update:
curl -fsSL https://raw.githubusercontent.com/dotMage/server/main/install.sh | bash