Skip to content
MicrockPublic

About

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

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

raft logo

raft

ci badge license badge


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. Raft is not affiliated with Boat.

setup | feature parity | verification | agent skill | 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

Python wheels and source archives are also available in releases. npm installation does not set up hosts or download workspace images.

requirement minimum
host dedicated ARM64 or AMD64 Ubuntu host, 2 CPUs, 8 GiB RAM, 80 GiB free disk
host access SSH and passwordless sudo
controller Linux, Python 3.11.8+, SSH and SCP; npm or uv for installation

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)
raft exec "$box" -- node --version
raft ssh "$box"
raft stop "$box"

raft stop and expiration keep persistent boxes on disk. new --disposable deletes a temporary box when it stops or expires. raft resume starts the box with a new lifetime. raft destroy deletes the box and its snapshots. disposable creation and retention cleanup require the current host worker; redeploy from the current checkout before using them.

each host allows four saved boxes, including stopped ones. raft limits reports current allocations, free disk space and recommended running counts for each size. see host capacity.

image and workspace control

the image builder starts with Debian 13 and installs language runtimes, build tools, Docker, Chromium, FFmpeg and a noVNC desktop. 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, 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 ✅ ✅ 1 or 2 CPUs, 1, 2 or 4 GiB RAM. Disk usage covers the shared pool
Host capacity recommendations ❌ ✅ Raft recommends running capacity and enforces four saved boxes. Boat reports plan limits
Root terminal and command execution ✅ ✅ Host SSH transport
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 ✅ ✅ 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 within supported sizes
CLI-wide JSON mode ✅ ❌ Boat JSON/JSONL; Raft list/info/usage/limits plus prune JSONL
Snapshot file browsing/download ✅ ❌ Whole-box backup only
Strict per-box disk quotas ✅ ❌ Shared 60 GiB Btrfs pool
Separate-kernel VM isolation ✅ ❌ Container runtime
Named environments and managed secrets ✅ ❌ Manual configuration
Organizations and webhooks ✅ ❌ Raft is single-operator; no event API
Dashboard, remote API and SDK ✅ ❌ CLI only
Managed agent conversations ✅ ❌ Not implemented
Automatic deletion and retention ✅ ✅ Disposable deletion; opt-in age-based prune with preview
CLI self-update ✅ ❌ Standard npm or Python package installation

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

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages