{
 "features_resolved": {
  "snapshot_any": true,
  "snapshot_mem": true,
  "fork": true,
  "pause_resume": false,
  "persistent_disk": true,
  "whole_disk": false,
  "persist_scope": true,
  "volumes": true,
  "auto_stop_idle": true,
  "long_sessions": true,
  "custom_image": true,
  "image_snapshot": true,
  "image_oci": true,
  "vm_isolation": false,
  "docker_inside": false,
  "nested_virt": false,
  "root": true,
  "systemd": true,
  "browser": false,
  "desktop": false,
  "computer_use": false,
  "code_interpreter": false,
  "browser_control": null,
  "desktop_control": null,
  "browser_and_desktop": false,
  "anti_bot": false,
  "captcha_solving": false,
  "residential_ip": false,
  "agent_harnesses": false,
  "ssh": true,
  "public_ipv4": false,
  "inbound_https": true,
  "custom_domain": true,
  "raw_tcp_inbound": true,
  "egress_allowlist": true,
  "open_internet": true,
  "static_egress_ip": true,
  "private_network": null,
  "self_host": false,
  "byoc": false,
  "open_source": false,
  "soc2": true,
  "hipaa": true,
  "sso": true,
  "gpu": true,
  "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": null,
  "egress_http_rules": false,
  "wake_on_request": false,
  "live_resize": false,
  "fork_running": false,
  "memory_snapshot_fork": true,
  "webhooks": null,
  "scheduled_wakeups": null,
  "audit_logs": true,
  "eu_data_residency": true,
  "zero_data_retention": null,
  "scoped_api_keys": null,
  "spend_limits": null,
  "mcp_server": false,
  "usage_api": null,
  "snapshot_auto": false,
  "snapshot_on_demand": true,
  "harness_api": false,
  "own_agent_api": false,
  "fast_boot": true,
  "strong_isolation": true,
  "ingress_rules": true,
  "guest_firewall": true,
  "secret_proxy": false,
  "secret_proxy_any": false,
  "volume_attach": true,
  "volume_shared": true,
  "sidecar": true,
  "fuse": false,
  "kernel_features": false,
  "burst": null
 },
 "company": {
  "id": "modal",
  "checked": "2026-09-30",
  "company": "Modal Labs, Inc.",
  "ownership": {
   "value": "independent",
   "parent": null,
   "source": "https://modal.com/company",
   "quote": "We started Modal with the goal to make it easier to iterate and ship applications for data, AI, and machine learning."
  },
  "stage": {
   "value": "series-c",
   "source": "https://modal.com/blog/modal-series-c",
   "quote": "Modal's Series C: Raising $355M at a $4.65B valuation",
   "confidence": "high",
   "note": "The YC directory lists a company called 'Modal' (W16) doing digital commerce for auto retailers/brands (ycombinator.com/companies/modal) — this is a different, unrelated company, not modal.com (verified: that YC page's tagline is 'digital commerce for the world's largest auto retailers and brands'). Modal (modal.com, founded 2021 by Erik Bernhardsson and Akshat Bubna) is not YC-backed. As of 2026-09-28, TechCrunch reported Modal was 'closing in on' a further ~$750M round led by Accel at a $15.75B valuation, but this was unconfirmed/not yet closed ('Modal Labs declined to comment') as of the check date, so the last priced/confirmed round remains the Series C."
  },
  "accelerators": [],
  "total_funding_usd": {
   "value": 466000000,
   "status": "confirmed",
   "basis": "Modal's own company page states 'We've raised over $466M'; matches sum of Series B ($111M cumulative per Modal blog, i.e. after adding $87M Series B) + $355M Series C = $466M.",
   "source": "https://modal.com/company",
   "quote": "We've raised over $466M from some of the best investors and product leaders in the industry."
  },
  "last_round": {
   "type": "series-c",
   "amount_usd": 355000000,
   "date": "2026-05-21",
   "leads": [
    "General Catalyst",
    "Redpoint Ventures"
   ],
   "status": "confirmed",
   "source": "https://modal.com/blog/modal-series-c",
   "quote": "We've raised $355 million after growing fivefold since September, surpassing $300 million in annualized revenue. Our valuation is $4.65B post-money in a round led by General Catalyst and Redpoint, with Menlo, Bain Capital Ventures, and Accel joining as new investors."
  },
  "investors": [
   "General Catalyst",
   "Redpoint Ventures",
   "Lux Capital",
   "Amplify Partners",
   "Creandum",
   "Menlo Ventures",
   "Bain Capital Ventures",
   "Accel",
   "Essence Venture Capital"
  ],
  "portfolio_listings": [
   {
    "source": "Amplify Partners",
    "company": "Modal",
    "batch": null,
    "how": "domain"
   },
   {
    "source": "Creandum",
    "company": "Modal",
    "batch": "2022",
    "how": "domain"
   },
   {
    "source": "Essence Venture Capital",
    "company": "Modal",
    "batch": null,
    "how": "domain"
   },
   {
    "source": "Lux Capital",
    "company": "Modal",
    "batch": 2022,
    "how": "domain"
   },
   {
    "source": "Redpoint Ventures",
    "company": "Modal",
    "batch": null,
    "how": "domain"
   }
  ],
  "revenue": {
   "value_usd": 300000000,
   "kind": "ARR",
   "as_of": "2026-05",
   "status": "confirmed",
   "basis": "Stated by Modal itself and repeated to Reuters",
   "source": "https://modal.com/blog/modal-series-c",
   "quote": "We've raised $355 million after growing fivefold since September, surpassing $300 million in annualized revenue."
  },
  "employees": {
   "value": null,
   "source": ""
  },
  "note": "Modal Labs (modal.com) is a serverless cloud/compute platform for AI/ML founded in 2021 by Erik Bernhardsson (ex-Spotify, ex-Better.com CTO) and Akshat Bubna (ex-Scale AI); offices in New York, Stockholm, San Francisco, London. Funding path: ~2021 pre-seed/seed, Oct 2023 $16M Series A (GA announcement), Sept 2025 $87M Series B led by Lux Capital ($1.1B post-money valuation, $111M cumulative), May 2026 $355M Series C led by General Catalyst and Redpoint ($4.65B post-money). As of late Sept 2026, TechCrunch/Bloomberg/Axios reported Modal was in the process of closing a new round (~$750M led by Accel) at a $15.75B valuation, which had not been confirmed as closed by the company as of the check date — buyers should verify whether that round has since closed. In July 2026 a Modal customer's misconfigured (unauthenticated) sandbox endpoint was exploited in the same hacking campaign that hit Hugging Face via a rogue OpenAI agent; Modal said its own platform was not compromised."
 },
 "id": "modal",
 "name": "Modal",
 "url": "https://modal.com/pricing",
 "category": "agent-sandbox",
 "isolation": "gvisor",
 "modes": [
  {
   "key": "on-demand",
   "label": "Sandbox (gVisor), request = size, any region",
   "pricing": "resource",
   "vcpu_h": 0.141912,
   "ram_gib_h": 0.024012,
   "cpu_basis": "max",
   "ram_basis": "max",
   "active_floor": 0,
   "ram_per_vcpu": [
    null,
    null
   ],
   "ram_fixed_per_vcpu": null,
   "vcpu_options": null,
   "min_vcpu": 0.125,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes": null,
   "pool_tiers": null,
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 0,
   "granularity_s": 1,
   "start_fee": 0,
   "boot_overhead_s": null,
   "multiplier": 1,
   "windows_vcpu_h": null,
   "gpu": {
    "T4": 0.5904,
    "L4": 0.7992,
    "A10": 1.1016,
    "L40S": 1.9512,
    "A100-40GB": 2.0988,
    "A100-80GB": 2.4984,
    "RTX-PRO-6000": 3.0312,
    "H100": 3.9492,
    "H200": 4.5396,
    "B200": 6.2496,
    "B300": 7.0992
   },
   "note": "Card vCPU = 1 Modal `cpu` unit = 1 CPU the guest sees (nproc). Modal lists $0.00003942 per 'physical core (2 vCPU equivalent)' per second and bills that per `cpu` unit, so $0.141912 per card-vCPU-h; memory $0.00000667/GiB-s. A '4 vCPU / 8 GiB' sandbox = cpu=(4,4), memory 8192 = $0.759744/h. Measured: cpu=N with cpuLimit=N gives nproc N and N CPUs of throughput (hpc-sandbox-benchmarks PR #121). Rates already include the 3x non-preemptible multiplier over Function rates. Billed per second on max(request, actual): at request = W.vcpu, low utilisation saves nothing. Set cpuLimit = request: without it the soft limit is request + 16 cores, the guest sees ceil(limit) CPUs (17 observed at default request) and bursting is billed. GPU sandboxes are preemptible. Basis verified 2026-09-28: 'You pay for `max(request, actual)`' (modal.com/docs/guide/sandbox-resources); 'charged based on whichever is higher: your request or actual usage' (modal.com/docs/guide/resources).",
   "regions": null,
   "gpu_only": false,
   "flags": [],
   "perf": {
    "cpu_runs_s": 12.79,
    "cold_start_ms": 548.91,
    "burst_tti_ms": 907.55,
    "dax_s": 111.42
   },
   "perf_source": "StarSling hpc-sandbox-benchmarks, run 36498291449 (2026-09-29), Node.js V8 Web Tooling p50 at a 4 vCPU / 8 GB target",
   "features": {
    "isolation": "gvisor"
   },
   "cpu_class": "dedicated"
  },
  {
   "key": "low-request-burst",
   "label": "Sandbox, minimal request + burst (billed ~ on usage; burst capacity not guaranteed)",
   "pricing": "resource",
   "vcpu_h": 0.141912,
   "ram_gib_h": 0.024012,
   "cpu_basis": "active",
   "ram_basis": "active",
   "active_floor": 0.03125,
   "ram_per_vcpu": [
    null,
    null
   ],
   "ram_fixed_per_vcpu": null,
   "vcpu_options": null,
   "min_vcpu": 0.125,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes": null,
   "pool_tiers": null,
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 0,
   "granularity_s": 1,
   "start_fee": 0,
   "boot_overhead_s": null,
   "multiplier": 1,
   "windows_vcpu_h": null,
   "gpu": {
    "T4": 0.5904,
    "L4": 0.7992,
    "A10": 1.1016,
    "L40S": 1.9512,
    "A100-40GB": 2.0988,
    "A100-80GB": 2.4984,
    "RTX-PRO-6000": 3.0312,
    "H100": 3.9492,
    "H200": 4.5396,
    "B200": 6.2496,
    "B300": 7.0992
   },
   "note": "The request is set to the minimum (cpu 0.125 = 0.125 card-vCPU; 128 MiB) and cpu/memory limits are set to the workload size, so the guest sees W.vcpu CPUs (nproc = ceil(limit)). Billing is max(request, actual) per second, so it tracks usage. active_floor 0.03125 = 0.125 / 4 vCPU (the exact floor is 0.125/W.vcpu). Burst capacity is NOT guaranteed (it needs spare host capacity), so the workload may be throttled. The memory limit is a hard OOM. Optimistic regime. Floor verified 2026-09-28: 'minimum of 0.125 cores per container' (modal.com/pricing); 'a default request of 0.125 CPU cores and 128 MiB of memory' (modal.com/docs/guide/resources). Docs do not say whether page cache counts toward memory usage. ASSUMES a small CPU/memory request (0.125 core / 128 MiB): guaranteed capacity is only that request; anything above it is best-effort burst. Memory above the request is not guaranteed either: Modal can EVICT a sandbox that exceeds its memory request (docs recommend requesting p90-95 of memory), so the RAM half of this regime is optimistic and can kill the session; only CPU is safe to under-request.",
   "regions": null,
   "gpu_only": false,
   "flags": [],
   "perf": {
    "cpu_runs_s": 12.79,
    "cold_start_ms": 548.91,
    "burst_tti_ms": 907.55,
    "dax_s": 111.42
   },
   "perf_source": "StarSling hpc-sandbox-benchmarks, run 36498291449 (2026-09-29), Node.js V8 Web Tooling p50 at a 4 vCPU / 8 GB target",
   "features": {
    "isolation": "gvisor",
    "burst": true
   },
   "cpu_class": "shared"
  },
  {
   "key": "region-broad",
   "label": "Sandbox pinned to broad region (us / eu / ap)",
   "pricing": "resource",
   "vcpu_h": 0.141912,
   "ram_gib_h": 0.024012,
   "cpu_basis": "max",
   "ram_basis": "max",
   "active_floor": 0,
   "ram_per_vcpu": [
    null,
    null
   ],
   "ram_fixed_per_vcpu": null,
   "vcpu_options": null,
   "min_vcpu": 0.125,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes": null,
   "pool_tiers": null,
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 0,
   "granularity_s": 1,
   "start_fee": 0,
   "boot_overhead_s": null,
   "multiplier": 1.15,
   "windows_vcpu_h": null,
   "gpu": {
    "T4": 0.5904,
    "L4": 0.7992,
    "A10": 1.1016,
    "L40S": 1.9512,
    "A100-40GB": 2.0988,
    "A100-80GB": 2.4984,
    "RTX-PRO-6000": 3.0312,
    "H100": 3.9492,
    "H200": 4.5396,
    "B200": 6.2496,
    "B300": 7.0992
   },
   "note": "1.15x applies to all resource charges incl. GPU. Required for data residency (e.g. 'eu'). Memory-snapshot sandboxes cannot be region-pinned.",
   "regions": [
    "us",
    "eu",
    "asia"
   ],
   "gpu_only": false,
   "flags": [],
   "perf": {
    "cpu_runs_s": 12.79,
    "cold_start_ms": 548.91,
    "burst_tti_ms": 907.55,
    "dax_s": 111.42
   },
   "perf_source": "StarSling hpc-sandbox-benchmarks, run 36498291449 (2026-09-29), Node.js V8 Web Tooling p50 at a 4 vCPU / 8 GB target",
   "features": {
    "isolation": "gvisor"
   },
   "cpu_class": "dedicated"
  },
  {
   "key": "region-narrow",
   "label": "Sandbox pinned to narrow region (us-west, uk, jp ...)",
   "pricing": "resource",
   "vcpu_h": 0.141912,
   "ram_gib_h": 0.024012,
   "cpu_basis": "max",
   "ram_basis": "max",
   "active_floor": 0,
   "ram_per_vcpu": [
    null,
    null
   ],
   "ram_fixed_per_vcpu": null,
   "vcpu_options": null,
   "min_vcpu": 0.125,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes": null,
   "pool_tiers": null,
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 0,
   "granularity_s": 1,
   "start_fee": 0,
   "boot_overhead_s": null,
   "multiplier": 1.75,
   "windows_vcpu_h": null,
   "gpu": {
    "T4": 0.5904,
    "L4": 0.7992,
    "A10": 1.1016,
    "L40S": 1.9512,
    "A100-40GB": 2.0988,
    "A100-80GB": 2.4984,
    "RTX-PRO-6000": 3.0312,
    "H100": 3.9492,
    "H200": 4.5396,
    "B200": 6.2496,
    "B300": 7.0992
   },
   "note": "1.75x applies to all resource charges incl. GPU. Narrow regions: us-east/central/south/west, eu-west/north/south, ap-*, jp, au, uk, ca, me, sa, af, mx.",
   "regions": [
    "us",
    "eu",
    "asia",
    "other"
   ],
   "gpu_only": false,
   "flags": [],
   "perf": {
    "cpu_runs_s": 12.79,
    "cold_start_ms": 548.91,
    "burst_tti_ms": 907.55,
    "dax_s": 111.42
   },
   "perf_source": "StarSling hpc-sandbox-benchmarks, run 36498291449 (2026-09-29), Node.js V8 Web Tooling p50 at a 4 vCPU / 8 GB target",
   "features": {
    "isolation": "gvisor"
   },
   "cpu_class": "dedicated"
  }
 ],
 "storage": {
  "included_disk_gib": 512,
  "disk_gib_month": null,
  "disk_billed_when_stopped": false,
  "snapshot_gib_month": null,
  "paused_ram_billed": false
 },
 "network": {
  "egress_free_gib": 1024,
  "egress_gib": 0.04,
  "ipv4_month": null,
  "ipv4_available": false,
  "internet": {
   "default": "configurable",
   "evidence": [
    {
     "quote": "By default, Sandboxes can make outbound connections to any public IP address.",
     "url": "https://modal.com/docs/guide/sandbox-networking"
    },
    {
     "quote": "prevent the Sandbox from making any outbound connections",
     "url": "https://modal.com/docs/guide/sandbox-networking"
    }
   ]
  }
 },
 "plans": [
  {
   "name": "Starter",
   "fee": 0,
   "fee_is_credit": false,
   "included_usd": 30,
   "per_seat": null,
   "concurrency": 100,
   "max_session_h": 24,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": null,
   "note": "$30/mo included compute; max 3 seats (no paid extra seats listed); 100 containers, 10 GPU concurrency; egress 1 TiB/mo free; payment method required; overage auto-charged (spend limit optional, hard stop). GPU concurrency 10 (modal.com/pricing, 2026-09-28); non-spec key gpu_concurrency (engine plan.concurrency holds the 100-container cap).",
   "flags": [],
   "gpu_concurrency": 10
  },
  {
   "name": "Team",
   "fee": 250,
   "fee_is_credit": false,
   "included_usd": 100,
   "per_seat": 0,
   "concurrency": 5000,
   "max_session_h": 24,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": null,
   "note": "$250 fee of which only $100 returns as compute credit; unlimited seats; 5,000 containers, 50 GPU concurrency; egress 10 TiB/mo free (engine network block uses Starter's 1 TiB); static IP proxy; custom domains; environment budgets.",
   "flags": [],
   "gpu_concurrency": 50
  },
  {
   "name": "Enterprise",
   "fee": null,
   "fee_is_credit": null,
   "included_usd": null,
   "per_seat": 0,
   "concurrency": null,
   "max_session_h": 24,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": null,
   "note": "Custom pricing: volume discounts, compute reservations, AWS/GCP marketplace committed spend; egress 100 TiB/mo free; HIPAA compatibility (Enterprise only; no BAA named on the pricing page), SSO, audit logs; 100k+ concurrent sandboxes cited in Modal blog.",
   "flags": [
    "sales"
   ]
  }
 ],
 "free": {
  "monthly_credit": 30,
  "one_time_credit": 0
 },
 "features": {
  "linux": true,
  "windows": false,
  "macos": false,
  "arm64": false,
  "gpu": true,
  "gpu_types": [
   "T4",
   "L4",
   "A10",
   "L40S",
   "A100-40GB",
   "A100-80GB",
   "RTX-PRO-6000",
   "H100",
   "H200",
   "B200",
   "B300"
  ],
  "snapshot": "mem",
  "pause_resume": false,
  "fork": true,
  "persistent_disk": true,
  "volumes": true,
  "auto_stop_idle": true,
  "max_session_h": 24,
  "custom_image": true,
  "docker_inside": false,
  "nested_virt": false,
  "root": true,
  "systemd": true,
  "browser": false,
  "desktop": false,
  "computer_use": false,
  "code_interpreter": false,
  "agent_harnesses": false,
  "ssh": true,
  "public_ipv4": false,
  "inbound_https": true,
  "custom_domain": true,
  "raw_tcp_inbound": true,
  "egress_allowlist": true,
  "static_egress_ip": true,
  "private_network": null,
  "self_host": false,
  "byoc": false,
  "open_source": false,
  "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": null,
  "egress_http_rules": false,
  "wake_on_request": false,
  "live_resize": false,
  "fork_running": false,
  "memory_snapshot_fork": true,
  "webhooks": null,
  "scheduled_wakeups": null,
  "audit_logs": true,
  "eu_data_residency": true,
  "zero_data_retention": null,
  "scoped_api_keys": null,
  "spend_limits": null,
  "mcp_server": false,
  "isolation": "gvisor",
  "image_oci": true,
  "snapshot_auto": false,
  "snapshot_on_demand": true,
  "harness_api": false,
  "egress_allowlist_level": "both",
  "ingress_rules": true,
  "guest_firewall": true,
  "secret_proxy": false,
  "volume_attach": true,
  "volume_shared": true,
  "anti_bot": false,
  "captcha_solving": false,
  "egress_ip_type": "static-datacenter",
  "own_agent_api": false,
  "fast_boot": true,
  "open_internet": true,
  "usage_api": null,
  "persist_scope": "folder",
  "persist_path": "Volumes",
  "fuse": false,
  "kernel_features": false,
  "sidecar": true
 },
 "perf": {
  "cpu_runs_s": null,
  "cold_start_ms": null,
  "burst_tti_ms": null,
  "dax_s": null
 },
 "perf_source": "Two runtimes (gVisor here, VM on the separate GA card \"Modal (VM Sandboxes)\"): perf is per mode.",
 "knobs": [
  {
   "id": "region_pin",
   "label": "Region pin",
   "kind": "select",
   "options": [
    {
     "value": 1,
     "label": "Any region (no pin, ×1)"
    },
    {
     "value": 1.15,
     "label": "Broad region pin: us / eu / ap (×1.15)"
    },
    {
     "value": 1.75,
     "label": "Narrow region pin: us-east, uk, jp ... (×1.75)"
    }
   ],
   "default": 1,
   "effect": "rate_factor",
   "modes": [
    "on-demand",
    "low-request-burst",
    "vm-sandbox"
   ],
   "why": "Modal multiplies all sandbox resource charges (incl. GPU) by 1.15x for a broad-region pin and 1.75x for a narrow-region pin; data residency (e.g. EU) requires a pin. Applied only to modes without a baked multiplier (region-broad / region-narrow already carry 1.15 / 1.75). VM Sandbox excluded: whether the multiplier applies there is not stated.",
   "source": "https://modal.com/docs/guide/region-selection"
  },
  {
   "id": "idle_tail",
   "label": "Idle time billed before idle_timeout / timeout ends the sandbox (× session hours)",
   "kind": "slider",
   "min": 1,
   "max": 2,
   "step": 0.05,
   "default": 1,
   "unit": "×",
   "options": null,
   "effect": "hours_factor",
   "modes": null,
   "why": "Modal has no paused state: an idle sandbox pays its full request (max(request, actual)) until idle_timeout or timeout (default 5 min, max 24 h) terminates it, or you call terminate(). Default 1 = you terminate as soon as work ends; the 2x ceiling is a judgment call.",
   "source": "https://modal.com/docs/guide/sandboxes"
  }
 ],
 "caveats": [
  "free.monthly_credit ($30) IS the Starter plan's included_usd, so don't subtract both. Team replaces it with $100 included.",
  "Billing is max(request, actual). The on-demand mode assumes request = workload size, so cpu_util gives no saving. Low-request-burst is optimistic: burst depends on spare host capacity, and its active_floor (0.03125) is exact only for 4 vCPU (0.125 / W.vcpu).",
  "CPU unit: card vCPU = 1 Modal `cpu` unit = 1 guest-visible CPU, priced at the per-'physical core' rate ($0.00003942/s = $0.141912/h). The pricing page and sandbox-resources guide say '1 core = 2 vCPU', but measurements (hpc-sandbox-benchmarks PR #121; HPC + ComputeSDK DAX runs) show cpu=N gives nproc N and N CPUs of throughput, i.e. the same capacity other cards call N vCPU. Modal does not disclose whether hosts run SMT; under the literal '2 vCPU equivalent' reading (cpu = W.vcpu/2) the same '4 vCPU' would cost half as much ($0.476/h at 4/8) but the guest sees only half the CPUs; that regime was removed (2026-09-28) because it is not the same machine. Evidence: research/verify/modal-cpu.md.",
  "Uncapped burst can bill MORE than the requested size (default soft limit is request + 16 cores) and the gVisor guest then reports ceil(limit) CPUs (ComputeSDK DAX 2026-07-17 at SDK defaults: nproc 17). The engine can't model this; set cpu=(req, limit).",
  "Egress at $0.04/GiB is charged only from 2026-10-01 (tracked, not billed, in Sep 2026). The allowance is plan-dependent (Starter 1 TiB, Team 10 TiB, Enterprise 100 TiB) and counts private container-to-container traffic and Cloud Bucket Mount uploads.",
  "Snapshot storage (filesystem/directory/memory) price is not published, so snapshot_gib_month is null. Filesystem snapshots default to a 30-day TTL (configurable/indefinite). Memory snapshots (alpha) expire after 7 days and terminate the source sandbox.",
  "Ephemeral disk: 512 GiB default quota, max 3 TiB. An explicit disk request is billed by raising the memory request to disk/20 GiB, so it costs extra only when disk/20 > the memory request. disk_gib_month is null because it is not a flat rate.",
  "No pause/stopped state. Default timeout is 5 min, max 24 h. Idle sandboxes pay the full request until idle_timeout terminates them.",
  "GPU sandboxes are preemptible. GPU concurrency is 10 (Starter) and 50 (Team). H100->H200 and A100-40->80 auto-upgrades are billed at the requested type's price.",
  "Volumes cost $0.09/GiB-month beyond 1 TiB free (not modelled in the storage block).",
  "Enterprise discounts and reservations are unpublished. Startup credits are unpublished. Academic grants are up to $10k one-time (not in free.one_time_credit).",
  "Max vCPU/RAM per sandbox is not published (the docs say a max is enforced). A third-party snippet cites 64 cores / 336 GB per container.",
  "Adjacent option not in modes: running the same code as a preemptible Modal Function costs 1/3 of the sandbox rate ($0.04716/vCPU-h per cpu unit, $0.007992/GiB-h), but it isn't a sandbox.",
  "perf is mode-level (card-level nulled): gVisor modes 12.79 runs/s (HPC run 36498291449), cold 549 ms, burst 908 ms, DAX 111.4 s (ComputeSDK); VM runtime 15.54 runs/s (HPC, card \"Modal (VM Sandboxes)\"). The 15.1 runs/s on boat.dev/compare is the VM runtime, not the default gVisor sandbox. Both HPC runs and ComputeSDK DAX passed cpu=4/cpuLimit=4 and observed nproc=4; the card now prices exactly that shape as '4 vCPU' ($0.759744/h at 8 GiB). boat.dev/compare's $0.476/h is the half-cores price (2 CPUs), not what was measured. See research/perf-costs.md.",
  "GPU counts (https://modal.com/docs/guide/gpu): A10 max 4 per container; T4/L4/L40S/A100/H100/H200/B200/B300 max 8; RTX PRO 6000 count unverified. H100 requests may be upgraded to H200 (billed as H100), B200 to B300 (billed as B200). GPU charge is not reduced by CPU utilisation in the low-request-burst mode.",
  "Egress: not charged in September 2026 (usage shown only). From 2026-10-01 egress is $0.04/GiB beyond 1 TiB (Starter) / 10 TiB (Team) / 100 TiB (Enterprise) per workspace per billing cycle; first invoice 2026-11-01. Card uses the current (free) rate; switch egress_gib to 0.04 on 2026-10-01 and add plan egress_free_gib 10240 on Team. https://modal.com/docs/guide/network-egress-billing",
  "GPU concurrency caps: Starter 10, Team 50, Enterprise custom (modal.com/pricing, 2026-09-28). The engine plan concurrency is the container cap (100 / 5,000); a workload with >10 concurrent GPU sandboxes needs Team.",
  "Snapshot storage re-checked 2026-09-28 (modal.com/docs/guide/sandbox-snapshots): retention is documented (filesystem/directory 30 days default, memory 7 days) but no price; snapshot_gib_month stays null.",
  "Features check 2026-09-28: card.features.docker_inside true -> null for the default gVisor runtime. Current docs only document Docker via VM Sandboxes (\"VM Sandboxes are also the recommended method to run Docker in Sandboxes\", modal.com/docs/guide/vm-sandboxes); no current doc statement that Docker runs under gVisor. vm-sandbox mode keeps docker_inside true. nested_virt stays false in all modes: VM Sandboxes \"Nested KVM virtualization is disabled by default. Please reach out to us if you'd like access.\"",
  "Included compute ($30 Starter / $100 Team) applies to Functions, Sandboxes and Notebooks CPU/memory/GPU; Volumes have their own 1 TiB; Shared Endpoint tokens are billed from the first request (since 2026-09-01). Whether egress overage is covered by included compute is not stated.",
  "Volumes: storage is sampled once a day and deleted data may still be billed for up to 4 days.",
  "Sidecars (public alpha, Sep 2026) share the Sandbox's CPU/memory request; there is no separate sidecar charge but the request must cover all containers.",
  "VM Sandboxes (real kernel: Docker, FUSE, eBPF; GA 2026-10-01, same prices, no GPU) are the separate card \"Modal (VM Sandboxes)\"."
 ],
 "sources": [
  "https://modal.com/pricing",
  "https://modal.com/docs/guide/sandbox-resources",
  "https://modal.com/docs/guide/resources",
  "https://modal.com/docs/guide/sandboxes",
  "https://modal.com/docs/guide/vm-sandboxes",
  "https://modal.com/docs/guide/sandbox-snapshots",
  "https://modal.com/docs/guide/region-selection",
  "https://modal.com/docs/guide/preemption",
  "https://modal.com/docs/guide/gpu",
  "https://modal.com/docs/guide/network-egress-billing",
  "https://modal.com/docs/guide/billing",
  "https://modal.com/docs/guide/budgets",
  "https://modal.com/docs/reference/changelog",
  "https://github.com/AnicetNgrt/hpc-sandbox-benchmarks/pull/121",
  "https://github.com/computesdk/benchmarks/tree/main/results/sandbox-dax",
  "https://modal.com/blog/vm-sandboxes-agent-computers",
  "https://modal.com/blog/runtime-product-update-sandbox-endpoints"
 ],
 "fleet": {
  "default_max_instances": 100,
  "default_max_vcpu": null,
  "default_max_gpus": 10,
  "raise": "self-serve",
  "raise_time_days": null,
  "verification": null,
  "tiers": "Starter 100 concurrent containers / 10 GPUs; Team ($250/month) 5,000 containers / 50 GPUs; Enterprise custom.",
  "notes": "Pricing checked against current official page; old 1,000 Team-container claims are stale. 10/50 CPU fleet fits Starter, 300/1,000 Team within quota, not a reservation. GPU count is total GPUs concurrently used, confirmed by scale guide, not GPU-container count. Per-Function hard cap 4,000 distinct from workspace total. No approval SLA. New-account spend ceiling: the Workspace budget maximum grows only after successful incremental charges, and usage stops at the limit. SDK 1.6.0 (2026-09-28) made the v2 Sandbox backend default with 'substantially higher creation rates and concurrency limits for CPU Sandboxes'; Sandbox.create raises ResourceExhaustedError if unschedulable. No numeric creation-rate limit is published; the pricing page still lists 100 (Starter) / 5000 (Team) containers.",
  "sources": [
   "https://modal.com/pricing",
   "https://modal.com/docs/guide/scale"
  ],
  "researched": "2026-09-28"
 },
 "audit_2026_09_29": {
  "applied": 5,
  "source": "checked against the provider's live pricing and docs pages",
  "reviewed": 5
 },
 "feature_evidence": {
  "snapshot_auto": {
   "value": false,
   "source": "https://modal.com/docs/guide/sandbox-snapshots.md",
   "quote": "Snapshots are triggered from outside the Sandbox, typically just before termination.",
   "note": "Timeout (max 24 h) and idle_timeout terminate the sandbox; no pause/sleep state and no automatic checkpoint. Docs tell you to call snapshot_filesystem() yourself before terminating and restore into a new sandbox.",
   "checked": "2026-09-29"
  },
  "snapshot_on_demand": {
   "value": true,
   "source": "https://modal.com/docs/guide/sandbox-snapshots.md",
   "quote": "Sandbox memory snapshots are copies of a Sandbox’s entire state, both in memory and on the filesystem. These Snapshots can be restored later to create a new Sandbox, which is an exact clone of the original Sandbox.",
   "note": "Filesystem snapshots (GA, snapshot_filesystem(), disk only, become Images that boot any number of new sandboxes; 30-day default TTL, ttl=None for indefinite) and directory snapshots (mount into running sandboxes). Memory snapshots (_experimental_snapshot, alpha): RAM + FS, but snapshotting terminates the sandbox, no GPU, 7-day expiry; restore via _experimental_from_snapshot creates a clone. VM-runtime memory snapshots only for enabled customers.",
   "checked": "2026-09-29"
  },
  "harness_api": {
   "value": false,
   "source": "https://modal.com/llms.txt",
   "quote": "Run a background coding agent with OpenCode",
   "note": "Only examples (OpenCode server, Claude Agent SDK, Cursor Cloud Agents) built on generic exec/tunnels; no first-party API to start/stream/resume a harness. Modal is an execution backend for Anthropic's Claude Managed Agents (harness driven by Anthropic, not a Modal API). Sidecars doc mentions 'Separating an agent harness from its execution environment' as a pattern only.",
   "checked": "2026-09-29"
  },
  "egress_allowlist": {
   "value": true,
   "source": "https://modal.com/docs/guide/sandbox-networking.md",
   "quote": "| **IP-range allowlist**        | `outbound_cidr_allowlist`   | Only allows traffic to the listed CIDR ranges (any protocol).  |\n| **Domain allowlist** *(Beta)* | `outbound_domain_allowlist` | Only allows TLS traffic (port 443) to the listed domain names. |",
   "note": "Also block_network=True (no internet). Domain allowlist is SNI-based (beta, wildcards), Modal resolves hostname itself; experimental runtime updates of allowlists without restart.",
   "checked": "2026-09-29",
   "level": "both"
  },
  "egress_http_rules": {
   "value": false,
   "source": "https://modal.com/docs/guide/sandbox-networking.md",
   "quote": "TLS traffic is not decrypted, so the `Host` header, URL path, and body are never inspected.",
   "note": "Built-in controls are host/IP only. DIY option: experimental proxy_traffic_via_sidecar routes all port-443 traffic to a user-run Sidecar (alpha, allowlisted workspaces) where you can run e.g. mitmproxy for method/path filtering; that is user-operated, not a provider rule engine.",
   "checked": "2026-09-29"
  },
  "ingress_rules": {
   "value": true,
   "source": "https://modal.com/docs/guide/sandbox-networking.md",
   "quote": "Use `inbound_cidr_allowlist` to restrict which IP addresses can connect\n**inbound** to the Sandbox through tunnels and Sandbox Connect Tokens:",
   "note": "Default: no inbound. Ports exposed explicitly (encrypted_ports/h2_ports/unencrypted_ports); Sandbox Connect Tokens give authenticated HTTP/WebSocket access with an unspoofable X-Verified-User-Data header.",
   "checked": "2026-09-29"
  },
  "guest_firewall": {
   "value": true,
   "source": "https://modal.com/docs/guide/vm-sandboxes.md",
   "quote": "This gives\neach Sandbox a real Linux kernel",
   "note": "VM runtime only: see the card \"Modal (VM Sandboxes)\".",
   "checked": "2026-09-29",
   "derived": true
  },
  "secret_proxy": {
   "value": false,
   "source": "https://modal.com/docs/examples/sidecar_secrets_injection.md",
   "quote": "Rather than passing that key into the Sandbox,\nyou can keep it in a separate, trusted container and let that container add it to\noutbound requests",
   "note": "No managed credential-injecting proxy. modal.Secret = env vars injected into the container. A DIY pattern exists: run your own proxy (Caddy/nginx/Envoy/mitmproxy) as a Sidecar holding the Secret, optionally forced via proxy_traffic_via_sidecar; this can cover any HTTP API but you build/operate it; Sidecars are alpha and restricted to allowlisted workspaces.",
   "checked": "2026-09-29"
  },
  "volume_attach": {
   "value": true,
   "source": "https://modal.com/docs/guide/volumes.md",
   "quote": "Volumes are a high-performance distributed file system for Modal applications.",
   "note": "modal.Volume mounted via volumes={...} on Sandbox.create; also CloudBucketMount (S3/R2/GCS, read-write or read_only) and deprecated NetworkFileSystem. Distributed FS with explicit commit/reload semantics, not a block device.",
   "checked": "2026-09-29"
  },
  "volume_shared": {
   "value": true,
   "source": "https://modal.com/docs/guide/volumes.md",
   "quote": "Concurrent modification from multiple containers is supported, but concurrent\nmodifications of the same files should be avoided. Last write wins",
   "note": "Read-write (or read_only mount option); sub_path mounts isolate sessions on one Volume; v2 volumes: concurrent writes from hundreds of containers. Changes visible to others only after commit + reload. Bucket mounts also shareable.",
   "checked": "2026-09-29"
  },
  "docker_inside": {
   "value": false,
   "source": "https://modal.com/docs/guide/sandboxes.md",
   "quote": "Use the VM runtime to run Docker in a Sandbox. Start `dockerd` as the Sandbox entrypoint and run containers with `sb.exec`.",
   "note": "True only under the VM Sandbox runtime (runtime=\"vm\", generally available since 2026-10-01: \"Starting today, VM Sandboxes are generally available on Modal\", https://modal.com/blog/vm-sandboxes-agent-computers); the gVisor runtime is not documented to support running Docker/dockerd inside it. This card covers gVisor; VM is the separate card \"Modal (VM Sandboxes)\". Pin runtime=\"gvisor\" explicitly: the VM guide says \"Switch runtimes via the `runtime` parameter, or leave unset to let Modal choose for you.\" (https://modal.com/docs/guide/vm-sandboxes).",
   "checked": "2026-10-14"
  },
  "anti_bot": {
   "value": false,
   "source": "https://modal.com/pricing",
   "quote": "Modal is a platform for running AI workloads in the cloud with minimal configuration. Key use cases include AI model training and inference, high-performance batch jobs, and sandboxed code execution.",
   "note": "not offered: outside the product's scope. Modal is a general compute/sandbox platform, not a browser-automation/scraping product; no stealth or fingerprint-evasion feature is documented.",
   "checked": "2026-09-30"
  },
  "captcha_solving": {
   "value": false,
   "source": "https://modal.com/pricing",
   "quote": "Modal is a platform for running AI workloads in the cloud with minimal configuration. Key use cases include AI model training and inference, high-performance batch jobs, and sandboxed code execution.",
   "note": "not offered: outside the product's scope. No CAPTCHA-solving feature or API is documented anywhere in Modal's docs/pricing.",
   "checked": "2026-09-30"
  },
  "egress_ip_type": {
   "value": "static-datacenter",
   "source": "https://modal.com/docs/guide/proxy-ips.md",
   "quote": "Proxies are a secure tunnel between Apps and exit nodes with static IPs. You can allow-list those static IPs in your network firewall...",
   "note": "Team/Enterprise-plan Proxy feature gives fixed outbound datacenter IPs (WireGuard exit nodes); default (no Proxy) egress uses Modal's shared cloud-provider datacenter IP ranges, which vary by run.",
   "checked": "2026-09-30"
  },
  "fork_running": {
   "value": false,
   "source": "https://modal.com/docs/guide/sandbox-snapshots.md",
   "quote": "Snapshotting a Sandbox will currently cause it to terminate. We intend to remove this limitation soon.",
   "note": "Forking (filesystem snapshot -> boot new Sandboxes from the Image) requires the source Sandbox to be snapshotted, which terminates it; you cannot fork a Sandbox while it keeps running. (Memory snapshots are also documented as terminating the source Sandbox.)",
   "checked": "2026-09-30"
  },
  "wake_on_request": {
   "value": false,
   "source": "https://modal.com/docs/guide/sandboxes.md",
   "quote": "Sandboxes can also be automatically terminated after a period of inactivity - you can do this by setting the `idle_timeout` parameter.",
   "note": "Sandboxes have no sleep/paused state: idle_timeout or timeout fully terminates the Sandbox (Finished state); there is no mechanism for a stopped sandbox to wake automatically on an incoming request. Consistent with card caveat 'No pause/stopped state.'",
   "checked": "2026-09-30"
  },
  "live_resize": {
   "value": false,
   "source": "https://modal.com/docs/guide/resources.md",
   "quote": "Physical core (2 vCPU equivalent)... You pay for max(request, actual). ... a default request of 0.125 CPU cores and 128 MiB of memory",
   "note": "CPU/memory are set via request/limit parameters at Sandbox.create() time (with elastic bursting up to a limit); no documented API to change a running Sandbox's resource request/limit after creation without recreating it. The Sandbox SDK reference (Sandbox.md) has no update/resize method.",
   "checked": "2026-09-30"
  },
  "own_agent_api": {
   "value": false,
   "source": "https://modal.com/pricing",
   "quote": "Modal is a platform for running AI workloads in the cloud with minimal configuration. Key use cases include AI model training and inference, high-performance batch jobs, and sandboxed code execution.",
   "note": "not offered: outside the product's scope. Modal is an execution backend that lets customers run their own agents/harnesses (examples: OpenCode, Claude Agent SDK, Cursor Cloud Agents); it does not ship its own first-party browser/computer-use/research task agent.",
   "checked": "2026-09-30"
  },
  "mcp_server": {
   "value": false,
   "source": "https://modal.com/docs/examples/mcp_server_stateless.md",
   "quote": "This example demonstrates how to deploy a simple MCP server on Modal with FastMCP.",
   "note": "Modal's MCP-related material is an example of hosting a user-built MCP server on Modal, not a first-party MCP server Modal ships to let clients control Modal Sandboxes/Apps themselves. No such control-plane MCP server is documented in the CLI or guide sections of llms.txt.",
   "checked": "2026-09-30"
  },
  "lang_node": {
   "value": true,
   "source": "https://modal.com/llms.txt",
   "quote": "Modal offers official SDKs in Python, Go, and JavaScript/TypeScript, along with a fully-featured CLI for interacting with the platform.",
   "note": "First-party JS/TypeScript SDK (modal.com/docs/sdk/js/latest/intro.md, beta) exposes Sandbox/Function/etc.; Node.js also runs inside sandboxes generically via custom images (e.g. 'Run Node.js, Ruby, and more in a Sandbox' example).",
   "checked": "2026-09-30"
  },
  "byoc": {
   "value": false,
   "source": "https://modal.com/docs/guide/security.md",
   "quote": "Compute jobs at Modal are containerized and virtualized using gVisor... Sandboxes may also run on Modal's secure VM runtime.",
   "note": "not offered: outside the product's scope. Modal is a fully managed multi-tenant serverless platform running on its own infrastructure/regions; no self-hosted-in-your-cloud-account (BYOC) deployment option is documented on the security, pricing, or enterprise pages.",
   "checked": "2026-09-30"
  },
  "eu_data_residency": {
   "value": true,
   "source": "https://modal.com/docs/guide/data-residency.md",
   "quote": "You can select the container and routing regions for most Modal services... For a full list of available regions, please visit our region selection documentation page.",
   "note": "Region selection documents an 'eu' broad region (European Economic Area) with eu-west/eu-north/eu-south narrow regions; Sandboxes support container-region pinning to 'eu' (region-selection.md), which the card's region-broad/region-narrow modes price at 1.15x/1.75x.",
   "checked": "2026-09-30"
  },
  "persistent_disk": {
   "value": true,
   "corrected_from": false,
   "source": "https://modal.com/docs/guide/volumes",
   "quote": "Create a named, persistent modal.Volume. ... For Volumes, changes are persisted by background commits that run every few seconds while the Sandbox executes, with a final commit when the Sandbox terminates.",
   "note": "A default Sandbox's own root disk is ephemeral (wiped on terminate; no pause state), so the card's plain 'no persistent disk' default is right about the root FS. But Volumes (already features.volumes=true) are first-party attachable persistent disks: they outlive the Sandbox and can be remounted into a new Sandbox with the same files. That makes persistent_disk true (opt-in via Volume attach; the ephemeral root FS remains the default).",
   "checked": "2026-09-30"
  },
  "pause_resume": {
   "value": false,
   "source": "https://modal.com/docs/guide/sandboxes",
   "quote": "5. **Finished** — The Sandbox has stopped running. This can happen for several reasons: the entrypoint process exited on its own, the Sandbox was explicitly terminated (via the dashboard or `sandbox.terminate()`), the timeout or idle timeout was reached, or an out-of-memory condition occurred. Once finished, no further commands can be executed inside the Sandbox.",
   "note": "Sandbox lifecycle only has Created/Scheduled/Started/Ready/Finished; there is no Paused state and no resume of a running container. (Filesystem/memory snapshot+restore exists but that creates a brand-new Sandbox, not a resumed one — tracked separately as memory_snapshot_fork.)",
   "checked": "2026-09-30"
  },
  "memory_snapshot_fork": {
   "value": true,
   "corrected_from": false,
   "source": "https://modal.com/docs/guide/sandbox-snapshots",
   "quote": "Sandbox memory snapshots are copies of a Sandbox's entire state, both in memory and on the filesystem. These Snapshots can be restored later to create a new Sandbox, which is an exact clone of the original Sandbox.",
   "note": "Memory Snapshots (alpha, gated: 'Access to VM Memory Snapshots is available on request') capture RAM+FS and Sandbox._experimental_from_snapshot() clones them into a new, running Sandbox with processes' memory state intact -- this is exactly the memory_snapshot_fork definition. Alpha/experimental API (_experimental_snapshot / _experimental_enable_snapshot), so confidence medium rather than high.",
   "checked": "2026-09-30"
  },
  "nested_virt": {
   "value": false,
   "source": "https://modal.com/docs/guide/vm-sandboxes",
   "quote": "Nested virtualization is also available on the Team and Enterprise plans",
   "note": "Only on the VM runtime (card \"Modal (VM Sandboxes)\"), not on gVisor.",
   "checked": "2026-10-02"
  },
  "ssh": {
   "value": true,
   "corrected_from": false,
   "source": "https://modal.com/llms-full.txt",
   "quote": "This assumes you have a rsa keypair in ~/.ssh/id_rsa{.pub}, this is a bare-bones example letting you SSH into a Modal container. ... subprocess.Popen([\"/usr/sbin/sshd\", \"-D\", \"-e\"]) with modal.forward(port=22, unencrypted=True) as tunnel: ... connection_cmd = f'ssh -p {port} root@{hostname}'",
   "note": "Officially documented pattern: install openssh-server in the image, run sshd, and expose it via modal.forward's raw-TCP tunnel (already features.raw_tcp_inbound=true) to get a real `ssh user@host -p port` session. It's DIY (you supply sshd + keys, not a managed 'SSH into your sandbox' button), so medium confidence rather than high, but it is a first-party documented capability, not absent -- corrected from false to true.",
   "checked": "2026-09-30"
  },
  "desktop": {
   "value": false,
   "source": "https://modal.com/docs/examples/computer_use_vnc",
   "quote": "By default, Browser Use launches Chromium headless. However, we want to watch the browser in real time. In each Sandbox, Xvfb provides a virtual display, x11vnc serves it over VNC, and websockify bridges the stream into the noVNC page that the UI embeds.",
   "note": "The only VNC/desktop capability found is a user-built example (installs Xvfb/x11vnc/websockify themselves inside a generic Linux Sandbox) -- not a managed desktop product. No first-party 'desktop' offering.",
   "checked": "2026-09-30"
  },
  "browser": {
   "value": false,
   "source": "https://modal.com/docs/examples/computer_use_vnc",
   "quote": "This example builds one with Browser Use. ... The agent drives Chromium inside a Modal Sandbox running in a VM",
   "note": "Chromium is not a managed/offered browser -- it's installed and driven by the user's own code (Browser Use) inside a generic Sandbox, per the example. No first-party managed browser.",
   "checked": "2026-09-30"
  },
  "computer_use": {
   "value": false,
   "source": "https://modal.com/docs/examples/computer_use_vnc",
   "quote": "Computer-use agents are LLMs that can interact with a web browser in a loop. Rather than calling a fixed set of APIs, they look at a rendered page or screen, decide what to click or type next, take that action, and look again. This example builds one with Browser Use.",
   "note": "'Computer Use Vnc' is a code example showing how to wire up a third-party computer-use agent (Browser Use) yourself on top of generic Sandbox + Xvfb/VNC; Modal ships no first-party computer-use/screenshot-click API.",
   "checked": "2026-09-30"
  },
  "public_ipv4": {
   "value": false,
   "source": "https://modal.com/docs/guide/sandbox-networking",
   "quote": "Sandboxes are built to be secure-by-default, meaning that a default Sandbox has no ability to accept incoming network connections or access your Modal resources.",
   "note": "Inbound access is only via TLS tunnels/hostnames (modal.forward, encrypted_ports, Connect Tokens) or workspace-private i6pn IPv6 for clusters; there is no per-sandbox public IPv4 assigned. The 'static IP' feature (Proxies, already features.static_egress_ip=true) is for outbound traffic only ('Proxies are a secure tunnel between Apps and exit nodes with static IPs'), not an inbound public IPv4 on the machine.",
   "checked": "2026-09-30"
  },
  "agent_harnesses": {
   "value": false,
   "source": "https://modal.com/llms-full.txt",
   "quote": "First, we define a Modal container Image with OpenCode installed. ... .run_commands(\"curl -fsSL https://opencode.ai/install | bash\")",
   "note": "'Run OpenCode in a Modal Sandbox' is a customer-authored example that installs OpenCode itself via a shell command in a custom Image; Codex/Claude Code/OpenCode docs elsewhere are about pointing those external CLIs at a Modal-hosted model endpoint, not about Modal preinstalling/offering coding-agent harnesses as sandbox templates.",
   "checked": "2026-09-30"
  },
  "windows": {
   "value": false,
   "source": "https://modal.com/docs/guide/images",
   "quote": "By default, Modal Functions and Sandboxes run in a Debian Linux environment with a basic Python installation of the same minor version `v3.x` as your local Python interpreter.",
   "note": "No Windows runtime or Windows base images are offered anywhere in the docs; Sandboxes/Functions are Linux containers/VMs (Debian-based, or custom OCI Linux images) only.",
   "checked": "2026-09-30"
  },
  "macos": {
   "value": false,
   "source": "https://modal.com/docs/guide/images",
   "quote": "By default, Modal Functions and Sandboxes run in a Debian Linux environment",
   "note": "Modal is a Linux-container/VM compute platform (gVisor or Linux-kernel VM runtimes); no macOS machines/images are offered. Plainly outside the product, matching the 'macOS for a GPU cloud' example in the field definitions.",
   "checked": "2026-09-30"
  },
  "arm64": {
   "value": false,
   "source": "https://modal.com/docs/reference/modal.Image#from_registry",
   "quote": "The image must be built for the `linux/amd64` platform.",
   "note": "Docs require linux/amd64 for custom images and never mention arm64/aarch64/Graviton/Apple-silicon guest CPUs anywhere in the docs, GPU guide, or pricing page; the only architecture named across the full llms-full.txt corpus is x86_64/amd64 (e.g. flash-attn wheels are linux_x86_64, binaries are linux-amd64). Treated as x86_64-only.",
   "checked": "2026-09-30"
  },
  "self_host": {
   "value": false,
   "source": "https://modal.com/llms-full.txt",
   "quote": "Most interactions with Modal are well-described in a gRPC API, and occur through modal, our open-source command-line tool and Python client library.",
   "note": "Only the client (CLI/SDK) is open; the actual compute platform (workers, scheduler, storage) is Modal's own multi-tenant SaaS with no on-prem/self-hosted or BYOC deployment option documented anywhere (Enterprise plan mentions AWS/GCP marketplace billing, not deploying Modal's control plane into a customer's account).",
   "checked": "2026-09-30"
  },
  "open_source": {
   "value": false,
   "source": "https://modal.com/llms-full.txt",
   "quote": "occur through modal, our open-source command-line tool and Python client library.",
   "note": "Only the `modal` CLI/Python client is open-source; the core product -- the compute platform itself (scheduler, workers, storage, billing) -- is closed-source and only usable as Modal's hosted service. No OSI license covers the core product.",
   "checked": "2026-09-30"
  },
  "cpu_class": {
   "value": {
    "on-demand": "dedicated",
    "region-broad": "dedicated",
    "region-narrow": "dedicated",
    "low-request-burst": "shared"
   },
   "source": "https://modal.com/docs/guide/sandbox-resources",
   "quote": "Sandboxes can burst beyond their CPU and memory requests when additional resources are available on the underlying host. Your request guarantees a minimum level of resources, but when spare capacity exists, your Sandbox can use more. You pay for `max(request, actual)`.",
   "note": "Modal guarantees the requested number of physical cores ('access to at least N cores', modal.com/docs/guide/resources) -- i.e. reserved/dedicated capacity up to the request, with additional cores above that available only opportunistically (soft limit request+16 cores, throttled beyond it) and billed via max(request,actual). For on-demand/region-*/vm-sandbox modes the request is set to the workload size, so the guaranteed (dedicated) portion covers the whole workload. For low-request-burst the request is deliberately set to the minimum (0.125 core) and the card's own note says burst capacity is NOT guaranteed ('it needs spare host capacity ... the workload may be throttled'), so most of that mode's effective vCPUs are best-effort/shared rather than reserved.",
   "checked": "2026-09-30"
  },
  "fast_boot": {
   "value": true,
   "source": "https://www.computesdk.com/benchmarks",
   "quote": "burst of 100: p95 1043 ms, 100% started",
   "note": "ComputeSDK sandbox benchmark 2026-09-25",
   "checked": "2026-09-25"
  },
  "usage_api": {
   "value": null,
   "source": "https://modal.com/docs/guide/billing",
   "quote": "The card lists billing and budgets guides as sources but does not provide specific evidence of a REST API, SDK method, or CLI command that returns per-sandbox or per-tag billable usage. Modal's pricing page and billing docs do not document a programmatic usage/metrics endpoint in the available card ",
   "note": "Modal ships a Python SDK and CLI but the card's sources do not cite a specific usage_api endpoint, method, or CLI command. Verification requires checking modal.com/docs/guide/billing and the SDK reference directly for methods like get_usage(), usage API endpoints, or billing export formats. The card's 'budgets' feature (plan-level spend limits) is documented but distinct from usage reporting.",
   "confidence": "low",
   "checked": "2026-10-01"
  },
  "persist_scope": {
   "value": "folder",
   "source": "https://modal.com/docs/guide/volumes",
   "quote": "Create a named, persistent modal.Volume. ... For Volumes, changes are persisted by background commits that run every few seconds while the Sandbox executes, with a final commit when the Sandbox terminates.",
   "note": "Only Volumes survives a stop; the rest of the filesystem (packages installed elsewhere) resets.",
   "checked": "2026-10-01"
  },
  "fuse": {
   "value": false,
   "source": "https://modal.com/blog/vm-sandboxes-agent-computers",
   "quote": "Reach for runtime=\"vm\" when you butt against the walls of userspace: Docker, FUSE filesystems, or niche Linux kernel features.",
   "note": "On gVisor FUSE does not mount (Legora: \"running code sandboxes as bare processes because FUSE wouldn’t mount\"); use the VM card.",
   "checked": "2026-10-02"
  },
  "kernel_features": {
   "value": false,
   "source": "https://modal.com/blog/vm-sandboxes-agent-computers",
   "quote": "Reach for runtime=\"vm\" when you butt against the walls of userspace: Docker, FUSE filesystems, or niche Linux kernel features.",
   "checked": "2026-10-02"
  },
  "sidecar": {
   "value": true,
   "source": "https://modal.com/docs/guide/sandbox-sidecars",
   "quote": "Sandbox Sidecars let you run additional containers alongside your main Sandbox container, on the same host.",
   "note": "Beta. Each sidecar \"runs in a separate, sandboxed process isolated from the main Sandbox container\", reachable by name over an internal bridge network; up to 250 per sandbox, sharing the sandbox’s CPU/memory. CPU-only even when the sandbox has a GPU.",
   "checked": "2026-10-02"
  },
  "hipaa": {
   "value": true,
   "source": "https://modal.com/pricing",
   "quote": "HIPAA compatibility",
   "note": "Enterprise plan only: the pricing table ticks HIPAA compatibility for Enterprise, not Starter or Team. The pricing page does not mention a BAA.",
   "checked": "2026-10-14"
  },
  "burst": {
   "value": true,
   "source": "https://modal.com/docs/guide/sandbox-resources",
   "quote": "Sandboxes can burst beyond their CPU and memory requests when additional resources are available on the underlying host. Your request guarantees a minimum level of resources, but when spare capacity exists, your Sandbox can use more. You pay for `max(request, actual)`.",
   "note": "Billed per second for max(request, used): a sandbox can use more than it reserved. Bursting is best effort, not guaranteed capacity.",
   "checked": "2026-10-02"
  }
 },
 "locations": [
  {
   "country": "US",
   "state": "VA",
   "city": null,
   "provider_region": "us-east",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "US",
   "state": null,
   "city": null,
   "provider_region": "us-central",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "US",
   "state": null,
   "city": null,
   "provider_region": "us-south",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "US",
   "state": "OR",
   "city": null,
   "provider_region": "us-west",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "IE",
   "state": null,
   "city": "Dublin",
   "provider_region": "eu-west",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "IN",
   "state": null,
   "city": "Mumbai",
   "provider_region": "ap-south",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "AU",
   "state": "VIC",
   "city": "Melbourne",
   "provider_region": "ap-melbourne",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "JP",
   "state": null,
   "city": null,
   "provider_region": "jp",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "AU",
   "state": null,
   "city": null,
   "provider_region": "au",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "GB",
   "state": null,
   "city": null,
   "provider_region": "uk",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "CA",
   "state": null,
   "city": null,
   "provider_region": "ca",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "MX",
   "state": null,
   "city": null,
   "provider_region": "mx",
   "self_serve": true,
   "choosable": true
  }
 ],
 "locations_source": "https://modal.com/docs/guide/region-selection",
 "locations_quote": "Modal offers different levels of granularity for container regions. Broad... us, eu, ap. Narrow: us-east, us-central, us-south, us-west, eu-west, eu-north, eu-south, ap-northeast, ap-southeast, ap-south, ap-melbourne, jp, au, uk, ca, sa, af, mx",
 "locations_checked": "2026-10-01"
}