News

What shipped, and what has not come over yet.

Docker Swarm MX is released from its main branch: every feature or fix that lands there becomes a release, built by CI and published on Codeberg with its installer. This is the short version.

Current release 1.8.0 ·

1.8.0

The images of every node, and an audit log

Until now the images on a node were a matter for the Terminal, and what the app changed in a swarm was nowhere on record. Now the Images page shows the images of every node, pulls them again and removes the ones nothing uses; Events keeps an audit log of every change the app makes; and when the app itself misbehaves, it has a log file and a support bundle to send along.

  • Images in the sidebar, under Volumes: the images on every node, read through its Docker context, with repository, tag, digest, size, when they were made and the services and tasks that use them. Images that nothing uses and images without a name stand out.
  • Group by node or by image. Per image you see on which nodes it is, and differs when another node has a different image under the same name: each node pulls the images of its own tasks.
  • Pull an image again on one node, on all nodes or a choice of them, with the login from docker login for a private registry. Remove one image or several, only when no container uses them, after you confirm.
  • An audit log, the other tab of Events: every change the app makes in a swarm, with the time, the context, the Windows user, the action, its target and whether it worked, also when it failed and also from a scheduled task. Kept for 90 days, at most 5000 entries per swarm; a secret only by name.
  • Search the audit log by name, user or detail, filter it by action and result, and export it to CSV.
  • The app keeps a log of what it does and what goes wrong, without passwords, tokens or keys. Settings › General › Diagnostics opens the log folder, or creates a support bundle: the logs, the versions of the app and Windows, the Docker contexts without their TLS material, the settings and the latest notifications, in one zip.
Nodes, with the images of every node →
1.7.0

A bell you can clear, and the version in view

A small release about the window itself. The bell can be emptied, the notification settings are easier to scan, every tab has an icon, and the status bar says which version of the app runs.

  • Clear in the panel behind the bell: it empties the panel and marks what was there as read. New notifications appear again, and the full log stays under Settings › Notifications, where the gear in the panel goes.
  • Settings › Notifications in cards: the kinds of problem in three of them (Nodes and managers, Services, Connection and the app), and the limit per hour, what is not reported and the default values in a card Rules of their own.
  • Staying in the notification area and starting with Windows moved to Settings › General.
  • Icons on every tab of a service, a stack and the settings of a service, with the same icon for the same thing as in the sidebar.
  • The version of the app at the far right of the status bar.
Notifications, with the bell →
1.6.0

Capacity, troubleshooting and Claude

Until now the app showed what runs on a node, but not whether there is room for more, and when something broke you were on your own. Now every node shows its capacity and how full its disk is, a service that does not run has a diagnosis and Claude to look into it, an engine that does not start is examined on the host itself, a lost quorum has a way back, and the last pieces of the swarm section of Docker Client MX have come over.

  • Capacity on Nodes: the CPUs and memory of each node next to what the reservations of its tasks take. A task that waits because its reservation fits nowhere says what it needs and where the most is free.
  • Disk: how full the disk is where Docker keeps its data on each node, measured by a short-lived helper container. Disk space shows what takes the room and how much of it nothing uses, and a disk that is 90% full is a notification.
  • Clean up one node or all nodes at once: stopped containers, images that no container uses and build cache, with first how many there are and how much it frees. Volumes stay.
  • Recover after losing the quorum: the overview says when the swarm has no leader, and Recover lets a manager that still answers start a new cluster with all services, networks, secrets and configs, after you type its name.
  • Certificates under Access: how long a node certificate is valid, until when the root certificate is valid, and rotating the certificate authority, with how many nodes already have a certificate from the new one.
  • Before a stack is deployed, the dialog shows what changes, the ports it publishes and what stands out on the machine; a volume of a Compose project blocks until you accept that the stack shares its data. The page of a stack points out single replicas and updates that do not roll back.
  • Diagnose a service: one block of Markdown with its tasks and why they failed, the containers on their nodes, its settings, its events and the last 300 log lines, without the values of environment variables or anything that looks like a password, token or key. Read it, then copy it into a chat or an issue.
  • Claude at a service, with your own Anthropic API key under Settings › AI assistant: the first question sends the diagnosis, Claude looks up what else it needs with seven tools that only read (services, tasks, logs, inspect, nodes, events and the services of a stack), and every lookup shows in the conversation. The key is stored encrypted and never reaches the window.
  • Diagnose the engine when Docker does not start on a machine: the app looks on the host itself, as root in WSL or over ssh, recognises the usual causes (daemon.json, an old pid file, a port in use, a full disk, iptables and more) and repairs some of them when you ask, after saying exactly what it will do.
  • Ctrl+K opens a command palette: open a service, stack, node or page, see what you can do with it, switch the context, or type scale web to 3 or drain node2.
  • Join a swarm through a manager that is also a Docker context in the app: the app fetches the token and the address itself.
  • For an engine in WSL: Windows folders in bind mounts become /mnt/c/… on deploy, and with mirrored networking the app checks whether the Hyper-V firewall lets the ports through, with the commands for what is missing.
  • Networks and Volumes moved up to the first group of the sidebar. Volumes no longer waits for a machine that is off, and keeps volumes outside the swarm one tick away. A swarm without a leader is recognised again on Docker 28 and 29, which answer with HTTP 500.
Services, with the diagnosis and Claude →
1.5.0

The volumes of every node

A volume belongs to one node, and until now only the backup dialog showed which volume lived where. The new Volumes page shows them all, per node, with how big they are and who uses them, and removes the ones nothing uses.

  • Volumes in the sidebar, under Backups: the volumes of every node, read through its Docker context, with driver, size, stack, when they were made and the services or containers that use them.
  • A node that no Docker context on this computer reaches is named above the list; anonymous volumes are one tick away.
  • Back up opens New backup with that node and volume chosen. Remove takes a volume that no container uses, not even a stopped one, and otherwise says which containers still use it.
  • Sizes go up to GB and TB now, also in the list of backups.
  • Secrets, Configs and Networks put a space after the comma between the services that use them.
