FreeBSD native · Open source · API-first
DevOps. SecOps. JailOps.
FreeBSD infrastructure, beautifully managed.
A modern platform for FreeBSD jails. Provision, orchestrate, replicate and back up your workloads, from one host to an entire fleet.
One platform, from a single host to a fleet
Jails only, ZFS only. Every host has its own API and console, so a single machine is complete on its own. Hubs and fleets are additive.
-
Projects and trust
Projects are namespaces that are granted networks and storage, with quotas. Certificates, tokens and users carry a role and a project scope, and an empty project list never means everything.
Projects and trust -
ZFS clones, generations, storage
Thin jails are ZFS clones of immutable image generations. Upgrades swap the root and keep your data, and rollback scopes keep root and data decisions apart.
ZFS and images -
VNET and PF networking
Managed bridges with explicit address ranges and one PF anchor per jail. No DHCP, no router advertisements, no SLAAC: addresses are allocated and written down.
Networking -
Encrypted, deduplicated backups
The host chunks, compresses and encrypts. The repository server, on a directory or S3, holds no key and can never read what it stores. This is not ZFS send.
Backups -
Declarative fleets
Fleet managementjailops-syncplans and applies a git repository of YAML across hosts, touches only what it owns, and never deletes anything it did not create. -
API, SDK and consoles
One REST API drives the CLI, the Go SDK,
API and consolesjailops-syncand the web consoles for the host and for the backup node. Nothing is second-class.
See it work
A terminal session and the two web consoles. The terminal output is an example that follows the shape of the real CLI output, using documentation addresses. The console screenshots are taken from the consoles running in demo mode on built-in demo data.
$ jailops network create dmz --subnet 192.0.2.0/24 \ --gateway 192.0.2.1 --range 192.0.2.10-192.0.2.40 network/dmz created $ jailops jail create web --image freebsd-15@stable \ --network dmz --memory 2G --autostart jail/web created $ jailops jail start web jail/web started $ jailops jail list NAME STATE IMAGE GEN ADDRESSES AGE web running freebsd-15@stable g1 192.0.2.10 8s $ jailops jail snapshot create web before-upgrade snapshot/before-upgrade created $ jailops jail upgrade web --dry-run dry-run: would upgrade jail web from g1 to g2
Two consoles, two roles
The host console is embedded in jailopsd. The backup node console is embedded in jailops-backupd, which has no jail, ZFS or key code at all. Each console is its own small app and may only call the API prefixes registered for it.
Open either console in demo mode with ?demo appended to its URL: it runs on canned data and sends nothing to a server.
How it fits together
Hosts are independent and authoritative for their own jails. A hub is optional. The backup node never holds a key.
- The CLI, SDK,
jailops-syncand the web consoles all use the same REST API. A host can be managed directly or through a hub. - If the hub is down, hosts keep working. Moving a jail between hosts is a cold move: there is no live migration.
- The master key lives on the host. The backup node stores and verifies encrypted chunks; restores and deep verification run on a host that holds the key.
One CLI. One API. Every jail.
Your infrastructure. Your jail.
JailOps is pre-release software and is not ready for production use. Read what works today, then build it from source.