Wheelhouse docs

Built on VyOS#

Wheelhouse is built on VyOS, which is free software under the GNU General Public License, version 2, on a Debian base. The kernel, nftables, FRR, Kea, pdns-recursor, WireGuard, strongSwan, OpenVPN, Podman and the configuration tree they all read are VyOS' work. Wheelhouse adds four things — the agent, the web UI, the installer and the app catalogue — and each of them is a separate program that drives VyOS over its documented HTTP API and its op-mode commands. Below: where that line is drawn, which base each image is built from, and what upstream cannot express.

What the base provides#

Everything in this column exists because VyOS built it, and the product would not be possible without it.

From VyOSWhat Wheelhouse does with it
A transactional configuration tree: set → staged diff → commit → commit-confirm → versioned revisions → rollbackThe Commit Bar, the staged diff, the confirm window and the revision list are this mechanism, driven from a browser
Linux kernel networking: nftables, tc and CAKE, in-kernel WireGuard, VLANs, bridges, bonds, tunnelsThe Firewall, QoS, Interfaces and VPN pages read and write it through the tree
FRR: BGP, OSPF, IS-IS, BFD, VRRPThe routing and high-availability pages
An HTTP API over the whole configuration treeThe agent's only way in. It posts form-encoded requests to the REST endpoints
Op-mode commands (show …)Operational state: counters, conntrack, routes, leases, certificates
Podman containers as configuration objects (set container …)The app catalogue. An app install is a configuration diff, which is why it rolls back
A Debian baseThe agent ships as a plain .deb, and the drivers are Linux drivers

The REST endpoints stay off until service https api rest is set, which first boot does. A router that has not had it set answers 404 {"detail": "Not Found"} to everything, and the agent says so rather than reporting an empty router.

What Wheelhouse adds#

  • wheelhouse-agent — a single Go binary, run by systemd as root. Staging, native commit-confirm, revision rollback, an attributed audit log, parsed operational state, a telemetry WebSocket, accounts with Argon2id and TOTP, four roles enforced per route, scoped API tokens, OIDC single sign-on, Prometheus metrics, TLS, and the web UI served from the directory --ui-dir names, /usr/share/wheelhouse/ui on the appliance.
  • The web UI — a React single-page application. Every page edits what it shows through forms, every pending change reads as a sentence before it is applied, and Advanced mode shows the set and delete lines behind each one.
  • The installer — wheelhouse-install and its unattended path, plus the OPNsense importer that turns a config.xml into VyOS commands and a report.
  • The console tools — wheelhouse-rescue, which the medium's rescue boot entry lands on, and wheelhouse-support, which collects a redacted diagnostic archive. Both are Wheelhouse programs that read and write the agent's own files and drive the base's CLI from outside it.
  • The app catalogue — container entries declared in the router's own configuration tree, and three built-in feature modules.
  • The licence — offline-verified subscription keys gating the write plane only.

None of it is derived from VyOS or from any other GPL work.

Where the boundary sits#

agent/ and ui/ are separate processes from every GPL component. The agent links against no VyOS code and copies none. No file in the repository is derived from vyos-1x, FRR, Kea, pdns-recursor, nftables or the kernel. Four rules keep it that way, in order of importance:

  1. No GPL or AGPL code is copied into agent/ or ui/. Not a function, not a parser, not a constant table. Where behaviour is needed that exists in a GPL project, it is called or reimplemented from its documented behaviour.
  2. Permissive only for compiled-in dependencies: MIT, BSD-2/3, ISC, Apache-2.0. Anything weak-copyleft needs a recorded decision first; anything strong-copyleft is out — Third-party licences.
  3. Patches to GPL components get published. Wheelhouse patches exactly one GPL file today, in the build tooling — see below.
  4. The trademark is separate from the licence. See Trademarks.

The GPL parts of a Wheelhouse image are ordinary, unmodified upstream packages, and you can obtain their source — Corresponding source. The agent, the UI and the installer are proprietary and their source is not offered — The Wheelhouse licence.

Which base an image is built from#

Images are self-built. The build clones vyos-build, resets it to a pinned commit, applies the branding, drops the Wheelhouse .deb into packages/ and runs upstream's own build-vyos-image inside upstream's own build container.

