What Wheelhouse is#
Wheelhouse OS is a bootable router image. Underneath it is VyOS,
which is GPL-licensed, on a Debian base. On top of that are two programs: wheelhouse-agent,
a single Go binary that systemd runs as root, and a React web UI that the agent serves on
port 8443. The agent drives the router over VyOS' own documented HTTP API and its
operational-mode commands; it links against no VyOS code. What you install is one image,
and what you manage it with is one URL.
The division of labour#
| Whose it is | |
|---|---|
The kernel, nftables, conntrack, FRR, Kea, pdns-recursor, strongSwan, OpenVPN, the container runtime | VyOS' and Debian's |
The configuration tree, commit, commit-confirm, rollback, the config archive | VyOS' |
| The agent, the web UI, the installer, the app catalogue, the staging model, the licence | Wheelhouse's |
That split matters more than it looks. Wheelhouse does not reimplement routing, and it
does not hide the router. Every editor in the UI writes VyOS set and delete lines,
shows you those lines before it does anything, and commits them through the same
transaction the CLI uses. If you already think in set / commit / confirm, nothing
here asks you to stop.
The four things it adds#
- Every editor shows its commands. A form renders the exact
setanddeletelines it will run, with a copy button, before it runs them. Nothing on any page applies itself. - One Commit Bar. Changes from every page accumulate into one working set and one visible diff. That diff is what commits, and it is the only thing that does.
- Commit-confirm is the router's own. A commit can arm VyOS' commit-confirm window: miss the confirmation and the router reboots into the previous configuration. It is the mechanism the CLI uses, driven from a button, not a timer in a web page.
- Accounts, roles and an attributed audit log. Argon2id password hashing, TOTP, sessions with CSRF, three server-enforced roles, scoped API tokens, OIDC single sign-on, and an audit entry naming who changed what from where.
What it manages#
A page per left-hand nav entry, across eight groups: interfaces, static routes, BGP and OSPF, high availability and uplinks, QoS, firewall, NAT, an inline IDS, WireGuard, IPsec, OpenVPN, DHCP, DNS, apps, sessions, diagnostics, logs, certificates, the raw configuration tree, a desired-state reconciler, a fleet view, users, API tokens and the licence. Live operational state sits beside configured intent on the same screen, with drift flagged where the two disagree.
What it does not do#
This is the part a router product usually leaves out, so it is on the second screen here rather than the last.
- It does not manage wireless. VyOS can configure
interfaces wirelessfrom the CLI; the Wheelhouse UI has no page for it and the installer does not offer it. Put an access point behind the router. - It is not a UniFi controller, and it is not for CGNAT ISP gear or consumer households. Wheelhouse manages the router.
- IPv6 is configurable but not observable. There is no v6 route view and the uplink model has no v6 concept; the firewall page is v4-first. The installer's firewall checkbox does write a v6 ruleset — see Every installer question — but the UI you manage it with afterwards is not symmetric. This is stated wherever IPv6 comes up because it is the single most likely thing to surprise you.
- Packet capture is not implemented.
POST /api/captureanswers 501 and hands back themonitor trafficcommand to run by hand.
What it costs to run#
The agent is one process. Its resource budget is under 150 MB resident and under 3%
idle CPU on an N100-class machine, and that budget is a target rather than a
measurement — nothing in this repository has measured CPU, memory or throughput on
hardware or in CI. The shipped systemd unit sets MemoryMax=200M and CPUQuota=300%, so
the ceiling is enforced even though the number under it is unverified. Routing performance
is VyOS' and the kernel's, and Wheelhouse does not change it.
The one deliberately expensive thing the agent does is hash passwords: Argon2id at three passes over 64 MiB, about 60 ms per check. Simultaneous logins are the memory spike.
What it costs to buy#
A licence unlocks configuration changes. Reading never needs one: an unlicensed router signs you in and shows every page, every counter, every log and the audit trail. It refuses to stage, commit, roll back, install an app or run the reconcile loop, and says so with a link to the Licence page. See Enter a licence for what that looks like in practice, and the product site for the plans. The prices are not set.
Two things to know before you commit to it#
No bare-metal install is on record. The live image has been booted on physical hardware — that is where three separate installer bugs were found and fixed — but a complete install to a disk followed by a reboot into the installed system has only ever been verified in a VM. What you need has the full inventory.
Wheelhouse is not open source. The agent and the UI are proprietary programs driving GPL components as separate programs. The base is GPL and its corresponding source is published with every release. About Wheelhouse has the boundary and the source offer.
See also#
- The configuration tree and staging — the two ideas everything else assumes.
- The Commit Bar and commit-confirm — what happens when you press commit.
- Every editor shows its commands — the product's whole thesis, on one page.
- What is not finished — the same honesty as the last two sections here, kept current.
- What you need — hardware, and what has actually been run on it.
- About Wheelhouse — attribution, the licence boundary, the source offer.
- The product site — the argument, and the pricing model.
Checked against README.md, PLAN.md,
ui/src/components/product.ts,
packaging/wheelhouse-agent.service,
agent/license.go, docs/hardware.md,
PRICING.md.