toa://toafleet
Your whole server fleet, one panel.
OVERVIEW
fleet is the toa:// control plane for your servers — wherever they live. Connect the providers you already use (your Incus home lab, your Hetzner Cloud account) and it pulls every instance into one panel: status, type, IP, specs, with start/stop/reboot a click away. It’s an aggregator, not a host — you bring accounts you already own, and your credentials are encrypted and never shown back. Built multi-tenant with Postgres row-level security like the rest of the suite (each tenant sees only their own), and pluggable so a new provider is just one more adapter.
FEATURES
One panel, many providers
Connect Incus (your home lab — LXC containers + KVM VMs) and Hetzner Cloud, and see every instance in one list — status, type, IP, region, specs — instead of juggling dashboards.
Pluggable by design
A normalized instance model behind a Provider adapter layer. Adding OVH or another provider later is one new adapter — the core never changes.
Observe + operate
Start, stop and reboot instances across all connected providers, with a confirmation on every action and an append-only audit log of who did what.
Credentials stay sealed
Provider tokens and certs are encrypted at rest, write-only (never shown again), and decrypted in memory only for the moment a provider is called.
Multi-tenant + private
Each tenant connects their own accounts and sees only their own instances — Postgres FORCE row-level security with a non-superuser owner isolates everything. Single sign-on via toa://auth.
WHAT'S NEW
- changed UI is now English + correct branding — translated all remaining Norwegian interface text to English and fixed leftover
toa://labbranding to toa://fleet (the app was renamed from toalab). Internaltypes/labmodule renamed totypes/fleet.
- fixed Stuck install jobs time out — a running install job whose Incus operation can no longer be resolved (e.g. the operation was garbage-collected) is now marked
failedafter 30 minutes instead of stayingrunningforever. Fresh jobs are unaffected; the failed badge no longer shows a(null)exit code.
- added Expose an installed app in one click — a "Eksponer på domene"-button on a finished install job opens the domain-exposure form with the app's port pre-filled, so publishing a freshly-installed app takes only a domain. Reuses the existing exposure flow; Incus + exposure-capable connections.
API