WhatValue
Repositoryhttps://github.com/vyos/vyos-build (VYOS_BUILD_REPO)
Branchrolling (VYOS_BRANCH). Upstream renamed current to rolling in 2026
CommitPinned in the script: b365961c7513f05e74126924f48873776ed47c1d. VYOS_COMMIT=head follows the branch instead and prints a warning that the result must not be shipped
Build containervyos/vyos-build:rolling, with the digest actually pulled recorded in the source record
FlavorA VyOS build flavor file, rendered with the version and the base substituted in

The base is a rolling release with no snapshots: the apt repository it installs from moves, so two builds a week apart are not the same image. The exact package versions of a given build are recorded in SOURCES-<version>-amd64.txt and in /var/lib/dpkg/status on the image itself. That record, not the pin, is what identifies a build.

The base version is written into /etc/os-release as VYOS_VERSION, in the form <branch>@<commit>. Three places on a running router will tell you what you are on:

bash
cat /etc/os-release            # NAME, ID=wheelhouse, ID_LIKE="vyos debian", VYOS_VERSION
show version                   # VyOS' own op-mode command

and the console banner's last lines, which print Built on VyOS <version> above every login prompt.

The one GPL file Wheelhouse changes#

Not in the image — in the build tooling. The image build applies three substitutions to vyos-build's own scripts/image-build/build-vyos-image:

--iso-application "VyOS"   ->  "Wheelhouse"
--iso-volume "VyOS"        ->  "WHEELHOUSE"
hostname=vyos              ->  hostname=wheelhouse

Each substitution asserts that the string it replaces is really there and fails the build if it is not. The resulting diff is published with every release as vyos-build-wheelhouse-<version>-amd64.patch, is named in the source record, and the build fails if that diff comes out empty. Everything else Wheelhouse contributes to the image is added as new files — the flavor, two branding hooks, the boot splash, the documents under /usr/share/doc/wheelhouse/ and the agent package — and none of them is derived from upstream's.

What the image changes about identity#

ChangeWhy
/etc/os-release becomes Wheelhouse's, keeping ID_LIKE="vyos debian" and VYOS_VERSIONSo monitoring, hostnamectl and Ansible facts see both the product and the base
The boot splash, the boot menus and the console banner are Wheelhouse's ownNone of VyOS' artwork is redistributed in the image
Both bootloaders gain Rescue an installed Wheelhouse system, cloned from each live entry and appended lastUpstream's menu has no rescue path to rename, so this is added rather than rewritten. It is appended so that nothing's default changes, and the clone drops quiet because its messages are the reason it exists
The login banner is set in the default configurationWithout it, upstream's template renders its own welcome, logo and support links onto a machine sold as Wheelhouse. The upstream credit stays, one line, at the bottom
/usr/share/vyos/EULA becomes a symlink to /usr/share/doc/wheelhouse/TERMS.txtA release build otherwise installs VyOS Inc.'s commercial end-user agreement, which governs nothing you bought here. show license reads that path, so it prints the Wheelhouse terms
VyOS' Secure Boot MOK certificate is removed from /var/lib/shim-signed/mokIt is a public certificate rather than a key, and it is not enrolled in firmware, but it is a trust anchor belonging to somebody else

Removing those two files strips no required notice. Every licence and every copyright file stays exactly where the packages put it, under /usr/share/doc/ — Third-party licences.

The branding hook asserts ID=wheelhouse in /etc/os-release afterwards and fails the build if the override stopped winning, so the failure mode is a build that stops rather than an image that calls itself something it is not.

Platform gaps#

What the configuration tree cannot express, with the date it was checked and what Wheelhouse does about it today.

Trademarks, briefly#

VyOS is a registered trademark of Sentrium S.L. Wheelhouse is not affiliated with, endorsed by, certified by or supported by the VyOS project or Sentrium S.L. The images are self-built and rebranded per upstream's trademark policy with attribution intact, and support for this product comes from Wheelhouse — do not ask the VyOS project about it. The full position is on Trademarks.

See also#

Updated 2026-09-18 vyos attribution gpl licences