Its own kernel, real root
KVM and Cloud Hypervisor, one Linux kernel per Cat. apt install just works — no rootless workaround.
That is not a turn of phrase. Treat the environment as a task and state becomes a by-product, stopping means discarding, and the bill follows what you requested. Treat it as a machine and all three invert. Everything below is a consequence of that one choice, not a feature list.
$ cats create dev Creating persistent RootDisk… ready $ cats exec dev -- apt install -y ripgrep as root, on unmodified ext4 work leases reached zero → suspended · process state kept $ cats exec dev -- rg TODO src/ woken · same process, same disk src/main.rs:42: // TODO: converge the retry policy
If it is a machine, turning it off cannot mean losing it. That single requirement shapes the whole storage layer: object storage holds the truth, the local disk is only a cache, and the promise has to be testable.
A testable promise, not an adjective. It is the oracle for every crash-recovery test we run.
Wipe it entirely and the disk still refills chunk by chunk on read, with a byte-identical file tree.
Writing a few files does not upload a whole virtual disk. The engine commits the logical chunks that actually changed.
Change the image, change the shape, delete the Cat — the data stays put and mounts onto the next one. No destroy-and-recreate, no copying files out by hand.
“A container that feels like a VM” holds up in a demo and leaks under real work. We draw the boundary at hardware virtualisation rather than at word choice.
KVM and Cloud Hypervisor, one Linux kernel per Cat. apt install just works — no rootless workaround.
The Guest sees a standard virtio block device, not object storage behind FUSE. So git, SQLite and node_modules behave exactly as they do on your laptop — atomic rename included.
Object storage, the metadata store and leases are all platform internals. Nothing running inside the Guest can reach them.
A single vague “sleep” hides three very different trade-offs. We put them on the table: each state says what it keeps, what it releases, and whether it is still tied to the Host it started on.
vCPUs execute, memory is resident, the disk keeps publishing durable generations, and the Endpoint serves traffic.
Full computevCPUs pause and Guest memory is reclaimed into local backing, with process state kept exactly as it was. Buys the shortest path back.
Process state keptA local snapshot lands and the VMM exits: dedicated runtime RSS goes to zero while process state survives. Trades a little wake time for resident memory.
Zero resident, still statefulEvery Host-local dependency is released; only the remote disk and control-plane record remain. Any healthy Host can bring it back.
No Host affinityThe ladder only descends, and waking always returns to Running. One hard rule holds it together: any failed fast recovery must converge to a clean Cold boot — never a stuck intermediate state. Slower is acceptable; not knowing which state you are in is not.
The industry habit is to infer it from an idle timer, a CPU threshold or network silence. Guess wrong and you either suspend live work or keep paying for an environment nobody is using. We hand that judgement back to your programs.
A Cat does not sleep after a quiet interval. It tries to suspend immediately once no work is known to remain.
Platform entry points (HTTP, exec, shell) hold a work lease automatically; your own programs can hold one too. Only at zero leases does it sleep.
It does not scan /proc, watch load, or guess at process names. A long-running background job either takes a lease or turns auto-suspend off.
Every Cat gets a stable *.cats.run address bound to its name, not to a Host. Traffic arriving there wakes it — you do not have to call an API first.
If the bill follows the shape you requested, then “it can sleep” is only marketing — an idle machine still burns money. So the metering basis has to be measured.
CPU from the cgroup's accumulated time, memory from the time integral of memory.current. Configure 4 GiB but keep a 1 GiB resident set and you are billed for 1 GiB.
There is no invocation line item. A long-lived machine that is accessed occasionally should not get more expensive per visit the rarer those visits are.
Warm leaves dedicated runtime RSS at zero. That is what makes “it can sleep” save money instead of just naming a state.
Storage and lifecycle bugs are usually silent — you do not notice them, you discover months later that the data is wrong. So we pin the semantics and leave reproducible evidence first, and optimise the path second.
Every attachment carries a fencing epoch, so a Host that returns after a partition cannot overwrite the current writer. That one has crash-injection tests behind it, not just design intent.
The block frontend only adapts a protocol. Whichever path a Cat runs on, the commit protocol, dirty tracking, leases and crash recovery are identical, and both share one correctness suite.
Concurrent wakes are admitted against a node budget accounted in the memory bytes they must read back. Excess wakes wait rather than being rejected into a full cold boot.
Every performance number in our docs carries its sample count, hardware and measurement boundary. A prototype measurement never becomes a production promise — you get to judge whether it applies to your workload.
No subscription, no seats, no per-request fee. Every new user's Personal Account receives a one-time $10 credit; top up securely through Stripe when the balance runs low.
Sampled from accumulated cgroup CPU time and priced in exact integers — not from the core count you requested.
Billed on the time integral of actual memory use — not the size you configured. One GiB is 2³⁰ bytes.
Granted once to a new user's Personal Billing Account; creating an Organization or Workspace does not grant it again. The console shows near-real-time usage, balance and per-Cat detail.
Claim $10 and startAmounts are provisional during an open period and settle once usage data is stable. Suspended and Warm remain distinct lifecycle states; the above covers the CPU and memory line items published today.
Create a persistent workspace, install something, let it sleep for a while, then come back and see whether it is still where you left it.