Skip to content

Commit 7323324

Browse files
authored
docs: add provider decision matrix (#301)
1 parent 6704b62 commit 7323324

9 files changed

Lines changed: 994 additions & 212 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Added
66

7+
- Added a generated provider decision matrix with checked metadata for execution model, access, substrate, GPU fit, lifecycle, cleanup, and provider caveats; docs validation now fails on provider drift. Thanks @coygeek.
78
- Added `provider: superserve` for delegated Linux sandbox runs through the Superserve control and data planes, including archive sync, retained leases, ownership-guarded lifecycle operations, and credentialed live smoke coverage. Thanks @coygeek.
89
- Added `provider: linode` for direct Linux SSH leases with per-lease keys, account-bound cleanup, preserved operator tags, interface-aware existing firewalls, and guarded live smoke coverage. Thanks @coygeek.
910
- Added `provider: windows-sandbox` for disposable native Windows runs through Microsoft Windows Sandbox, including mapped workspace sync, streamed output, timeout and cancellation cleanup, and keep-on-failure inspection. Thanks @zozo123.

docs/commands/providers.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ Direct self-hosted SSH-lease providers such as `proxmox` and `xcp-ng` report
8888
runs the full lease lifecycle (sync, run, release).
8989
- `delegated-run`: a sandbox or proof runner that owns sync and execution
9090
itself; there is no SSH lease.
91+
- `service-control`: Crabbox can inspect or stop a provider-owned service but
92+
cannot execute arbitrary run commands there.
9193
- `targets`: supported OS and Windows mode combinations, such as `linux`,
9294
`macos`, `windows/normal`, and `windows/wsl2`.
9395
- `features`: advertised capability flags. Possible values include `ssh`,
@@ -103,4 +105,7 @@ Direct self-hosted SSH-lease providers such as `proxmox` and `xcp-ng` report
103105

104106
- [doctor](doctor.md) — local and broker/provider readiness checks.
105107
- [run](run.md) — sync a checkout and run a command on a lease.
108+
- [Provider decision matrix](../providers/README.md#provider-decision-matrix)
109+
richer provider selection guidance, including substrate, access, GPU,
110+
lifecycle, cleanup, best fit, and caveats.
106111
- [Provider reference](../providers/README.md) — per-provider setup and config.

docs/features/provider-authoring.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -478,13 +478,16 @@ Three doc surfaces care about a new provider:
478478

479479
Also add the provider to:
480480

481-
- the provider table in `docs/providers/README.md`;
482-
- the feature matrix in the same file;
481+
- `docs/providers/provider-metadata.json`, including selection, lifecycle,
482+
cleanup, and caveat metadata;
483483
- the index in `docs/features/README.md` if you added a feature page;
484484
- the related-doc lists at the bottom of any pages you cross-link from.
485485

486-
Run `scripts/check-docs.sh` before pushing — it builds the CLI, validates the
487-
command/help surface, checks every internal link, and rebuilds the docs site.
486+
Run `node scripts/generate-provider-matrix.mjs` to regenerate the provider
487+
decision matrix in `docs/providers/README.md`; do not edit the generated table
488+
by hand. Then run `scripts/check-docs.sh` before pushing — it builds the CLI,
489+
validates the provider metadata and command/help surface, checks every internal
490+
link, and rebuilds the docs site.
488491

489492
## Step 11. Ship The PR
490493

docs/features/providers.md

Lines changed: 8 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -50,146 +50,16 @@ matrix still skips it, while `CRABBOX_LIVE_PROVIDERS=incus` and
5050
`CRABBOX_LIVE_DOCTOR_PROVIDERS=incus` run the documented Apple Silicon / local
5151
testbed contract when those prerequisites are actually present.
5252

53-
## Brokered providers
53+
## Choosing a provider
5454

55-
Four providers can be brokered through either coordinator runtime. Brokering
56-
adds lease records, cost guardrails, usage accounting, scheduled cleanup, and
57-
the web portal; the data plane (SSH, rsync, command execution) still runs
58-
directly from the CLI to the box.
55+
Use the [canonical provider decision matrix](../providers/README.md#provider-decision-matrix)
56+
to compare every built-in provider by execution model, access semantics, target
57+
OS, substrate, location, GPU orientation, cleanup behavior, best fit, and main
58+
caveat. The matrix is generated from the live CLI provider spec plus checked-in
59+
selection metadata, so registration and documentation drift fail the docs gate.
5960

60-
```text
61-
hetzner Hetzner Cloud servers (Linux)
62-
aws AWS EC2 instances (Linux, native Windows, Windows WSL2, EC2 Mac)
63-
azure Azure Virtual Machines (Linux, native Windows, Windows WSL2)
64-
gcp Google Cloud Compute Engine (Linux)
65-
```
66-
67-
The `azure` family can also route to the delegated Azure Container Apps Dynamic
68-
Sessions backend with `azure.backend: dynamic-sessions` or
69-
`--azure-backend dynamic-sessions`.
70-
71-
When no coordinator is configured, these providers still work in **direct mode**:
72-
the CLI talks to the cloud API itself using local credentials (AWS SDK chain,
73-
Azure credentials, Google Application Default Credentials,
74-
`HCLOUD_TOKEN`/`HETZNER_TOKEN`, `DIGITALOCEAN_TOKEN` for DigitalOcean, or
75-
`LINODE_TOKEN` for Linode). Direct mode has no coordinator scheduler; cleanup
76-
is best-effort through provider labels and manual `crabbox cleanup`. Prefer the
77-
brokered path when a broker is available.
78-
79-
## Direct SSH-lease providers
80-
81-
These provision or attach an SSH-reachable box and use the standard Crabbox SSH
82-
sync/run/release path. None of them go through the coordinator.
83-
84-
```text
85-
ssh Existing SSH host (no provisioning) Linux, macOS, Windows
86-
digitalocean DigitalOcean Droplets Linux
87-
linode Linode instances Linux
88-
hostinger Hostinger VPSs over public SSH Linux
89-
parallels Parallels Desktop linked clones Linux, macOS, Windows
90-
proxmox Proxmox VE QEMU VM clones Linux
91-
xcp-ng Self-hosted XCP-ng pool over XAPI Linux (normal leases)
92-
incus Incus containers or VMs over SSH Linux
93-
local-container Local Docker-compatible containers Linux
94-
apple-vz Apple Virtualization.framework Linux VM Linux ARM64
95-
multipass Canonical Multipass local Ubuntu VMs Linux
96-
daytona Daytona sandboxes (short-lived SSH) Linux
97-
exe-dev exe.dev managed VMs (public SSH) Linux
98-
kubevirt Generic KubeVirt virtual machines Linux
99-
external Configured executable provider Linux
100-
namespace-devbox Namespace Devboxes Linux
101-
runpod RunPod GPU pods (public SSH) Linux
102-
semaphore Semaphore CI jobs Linux
103-
sprites Sprites microVMs through sprite proxy Linux
104-
```
105-
106-
XCP-ng pools for Crabbox run on dedicated 64-bit x86 server-class hardware.
107-
XCP-ng itself can host Linux, Windows, and BSD guests, but Crabbox's current
108-
`xcp-ng` lease flow provisions Linux templates only. The separate XCP-ng ISO
109-
E2E harness also covers Windows x86_64/x64 installer media. Use the Tart
110-
provider on Apple hardware for macOS VM workflows.
111-
112-
## Delegated-run providers
113-
114-
These run the command inside a sandbox/proof runner; Crabbox does not lease or
115-
SSH into a box. Local sync options (`--no-sync`, rsync flags) are rejected - the
116-
provider owns sync. Most are Linux-only. `anthropic-sandbox-runtime` is local
117-
to the current macOS or Linux host; `windows-sandbox` is local to a Windows
118-
host.
119-
120-
```text
121-
cloudflare Cloudflare Containers (Worker runtime)
122-
azure-dynamic-sessions Azure Container Apps custom-container Dynamic Sessions
123-
docker-sandbox Docker Sandboxes through the standalone sbx CLI
124-
e2b E2B Firecracker sandboxes
125-
freestyle Freestyle VMs
126-
islo Islo sandboxes
127-
modal Modal Sandboxes
128-
opencomputer OpenComputer Linux VMs
129-
anthropic-sandbox-runtime Anthropic Sandbox Runtime through the local srt CLI
130-
smolvm Smol Machines microVM sandboxes (delegated via smolfleet)
131-
superserve Superserve hosted Linux sandboxes
132-
tensorlake Tensorlake Firecracker sandboxes
133-
upstash-box Upstash sandboxes
134-
blacksmith-testbox Blacksmith CI test runner (proof/session)
135-
wandb Weights & Biases run sandboxes
136-
windows-sandbox Windows Sandbox on the local Windows host
137-
```
138-
139-
## Service-control providers
140-
141-
These expose provider-native service inspection/control without an arbitrary
142-
command execution contract.
143-
144-
```text
145-
railway Railway service status and stop controls
146-
```
147-
148-
## Provider pages
149-
150-
- [Provider reference](../providers/README.md): one page per built-in backend.
151-
- [AWS](../providers/aws.md): EC2 Linux, Windows, WSL2, EC2 Mac, capacity, AMIs, security groups.
152-
- [Azure](../providers/azure.md): Azure Linux/native Windows, shared infra, capacity, cleanup.
153-
- [Azure Dynamic Sessions](../providers/azure-dynamic-sessions.md): delegated Azure Container Apps sandbox execution.
154-
- [Google Cloud](../providers/gcp.md): GCP Compute Engine SSH leases.
155-
- [Hetzner](../providers/hetzner.md): Linux-only managed provider, classes, cleanup.
156-
- [DigitalOcean](../providers/digitalocean.md): direct Linux Droplet leases.
157-
- [Linode](../providers/linode.md): direct Linux instance leases.
158-
- [Hostinger](../providers/hostinger.md): direct Linux VPS leases with explicit purchase opt-in and stop-only release.
159-
- [Static SSH](../providers/ssh.md): existing Linux, macOS, and Windows SSH hosts.
160-
- [Parallels](../providers/parallels.md): local or remote Mac Parallels Desktop VM clones and small Mac fleets.
161-
- [Proxmox](../providers/proxmox.md): direct Proxmox VE Linux QEMU VM clones.
162-
- [XCP-ng](../providers/xcp-ng.md): direct XCP-ng provider on dedicated x86_64 pool hardware. Crabbox normal leases use Linux templates; the separate ISO E2E harness also covers Windows x86_64/x64 installers.
163-
- [Incus](../providers/incus.md): direct Incus Linux SSH leases plus an opt-in Apple Silicon / local live smoke contract.
164-
- [Local Container](../providers/local-container.md): local Linux containers through Docker-compatible runtimes.
165-
- [Apple VZ](../providers/apple-vz.md): local Linux VMs through Apple's `Virtualization.framework`.
166-
- [Multipass](../providers/multipass.md): local Ubuntu VMs through Canonical Multipass.
167-
- [Daytona](../providers/daytona.md): Daytona SDK/toolbox sandbox leases.
168-
- [exe.dev](../providers/exe-dev.md): exe.dev VMs exposed as SSH leases.
169-
- [KubeVirt](../providers/kubevirt.md): generic KubeVirt VMs over Kubernetes control-plane forwarding.
170-
- [External](../providers/external.md): configured executable provider protocol for private integrations.
171-
- [Namespace Devbox](../providers/namespace-devbox.md): Namespace Devbox SSH leases.
172-
- [Railway](../providers/railway.md): Railway service status and stop controls.
173-
- [RunPod](../providers/runpod.md): RunPod GPU pods over public SSH.
174-
- [Semaphore](../providers/semaphore.md): Semaphore CI job leases.
175-
- [Sprites](../providers/sprites.md): Sprites microVM SSH leases through `sprite proxy`.
176-
- [Tenki](../providers/tenki.md): Tenki sandbox VM SSH leases through `tenki sandbox ssh-proxy`.
177-
- [Cloudflare](../providers/cloudflare.md): delegated Cloudflare Containers execution.
178-
- [Docker Sandbox](../providers/docker-sandbox.md): delegated Docker Sandbox execution through the standalone `sbx` CLI.
179-
- [Anthropic Sandbox Runtime](../providers/anthropic-sandbox-runtime.md): local one-shot delegated execution through `srt` on macOS/Linux.
180-
- [Islo](../providers/islo.md): delegated Islo sandbox execution.
181-
- [E2B](../providers/e2b.md): delegated E2B sandbox execution.
182-
- [Freestyle](../providers/freestyle.md): delegated Freestyle VM execution.
183-
- [Modal](../providers/modal.md): delegated Modal Sandbox execution.
184-
- [OpenComputer](../providers/opencomputer.md): delegated OpenComputer Linux VM execution through the OpenComputer REST API.
185-
- [Tensorlake](../providers/tensorlake.md): delegated Tensorlake Firecracker sandbox execution.
186-
- [Upstash Box](../providers/upstash-box.md): delegated Upstash sandbox execution.
187-
- [SmolVM](../providers/smolvm.md): delegated Smol Machines microVM execution via smolfleet.
188-
- [Superserve](../providers/superserve.md): delegated Superserve hosted Linux sandbox execution.
189-
- [Blacksmith Testbox](../providers/blacksmith-testbox.md): delegated Blacksmith CI runner.
190-
- [Weights & Biases](../providers/wandb.md): delegated W&B run sandbox execution.
191-
- [Windows Sandbox](../providers/windows-sandbox.md): delegated Windows Sandbox execution on a local Windows host.
192-
- [Provider backends](../provider-backends.md): guide for adding a new provider/backend/plugin.
61+
`crabbox providers --json` remains the low-level live spec. `crabbox doctor`
62+
checks whether the selected provider is usable from the current environment.
19363

19464
## Machine classes
19565

0 commit comments

Comments
 (0)