{
 "features_resolved": {
  "snapshot_any": true,
  "snapshot_mem": false,
  "fork": false,
  "pause_resume": false,
  "persistent_disk": false,
  "whole_disk": null,
  "persist_scope": null,
  "volumes": true,
  "auto_stop_idle": true,
  "long_sessions": true,
  "custom_image": true,
  "image_snapshot": true,
  "image_oci": true,
  "vm_isolation": true,
  "docker_inside": true,
  "nested_virt": false,
  "root": true,
  "systemd": null,
  "browser": false,
  "desktop": false,
  "computer_use": false,
  "code_interpreter": true,
  "browser_control": null,
  "desktop_control": null,
  "browser_and_desktop": false,
  "anti_bot": false,
  "captcha_solving": false,
  "residential_ip": false,
  "agent_harnesses": true,
  "ssh": true,
  "public_ipv4": false,
  "inbound_https": true,
  "custom_domain": true,
  "raw_tcp_inbound": false,
  "egress_allowlist": true,
  "open_internet": true,
  "static_egress_ip": false,
  "private_network": false,
  "self_host": false,
  "byoc": false,
  "open_source": true,
  "soc2": true,
  "hipaa": true,
  "sso": true,
  "gpu": false,
  "arm64": false,
  "windows": false,
  "macos": false,
  "lang_python": true,
  "lang_node": true,
  "lang_go": null,
  "lang_rust": null,
  "lang_java": null,
  "gpu_desktop": false,
  "credential_injection": true,
  "egress_http_rules": true,
  "wake_on_request": true,
  "live_resize": false,
  "fork_running": false,
  "memory_snapshot_fork": false,
  "webhooks": false,
  "scheduled_wakeups": null,
  "audit_logs": true,
  "eu_data_residency": true,
  "zero_data_retention": null,
  "scoped_api_keys": null,
  "spend_limits": false,
  "mcp_server": false,
  "usage_api": null,
  "snapshot_auto": false,
  "snapshot_on_demand": true,
  "harness_api": true,
  "own_agent_api": false,
  "fast_boot": true,
  "strong_isolation": true,
  "ingress_rules": true,
  "guest_firewall": false,
  "secret_proxy": true,
  "secret_proxy_any": true,
  "volume_attach": true,
  "volume_shared": true,
  "sidecar": null,
  "fuse": true,
  "kernel_features": true,
  "burst": null
 },
 "company": {
  "id": "cloudflare-sandbox",
  "checked": "2026-09-30",
  "company": "Cloudflare, Inc.",
  "ownership": {
   "value": "public",
   "parent": null,
   "source": "https://en.wikipedia.org/wiki/Cloudflare",
   "quote": "The company went public on the New York Stock Exchange in 2019 under the ticker symbol NET."
  },
  "stage": {
   "value": "public",
   "source": "https://en.wikipedia.org/wiki/Cloudflare",
   "quote": "On August 15, 2019, Cloudflare submitted its S-1 filing for an initial public offering on the New York Stock Exchange under the stock ticker NET. It opened for public trading on September 13, 2019, at $15 per share.",
   "confidence": "high",
   "note": "Cloudflare (parent company of the Sandbox SDK / Containers product) has been a public company (NYSE: NET) since its September 13, 2019 IPO. The Sandbox SDK / Containers product itself is a feature of the Workers platform, not a separately funded entity."
  },
  "accelerators": [],
  "total_funding_usd": {
   "value": 332000000,
   "status": "estimated",
   "basis": "Widely cited aggregator figure (Crunchbase-style tally of Cloudflare's pre-IPO venture rounds, Seed through Series E, 2010-2019); not independently re-confirmed against a primary filing in this pass.",
   "source": "https://en.wikipedia.org/wiki/Cloudflare",
   "quote": "In 2009, the company was venture-capital funded."
  },
  "last_round": {
   "type": "public (IPO)",
   "amount_usd": 525000000,
   "date": "2019-09",
   "leads": [],
   "status": "confirmed",
   "source": "https://en.wikipedia.org/wiki/Cloudflare",
   "quote": "It opened for public trading on September 13, 2019, at $15 per share."
  },
  "investors": [
   "Franklin Templeton",
   "Fidelity",
   "Baidu Capital",
   "Qualcomm Ventures",
   "Google Capital (CapitalG)",
   "New Enterprise Associates",
   "Venrock",
   "Pelion Venture Partners",
   "Union Square Ventures",
   "Greenspring Associates",
   "Microsoft",
   "NEA"
  ],
  "portfolio_listings": [
   {
    "source": "NEA",
    "company": "Cloudflare",
    "batch": 2010,
    "how": "domain"
   }
  ],
  "revenue": {
   "value_usd": 2167900000,
   "kind": "annual revenue",
   "as_of": "2025",
   "status": "confirmed",
   "basis": "Cloudflare, Inc. company-wide GAAP revenue (NYSE: NET); figure is for the whole public company, not broken out for the Sandbox SDK / Containers product specifically.",
   "source": "https://www.cloudflare.com/press-releases/2026/cloudflare-announces-fourth-quarter-and-fiscal-year-2025-financial-results/",
   "quote": "fiscal year 2025 revenue totaled $2,167.9 million, representing an increase of 30"
  },
  "employees": {
   "value": 5156,
   "source": "https://en.wikipedia.org/wiki/Cloudflare"
  },
  "note": "Cloudflare Sandbox SDK / Containers is a product feature of Cloudflare's Workers developer platform, not a standalone company. Cloudflare, Inc. (NYSE: NET) is a public company founded in 2009 by Matthew Prince, Michelle Zatlyn, and Lee Holloway, headquartered in San Francisco; it IPO'd September 13, 2019. Company-wide revenue ($2.168B FY2025, $1.670B FY2024) and employee count are for all of Cloudflare, not this specific product; the Sandbox SDK/container bridge code is open source but the underlying execution platform cannot be self-hosted."
 },
 "id": "cloudflare-sandbox",
 "name": "Cloudflare Sandbox SDK / Containers",
 "url": "https://developers.cloudflare.com/containers/platform/pricing/",
 "category": "agent-sandbox",
 "isolation": "vm",
 "modes": [
  {
   "key": "on-demand",
   "label": "Pay-as-you-go (active CPU, provisioned RAM/disk)",
   "pricing": "resource",
   "vcpu_h": 0.072,
   "ram_gib_h": 0.009,
   "cpu_basis": "active",
   "ram_basis": "alloc",
   "active_floor": 0,
   "ram_per_vcpu": [
    3,
    null
   ],
   "ram_fixed_per_vcpu": null,
   "vcpu_options": null,
   "min_vcpu": null,
   "max_vcpu": 4,
   "max_ram_gib": 12,
   "sizes": null,
   "pool_tiers": null,
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 0,
   "granularity_s": 0.01,
   "start_fee": 0,
   "boot_overhead_s": 2,
   "multiplier": 1,
   "windows_vcpu_h": null,
   "gpu": null,
   "note": "CPU $0.00002/vCPU-s on active usage only (since 2025-11-21); memory $0.0000025/GiB-s and disk $0.00000007/GB-s ($0.000252/GB-h) on provisioned size while running, 10 ms granularity. Custom types: 1-4 vCPU, >=3 GiB/vCPU, <=12 GiB, <=20 GB disk; presets lite(1/16 vCPU,256MiB) basic(1/4,1GiB) standard-1(1/2,4GiB) standard-2(1,6GiB) standard-3(2,8GiB) standard-4(4,12GiB,20GB). 4 vCPU/8 GiB forces 12 GiB. Provisioned disk (~$0.005/h for 20 GB) is NOT in these rates. boot_overhead_s = ~2 s cold start (docs: billing starts at request; 1-3 s; ComputeSDK median 2.0 s). Idle tail billed at RAM+disk (not modelled): the Container class defaults sleepAfter to 10 min (\"The `Container` class sets `sleepAfter` to 10 minutes by default.\" https://developers.cloudflare.com/containers/faq/, 2026-10-14); the current Sandbox lifetime docs set no default (\"Without a timeout, Cloudflare stops the instance shortly after the Durable Object becomes inactive.\") and cap setInactivityTimeout() at 6 hours (https://developers.cloudflare.com/sandbox/concepts/lifetime/, 2026-10-14). keepAlive always-on uses the same rates (no commit discount). Basis verified 2026-09-28: CPU billed on \"active usage only\"; memory and disk on \"provisioned resources for the instance type you select\"; \"Charges stop after the container instance goes to sleep, which can happen automatically after a timeout.\" (https://developers.cloudflare.com/containers/pricing/). Legacy Sandbox SDK 0.x docs: sleep after \"a period of inactivity (10 minutes by default, configurable via sleepAfter)\" (https://developers.cloudflare.com/sandbox/sdk/concepts/sandboxes/).",
   "flags": [],
   "features": {
    "isolation": "vm"
   }
  }
 ],
 "storage": {
  "included_disk_gib": 0,
  "disk_gib_month": 0.18396,
  "disk_billed_when_stopped": false,
  "snapshot_gib_month": 0.015,
  "paused_ram_billed": false,
  "snapshot_free_gib_account": 10
 },
 "network": {
  "egress_free_gib": 1000,
  "egress_gib": 0.025,
  "ipv4_month": null,
  "ipv4_available": false,
  "internet": {
   "default": "configurable",
   "evidence": [
    {
     "quote": "By default, a Container will allow internet access, and you can set `deniedHosts` to disallow specific hosts or IPs.",
     "url": "https://developers.cloudflare.com/containers/platform-details/outbound-traffic/"
    },
    {
     "quote": "Only ports `80` and `443` are available.",
     "url": "https://developers.cloudflare.com/containers/platform-details/outbound-traffic/"
    },
    {
     "quote": "A Container starts with `enableInternet: false` by default, so it cannot reach the Internet. Only requests that an outbound handler in your Worker intercepts leave it.",
     "url": "https://developers.cloudflare.com/sandbox/concepts/security/"
    },
    {
     "quote": "By default, a Sandbox allows internet access, and you can set `deniedHosts` to disallow specific hosts or IPs:",
     "url": "https://developers.cloudflare.com/sandbox/sdk/guides/outbound-traffic/"
    }
   ],
   "note": "Docs conflict on the default (checked 2026-10-14): the current Sandbox security page says a Container starts with Internet access off, while the Containers outbound-traffic page (updated 2026-10-12) and the legacy Sandbox SDK 0.x guide say Internet access is on by default. Either way it is one setting (enableInternet), so 'configurable' holds."
  }
 },
 "plans": [
  {
   "name": "Workers Free",
   "fee": 0,
   "fee_is_credit": false,
   "included_usd": 0,
   "per_seat": 0,
   "concurrency": 0,
   "max_session_h": null,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": [],
   "note": "Containers / Sandbox not available on Free (N/A).",
   "flags": []
  },
  {
   "name": "Workers Paid",
   "max_total_vcpu": 1500,
   "max_total_ram_gib": 6144,
   "fee": 5,
   "fee_is_credit": false,
   "included_usd": 0.7254,
   "per_seat": 0,
   "concurrency": null,
   "max_session_h": null,
   "max_vcpu": 4,
   "max_ram_gib": 12,
   "sizes_allowed": null,
   "note": "$5/mo account minimum, not a credit. Includes 375 vCPU-min ($0.45) + 25 GiB-h ($0.225) + 200 GB-h disk ($0.0504) of Containers per month (resource-specific, expressed here as $0.7254), plus 10M Worker requests, 30M Worker CPU-ms, 1M DO requests, 400k DO GB-s, 20M log events. Concurrency is resource-capped per account: 1,500 vCPU / 6 TiB RAM / 30 TB disk running (=375 standard-4), raisable.",
   "flags": []
  },
  {
   "name": "Enterprise",
   "fee": null,
   "fee_is_credit": false,
   "included_usd": null,
   "per_seat": null,
   "concurrency": null,
   "max_session_h": null,
   "max_vcpu": 4,
   "max_ram_gib": 12,
   "sizes_allowed": null,
   "note": "Workers Enterprise billed per contract; rates not published.",
   "flags": [
    "sales"
   ]
  }
 ],
 "free": {
  "monthly_credit": 0,
  "one_time_credit": 0
 },
 "features": {
  "linux": true,
  "windows": false,
  "macos": false,
  "arm64": false,
  "gpu": false,
  "gpu_types": [],
  "snapshot": "fs",
  "pause_resume": false,
  "fork": false,
  "persistent_disk": false,
  "volumes": true,
  "auto_stop_idle": true,
  "max_session_h": null,
  "custom_image": true,
  "docker_inside": true,
  "nested_virt": false,
  "root": true,
  "systemd": null,
  "browser": false,
  "desktop": false,
  "computer_use": false,
  "code_interpreter": true,
  "agent_harnesses": true,
  "ssh": true,
  "public_ipv4": false,
  "inbound_https": true,
  "custom_domain": true,
  "raw_tcp_inbound": false,
  "egress_allowlist": true,
  "static_egress_ip": false,
  "private_network": false,
  "self_host": false,
  "byoc": false,
  "open_source": true,
  "regions": [
   "us",
   "eu",
   "asia",
   "other"
  ],
  "soc2": true,
  "hipaa": true,
  "sso": true,
  "lang_python": true,
  "lang_node": true,
  "lang_go": null,
  "lang_rust": null,
  "lang_java": null,
  "gpu_desktop": false,
  "credential_injection": true,
  "egress_http_rules": true,
  "wake_on_request": true,
  "live_resize": false,
  "fork_running": false,
  "memory_snapshot_fork": false,
  "webhooks": false,
  "scheduled_wakeups": null,
  "audit_logs": true,
  "eu_data_residency": true,
  "zero_data_retention": null,
  "scoped_api_keys": null,
  "spend_limits": false,
  "mcp_server": false,
  "isolation": "vm",
  "image_oci": true,
  "snapshot_auto": false,
  "snapshot_on_demand": true,
  "harness_api": true,
  "egress_allowlist_level": "both",
  "ingress_rules": true,
  "guest_firewall": false,
  "secret_proxy": "any-http",
  "volume_attach": true,
  "volume_shared": true,
  "anti_bot": false,
  "captcha_solving": false,
  "egress_ip_type": "datacenter",
  "own_agent_api": false,
  "max_session_unlimited": true,
  "fast_boot": true,
  "open_internet": true,
  "usage_api": null
 },
 "perf": {
  "cpu_runs_s": null,
  "cold_start_ms": 2000.55,
  "burst_tti_ms": 647.84,
  "dax_s": null
 },
 "perf_source": "ComputeSDK (github.com/computesdk/benchmarks results/): cold 2,000.55 ms (seq TTI 2026-08-07), burst 647.84 ms (2026-09-25); instance type set by the benchmark's own deployed Worker (not in repo). DAX never succeeded; no HPC result.",
 "knobs": [
  {
   "id": "sleep_after_tail",
   "label": "sleepAfter idle tail (x session hours)",
   "kind": "slider",
   "min": 1,
   "max": 3,
   "step": 0.05,
   "default": 1,
   "unit": "x",
   "options": null,
   "effect": "hours_factor",
   "modes": [
    "on-demand"
   ],
   "why": "A container stays awake for an inactivity timeout after its Durable Object goes inactive: the Container class defaults sleepAfter to 10 min; the current Sandbox docs set no default and allow setInactivityTimeout() up to 6 h. During that tail provisioned RAM and disk bill at full size (CPU is active-only, so ~$0). Factor = (session + tail) / session: default 10 min on 30-min sessions = 1.33x, on 10-min bursts = 2x. Slightly overstates because the engine also applies util-scaled CPU to the tail. The card does not model the tail by default (1).",
   "source": "https://developers.cloudflare.com/sandbox/concepts/lifetime/"
  }
 ],
 "caveats": [
  "4 vCPU / 8 GiB is not offered: >=3 GiB RAM per vCPU, so 4 vCPU always pays 12 GiB; max shape 4 vCPU/12 GiB/20 GB.",
  "Idle tail: RAM+disk bill at full size while an idle instance waits out its inactivity timeout (~$0.113/h for standard-4). The Container class defaults sleepAfter to 10 min (https://developers.cloudflare.com/containers/faq/); the current Sandbox lifetime page sets no default (\"Without a timeout, Cloudflare stops the instance shortly after the Durable Object becomes inactive.\") and allows setInactivityTimeout() \"up to 6 hours\" (https://developers.cloudflare.com/sandbox/concepts/lifetime/, 2026-10-14). Code running inside the instance does not count as activity, so long jobs need a Durable Object alarm to stay up; keepAlive / alarms bill continuously with no cap.",
  "A stop wipes the disk and processes (no paused state). Persistence options: Container snapshots, now public beta (\"Container snapshots are in public beta. The API and behavior may change.\"), save the writable root filesystem (not memory, processes or mounts), max 20 GB, and expire \"30 days after it is created or last restored\" (https://developers.cloudflare.com/sandbox/concepts/lifetime/, https://developers.cloudflare.com/containers/platform-details/limits/, 2026-10-14); snapshot pricing is not published. A guide saves a snapshot each time a sandbox stops for inactivity using a Durable Object alarm (https://developers.cloudflare.com/sandbox/files/save-a-sandbox-automatically/). Directory backups to your own R2 bucket are billed at R2 Standard $0.015/GB-month after 10 GB-month free (+ Class A $4.50/M, Class B $0.36/M after free tiers); backup TTL does not delete R2 objects. snapshot_gib_month models the R2 backup rate.",
  "Each sandbox is a Durable Object: $0.15/M requests after 1M, $12.50/M GB-s after 400k GB-s at 128 MB; if awake for the whole container run ~ $0.00576/h per sandbox (unverified). Worker requests $0.30/M after 10M; Workers Logs $0.60/M after 20M. Third-party estimate: +5-10%.",
  "Egress free allotment/rate vary by region: NA/EU 1 TB then $0.025/GB; Oceania/Korea/Taiwan 500 GB then $0.05/GB; elsewhere 500 GB then $0.04/GB. Card uses NA/EU.",
  "Instance type is per container class at deploy time, not per sandbox.",
  "No guaranteed runtime: irregular host restarts stop instances (SIGTERM, 15 min grace) and wipe state.",
  "Concurrency limited by account resource caps (1,500 vCPU / 6 TiB / 30 TB), not a sandbox count.",
  "perf.cpu_runs_s: no hpc benchmark for Cloudflare; dax never succeeded in ComputeSDK runs.",
  "open_source refers to the SDK/container server/bridge only; platform is proprietary and cannot be self-hosted.",
  "Verifier 2026-09-28: storage.included_disk_gib was 20 (engine treated 20 GB as free). Cloudflare bills provisioned disk at $0.00000007/GB-s while the container runs (https://developers.cloudflare.com/containers/pricing/), so included_disk_gib -> 0 and disk_gib_month -> 0.18396 (= $0.000252/GB-h x 730); with disk_billed_when_stopped=false the engine bills it only for running hours, which matches. The 200 GB-h/month included disk sits inside Workers Paid included_usd. Max disk is 20 GB (<= 2 GB per GiB RAM), which the engine does not enforce.",
  "Verifier 2026-09-28: snapshot_free_gib_account = 10 added (R2 Standard 10 GB-month free, https://developers.cloudflare.com/r2/pricing/).",
  "Account concurrency caps (1,500 vCPU / 6 TiB / 30 TB) and per-sandbox Durable Object / Worker request charges are not modelled by the engine.",
  "Per container class, wrangler max_instances defaults to 20 concurrently running instances; a start request beyond it errors. Self-serve config change up to the account caps (1,500 vCPU / 6 TiB / 30 TB).",
  "Durable Object usage above the included amount is rounded up to the next billable unit (1M GB-s / 1M requests) before the rate applies, so the first DO overage is at least $12.50 (duration) or $0.15 (requests).",
  "root=true means uid 0 inside a container with no iptables support. Docker-in-Docker needs the docker:dind image with the daemon run as root and iptables/IP forwarding off: \"Run the Docker daemon as `root`. Rootless Docker does not start in Containers.\" (https://developers.cloudflare.com/containers/faq/, 2026-10-14). Inner containers need --network=host.",
  "Worker subrequests are not billed; each Sandbox SDK operation is an RPC call on the sandbox's Durable Object stub and is billed as one DO request ($0.15/M after the 1M/month included), not as a Worker request.",
  "DO duration may not run for the whole container lifetime: DOs idle and eligible for hibernation are not billed for duration, and an inactivity timeout can keep the container running while the DO sleeps. The ~$0.00576/h per-sandbox DO estimate is an upper bound."
 ],
 "sources": [
  "https://developers.cloudflare.com/containers/pricing/",
  "https://developers.cloudflare.com/sandbox/platform/pricing/",
  "https://developers.cloudflare.com/containers/platform-details/limits/",
  "https://developers.cloudflare.com/sandbox/platform/limits/",
  "https://developers.cloudflare.com/changelog/post/2025-11-21-new-cpu-pricing/",
  "https://developers.cloudflare.com/changelog/product/containers/",
  "https://developers.cloudflare.com/containers/faq/",
  "https://developers.cloudflare.com/sandbox/concepts/sandboxes/",
  "https://developers.cloudflare.com/sandbox/concepts/backup-restore/",
  "https://developers.cloudflare.com/sandbox/tutorials/openai-agents-api/",
  "https://developers.cloudflare.com/durable-objects/platform/pricing/",
  "https://developers.cloudflare.com/workers/platform/pricing/",
  "https://developers.cloudflare.com/r2/pricing/",
  "https://bex.co/blog/2026/09/09/cloudflare-containers-sandboxes-active-cpu-pricing",
  "https://developers.cloudflare.com/sandbox/concepts/lifetime/",
  "https://developers.cloudflare.com/sandbox/files/",
  "https://developers.cloudflare.com/sandbox/files/save-a-sandbox-automatically/",
  "https://developers.cloudflare.com/sandbox/concepts/security/",
  "https://developers.cloudflare.com/sandbox/sdk/guides/outbound-traffic/"
 ],
 "fleet": {
  "default_max_instances": 0,
  "default_max_vcpu": 0,
  "default_max_gpus": null,
  "raise": "self-serve",
  "raise_time_days": null,
  "verification": null,
  "tiers": "Free unavailable; Workers Paid: 1,500 aggregate vCPU, 6 TiB RAM, 30 TB disk per account. Higher limits via account team, support ticket or form.",
  "notes": "default_max_vcpu=0 is free-account access, not paid capacity. Paid pool is 1,500 vCPU (not an instance count); at 4 vCPU each, CPU alone permits 375 instances, with memory/disk constraints also applied. No promise of an auto-approved quota form or turnaround.",
  "sources": [
   "https://developers.cloudflare.com/containers/platform-details/limits/",
   "https://developers.cloudflare.com/containers/pricing/",
   "https://developers.cloudflare.com/sandbox/platform/limits/"
  ],
  "researched": "2026-09-28"
 },
 "audit_2026_09_29": {
  "applied": 4,
  "source": "checked against the provider's live pricing and docs pages",
  "reviewed": 4
 },
 "feature_evidence": {
  "snapshot_auto": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/concepts/lifetime/",
   "quote": "Cloudflare does not restore a snapshot on its own. Your application decides when to save a snapshot.",
   "note": "Platform wipes disk and processes when an instance stops. Auto-save-on-idle exists only as app code you write: the guide 'Save a sandbox automatically' (https://developers.cloudflare.com/sandbox/files/save-a-sandbox-automatically/) saves a public-beta Container snapshot before the sandbox stops for inactivity using a Durable Object alarm (files page: 'Same as snapshots, plus an alarm in your Durable Object'). Not a platform default.",
   "checked": "2026-10-14"
  },
  "snapshot_on_demand": {
   "value": true,
   "source": "https://developers.cloudflare.com/sandbox/api/backups/",
   "quote": "Create point-in-time snapshots of sandbox directories and restore them from R2.",
   "note": "GA (2026-02-23): createBackup({dir}) -> squashfs in your own R2 bucket; restoreBackup() mounts it as copy-on-write FUSE overlay (lost on sleep, re-restore each wake). Directory-level only (under /workspace, /home, /tmp, /var/tmp, /app), no memory/processes. Can seed other sandboxes: changelog says 'Usable across multiple instances - Fork a backup across many sandboxes for parallel work'. Whole-disk Container snapshots (snapshotContainer(), restore via start({containerSnapshot})) are now public beta: 'Container snapshots are in public beta. The API and behavior may change.' They save 'the writable root filesystem of a running instance' (no memory, processes or mounts) and expire '30 days after it is created or last restored' (https://developers.cloudflare.com/sandbox/concepts/lifetime/, 2026-10-14). Backups are now documented under the legacy Sandbox SDK 0.x section (the source URL redirects to /sandbox/sdk/api/backups/).",
   "checked": "2026-10-14"
  },
  "harness_api": {
   "value": true,
   "source": "https://github.com/cloudflare/sandbox-sdk/blob/main/packages/sandbox/src/opencode/opencode.ts",
   "quote": "Starts an OpenCode server inside a Sandbox container.",
   "note": "OpenCode only: first-party SDK export @cloudflare/sandbox/opencode (createOpencodeServer, createOpencode -> typed @opencode-ai/sdk client with session.create/session.prompt/events, proxyToOpencode for the web UI). Listed on docs as a first-party extension on the 1.0 preview ('OpenCode | @cloudflare/sandbox/opencode'). Claude Code tutorial just runs `claude --print` via exec (not a harness API). Codex via OpenAI Agents API and Claude Managed Agents: Cloudflare is only the self-hosted execution environment; the harness API belongs to OpenAI/Anthropic.",
   "checked": "2026-09-29"
  },
  "egress_allowlist": {
   "value": true,
   "source": "https://developers.cloudflare.com/sandbox/guides/outbound-traffic/",
   "quote": "When allowedHosts is set, it becomes a deny-by-default allowlist. Any host or IP not in the list is denied, and only matching destinations can reach outbound or outboundByHost handlers.",
   "note": "Per Sandbox class plus per-instance at runtime (setAllowedHosts/allowHost/denyHost). Hostnames with globs and IPs/CIDRs (example deniedHosts includes \"141.101.64.0/18\"). enableInternet=false: 'Only ports 80, 443, and DNS are available, and DNS queries use Cloudflare's DNS servers.' Enforced by a sidecar/Workers runtime outside the sandbox.",
   "checked": "2026-09-29",
   "level": "both"
  },
  "egress_http_rules": {
   "value": true,
   "source": "https://developers.cloudflare.com/sandbox/guides/outbound-traffic/",
   "quote": "Add custom policy on outbound traffic (such as denying specific HTTP requests)",
   "note": "outbound / outboundByHost handlers are arbitrary Workers code seeing the full Request (docs example blocks non-GET methods). HTTPS interception is opt-in: 'Sandboxes intercept HTTPS traffic only when your class sets `interceptHttps` to `true`. It defaults to `false`, and then `allowedHosts`, `deniedHosts`, and outbound handlers apply to HTTP only.' (per-instance ephemeral CA when on). HTTP/HTTPS only; other ports never routed through handlers.",
   "checked": "2026-10-14"
  },
  "ingress_rules": {
   "value": true,
   "source": "https://developers.cloudflare.com/sandbox/concepts/preview-urls/",
   "quote": "Preview URLs are publicly accessible by default, but require a valid access token that is generated when you expose a port.",
   "note": "Only ports you exposePort() get a URL (https://{port}-{sandbox-id}-{token}.yourdomain.com); every request goes through your own Worker (proxyToSandbox) so you can add auth; unexposePort() revokes. Quick tunnels (*.trycloudflare.com) have no auth beyond the random hostname. No IP allowlist setting; no raw TCP/UDP inbound.",
   "checked": "2026-09-29"
  },
  "guest_firewall": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/faq/",
   "quote": "Cloudflare Containers do not support iptables manipulation.",
   "note": "Root inside a container (in a per-container VM) with no iptables support; same statement on the legacy Sandbox SDK 0.x Docker-in-Docker guide. Docker-in-Docker requires dockerd --iptables=false --ip6tables=false (and --ip-forward=false under the durable_object scheduling policy).",
   "checked": "2026-10-14"
  },
  "secret_proxy": {
   "value": "any-http",
   "source": "https://developers.cloudflare.com/sandbox/guides/outbound-traffic/",
   "quote": "Because outbound handlers run in the Workers runtime — outside the sandbox — they can hold secrets that the sandbox itself never sees. The sandbox makes a plain HTTP request, and the handler attaches the credential before forwarding it to the upstream service.",
   "note": "Any host, per-instance keys via ctx.containerId; HTTPS covered only when you opt into TLS interception (interceptHttps = true; it defaults to false, checked 2026-10-14). Not covered: non-HTTP ('Outbound handlers only intercept HTTP and HTTPS traffic'), so no DB/SSH credential injection (git over HTTPS works). Also mountBucket credentialProxy:true re-signs S3/GCS requests so bucket keys never enter the container. It is a mechanism you program (Workers code), not a managed secret registry. OpenCode example injects the Anthropic key this way.",
   "checked": "2026-10-14"
  },
  "volume_attach": {
   "value": true,
   "source": "https://developers.cloudflare.com/sandbox/guides/mount-buckets/",
   "quote": "Mount S3-compatible object storage buckets as local filesystem paths.",
   "note": "Only S3-compatible bucket mounts via FUSE (s3fs): R2 by Worker binding (no credentials in container), or S3/GCS/B2/MinIO endpoints; prefix + readOnly options. No block or network volumes; disk fixed by instance type (max 20 GB).",
   "checked": "2026-09-29"
  },
  "volume_shared": {
   "value": true,
   "source": "https://developers.cloudflare.com/sandbox/guides/mount-buckets/",
   "quote": "Multiple sandboxes access the same data",
   "note": "Same bucket mountable in many sandboxes at once; read-write or read-only ('Protect data by mounting buckets in read-only mode'). Object-store semantics (s3fs), not POSIX network FS.",
   "checked": "2026-09-29"
  },
  "anti_bot": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/get-started/",
   "quote": "Sandbox SDK lets you run untrusted, AI-generated code in secure, isolated containers directly from your Cloudflare Worker.",
   "note": "not offered: outside the product's scope — this is a general-purpose code-execution/container sandbox, not a browser-automation product; no stealth/fingerprinting feature is documented anywhere in the Sandbox SDK or Containers docs.",
   "checked": "2026-09-30"
  },
  "captcha_solving": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/get-started/",
   "quote": "Sandbox SDK lets you run untrusted, AI-generated code in secure, isolated containers directly from your Cloudflare Worker.",
   "note": "not offered: outside the product's scope — a container/VM code-execution platform, not a browser-automation or scraping product; no CAPTCHA-solving capability is documented.",
   "checked": "2026-09-30"
  },
  "egress_ip_type": {
   "value": "datacenter",
   "source": "https://developers.cloudflare.com/sandbox/guides/outbound-traffic/",
   "quote": "Outbound handlers are programmable egress proxies that run on the same machine as the sandbox.",
   "note": "Outbound traffic leaves through Cloudflare's own network/edge (shared Cloudflare IP ranges), not a residential or mobile IP pool; no dedicated/static customer-assigned egress IP is documented (containers are placed dynamically across Cloudflare's global network, so the source IP is a shared Cloudflare datacenter IP).",
   "checked": "2026-09-30"
  },
  "live_resize": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/platform/limits/",
   "quote": "The memory, vCPU, and disk space for Containers are set through instance types. ... These are specified using the instance_type property in your Worker's Wrangler configuration file.",
   "note": "Instance type (vCPU/memory/disk) is fixed at deploy time via Wrangler config for a container class; no documented API to change CPU/RAM of an already-running instance without redeploying/recreating it.",
   "checked": "2026-09-30"
  },
  "own_agent_api": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/get-started/",
   "quote": "Sandbox SDK lets you run untrusted, AI-generated code in secure, isolated containers directly from your Cloudflare Worker.",
   "note": "not offered: outside the product's scope — Cloudflare provides the execution environment for third-party coding/browser/computer-use agents (Claude Code, Codex, OpenCode, Devin, Cursor) via harness_api/tutorials, but has no first-party task agent (browser/computer-use/research agent) of its own to drive.",
   "checked": "2026-09-30"
  },
  "mcp_server": {
   "value": false,
   "source": "https://developers.cloudflare.com/agent-setup/llms.txt",
   "quote": "Install an agent of your choice, connect skills and MCP servers, and start deploying to Cloudflare — all from your editor or terminal.",
   "note": "Cloudflare ships general-purpose MCP servers for its API/dev-platform (DNS, Workers deploy, docs search) referenced from the Containers/Sandbox docs sidebar ('Code Mode MCP Server', 'Domain-specific MCP Servers'), but no MCP server specifically to start/stop/exec/control Sandbox or Container instances was found in the Sandbox SDK or Containers docs/llms.txt.",
   "checked": "2026-09-30"
  },
  "static_egress_ip": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/faq/",
   "quote": "When initially deploying a Container, Cloudflare will select various locations across our network to deploy instances to. ... If the initial container has gone to sleep, Cloudflare will once again try to find the nearest \"free\" instance of the Container, likely one in North America, and start an instance there.",
   "note": "Containers are placed and re-placed across Cloudflare's global network dynamically (per instance/per restart), and no product page documents a fixed/dedicated outbound IP feature for Containers or the Sandbox SDK.",
   "checked": "2026-09-30"
  },
  "hipaa": {
   "value": true,
   "source": "https://www.cloudflare.com/trust-hub/compliance-resources/",
   "quote": "HIPAA. The Health Insurance Portability and Accountability Act (HIPAA) sets the standard for protecting sensitive patient data. Contact your account team to request the HIPAA AoC.",
   "note": "Cloudflare offers a HIPAA Attestation of Compliance / BAA at the account/contract level (Enterprise, via account team); not verified as a Workers/Containers/Sandbox-SDK-specific listed covered service, but Cloudflare's general compliance program covers its platform.",
   "checked": "2026-09-30"
  },
  "max_session_h": {
   "value": "none",
   "source": "https://developers.cloudflare.com/containers/faq/",
   "quote": "Cloudflare does not stop a container instance after a fixed maximum runtime. ... Cloudflare does not guarantee that any container instance will run for a set period.",
   "note": "No fixed maximum session/runtime is imposed; only an inactivity timeout stops an idle instance (Container class default sleepAfter 10 min; current Sandbox docs: no default, setInactivityTimeout() up to 6 hours, https://developers.cloudflare.com/sandbox/concepts/lifetime/), and irregular host restarts (not a session cap) can still stop an instance.",
   "checked": "2026-10-14"
  },
  "persistent_disk": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/faq/",
   "quote": "Is disk persistent? What happens to my disk when my container sleeps? All disk is ephemeral. When a Container instance goes to sleep, the next time it is started, it will have a fresh disk as defined by its container image. ... You can also use FUSE to persist disk to R2 or other object storage backends.",
   "note": "reviewed: proposed correction rejected (Default is ephemeral (correctly false on its own), but that's not the whole picture: first-party opt-in persistence exists. mountBucket() ('Mount S3-compatible object storage buckets as local filesystem paths', https://developers.cloudflare.com/sandbox/guides/mount-buckets/) attaches a persistent volume that survives sleep/restart (an object store, remounted each start), and createBackup()/restoreBackup() (https://developers.cloudflare.com/sandbox/concepts/backup-restore/) let a directory's contents survive across sleeps by explicit save/restore. Card already carries volumes:true and snapshot_on_demand:true, which contradicted persistent_disk:false. Correct value: true, default-off (fresh/ephemeral disk unless you opt into a bucket mount or manual backup+restore).)",
   "checked": "2026-09-30"
  },
  "pause_resume": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/concepts/sandboxes/",
   "quote": "Lifecycle states Creation ... Active ... Idle After a period of inactivity (10 minutes by default, configurable via sleepAfter), the container stops to free resources. When the next request arrives, a fresh container starts. All previous state is lost and the environment resets to its initial state. ... Destruction",
   "note": "Only lifecycle states are Creation/Active/Idle(stop)/Destruction; Idle wipes all state and there is no Paused state where billing is reduced and state is kept ready to resume from. keepAlive just prevents Idle entirely, it isn't a pause. No pause/resume API found anywhere in the Sandbox SDK or Containers docs.",
   "checked": "2026-09-30"
  },
  "fork": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/llms-full.txt",
   "quote": "Lifecycle states Creation ... Active ... Idle ... Destruction",
   "note": "No fork/clone API documented across the Sandbox SDK docs, Containers docs/FAQ, or the sandbox-sdk GitHub repo. Backups (createBackup/restoreBackup) can seed a fresh sandbox from a saved directory snapshot, but that is explicit save-then-restore-elsewhere, not a running-VM fork API, and it is not named 'fork' anywhere in the docs. No evidence of a clone-a-machine primitive.",
   "checked": "2026-09-30"
  },
  "fork_running": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/concepts/sandboxes/",
   "quote": "Idle After a period of inactivity ... the container stops to free resources. When the next request arrives, a fresh container starts.",
   "note": "No documented mechanism to clone a live/running sandbox without stopping it; consistent with fork=false (no fork API exists at all).",
   "checked": "2026-09-30"
  },
  "memory_snapshot_fork": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/concepts/lifetime/",
   "quote": "`snapshotContainer()` saves the writable root filesystem of a running instance. It does not save separately mounted filesystems, memory, or processes.",
   "note": "Container snapshots (public beta) are disk-only, and directory backups are directory-only; no documented way to fork or restore with memory or running processes.",
   "checked": "2026-10-14"
  },
  "nested_virt": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/faq/",
   "quote": "Cloudflare Containers do not support iptables manipulation.",
   "note": "Docker-in-Docker works only as a root docker:dind daemon with iptables and IP forwarding off ('Rootless Docker does not start in Containers.', checked 2026-10-14); no /dev/kvm, KVM, or nested-virtualization capability is documented anywhere in the Sandbox SDK or Containers docs. Consistent with the platform being one VM-isolated Linux container per instance, not a machine that exposes hardware virtualization to the guest.",
   "checked": "2026-10-14"
  },
  "desktop": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/llms-full.txt",
   "quote": "## Desktop\n\nThe desktop feature was removed in `0.10.2`. The feature ran a full Linux desktop inside the sandbox for computer-use style automation. If you still need that shape, rebuild it with extensions rather than a built-in desktop API.",
   "note": "A built-in desktop feature existed but was explicitly removed; current SDK has no built-in desktop/VNC/RDP API.",
   "checked": "2026-09-30"
  },
  "browser": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/llms-full.txt",
   "quote": "Browser terminals ... Connect browser-based terminal UIs to sandbox shells via WebSocket.",
   "note": "The only 'browser' feature documented for Sandbox SDK is browser-based terminal UIs connecting to a shell over WebSocket, not a real/managed browser running for the agent. A real headless browser ('Browser Run tools ... headless browsers powered by Browser Run for web fetches, screenshots, and CDP control') appears only in the separate Claude Managed Agents integration template, which layers Cloudflare's separate Browser Run product on top - not a feature of the Sandbox SDK/Containers product this card models.",
   "checked": "2026-09-30"
  },
  "computer_use": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/llms-full.txt",
   "quote": "The desktop feature was removed in `0.10.2`. The feature ran a full Linux desktop inside the sandbox for computer-use style automation.",
   "note": "Computer-use automation depended on the removed desktop feature; no current computer-use (screenshot+click) API is documented.",
   "checked": "2026-09-30"
  },
  "public_ipv4": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/concepts/preview-urls/",
   "quote": "Preview URLs are publicly accessible by default, but require a valid access token that is generated when you expose a port.",
   "note": "Inbound reachability is exclusively via HTTPS preview URLs / tunnels proxied through a Worker (https://{port}-{sandbox-id}-{token}.yourdomain.com or *.trycloudflare.com); no dedicated/public IPv4 address is ever assigned to a sandbox. Card's own network.ipv4_available is already false.",
   "checked": "2026-09-30"
  },
  "gpu": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/concepts/architecture/",
   "quote": "Each container instance runs inside its own VM, which provides strong isolation from other workloads running on Cloudflare's network. Containers should be built for the `linux/amd64` architecture, and should stay within size limits.",
   "note": "No GPU instance types are documented anywhere in Containers/Sandbox pricing, limits, or architecture pages; the product is a CPU-only linux/amd64 container platform (outside scope).",
   "checked": "2026-09-30"
  },
  "windows": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/concepts/architecture/",
   "quote": "Containers should be built for the `linux/amd64` architecture",
   "note": "Product only runs Linux (amd64) container images; no Windows machine option exists. Outside the product's scope.",
   "checked": "2026-09-30"
  },
  "macos": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/concepts/architecture/",
   "quote": "Containers should be built for the `linux/amd64` architecture",
   "note": "Product only runs Linux (amd64) container images; no macOS machine option exists. Outside the product's scope.",
   "checked": "2026-09-30"
  },
  "arm64": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/concepts/architecture/",
   "quote": "Containers should be built for the `linux/amd64` architecture",
   "note": "Explicitly amd64-only; no arm64 instance type documented.",
   "checked": "2026-09-30"
  },
  "self_host": {
   "value": false,
   "source": "https://raw.githubusercontent.com/cloudflare/sandbox-sdk/main/packages/sandbox/README.md",
   "quote": "For deploying to production, sign up for a Cloudflare account ... Deploy your Worker and container: npx wrangler deploy",
   "note": "The SDK/container bridge is open source, but running the sandboxes themselves requires deploying to Cloudflare's own Workers/Containers platform; there is no documented way to run the managed sandbox execution platform on your own infrastructure.",
   "checked": "2026-09-30"
  },
  "byoc": {
   "value": false,
   "source": "https://developers.cloudflare.com/containers/concepts/architecture/",
   "quote": "Each running container instance is associated with ... Durable Objects ... locations across Cloudflare's network.",
   "note": "Containers/Sandbox instances always run on Cloudflare's own global network via Workers/Durable Objects placement; no option to deploy the managed service into a customer-owned cloud account (AWS/GCP/Azure) was found.",
   "checked": "2026-09-30"
  },
  "private_network": {
   "value": false,
   "source": "https://developers.cloudflare.com/sandbox/guides/workers-connections/",
   "quote": "For Workers bindings (KV, R2, and similar) reached by hostname from the sandbox, refer to Connect to Workers bindings.",
   "note": "Sandbox SDK's own connectivity docs list only Workers bindings (KV, R2, Durable Objects, etc.) for reaching Cloudflare resources by hostname; no VPC/private-network binding is documented there. Workers VPC (https://developers.cloudflare.com/workers-vpc/, 'Securely connect your private cloud to Cloudflare') is a separate, account-level Workers product only mentioned via the Claude Managed Agents template ('Connect agents to private internal services over Workers VPC and Mesh'), not documented as a native Sandbox SDK feature.",
   "checked": "2026-09-30"
  },
  "fast_boot": {
   "value": true,
   "source": "https://www.computesdk.com/benchmarks",
   "quote": "burst of 100: p95 910 ms, 100% started",
   "note": "ComputeSDK sandbox benchmark 2026-09-25",
   "checked": "2026-09-25"
  },
  "usage_api": {
   "value": null,
   "source": "https://developers.cloudflare.com/containers/pricing/",
   "quote": null,
   "note": "Unverified. The previous quote ('Billing is calculated through the Cloudflare dashboard and account invoicing. Individual sandbox usage metrics are not available through a public API ...') does not appear on the pricing page (checked 2026-10-14), and no Containers or Sandbox page (incl. https://developers.cloudflare.com/containers/llms.txt) documents a per-sandbox usage or metrics API either way.",
   "confidence": "low",
   "checked": "2026-10-14"
  }
 },
 "locations": [],
 "locations_everywhere": true,
 "locations_source": "https://developers.cloudflare.com/containers/faq/",
 "locations_quote": "When initially deploying a Container, Cloudflare will select various locations across our network to deploy instances to. These locations will span multiple regions. When a Container instance is requested with this.ctx.container.start, the nearest free container instance will be selected from the pr",
 "locations_checked": "2026-10-01"
}