Skip to content
MicrockPublic

About

self-hosted persistent Linux workspaces. open-source alternative to boat.dev

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Repository files navigation

raft logo

raft

release ci status npm total downloads license


raft is an independent, self-hosted open-source alternative to boat.dev. it gives you persistent Linux boxes on machines you control, with command execution, Docker, file transfer, snapshots, forks and a private desktop. boxes are unprivileged Incus containers that share the host kernel. use trusted workloads only: your SSH identity controls the host. Raft is not affiliated with Boat.

raft-intro.mp4

setup | feature parity | verification | agent skill | sandbox sdk provider | docs site

quickstart

follow the setup guide to install the CLI, configure SSH, set up Incus and download or build an image.

install the CLI on Linux with Python 3.11.8+:

npm install -g @microck/raft
raft --version
requirement minimum
host dedicated ARM64 or AMD64 Ubuntu host, 2 CPUs, 8 GiB RAM, 80 GiB free disk, plus the pool size if you enable own box disks
host access SSH and passwordless sudo
controller Linux, Python 3.11.8+, SSH and SCP; npm or uv for installation

then onboard a dedicated Ubuntu host over key-based SSH. raft host add checks the host, shows its plan, provisions Incus, imports a verified image and runs a smoke test:

raft host add lab --ssh ubuntu@192.0.2.10

once your host and image are configured, run the commands below. replace lab with a location from your configuration:

box=$(raft new --location lab --ttl 600 --persistent --purpose "Explore Raft" --owner "local operator" --next "Destroy after exploring")
raft exec "$box" -- node --version
raft ssh "$box"
raft stop "$box"

image and workspace control

the image builder starts with Debian 13 and installs language runtimes, build tools, Docker, Chromium, FFmpeg and a Voxl desktop with optional noVNC. build your own image or download an image for your host architecture from versioned releases. pin its fingerprint in your configuration. see image builds and boot measurements for checks and timings.

see the task guides for background jobs, file transfer, snapshots and forks, private services and desktops, backup and recovery and Docker.

See project setup and templates, persistent services, scripting and CI, disposable CI jobs, and upgrades for complete operator workflows.

stop the source box before taking a snapshot, restoring one or making a fork. stopping a box ends its jobs without saving process memory.

backups include the box's files and credentials. keep them private and import only trusted exports. a long backup can delay expiration checks on its host.

startup performance

median startup times from five runs per architecture on native Ubuntu 24 CI hosts. each box had one CPU, 2 GiB RAM and a cached image:

measurement ARM64 AMD64
command ready after create 0.87 s 1.38 s
Docker ready after create 2.28 s 3.04 s
desktop, after its separate start request 1.12 s 1.59 s
compressed development image 1.79 GiB 1.86 GiB

times depend on hardware, installed software and services, storage, image cache and SSH latency. the measurements include CLI and SSH overhead. they exclude image downloads and host reboots.

the first image unpack can take longer. the runners used different hardware, so these results do not show that ARM64 is faster.

both native images passed the lifecycle tests and all 31 development-tool checks. see measurements and methodology for raw samples, resume timings and the measured image-size and desktop-startup improvements.

feature parity

✅ supported · ❌ unavailable · ❓ not established in Boat's docs. matching checks do not imply identical behavior. the full comparison records differences, sources and test coverage.

Capability Boat Raft Raft limits / differences
Self-hosting on operator hardware ❌ ✅ Incus on your hosts
Native ARM64 workspaces ❌ ✅ Boat documents x86_64 machines only
Create/list/inspect/delete ✅ ✅ Single operator
Persistent stop/resume ✅ ✅ Shared host kernel
TTL and lifetime extension ✅ ✅ Persistent boxes retain disk; disposable boxes delete
CPU/memory sizing and usage ✅ ✅ Any whole CPU count and GiB size up to the host. Usage covers the shared pool or the box's own disk
Host capacity estimates ❌ ✅ Advisory only; Raft has no box count limit. Boat reports plan limits
Root terminal and command execution ✅ ✅ Host SSH transport
Disposable foreground CI jobs ✅ ✅ raft run provides a fixed timeout, Git-aware upload, artifact collection and guarded cleanup
Background jobs, logs and cancellation ✅ ✅ No process checkpoints
File upload/download ✅ ✅ Files and recursive trees; new directory destinations only
Snapshots and same-host forks ✅ ✅ Stopped source, checked under the lifecycle lock
Deploy/delete named snapshots ✅ ✅ Same-host templates and named snapshot deletion
Portable backup/recovery ❓ ✅ Raft native archives; Boat whole-instance archive import is not established
Docker and development tools ✅ ✅ Native ARM64 and AMD64 images. See image tests
Private port forwarding ✅ ✅ Local SSH tunnel
Desktop access ✅ ✅ Voxl by default; optional noVNC; see verification limits
Reverse forwarding ✅ ❌ Not implemented
Public workspace hosting and browser-only streaming ✅ ❌ Not implemented
Resize on resume/fork ✅ ✅ Optional CPU/RAM overrides; disks keep their size
CLI-wide JSON mode ✅ ❌ Boat JSON/JSONL; Raft list/info/usage/capacity/config plus prune JSONL
Snapshot file browsing/download ✅ ❌ Whole-box backup only
Strict per-box disk quotas ✅ ✅ On hosts deployed with --disk-pool, new --disk SIZE gives a box its own fixed-size, copy-on-write disk; the default shared pool has none
Separate-kernel VM isolation ✅ ❌ Container runtime
Named environments and managed secrets ✅ ❌ Manual configuration
Organizations and webhooks ✅ ❌ Raft is single-operator; no event API
Dashboard and remote API ✅ ❌ CLI and Sandbox SDK provider; no dashboard or remote API
Managed agent conversations ✅ ❌ Not implemented
Automatic deletion and retention ✅ ✅ Disposable deletion, optionally by default; per-host retention deletes boxes stopped for N hours; age-based prune with preview
CLI self-update ✅ ✅ Explicit raft self-update for npm and uv installs plus a daily stderr notice. Boat also updates itself after commands; Raft only notifies

verification and development

run uv sync --locked to install dependencies and uv run raft --help to check the CLI. verification lists the real-host test suites. they create disposable boxes and remove only their own fixtures.

the optional --restart-incus check restarts the host's Incus daemon. run it on dedicated test infrastructure.

the tests cover Raft's behavior. they do not compare it against the live Boat service. Raft has not had a security audit.

read the contract, architecture and references and the optional agent skill.

license

MIT. third-party tools retain their own licenses.

About

self-hosted persistent Linux workspaces. open-source alternative to boat.dev

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages