Repository navigation
Releases
v1.0.0-beta.25
In short: a new terminal UI, moin login through the browser and a new home page: the fastest way to run your apps, from any screen.
New
- A new terminal UI:
moinopens a dashboard of your apps and servers,spaceshows everything you can do,space spacesearches apps, servers and actions,escgoes back. - Instant start: the terminal UI shows your last view at once and refreshes behind it; switches and env changes show before the server answers.
- Log in through the browser:
moin loginand the terminal UI show a code, you approve it in the browser with GitHub, an email link or your password, done. No token to copy. - Your computers under Tokens: each browser login shows as "CLI on ", ends after 90 days without use, and you can sign it out one by one.
- Where things work: a docs page lists every feature for web, CLI, terminal UI, API and MCP, with the reason where one is missing.
- A new home page: one calm screen with a wall of app containers, then everything moin does in tabs, live in two minutes, security, backups, four ways in and a comparison.
- Built in the open: the home page shows how often moin ships, read from the changelog.
Changed
- One promise everywhere: Deploy anything. Lose nothing. Your apps on your servers. Every change backed up. Every restore tested. Home, sign-in, docs, CLI and catalog say the same.
- Deploy now: the main button says Deploy now everywhere, instead of Get started or Start free.
- Calmer navbar: on a phone only the logo and the menu; Apps has no New badge; GitHub stars show from 1,000 on.
- Comparison in black and white: color only means status now.
moin loginin a terminal: it always goes through the browser; pass a token with--token, on stdin or asMOIN_TOKEN.- Setup in the web: the terminal UI covers daily work; team, billing, adding servers, GitHub, the catalog and SQL open the right page in the browser.
Fixed
- http on your tailnet: the CLI connects over plain http to short tailnet names like your server's name, not only to IP addresses.
Upgrade
Self-hosted: Update now, or sh update.sh. CLI: curl -fsSL https://moin.run/cli.sh | sh.
v1.0.0-beta.24
In short: the old name ops is gone: only moin and its names work now, so update scripts, CI and compose files that still say ops.
Changed
- Guides: a small book icon on each card opens its guide, instead of a "How it works" link.
x-opsstops a deploy: a compose.yml with anx-opsblock fails with a message to rename it tox-moin, instead of counting.- Instant address user: the user in front of a protected instant address is
moin, andmoin protectasks formoinby default; it takes effect with the app's next deploy. - Rules file: the agent reads only
/etc/moin/rules. Move/etc/ops/rulesthere if you still have one.
Fixed
- Switches stay where you put them: every switch saves only its own setting and shows what was saved, so "Deploy every push" no longer flips back when GitHub is slow.
- Uptime pause sticks: pausing a check holds, even when a check was running at that moment or the control plane restarts.
Removed
- The
opscommand: usemoin. An agent still installed as ops no longer updates itself; install moin on that server again. OPS_*variables: useMOIN_URL,MOIN_TOKEN,MOIN_STATE_DIR,MOIN_RULES,MOIN_IMAGEandMOIN_PULL.- The old CLI config folder: run
moin loginonce if the CLI says you are not logged in. - Old downloads and image:
/download/ops-*andghcr.io/axadrn/ops-controlplaneget no new releases; use/download/moin-*andghcr.io/axadrn/moin. X-Ops-Signature: webhooks carry onlyX-Moin-Signature.- The move from ops:
update.shno longer copies/etc/ops-controlplane, and settings that point to/run/ops-controlplaneneed/run/moin-controlplane.
Upgrade
Self-hosted: Update now, or sh update.sh; agents update themselves. CLI: curl -fsSL https://moin.run/cli.sh | sh.
v1.0.0-beta.9
In short: a new domain on a server without a Cloudflare Tunnel gets its HTTPS certificate again; update if you add domains.
Fixed
- HTTPS for new domains: since beta.1, a domain added on a server that serves ports 80 and 443 itself got no Let's Encrypt certificate and showed a browser warning. It gets one again on the next deploy. Servers behind a Cloudflare Tunnel were never affected.
Upgrade
Self-hosted: Update now, or sh update.sh. Agents update themselves; then deploy each app with a new domain once.
v1.0.0-beta.8
In short: the app page puts Deploy from GitHub first; deploying from CI waits behind one click.
Changed
- Deploy from CI: deploying an image and the deploy hook now sit folded under Deploy from CI on the app page, so the GitHub Deploy is the one you see. An app with a hook shows it open.
Upgrade
Self-hosted: Update now, or sh update.sh. Agents update themselves.
v1.0.0-beta.7
In short: apps and servers are slim cards you drag as a whole, the version of ops is always in sight, and changing repos on github.com no longer ends on an error.
New
- Version in the sidebar: the control plane's version sits at the bottom of the sidebar and opens the changelog.
- Update pending: a server whose agent is behind says so next to its version; it updates itself on its next connect.
Changed
- Apps and servers lists: every app and server is a slim card of its own, with its grip on the left, the same on both pages.
- List and grid switch: icons only.
Fixed
- GitHub repos changed on github.com: coming back to ops no longer shows "GitHub is not connected"; the change was saved all along.
Upgrade
Self-hosted: Update now, or sh update.sh. Agents update themselves.
v1.0.0-beta.6
In short: every agent now updates itself, so metrics arrive everywhere, charts move to a file of their own to keep the database small, and the app tabs fit on a phone.
Changed
- Charts in their own file: metrics and hourly uptime live in
history.dbnext to the database, without a backup. The database stays small and a restore fast. The charts start over once; outages and uptime state stay. - Home page: the live numbers show from 1,000 deploys on.
Fixed
- Agents that never updated: an agent built from a commit instead of a release, such as one installed from
main, now updates itself like any older agent. - Metrics page: no longer tells you to update agents by hand; they update themselves.
- App tabs on a phone: Overview, Data, Backups, Uptime and Metrics no longer push the page wider than the screen; swipe them.
Upgrade
Self-hosted: Update now, or sh update.sh. Agents update themselves.
v1.0.0-beta.23
In short: page counts only on the public site, never inside your workspace.
Changed
- Analytics only where it belongs: the home page, docs, changelog, catalog and legal pages are counted; the app, the admin and sign-in never are, so no workspace or app name and no sign-in link reaches a page counter.
Upgrade
Self-hosted: Update now, or sh update.sh.
v1.0.0-beta.22
In short: every app in the catalog speaks moin now, so installs keep working after the old name goes on December 4.
Fixed
- Catalog after December 4: the 47 apps still used the old
x-opsblock in their compose files and would have stopped installing then. They usex-moinnow. - Messages: the last hints that still said
ops deploysaymoin deploy.
Upgrade
Self-hosted: Update now, or sh update.sh. Agents update themselves.
v1.0.0-beta.21
In short: the site says everything moin does today: Postgres next to SQLite everywhere, a fair comparison with sources, and answers to the questions people ask now.
Changed
- Postgres everywhere it belongs: the homepage, the comparison and the docs name Postgres next to SQLite, for backups to any second, the daily restore check and the data browser.
- A fairer comparison: a new row for Postgres backups, every competitor fact from their own docs.
- Answers that are true today: any language deploys without a Dockerfile, the catalog, instant addresses,
moin exec, and alerts for backups, deploys and full disks. - Roadmap: what shipped moved to Now; MySQL backups are next.
- A new footer: product, docs, open source and company, at a glance.
- Why moin: its own section on the homepage, linked under the buttons.
Fixed
- Self-hosting commands: the install URL and
git clonepointed at the old repository name.
Upgrade
Self-hosted: Update now, or sh update.sh.
v1.0.0-beta.20
In short: ops is now moin, at moin.run. Deploy anything. Lose nothing. Everything you run moves over by itself, and nothing breaks on the way.
Why
moin is how Hamburg says hello. Hamburg is a container port, and your apps run in containers too. The story.
Changed
- New name, new home: moin at moin.run, the command
moin, the logomoin.. The old address sends you to the new one. - Your servers move by themselves: the next agent update renames everything on the server to moin, copies each app's data and checks it file by file. Apps keep serving while it moves.
- Backups go on: Postgres starts a fresh continuous backup under its new name right away. Every older snapshot and point in time still restores.
- Self-hosted moves too:
update.shcopies your settings and data to the new folders and starts moin from the imageghcr.io/axadrn/moin. The old folders stay. - Old names keep working until December 4, 2026: the
opscommand,x-opsin compose.yml,OPS_*variables, the old download paths and image, and theX-Ops-Signaturewebhook header next to the newX-Moin-Signature. - One address for everything: write to hello@moin.run.
Upgrade
Hosted: nothing to do. Self-hosted: Update now, or sh update.sh; agents follow by themselves. CLI: curl -fsSL https://moin.run/cli.sh | sh.