Wheelhouse

Pricing#

One sentence, and it is testable on your own box: a licence unlocks configuration changes. Reading never needs one.

The plans#

PlanRouters per licenceWhat it unlocksPrice
UnlicensedanyRead-only, forever. Every page, counter, log and audit entry. No changes.free
Proup to 5Staged diffs with commit-confirm auto-rollback, revision rollback, the app store, desired-state reconcile, the fleet viewmonthly, <TODO: owner>
BusinessunlimitedThe above, plus fleet policy, OIDC single sign-on with group-to-role mapping, three server-enforced roles and the attributed audit log, and priority supportmonthly, <TODO: owner>

From PRICING.md, which is the decision record rather than a marketing page.

Unlicensed is a real tier#

Not a trial that expires into a brick. An unlicensed or lapsed router:

  • signs you in, with your accounts, TOTP and single sign-on working as normal;
  • shows every page, every counter, every log line, the whole configuration tree and the whole audit trail;
  • serves /metrics;
  • refuses to stage, commit, roll back, install apps or reconcile, answering 402 with a plain sentence and a link to the Licence page.

Losing sight of your network because a card expired would be a worse product than losing the ability to change it. That is the reasoning, and it is written into the code's own comments rather than only into this page.

Exactly what the gate covers#

It is one middleware function wrapped around a specific list of routes, and the list is short enough to print. Re-derive it any time with:

bash
grep -n 'licensed(' agent/main.go

Behind the gate: POST /api/stage, /api/stage/remove, /api/commit, /api/commit/confirm, /api/discard, /api/configure, /api/rollback, /api/config/save, /api/config/load, /api/reconcile, /api/capture, and the app-store actions (plan, pull, prepare, update, restart, feature, and deleting an image).

Not behind the gate: sign-in and everything under /api/auth/, every GET, the audit log, /metrics, and wheelhouse-agent plan.

What a key is, and what it does on the network#

A key is WHL1.<kid>.<payload>.<signature> — a signed statement of the plan, the feature list, the router limit, the expiry and the grace period. The agent verifies it offline against a public key compiled into its binary, so a router with no route to the internet still knows what it holds.

While the licence server is reachable the agent refreshes once a day and receives a token whose expiry follows the subscription. A router that stays offline keeps working until the token's expiry plus a seven-day grace period, and the interface warns during the grace window with the date changes will stop.

The refresh is one request every 24 hours carrying four fields: the key, a fingerprint of the installation, the host name and the agent version. Nothing else ever leaves the router. It can be turned off with one flag, and the trade is spelled out on the privacy page.

One detail worth knowing, because it shows what kind of gate this is: if the router's clock reads earlier than the licence was issued, the agent stays open and says why rather than closing the write plane. A forward jump from a broken NTP peer would otherwise lock set service ntp behind the fault it caused.

Guardrails#

  • The gate is commercial, not a security boundary. It is a self-hosted binary and the product's own security documentation says so in those words. The aim is that paying is easier than patching.
  • The GPL boundary is unchanged. The licence covers Wheelhouse's code — the agent and the interface — not the operating system underneath, which is GPL and whose corresponding source ships with every release.
  • The router limit counts installations that have activated the key. A retired router is freed from the licence page.
  • Billing would be Stripe's, if it existed: Checkout to buy, webhooks to issue and renew, the customer portal to cancel. The licence server never sees a card.

The fleet caveat, before you buy for a fleet#

What has to exist before anyone can be charged#

  1. Both monthly figures.
  2. A licence agreement — grant, term, restrictions, warranty disclaimer, liability cap, governing law. What ships today is a stopgap that says in its own first paragraph that it has not been through legal review.
  3. Terms of service: billing cadence, cancellation, refunds, and what the router does at the end of a term. The read-only promise on this page belongs there as a commitment, not here as a design note.

Those are on the terms and licence agreement placeholders, which say so rather than inventing any.

Read on#

Updated 2026-09-02