Backups & volumes →
1.4.0

A shell in the container of a task

The Terminal opened a root shell on a node, and from there you still had to find the container and run docker exec yourself. Now a running task has Open shell in its menu: a shell in its container, on the node where it runs, in one step.

  • Open shell in the menu of a task, on Tasks and on the pages of a service and a stack: a shell in its container, like docker exec -it, on the node where it runs.
  • As the user of the image, with bash if the image has it and otherwise sh. It opens in the Terminal, with the nodes still in the list.
  • Through the Docker context of the node, like Replace task. Without one, the Terminal says which node and how to reach it.
  • An image without sh, distroless or built FROM scratch, has no shell to open; the app says so instead of a bare error.
  • On the General tab of New service and Adjust settings, published ports, placement constraints and labels are now the same width, with room for the explanation under each.
Terminal, with the shell in a task →
1.3.0

Services set up in full, a Networks page and private registries

Until now a service that needed an overlay network, a volume or a health check still had to come from a stack file. Now New service and Adjust settings cover what a service needs, a new page manages the overlay networks of the swarm, and an image from a registry with a login works without logging in on every node.

  • New service in four modes: replicated with a number of replicas, global, a replicated job or a global job.
  • New service and Adjust settings in four tabs: environment, ports, placement constraints and service labels; overlay networks, mounts (volume, bind, tmpfs) and secrets and configs as files; limits and reservations, the restart policy, spreading over a node label, the maximum per node and the health check; and the entrypoint and arguments.
  • What you leave as it was stays exactly as a stack file set it: aliases on a network, the options of a mount, the owner of a secret file, a health check in exec form and the labels of the stack.
  • Networks in the sidebar: the overlay networks of the swarm with their stack, subnet and the services that use them. Create one, attachable, internal or encrypted, with a subnet of your own; remove one that no service uses.
  • Private registries: the app uses the login from docker login on this computer when it creates a service, looks up a digest, rolls out or redeploys, and for the scheduled image updates. It stores no registry passwords itself.
Services, with all their settings →
1.2.0

The app updates itself

Until now a new version meant fetching the installer from Codeberg again. Now the app does that by itself: it looks for a new release every four hours, downloads it in advance and checks it, so updating is one click and a restart.

  • Every four hours the app looks for a new release on Codeberg and downloads the installer in advance, with its SHA-256 checked.
  • Restart and update, under Settings › General › Updates, closes the app, runs the installer (Windows asks for permission once) and starts the new version.
  • Turn the automatic check off there if you would rather update by hand. A copy that was not installed with the installer, such as an own build, gets a link to the release instead.
  • Logs and Events now sit in the sidebar under Terminal.
Contexts & looks, with the Updates card →
1.1.0

Logs and Events, for the whole swarm

Two new pages in the sidebar. Logs follows what the services of the swarm write, interleaved by time, without opening one service after the other. Events shows what the swarm reported, and keeps it for two weeks where a manager remembers only its last 256.

  • Logs: one service, a stack, or a choice from all services, interleaved by time. With all services chosen, a new service joins by itself. Only the tasks of services: standalone containers stay out.
  • Search with words, !word to leave lines out, "a phrase" or a /regular expression/; show only errors or warnings, recognised from the usual log formats; hide timestamps and mark stderr.
  • Events: services created, changed (a new image, another replica count, a rollout that starts, finishes, pauses or rolls back) and removed; nodes that go down or come back; secrets, configs and swarm networks.
  • With what changed, old next to new. A node that goes down or a rollout that pauses stands out.
  • The app keeps its own log of events while it runs, also from the notification area: two weeks, at most 2000 events per swarm, with filters by kind, period and name or stack.
Logs & events →
1.0.0

The swarm section of Docker Client MX, as an app of its own

The first release. Everything the swarm section of Docker Client MX does, as a Windows app of its own built with Wails v3 and Svelte 5, and what grew around it on the way: the load of the whole swarm, backups of the swarm and its volumes, notifications, a shell on any node, and one table of everything the app does by itself.

  • An overview with the load of the swarm, measured on every node through its Docker context, with 24 hours of history that also fills in the background.
  • Services, stacks, tasks and nodes: roll out and roll back, rebalance a service over the nodes, and drain a node with a preview of what moves.
  • Logs followed live from the last 100 lines, and read on the node itself when the log broker of the manager stalls.
  • Stack files in one folder, with an editor, importing a compose file from elsewhere, and the .env passed on when a stack is deployed.
  • Backups of the swarm and of volumes per node, by hand or on a schedule, to a folder, SFTP or S3, encrypted with age; and a restore that creates only what you tick.
  • Notifications to Gotify, ntfy, a webhook or Windows, with waiting times, merging and quiet hours, and a bell with the latest ones.
  • A root shell on any node, and a cheat sheet with the swarm commands first.
  • Schedules: everything that runs by itself in one table, and image updates at a fixed time.
  • Five colour schemes, each light and dark, in English, Dutch, French, Spanish, Italian, Portuguese and Simplified Chinese.
Start with the overview →

Not ported yet

What Docker Client MX does on a swarm, and this app not yet.

The swarm section of Docker Client MX has come over. What remains are smaller differences; read it as a list, not a promise.

Bulk actions on more lists

Every table can select several rows, but only Services does something with them: removing services.

A one-off log tail

Docker Client MX can also read the last 300 lines of a service once, without following it.

Every release, in full.
The changelog and the installer of each release live on Codeberg.