Wheelhouse

The configuration model is the feature#

Every other selling point on this site follows from one design decision: the interface does not apply changes. It stages them, shows them to you as commands, and hands the whole set to the router as a single transaction when you say so.

One working set#

Editors call stage. The staging area lives in the agent, not in a browser tab, so it is shared: a second tab sees it, a colleague signed in elsewhere sees it, and so does the CLI (wheelhouse-agent apply --agent-url …) and the optional reconcile loop. Every call that changes the queue returns the whole queue, because a client that only appended locally could later un-stage by an index that meant a different operation on the agent.

The queue holds set and delete and nothing else. An operation the Commit Bar could not spell honestly is refused when it is offered, with a reason, rather than at commit time in the router's voice (agent/staging.go, agent/main.go).

One Commit Bar#

The bar sits at the bottom of every page. Closed, it says how many operations are staged and shows the most recent one. Open, it is the working diff: one line per operation, + for a set and for a delete, an × on each to remove just that one, and beneath them the same lines again as a block you can copy into a configure session.

It is the only component in the product that commits (ui/src/components/CommitBar.tsx).

Commit-confirm, from the operating system#

Two buttons: Commit, and Commit-confirm (2m). The second passes a confirm_time to VyOS' /configure, which arms the platform's own mechanism. If nobody confirms, the router reboots into the previous configuration — not a silent revert, a reboot. That distinction matters, because it means the safety net does not depend on the agent still running, the browser still being open, or the network still working.

While a window is open the Commit Bar becomes a countdown that outranks everything else on screen, and states the reasoning: if you can still read this page, the change worked.

The bar decides which button to emphasise by inspecting the paths in the working set. firewall, nat, system login, pki, high-availability, policy route, load-balancing, protocols failover, anything touching an address or the default route — when one of those is present, the bar says so and the plain Commit is styled as destructive (ui/src/lib/format.ts isDangerousPath).

A revision for every commit#

VyOS archives each commit. Revision 0 is the running configuration; revision 1 is the commit before it. The System page lists them with who made each and how, shows the diff for any one, and rolls back by loading that archived configuration — the same effect as the CLI's rollback, reached the same way, because the HTTP API has no rollback operation of its own and pretending otherwise would have been a lie that worked until it did not.

A configuration download and a save-to-boot are there as well.

Why this cannot be retrofitted#

An appliance whose configuration is a document translated into daemon configuration at save time has nowhere for a transaction to live and nothing coherent to roll back to. The staged diff, the single transaction, the confirm window and the revision list are all one property of the platform, seen from four angles. Wheelhouse's contribution is refusing to cover it up.

Read on#

Updated 2026-09-02