@wenathlan/saddle 1.8.18 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +1339 -0
- package/README.md +33 -12
- package/alternatives.ts +1218 -0
- package/biome.json +153 -0
- package/boards.json +1517 -0
- package/compute.ts +3144 -0
- package/cores.json +1801 -0
- package/dist/acquisition.d.ts +359 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +629 -0
- package/dist/acquisition.js.map +1 -0
- package/dist/alternatives.d.ts +509 -0
- package/dist/alternatives.d.ts.map +1 -0
- package/dist/alternatives.js +951 -0
- package/dist/alternatives.js.map +1 -0
- package/dist/automation.d.ts +426 -0
- package/dist/automation.d.ts.map +1 -0
- package/dist/automation.js +561 -0
- package/dist/automation.js.map +1 -0
- package/dist/browser.d.ts +562 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1057 -0
- package/dist/browser.js.map +1 -0
- package/dist/capacitor.config.d.ts +13 -0
- package/dist/capacitor.config.d.ts.map +1 -0
- package/dist/capacitor.config.js +26 -0
- package/dist/capacitor.config.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +111 -0
- package/dist/cli.js.map +1 -0
- package/dist/communication.d.ts +192 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +418 -0
- package/dist/communication.js.map +1 -0
- package/dist/compute.d.ts +1161 -0
- package/dist/compute.d.ts.map +1 -0
- package/dist/compute.js +2273 -0
- package/dist/compute.js.map +1 -0
- package/dist/distribution.d.ts +529 -0
- package/dist/distribution.d.ts.map +1 -0
- package/dist/distribution.js +811 -0
- package/dist/distribution.js.map +1 -0
- package/dist/execution.d.ts +530 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +761 -0
- package/dist/execution.js.map +1 -0
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +60 -0
- package/dist/format.js.map +1 -0
- package/dist/foundation.d.ts +176 -0
- package/dist/foundation.d.ts.map +1 -0
- package/dist/foundation.js +309 -0
- package/dist/foundation.js.map +1 -0
- package/dist/index.d.ts +733 -123
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1018 -123
- package/dist/index.js.map +1 -1
- package/dist/integration.d.ts +236 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +236 -0
- package/dist/integration.js.map +1 -0
- package/dist/intelligence.d.ts +94 -0
- package/dist/intelligence.d.ts.map +1 -0
- package/dist/intelligence.js +145 -0
- package/dist/intelligence.js.map +1 -0
- package/dist/{isolation/contracts.d.ts → isolation.d.ts} +12 -1
- package/dist/isolation.d.ts.map +1 -0
- package/dist/{isolation/contracts.js → isolation.js} +13 -1
- package/dist/isolation.js.map +1 -0
- package/dist/media.d.ts +344 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +986 -0
- package/dist/media.js.map +1 -0
- package/dist/modes.d.ts +359 -0
- package/dist/modes.d.ts.map +1 -0
- package/dist/modes.js +134 -0
- package/dist/modes.js.map +1 -0
- package/dist/{library/public.d.ts → operations.d.ts} +15 -1
- package/dist/operations.d.ts.map +1 -0
- package/dist/{library/public.js → operations.js} +18 -7
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator.d.ts +1339 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +4308 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/performance.d.ts +416 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +827 -0
- package/dist/performance.js.map +1 -0
- package/dist/quantum.d.ts +810 -0
- package/dist/quantum.d.ts.map +1 -0
- package/dist/quantum.js +2073 -0
- package/dist/quantum.js.map +1 -0
- package/dist/render.d.ts +381 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +1073 -0
- package/dist/render.js.map +1 -0
- package/dist/scheduler.d.ts +596 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +1259 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/security.d.ts +501 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +1170 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/{server/node.js → server.js} +16 -2
- package/dist/server.js.map +1 -0
- package/dist/tiers.d.ts +1002 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +2165 -0
- package/dist/tiers.js.map +1 -0
- package/dist/virtual.d.ts +641 -0
- package/dist/virtual.d.ts.map +1 -0
- package/dist/virtual.js +1285 -0
- package/dist/virtual.js.map +1 -0
- package/dist/virtualcpu.d.ts +316 -0
- package/dist/virtualcpu.d.ts.map +1 -0
- package/dist/virtualcpu.js +1180 -0
- package/dist/virtualcpu.js.map +1 -0
- package/dist/virtualgpu.d.ts +345 -0
- package/dist/virtualgpu.d.ts.map +1 -0
- package/dist/virtualgpu.js +1000 -0
- package/dist/virtualgpu.js.map +1 -0
- package/dist/virtualization.d.ts +607 -0
- package/dist/virtualization.d.ts.map +1 -0
- package/dist/virtualization.js +1187 -0
- package/dist/virtualization.js.map +1 -0
- package/dist/virtualmemory.d.ts +818 -0
- package/dist/virtualmemory.d.ts.map +1 -0
- package/dist/virtualmemory.js +1796 -0
- package/dist/virtualmemory.js.map +1 -0
- package/dist/webscrape.d.ts +720 -0
- package/dist/webscrape.d.ts.map +1 -0
- package/dist/webscrape.js +2697 -0
- package/dist/webscrape.js.map +1 -0
- package/docker.config +769 -0
- package/docs/CONVERSA.txt +1523 -0
- package/docs/alternatives.md +499 -0
- package/docs/architecture-1.8.19.md +76 -0
- package/docs/architecture-1.8.19.mmd +33 -0
- package/docs/architecture-1.8.19.png +0 -0
- package/docs/architecture.md +355 -0
- package/docs/brancharchive-2026-08-18.md +18 -0
- package/docs/browser.md +7 -0
- package/docs/consolidation.md +70 -0
- package/docs/e2ugh-engine.md +528 -0
- package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
- package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
- package/docs/hardware.md +342 -0
- package/docs/optimization.md +126 -0
- package/docs/performance.md +499 -0
- package/docs/planning.1.8.18.md +94 -0
- package/docs/planning.1.8.19.md +49 -0
- package/docs/releasenotes-1.8.19.md +35 -0
- package/docs/research-1.8.19-virtual-browser.md +27 -0
- package/docs/security.md +454 -0
- package/docs/todo-1.8.18.md +12 -0
- package/docs/todo-1.8.19.md +241 -0
- package/docs/viability.md +777 -0
- package/docs/virtualization.md +335 -0
- package/docs/web-duplicatecleanup.md +9 -0
- package/docs/web-ideas.md +106 -0
- package/docs/workflowimprovements-2026-08-19.md +70 -0
- package/gpumonitor.cpp +1543 -0
- package/gpus.json +2408 -0
- package/index.ts +1478 -0
- package/media.ts +1337 -0
- package/mttg.config +1549 -0
- package/orchestrator.ts +5462 -0
- package/package.json +304 -56
- package/passage.config +1331 -0
- package/performance.ts +1049 -0
- package/processors.json +2217 -0
- package/qemu.config +1062 -0
- package/qemubridge.py +1340 -0
- package/quantum.ts +2393 -0
- package/render.ts +1325 -0
- package/scheduler.ts +1600 -0
- package/security.ts +1449 -0
- package/tiers.ts +2871 -0
- package/tsconfig.json +29 -0
- package/virtualcpu.ts +1273 -0
- package/virtualgpu.ts +1181 -0
- package/virtualhardware.c +1011 -0
- package/virtualhardware.json +739 -0
- package/virtualization.ts +1628 -0
- package/virtualizationcore.cpp +4635 -0
- package/virtualmemory.ts +2303 -0
- package/vm.config.json +1910 -0
- package/{extension → web/extension}/manifest.json +1 -1
- package/web/readme.md +382 -0
- package/web/tsconfig.json +25 -0
- package/dist/adapters/forge.d.ts +0 -17
- package/dist/adapters/forge.d.ts.map +0 -1
- package/dist/adapters/forge.js +0 -19
- package/dist/adapters/forge.js.map +0 -1
- package/dist/adapters/forgejo.d.ts +0 -49
- package/dist/adapters/forgejo.d.ts.map +0 -1
- package/dist/adapters/forgejo.js +0 -8
- package/dist/adapters/forgejo.js.map +0 -1
- package/dist/adapters/github.d.ts +0 -12
- package/dist/adapters/github.d.ts.map +0 -1
- package/dist/adapters/github.js +0 -20
- package/dist/adapters/github.js.map +0 -1
- package/dist/adapters/gitlab.d.ts +0 -17
- package/dist/adapters/gitlab.d.ts.map +0 -1
- package/dist/adapters/gitlab.js +0 -10
- package/dist/adapters/gitlab.js.map +0 -1
- package/dist/adapters/huggingface.d.ts +0 -17
- package/dist/adapters/huggingface.d.ts.map +0 -1
- package/dist/adapters/huggingface.js +0 -6
- package/dist/adapters/huggingface.js.map +0 -1
- package/dist/adapters/socket.d.ts +0 -11
- package/dist/adapters/socket.d.ts.map +0 -1
- package/dist/adapters/socket.js +0 -17
- package/dist/adapters/socket.js.map +0 -1
- package/dist/adapters/transport.d.ts +0 -7
- package/dist/adapters/transport.d.ts.map +0 -1
- package/dist/adapters/transport.js +0 -36
- package/dist/adapters/transport.js.map +0 -1
- package/dist/ai/chunk.d.ts +0 -2
- package/dist/ai/chunk.d.ts.map +0 -1
- package/dist/ai/chunk.js +0 -36
- package/dist/ai/chunk.js.map +0 -1
- package/dist/ai/llmstxt.d.ts +0 -6
- package/dist/ai/llmstxt.d.ts.map +0 -1
- package/dist/ai/llmstxt.js +0 -12
- package/dist/ai/llmstxt.js.map +0 -1
- package/dist/ai/provenance.d.ts +0 -22
- package/dist/ai/provenance.d.ts.map +0 -1
- package/dist/ai/provenance.js +0 -25
- package/dist/ai/provenance.js.map +0 -1
- package/dist/ai/rag.d.ts +0 -26
- package/dist/ai/rag.d.ts.map +0 -1
- package/dist/ai/rag.js +0 -22
- package/dist/ai/rag.js.map +0 -1
- package/dist/ai/tokens.d.ts +0 -15
- package/dist/ai/tokens.d.ts.map +0 -1
- package/dist/ai/tokens.js +0 -9
- package/dist/ai/tokens.js.map +0 -1
- package/dist/api/auth.d.ts +0 -16
- package/dist/api/auth.d.ts.map +0 -1
- package/dist/api/auth.js +0 -19
- package/dist/api/auth.js.map +0 -1
- package/dist/api/contracts.d.ts +0 -28
- package/dist/api/contracts.d.ts.map +0 -1
- package/dist/api/contracts.js +0 -14
- package/dist/api/contracts.js.map +0 -1
- package/dist/api/control.d.ts +0 -10
- package/dist/api/control.d.ts.map +0 -1
- package/dist/api/control.js +0 -35
- package/dist/api/control.js.map +0 -1
- package/dist/api/http.d.ts +0 -7
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -12
- package/dist/api/http.js.map +0 -1
- package/dist/api/rate.d.ts +0 -28
- package/dist/api/rate.d.ts.map +0 -1
- package/dist/api/rate.js +0 -36
- package/dist/api/rate.js.map +0 -1
- package/dist/api/security.d.ts +0 -12
- package/dist/api/security.d.ts.map +0 -1
- package/dist/api/security.js +0 -56
- package/dist/api/security.js.map +0 -1
- package/dist/api/service.d.ts +0 -5
- package/dist/api/service.d.ts.map +0 -1
- package/dist/api/service.js +0 -70
- package/dist/api/service.js.map +0 -1
- package/dist/apps/registry.d.ts +0 -33
- package/dist/apps/registry.d.ts.map +0 -1
- package/dist/apps/registry.js +0 -24
- package/dist/apps/registry.js.map +0 -1
- package/dist/binary/archive.d.ts +0 -27
- package/dist/binary/archive.d.ts.map +0 -1
- package/dist/binary/archive.js +0 -46
- package/dist/binary/archive.js.map +0 -1
- package/dist/binary/build.d.ts +0 -29
- package/dist/binary/build.d.ts.map +0 -1
- package/dist/binary/build.js +0 -17
- package/dist/binary/build.js.map +0 -1
- package/dist/binary/transform.d.ts +0 -70
- package/dist/binary/transform.d.ts.map +0 -1
- package/dist/binary/transform.js +0 -105
- package/dist/binary/transform.js.map +0 -1
- package/dist/bot/adapter.d.ts +0 -5
- package/dist/bot/adapter.d.ts.map +0 -1
- package/dist/bot/adapter.js +0 -11
- package/dist/bot/adapter.js.map +0 -1
- package/dist/bot/bot.d.ts +0 -28
- package/dist/bot/bot.d.ts.map +0 -1
- package/dist/bot/bot.js +0 -52
- package/dist/bot/bot.js.map +0 -1
- package/dist/bot/commands.d.ts +0 -8
- package/dist/bot/commands.d.ts.map +0 -1
- package/dist/bot/commands.js +0 -19
- package/dist/bot/commands.js.map +0 -1
- package/dist/bot/permissions.d.ts +0 -13
- package/dist/bot/permissions.d.ts.map +0 -1
- package/dist/bot/permissions.js +0 -16
- package/dist/bot/permissions.js.map +0 -1
- package/dist/browser/actions.d.ts +0 -33
- package/dist/browser/actions.d.ts.map +0 -1
- package/dist/browser/actions.js +0 -44
- package/dist/browser/actions.js.map +0 -1
- package/dist/browser/agent.d.ts +0 -21
- package/dist/browser/agent.d.ts.map +0 -1
- package/dist/browser/agent.js +0 -13
- package/dist/browser/agent.js.map +0 -1
- package/dist/browser/context.d.ts +0 -43
- package/dist/browser/context.d.ts.map +0 -1
- package/dist/browser/context.js +0 -54
- package/dist/browser/context.js.map +0 -1
- package/dist/browser/fingerprint.d.ts +0 -4
- package/dist/browser/fingerprint.d.ts.map +0 -1
- package/dist/browser/fingerprint.js +0 -12
- package/dist/browser/fingerprint.js.map +0 -1
- package/dist/browser/index.d.ts +0 -11
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -11
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/playwright.d.ts +0 -11
- package/dist/browser/playwright.d.ts.map +0 -1
- package/dist/browser/playwright.js +0 -24
- package/dist/browser/playwright.js.map +0 -1
- package/dist/browser/recorder.d.ts +0 -21
- package/dist/browser/recorder.d.ts.map +0 -1
- package/dist/browser/recorder.js +0 -58
- package/dist/browser/recorder.js.map +0 -1
- package/dist/browser/session.d.ts +0 -14
- package/dist/browser/session.d.ts.map +0 -1
- package/dist/browser/session.js +0 -21
- package/dist/browser/session.js.map +0 -1
- package/dist/browser/snapshot.d.ts +0 -69
- package/dist/browser/snapshot.d.ts.map +0 -1
- package/dist/browser/snapshot.js +0 -133
- package/dist/browser/snapshot.js.map +0 -1
- package/dist/captcha/contract.d.ts +0 -35
- package/dist/captcha/contract.d.ts.map +0 -1
- package/dist/captcha/contract.js +0 -17
- package/dist/captcha/contract.js.map +0 -1
- package/dist/captcha/evidence.d.ts +0 -10
- package/dist/captcha/evidence.d.ts.map +0 -1
- package/dist/captcha/evidence.js +0 -9
- package/dist/captcha/evidence.js.map +0 -1
- package/dist/captcha/guard.d.ts +0 -23
- package/dist/captcha/guard.d.ts.map +0 -1
- package/dist/captcha/guard.js +0 -12
- package/dist/captcha/guard.js.map +0 -1
- package/dist/cli/main.d.ts +0 -4
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -46
- package/dist/cli/main.js.map +0 -1
- package/dist/core/errors.d.ts +0 -84
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -54
- package/dist/core/errors.js.map +0 -1
- package/dist/core/events.d.ts +0 -9
- package/dist/core/events.d.ts.map +0 -1
- package/dist/core/events.js +0 -21
- package/dist/core/events.js.map +0 -1
- package/dist/core/hash.d.ts +0 -10
- package/dist/core/hash.d.ts.map +0 -1
- package/dist/core/hash.js +0 -82
- package/dist/core/hash.js.map +0 -1
- package/dist/core/ids.d.ts +0 -10
- package/dist/core/ids.d.ts.map +0 -1
- package/dist/core/ids.js +0 -15
- package/dist/core/ids.js.map +0 -1
- package/dist/delivery/manifest.d.ts +0 -35
- package/dist/delivery/manifest.d.ts.map +0 -1
- package/dist/delivery/manifest.js +0 -68
- package/dist/delivery/manifest.js.map +0 -1
- package/dist/deploy/index.d.ts +0 -6
- package/dist/deploy/index.d.ts.map +0 -1
- package/dist/deploy/index.js +0 -6
- package/dist/deploy/index.js.map +0 -1
- package/dist/dispatch/resumable.d.ts +0 -102
- package/dist/dispatch/resumable.d.ts.map +0 -1
- package/dist/dispatch/resumable.js +0 -64
- package/dist/dispatch/resumable.js.map +0 -1
- package/dist/dispatch/workflow.d.ts +0 -6
- package/dist/dispatch/workflow.d.ts.map +0 -1
- package/dist/dispatch/workflow.js +0 -37
- package/dist/dispatch/workflow.js.map +0 -1
- package/dist/domain/artifacts.d.ts +0 -12
- package/dist/domain/artifacts.d.ts.map +0 -1
- package/dist/domain/artifacts.js +0 -14
- package/dist/domain/artifacts.js.map +0 -1
- package/dist/domain/jobs.d.ts +0 -12
- package/dist/domain/jobs.d.ts.map +0 -1
- package/dist/domain/jobs.js +0 -20
- package/dist/domain/jobs.js.map +0 -1
- package/dist/domain/providers.d.ts +0 -10
- package/dist/domain/providers.d.ts.map +0 -1
- package/dist/domain/providers.js +0 -8
- package/dist/domain/providers.js.map +0 -1
- package/dist/domain/runtime.d.ts +0 -14
- package/dist/domain/runtime.d.ts.map +0 -1
- package/dist/domain/runtime.js +0 -10
- package/dist/domain/runtime.js.map +0 -1
- package/dist/domain/sessions.d.ts +0 -12
- package/dist/domain/sessions.d.ts.map +0 -1
- package/dist/domain/sessions.js +0 -57
- package/dist/domain/sessions.js.map +0 -1
- package/dist/examples/localjob.d.ts +0 -2
- package/dist/examples/localjob.d.ts.map +0 -1
- package/dist/examples/localjob.js.map +0 -1
- package/dist/examples/publicapi.d.ts +0 -2
- package/dist/examples/publicapi.d.ts.map +0 -1
- package/dist/examples/publicapi.js.map +0 -1
- package/dist/extension/build.d.ts +0 -9
- package/dist/extension/build.d.ts.map +0 -1
- package/dist/extension/build.js +0 -85
- package/dist/extension/build.js.map +0 -1
- package/dist/extension/content.d.ts +0 -6
- package/dist/extension/content.d.ts.map +0 -1
- package/dist/extension/content.js +0 -135
- package/dist/extension/content.js.map +0 -1
- package/dist/extension/index.d.ts +0 -7
- package/dist/extension/index.d.ts.map +0 -1
- package/dist/extension/index.js +0 -7
- package/dist/extension/index.js.map +0 -1
- package/dist/extension/pagebridge.d.ts +0 -6
- package/dist/extension/pagebridge.d.ts.map +0 -1
- package/dist/extension/pagebridge.js +0 -42
- package/dist/extension/pagebridge.js.map +0 -1
- package/dist/extension/permissions.d.ts +0 -26
- package/dist/extension/permissions.d.ts.map +0 -1
- package/dist/extension/permissions.js +0 -28
- package/dist/extension/permissions.js.map +0 -1
- package/dist/extension/popup.d.ts +0 -5
- package/dist/extension/popup.d.ts.map +0 -1
- package/dist/extension/popup.js +0 -26
- package/dist/extension/popup.js.map +0 -1
- package/dist/extension/protocol.d.ts +0 -58
- package/dist/extension/protocol.d.ts.map +0 -1
- package/dist/extension/protocol.js +0 -101
- package/dist/extension/protocol.js.map +0 -1
- package/dist/extension/serviceworker.d.ts +0 -25
- package/dist/extension/serviceworker.d.ts.map +0 -1
- package/dist/extension/serviceworker.js +0 -102
- package/dist/extension/serviceworker.js.map +0 -1
- package/dist/extension/worker.d.ts +0 -28
- package/dist/extension/worker.d.ts.map +0 -1
- package/dist/extension/worker.js +0 -22
- package/dist/extension/worker.js.map +0 -1
- package/dist/format/check.d.ts +0 -8
- package/dist/format/check.d.ts.map +0 -1
- package/dist/format/check.js +0 -38
- package/dist/format/check.js.map +0 -1
- package/dist/isolation/contracts.d.ts.map +0 -1
- package/dist/isolation/contracts.js.map +0 -1
- package/dist/library/public.d.ts.map +0 -1
- package/dist/library/public.js.map +0 -1
- package/dist/mcp/browser.d.ts +0 -9
- package/dist/mcp/browser.d.ts.map +0 -1
- package/dist/mcp/browser.js +0 -13
- package/dist/mcp/browser.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -35
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -40
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/transport.d.ts +0 -7
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js +0 -17
- package/dist/mcp/transport.js.map +0 -1
- package/dist/memory/bridge.d.ts +0 -14
- package/dist/memory/bridge.d.ts.map +0 -1
- package/dist/memory/bridge.js +0 -16
- package/dist/memory/bridge.js.map +0 -1
- package/dist/memory/engine.d.ts +0 -38
- package/dist/memory/engine.d.ts.map +0 -1
- package/dist/memory/engine.js +0 -109
- package/dist/memory/engine.js.map +0 -1
- package/dist/memory/modes.d.ts +0 -43
- package/dist/memory/modes.d.ts.map +0 -1
- package/dist/memory/modes.js +0 -66
- package/dist/memory/modes.js.map +0 -1
- package/dist/memory/objects.d.ts +0 -21
- package/dist/memory/objects.d.ts.map +0 -1
- package/dist/memory/objects.js +0 -20
- package/dist/memory/objects.js.map +0 -1
- package/dist/memory/planner.d.ts +0 -66
- package/dist/memory/planner.d.ts.map +0 -1
- package/dist/memory/planner.js +0 -108
- package/dist/memory/planner.js.map +0 -1
- package/dist/memory/targets.d.ts +0 -78
- package/dist/memory/targets.d.ts.map +0 -1
- package/dist/memory/targets.js +0 -29
- package/dist/memory/targets.js.map +0 -1
- package/dist/memory/transforms.d.ts +0 -19
- package/dist/memory/transforms.d.ts.map +0 -1
- package/dist/memory/transforms.js +0 -14
- package/dist/memory/transforms.js.map +0 -1
- package/dist/modes/matrix.d.ts +0 -23
- package/dist/modes/matrix.d.ts.map +0 -1
- package/dist/modes/matrix.js +0 -18
- package/dist/modes/matrix.js.map +0 -1
- package/dist/modes/modes.d.ts +0 -33
- package/dist/modes/modes.d.ts.map +0 -1
- package/dist/modes/modes.js +0 -15
- package/dist/modes/modes.js.map +0 -1
- package/dist/modes/resolve.d.ts +0 -96
- package/dist/modes/resolve.d.ts.map +0 -1
- package/dist/modes/resolve.js +0 -48
- package/dist/modes/resolve.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -14
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -18
- package/dist/observability/metrics.js.map +0 -1
- package/dist/packager/manifest.d.ts +0 -66
- package/dist/packager/manifest.d.ts.map +0 -1
- package/dist/packager/manifest.js +0 -94
- package/dist/packager/manifest.js.map +0 -1
- package/dist/packager/publish.d.ts +0 -51
- package/dist/packager/publish.d.ts.map +0 -1
- package/dist/packager/publish.js +0 -18
- package/dist/packager/publish.js.map +0 -1
- package/dist/packager/targetcli.d.ts +0 -7
- package/dist/packager/targetcli.d.ts.map +0 -1
- package/dist/packager/targetcli.js +0 -22
- package/dist/packager/targetcli.js.map +0 -1
- package/dist/persistence/adapter.d.ts +0 -5
- package/dist/persistence/adapter.d.ts.map +0 -1
- package/dist/persistence/adapter.js +0 -11
- package/dist/persistence/adapter.js.map +0 -1
- package/dist/persistence/drizzle.d.ts +0 -2
- package/dist/persistence/drizzle.d.ts.map +0 -1
- package/dist/persistence/drizzle.js +0 -12
- package/dist/persistence/drizzle.js.map +0 -1
- package/dist/persistence/memory.d.ts +0 -2
- package/dist/persistence/memory.d.ts.map +0 -1
- package/dist/persistence/memory.js +0 -27
- package/dist/persistence/memory.js.map +0 -1
- package/dist/persistence/migrations.d.ts +0 -19
- package/dist/persistence/migrations.d.ts.map +0 -1
- package/dist/persistence/migrations.js +0 -13
- package/dist/persistence/migrations.js.map +0 -1
- package/dist/persistence/prisma.d.ts +0 -2
- package/dist/persistence/prisma.d.ts.map +0 -1
- package/dist/persistence/prisma.js +0 -25
- package/dist/persistence/prisma.js.map +0 -1
- package/dist/persistence/schema.d.ts +0 -63
- package/dist/persistence/schema.d.ts.map +0 -1
- package/dist/persistence/schema.js +0 -28
- package/dist/persistence/schema.js.map +0 -1
- package/dist/persistence/sql.d.ts +0 -3
- package/dist/persistence/sql.d.ts.map +0 -1
- package/dist/persistence/sql.js +0 -37
- package/dist/persistence/sql.js.map +0 -1
- package/dist/protocol/blocks.d.ts +0 -10
- package/dist/protocol/blocks.d.ts.map +0 -1
- package/dist/protocol/blocks.js +0 -26
- package/dist/protocol/blocks.js.map +0 -1
- package/dist/protocol/json.d.ts +0 -6
- package/dist/protocol/json.d.ts.map +0 -1
- package/dist/protocol/json.js +0 -6
- package/dist/protocol/json.js.map +0 -1
- package/dist/protocol/ndjson.d.ts +0 -3
- package/dist/protocol/ndjson.d.ts.map +0 -1
- package/dist/protocol/ndjson.js +0 -20
- package/dist/protocol/ndjson.js.map +0 -1
- package/dist/protocol/sse.d.ts +0 -7
- package/dist/protocol/sse.d.ts.map +0 -1
- package/dist/protocol/sse.js +0 -25
- package/dist/protocol/sse.js.map +0 -1
- package/dist/proxy/pool.d.ts +0 -9
- package/dist/proxy/pool.d.ts.map +0 -1
- package/dist/proxy/pool.js +0 -27
- package/dist/proxy/pool.js.map +0 -1
- package/dist/queue/idempotency.d.ts +0 -10
- package/dist/queue/idempotency.d.ts.map +0 -1
- package/dist/queue/idempotency.js +0 -13
- package/dist/queue/idempotency.js.map +0 -1
- package/dist/queue/persistent.d.ts +0 -14
- package/dist/queue/persistent.d.ts.map +0 -1
- package/dist/queue/persistent.js +0 -66
- package/dist/queue/persistent.js.map +0 -1
- package/dist/queue/queue.d.ts +0 -7
- package/dist/queue/queue.d.ts.map +0 -1
- package/dist/queue/queue.js +0 -55
- package/dist/queue/queue.js.map +0 -1
- package/dist/queue/saga.d.ts +0 -5
- package/dist/queue/saga.d.ts.map +0 -1
- package/dist/queue/saga.js +0 -20
- package/dist/queue/saga.js.map +0 -1
- package/dist/release/assets.d.ts +0 -144
- package/dist/release/assets.d.ts.map +0 -1
- package/dist/release/assets.js +0 -157
- package/dist/release/assets.js.map +0 -1
- package/dist/release/evidence.d.ts +0 -92
- package/dist/release/evidence.d.ts.map +0 -1
- package/dist/release/evidence.js +0 -148
- package/dist/release/evidence.js.map +0 -1
- package/dist/release/verify.d.ts +0 -12
- package/dist/release/verify.d.ts.map +0 -1
- package/dist/release/verify.js +0 -112
- package/dist/release/verify.js.map +0 -1
- package/dist/runners/chain.d.ts +0 -125
- package/dist/runners/chain.d.ts.map +0 -1
- package/dist/runners/chain.js +0 -95
- package/dist/runners/chain.js.map +0 -1
- package/dist/runners/health.d.ts +0 -36
- package/dist/runners/health.d.ts.map +0 -1
- package/dist/runners/health.js +0 -26
- package/dist/runners/health.js.map +0 -1
- package/dist/runners/heartbeat.d.ts +0 -23
- package/dist/runners/heartbeat.d.ts.map +0 -1
- package/dist/runners/heartbeat.js +0 -29
- package/dist/runners/heartbeat.js.map +0 -1
- package/dist/runners/inprocess.d.ts +0 -17
- package/dist/runners/inprocess.d.ts.map +0 -1
- package/dist/runners/inprocess.js +0 -20
- package/dist/runners/inprocess.js.map +0 -1
- package/dist/runners/scheduler.d.ts +0 -5
- package/dist/runners/scheduler.d.ts.map +0 -1
- package/dist/runners/scheduler.js +0 -19
- package/dist/runners/scheduler.js.map +0 -1
- package/dist/runtime/abort.d.ts +0 -8
- package/dist/runtime/abort.d.ts.map +0 -1
- package/dist/runtime/abort.js +0 -13
- package/dist/runtime/abort.js.map +0 -1
- package/dist/runtime/compatibility.d.ts +0 -37
- package/dist/runtime/compatibility.d.ts.map +0 -1
- package/dist/runtime/compatibility.js +0 -10
- package/dist/runtime/compatibility.js.map +0 -1
- package/dist/runtime/detect.d.ts +0 -13
- package/dist/runtime/detect.d.ts.map +0 -1
- package/dist/runtime/detect.js +0 -18
- package/dist/runtime/detect.js.map +0 -1
- package/dist/runtime/engine.d.ts +0 -20
- package/dist/runtime/engine.d.ts.map +0 -1
- package/dist/runtime/engine.js +0 -61
- package/dist/runtime/engine.js.map +0 -1
- package/dist/runtime/retry.d.ts +0 -19
- package/dist/runtime/retry.d.ts.map +0 -1
- package/dist/runtime/retry.js +0 -54
- package/dist/runtime/retry.js.map +0 -1
- package/dist/runtime/worker.d.ts +0 -10
- package/dist/runtime/worker.d.ts.map +0 -1
- package/dist/runtime/worker.js +0 -25
- package/dist/runtime/worker.js.map +0 -1
- package/dist/scrape/cache.d.ts +0 -45
- package/dist/scrape/cache.d.ts.map +0 -1
- package/dist/scrape/cache.js +0 -45
- package/dist/scrape/cache.js.map +0 -1
- package/dist/scrape/crawl.d.ts +0 -47
- package/dist/scrape/crawl.d.ts.map +0 -1
- package/dist/scrape/crawl.js +0 -114
- package/dist/scrape/crawl.js.map +0 -1
- package/dist/scrape/extract.d.ts +0 -63
- package/dist/scrape/extract.d.ts.map +0 -1
- package/dist/scrape/extract.js +0 -47
- package/dist/scrape/extract.js.map +0 -1
- package/dist/scrape/normalize.d.ts +0 -52
- package/dist/scrape/normalize.d.ts.map +0 -1
- package/dist/scrape/normalize.js +0 -102
- package/dist/scrape/normalize.js.map +0 -1
- package/dist/scrape/robots.d.ts +0 -37
- package/dist/scrape/robots.d.ts.map +0 -1
- package/dist/scrape/robots.js +0 -71
- package/dist/scrape/robots.js.map +0 -1
- package/dist/scrape/schema.d.ts +0 -23
- package/dist/scrape/schema.d.ts.map +0 -1
- package/dist/scrape/schema.js +0 -92
- package/dist/scrape/schema.js.map +0 -1
- package/dist/scrape/scraper.d.ts +0 -6
- package/dist/scrape/scraper.d.ts.map +0 -1
- package/dist/scrape/scraper.js +0 -46
- package/dist/scrape/scraper.js.map +0 -1
- package/dist/scrape/semantic.d.ts +0 -25
- package/dist/scrape/semantic.d.ts.map +0 -1
- package/dist/scrape/semantic.js +0 -27
- package/dist/scrape/semantic.js.map +0 -1
- package/dist/server/node.d.ts +0 -7
- package/dist/server/node.d.ts.map +0 -1
- package/dist/server/node.js.map +0 -1
- package/dist/sessions/file.d.ts +0 -25
- package/dist/sessions/file.d.ts.map +0 -1
- package/dist/sessions/file.js +0 -13
- package/dist/sessions/file.js.map +0 -1
- package/dist/sessions/replay.d.ts +0 -9
- package/dist/sessions/replay.d.ts.map +0 -1
- package/dist/sessions/replay.js +0 -70
- package/dist/sessions/replay.js.map +0 -1
- package/dist/sessions/store.d.ts +0 -25
- package/dist/sessions/store.d.ts.map +0 -1
- package/dist/sessions/store.js +0 -13
- package/dist/sessions/store.js.map +0 -1
- package/dist/storage/adapter.d.ts +0 -5
- package/dist/storage/adapter.d.ts.map +0 -1
- package/dist/storage/adapter.js +0 -11
- package/dist/storage/adapter.js.map +0 -1
- package/dist/storage/cache.d.ts +0 -23
- package/dist/storage/cache.d.ts.map +0 -1
- package/dist/storage/cache.js +0 -79
- package/dist/storage/cache.js.map +0 -1
- package/dist/storage/checksum.d.ts +0 -3
- package/dist/storage/checksum.d.ts.map +0 -1
- package/dist/storage/checksum.js +0 -19
- package/dist/storage/checksum.js.map +0 -1
- package/dist/storage/chunked.d.ts +0 -21
- package/dist/storage/chunked.d.ts.map +0 -1
- package/dist/storage/chunked.js +0 -67
- package/dist/storage/chunked.js.map +0 -1
- package/dist/storage/content.d.ts +0 -24
- package/dist/storage/content.d.ts.map +0 -1
- package/dist/storage/content.js +0 -44
- package/dist/storage/content.js.map +0 -1
- package/dist/storage/filehosting.d.ts +0 -2
- package/dist/storage/filehosting.d.ts.map +0 -1
- package/dist/storage/filehosting.js +0 -24
- package/dist/storage/filehosting.js.map +0 -1
- package/dist/storage/githubcontents.d.ts +0 -2
- package/dist/storage/githubcontents.d.ts.map +0 -1
- package/dist/storage/githubcontents.js +0 -29
- package/dist/storage/githubcontents.js.map +0 -1
- package/dist/storage/index.d.ts +0 -12
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -12
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/local.d.ts +0 -2
- package/dist/storage/local.d.ts.map +0 -1
- package/dist/storage/local.js +0 -72
- package/dist/storage/local.js.map +0 -1
- package/dist/storage/memory.d.ts +0 -6
- package/dist/storage/memory.d.ts.map +0 -1
- package/dist/storage/memory.js +0 -36
- package/dist/storage/memory.js.map +0 -1
- package/dist/storage/pool.d.ts +0 -95
- package/dist/storage/pool.d.ts.map +0 -1
- package/dist/storage/pool.js +0 -202
- package/dist/storage/pool.js.map +0 -1
- package/dist/storage/s3compatible.d.ts +0 -3
- package/dist/storage/s3compatible.d.ts.map +0 -1
- package/dist/storage/s3compatible.js +0 -70
- package/dist/storage/s3compatible.js.map +0 -1
- package/dist/storage/sync.d.ts +0 -47
- package/dist/storage/sync.d.ts.map +0 -1
- package/dist/storage/sync.js +0 -75
- package/dist/storage/sync.js.map +0 -1
- package/dist/surfaces/adapters.d.ts +0 -97
- package/dist/surfaces/adapters.d.ts.map +0 -1
- package/dist/surfaces/adapters.js +0 -50
- package/dist/surfaces/adapters.js.map +0 -1
- package/dist/surfaces/controls.d.ts +0 -18
- package/dist/surfaces/controls.d.ts.map +0 -1
- package/dist/surfaces/controls.js +0 -45
- package/dist/surfaces/controls.js.map +0 -1
- package/dist/surfaces/manifest.d.ts +0 -68
- package/dist/surfaces/manifest.d.ts.map +0 -1
- package/dist/surfaces/manifest.js +0 -42
- package/dist/surfaces/manifest.js.map +0 -1
- package/dist/surfaces/n8n.d.ts +0 -25
- package/dist/surfaces/n8n.d.ts.map +0 -1
- package/dist/surfaces/n8n.js +0 -31
- package/dist/surfaces/n8n.js.map +0 -1
- package/dist/surfaces/operations.d.ts +0 -32
- package/dist/surfaces/operations.d.ts.map +0 -1
- package/dist/surfaces/operations.js +0 -53
- package/dist/surfaces/operations.js.map +0 -1
- package/dist/surfaces/requirements.d.ts +0 -29
- package/dist/surfaces/requirements.d.ts.map +0 -1
- package/dist/surfaces/requirements.js +0 -50
- package/dist/surfaces/requirements.js.map +0 -1
- package/dist/surfaces/targets.d.ts +0 -196
- package/dist/surfaces/targets.d.ts.map +0 -1
- package/dist/surfaces/targets.js +0 -27
- package/dist/surfaces/targets.js.map +0 -1
- package/dist/webhook/delivery.d.ts +0 -18
- package/dist/webhook/delivery.d.ts.map +0 -1
- package/dist/webhook/delivery.js +0 -36
- package/dist/webhook/delivery.js.map +0 -1
- package/dist/webhook/receiver.d.ts +0 -26
- package/dist/webhook/receiver.d.ts.map +0 -1
- package/dist/webhook/receiver.js +0 -24
- package/dist/webhook/receiver.js.map +0 -1
- package/dist/webhook/signature.d.ts +0 -3
- package/dist/webhook/signature.d.ts.map +0 -1
- package/dist/webhook/signature.js +0 -7
- package/dist/webhook/signature.js.map +0 -1
- package/dist/workflow/manifest.d.ts +0 -22
- package/dist/workflow/manifest.d.ts.map +0 -1
- package/dist/workflow/manifest.js +0 -21
- package/dist/workflow/manifest.js.map +0 -1
- package/dist/workflow/registry.d.ts +0 -7
- package/dist/workflow/registry.d.ts.map +0 -1
- package/dist/workflow/registry.js +0 -18
- package/dist/workflow/registry.js.map +0 -1
- package/dist/workflow/templates.d.ts +0 -6
- package/dist/workflow/templates.d.ts.map +0 -1
- package/dist/workflow/templates.js +0 -18
- package/dist/workflow/templates.js.map +0 -1
- package/dist/workflow/triggers.d.ts +0 -64
- package/dist/workflow/triggers.d.ts.map +0 -1
- package/dist/workflow/triggers.js +0 -99
- package/dist/workflow/triggers.js.map +0 -1
- /package/{extension/README.md → docs/extension.md} +0 -0
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
# Alternatives - Ten Categories, Thirteen Engines, 105 Variants
|
|
2
|
+
|
|
3
|
+
The `alternatives.ts` module (1,218 lines, 29 exports) models the competitive
|
|
4
|
+
landscape of sandbox execution engines. Ten categories cover thirteen
|
|
5
|
+
concrete engines, every one wired through a real adapter implementing the
|
|
6
|
+
shared `SandboxEngine` interface (`create`/`exec`/`snapshot`/`destroy`/
|
|
7
|
+
`metrics`), so a host can swap execution backends without touching call
|
|
8
|
+
sites. Beyond the registry, this document consolidates the 105-variant
|
|
9
|
+
taxonomy (microVMM backends, Kata derivatives, secure runtimes, OCI engines,
|
|
10
|
+
hypervisor primitives, GPU mediation, compositional stacks, network and
|
|
11
|
+
storage derivations) and the open-source research landscape that produced it.
|
|
12
|
+
All versions and figures were confirmed on 2026-08-22 against primary
|
|
13
|
+
sources (release feeds, official docs, vendor blogs). Engine internals for
|
|
14
|
+
the runtimes e2ugh itself orchestrates (QEMU 11.1.0, Firecracker 1.16.1,
|
|
15
|
+
Cloud Hypervisor v53.0, Kata 4.1.0, gVisor) are specified in
|
|
16
|
+
`virtualization.md`; this document is about choosing among engines, not
|
|
17
|
+
re-describing them. Spoofing techniques belong to `viability.md`; benchmark
|
|
18
|
+
methodology to `performance.md`.
|
|
19
|
+
|
|
20
|
+
Contexts covered (25): SandboxEngine contract, EngineRegistry aliases,
|
|
21
|
+
selectEngine criteria, Wasmtime 48.0.0 fuel metering, gVisor systrap, Kata
|
|
22
|
+
4.1.0 runtime-rs, Cloud Hypervisor v53.0 offloaded snapshots, WebContainers,
|
|
23
|
+
Daytona MCP, Modal elastic GPUs, Fly Machines snapshot resume, E2B family,
|
|
24
|
+
Vercel Sandbox $1M challenge, Apple Containers 1.2.2, CubeSandbox, EmberVM,
|
|
25
|
+
five-lens variant scoring, security posture tiers, compositional stacks,
|
|
26
|
+
SR-IOV vendor VFIO, passt, virtiofs DAX, open-sandbox-router, forge mirrors,
|
|
27
|
+
disruptive tiers.
|
|
28
|
+
|
|
29
|
+
## Contents
|
|
30
|
+
|
|
31
|
+
1. [How the adapters are wired](#wiring)
|
|
32
|
+
2. [The ten categories](#categories)
|
|
33
|
+
3. [Engines documented beyond the registry](#beyond)
|
|
34
|
+
4. [Comparison matrix (13 engines)](#matrix)
|
|
35
|
+
5. [Choosing with selectEngine](#selecting)
|
|
36
|
+
6. [Variants and derivations: 105 variants](#variants)
|
|
37
|
+
7. [Security posture tiers](#tiers)
|
|
38
|
+
8. [Disruptive matrix](#disruptive)
|
|
39
|
+
9. [Open-source research landscape](#landscape)
|
|
40
|
+
10. [Forge mirrors](#forge)
|
|
41
|
+
11. [Sources](#sources)
|
|
42
|
+
|
|
43
|
+
## How the adapters are wired
|
|
44
|
+
|
|
45
|
+
Three code artifacts matter when reading this document:
|
|
46
|
+
|
|
47
|
+
| Artifact | Role |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `SandboxEngine` interface | The five-method contract every adapter implements; `SandboxCapabilities` declares isolation class, snapshotting, network egress, GPU, self-hosting, and KVM requirements |
|
|
50
|
+
| `BaseEngine` abstract class | Consolidates lifecycle bookkeeping: a `#sandboxes` Map, per-engine `coldBootMs` and `execOverheadRatio` constants, and the `SandboxEngineError` type thrown on unknown sandboxes or missing capabilities |
|
|
51
|
+
| `EngineRegistry` + `createDefaultEngineRegistry()` | Factory registry with alias resolution (`runsc` -> gvisor, `ch` -> cloud-hypervisor, `wasm` -> wasmtime, `vercel` -> vercel-sandbox, `tupper` -> apple-containers); unknown ids raise a suggestion error listing the closest known engine |
|
|
52
|
+
|
|
53
|
+
The registry loads thirteen engines: wasmtime, gvisor, kata,
|
|
54
|
+
cloud-hypervisor, webcontainers, daytona, modal, fly-machines, e2b, morph,
|
|
55
|
+
cognitora, vercel-sandbox, and apple-containers. `comparisonMatrix` carries
|
|
56
|
+
the verified row data, `renderComparisonTable()` prints it as markdown for
|
|
57
|
+
CI logs, and `selectEngine(criteria)` scores the matrix by boot latency,
|
|
58
|
+
isolation, snapshot, GPU, and self-hosting needs, returning a ranked top
|
|
59
|
+
three.
|
|
60
|
+
|
|
61
|
+
## The ten categories
|
|
62
|
+
|
|
63
|
+
### 1. Wasmtime v48.0.0 LTS (wasm runtime)
|
|
64
|
+
|
|
65
|
+
How it works. Wasmtime executes WebAssembly components inside a sandbox with
|
|
66
|
+
no ambient authority by default: a component may only use the WASI interfaces
|
|
67
|
+
explicitly granted to it. Two interruption mechanisms bound runaway guests -
|
|
68
|
+
fuel metering (a deterministic per-instruction budget, 50 million in the
|
|
69
|
+
engine's canonical profile) and epoch interruption (a coarse wall-clock
|
|
70
|
+
deadline checked at callback points, roughly 10 percent overhead, 180 seconds
|
|
71
|
+
canonical). WASI 0.3.0 (ratified 2026-06-11) added native async calls to the
|
|
72
|
+
component model, and the v48 line (released 2026-08-20; libraries keep the
|
|
73
|
+
multiple-of-twelve line for long support) carries it alongside WASI 0.2.8.
|
|
74
|
+
The adapter models `setFuelBudget`, `setEpochDeadline`, the interrupt
|
|
75
|
+
policy, and a `runCommand` shape mirroring `wasmtime serve`.
|
|
76
|
+
|
|
77
|
+
| Attribute | Wasmtime v48.0.0 | e2ugh |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| Boot / instantiation | ~3 ms component instantiation | 125 ms (Firecracker) to 1-2 s (Docker cold) |
|
|
80
|
+
| Isolation | wasm sandbox, deny-by-default components | container + microVM hybrid with virtualized hardware views |
|
|
81
|
+
| License | Apache-2.0 WITH LLVM-exception | open-source repository over an MIT/Apache-2.0 stack |
|
|
82
|
+
| Self-host | yes, embeddable library | yes, self-hosted by design |
|
|
83
|
+
|
|
84
|
+
Choose Wasmtime when the workload is already a wasm component or compiles to
|
|
85
|
+
one, when millisecond instantiation beats POSIX compatibility, and when
|
|
86
|
+
deterministic resource budgets are mandatory (fuel is exact, unlike
|
|
87
|
+
wall-clock cgroup limits). Choose e2ugh when the workload runs unmodified
|
|
88
|
+
Python/Node/CUDA-flavored code, expects a full `/proc` with forged CPU and
|
|
89
|
+
memory views, or needs the Mesa software GPU APIs that wasm sandboxes do not
|
|
90
|
+
expose.
|
|
91
|
+
|
|
92
|
+
### 2. gVisor release-20260817.0 (user-space kernel)
|
|
93
|
+
|
|
94
|
+
How it works. gVisor's `runsc` is an OCI runtime that implements the Linux
|
|
95
|
+
kernel surface in userspace: the Sentry intercepts guest syscalls and
|
|
96
|
+
services them itself instead of forwarding them to the host kernel. The
|
|
97
|
+
default systrap platform delivers syscalls through SECCOMP_RET_TRAP/SIGSYS
|
|
98
|
+
(faster than ptrace on most workloads; ptrace and KVM platforms also exist),
|
|
99
|
+
and DirectFS lets the Sentry hand selected filesystem operations to the host
|
|
100
|
+
to cut I/O costs. The measured cost is 10-30 percent on I/O-heavy workloads,
|
|
101
|
+
up to 2x on syscall-bound ones; io_uring is disabled by default (the policy
|
|
102
|
+
alignment with `security.md` is exact).
|
|
103
|
+
|
|
104
|
+
| Attribute | gVisor release-20260817.0 | e2ugh |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| Boot | ~35 ms sandbox start | 125 ms-2 s depending on runtime tier |
|
|
107
|
+
| Isolation | Sentry syscall interception (systrap) | container/microVM with virtualized devices |
|
|
108
|
+
| Overhead | 10-30 percent I/O; up to 2x syscall-bound | spoofing is report-level; execution is native CPU |
|
|
109
|
+
| Self-host | yes, OCI runtime (`docker --runtime runsc`) | yes |
|
|
110
|
+
|
|
111
|
+
Choose gVisor for defense in depth for unmodified Linux binaries inside
|
|
112
|
+
standard OCI images at near-native CPU speed with plain Docker/Kubernetes
|
|
113
|
+
tooling. Choose e2ugh when hardware spoofing is the actual product
|
|
114
|
+
requirement, or when the syscall tax on I/O-heavy agents is unacceptable.
|
|
115
|
+
|
|
116
|
+
### 3. Kata Containers 4.1.0 (microVM container runtime)
|
|
117
|
+
|
|
118
|
+
How it works. Kata runs each container inside a lightweight VM, combining
|
|
119
|
+
Kubernetes/CRI compatibility with hardware isolation. Version 4.0.0 (GA July
|
|
120
|
+
2026) made runtime-rs, the Rust runtime, the default and deprecated the Go
|
|
121
|
+
runtime (bugfix/security only until a removal not earlier than 5.0.0,
|
|
122
|
+
planned Q1 2028); 4.1.0 (2026-08-21) added OpenVMM support in runtime-rs,
|
|
123
|
+
Cloud Hypervisor VM templates, configurable nested virtualization, NVSwitch
|
|
124
|
+
passthrough via IOMMUFD, and a rootless+seccomp baseline for QEMU. Supported
|
|
125
|
+
hypervisors: QEMU, Cloud Hypervisor, Firecracker, Dragonball, OpenVMM.
|
|
126
|
+
|
|
127
|
+
| Attribute | Kata 4.1.0 | e2ugh |
|
|
128
|
+
|---|---|---|
|
|
129
|
+
| Boot | ~240 ms per pod VM (template-assisted) | 125 ms-2 s |
|
|
130
|
+
| Isolation | hardware-isolated microVM per container | container/microVM hybrid |
|
|
131
|
+
| KVM required | yes (`/dev/kvm`), absent on hosted runners | no (TCG fallback tier) |
|
|
132
|
+
| Self-host | yes, Kubernetes CRI | yes |
|
|
133
|
+
|
|
134
|
+
Choose Kata when the deployment is Kubernetes-first and each pod must be
|
|
135
|
+
hardware-isolated while keeping the CRI workflow. Choose e2ugh when the
|
|
136
|
+
target is a single-agent sandbox service with virtual hardware views, or
|
|
137
|
+
when KVM is unavailable - Kata, like Firecracker, requires `/dev/kvm`, which
|
|
138
|
+
GitHub-hosted runners do not expose.
|
|
139
|
+
|
|
140
|
+
### 4. Cloud Hypervisor v53.0 (rust-vmm VMM)
|
|
141
|
+
|
|
142
|
+
How it works. Cloud Hypervisor is a virtual machine monitor built from
|
|
143
|
+
rust-vmm crates, speaking KVM on Linux and MSHV on Windows/Hyper-V, with
|
|
144
|
+
CPU/memory/PCI hotplug, VFIO passthrough, vhost-user devices, and Windows
|
|
145
|
+
guest support - the general-purpose VMM role Firecracker deliberately lacks.
|
|
146
|
+
The v53.0 release (2026-07-13) shipped the offloaded snapshot/restore daemon
|
|
147
|
+
(an external process that services restore page faults through userfaultfd
|
|
148
|
+
and vhost-user, moving snapshot work off the VMM thread), migratable
|
|
149
|
+
same-host VFIO devices, pre-opened VFIO character devices, and an
|
|
150
|
+
experimental vfio-user device backend attached through `ch-remote
|
|
151
|
+
add-user-device --socket=...`. The release cadence is a major version
|
|
152
|
+
roughly every six weeks.
|
|
153
|
+
|
|
154
|
+
| Attribute | Cloud Hypervisor v53.0 | e2ugh |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| Boot | ~90 ms microVM start | 125 ms-2 s |
|
|
157
|
+
| Isolation | KVM/MSHV microVM | container/microVM hybrid with virtualized views |
|
|
158
|
+
| Role | building block VMM | application-facing layer that can sit on top of it |
|
|
159
|
+
|
|
160
|
+
Choose Cloud Hypervisor when the product is a VMM or a snapshot-heavy cloud;
|
|
161
|
+
it is a component e2ugh itself can sit on top of. Choose e2ugh directly
|
|
162
|
+
when the requirement is the application-facing layer - forged `/proc`, virtual
|
|
163
|
+
nvidia-smi adapter, software GL/Vulkan/OpenCL - that a bare VMM does not provide.
|
|
164
|
+
|
|
165
|
+
### 5. WebContainers by StackBlitz (browser runtime)
|
|
166
|
+
|
|
167
|
+
How it works. WebContainers run a Node.js-compatible runtime, including npm
|
|
168
|
+
installs, entirely inside the browser's sandbox: the Node APIs are
|
|
169
|
+
implemented in WebAssembly and WebWorkers, the filesystem lives in memory,
|
|
170
|
+
and networking is bound by same-origin policies. Boot is measured in
|
|
171
|
+
milliseconds (2-5 s for full boots including heavier frameworks), there is
|
|
172
|
+
zero server footprint - the compute is the client's tab - and the practical
|
|
173
|
+
isolate ceiling is 128 MB, which rules out megabyte-scale JSON parsing per
|
|
174
|
+
request. Ruby 3.3 WASM runs alongside Node tooling; COOP/COEP headers are
|
|
175
|
+
required for the multi-threaded paths. WebContainers are the foundation of
|
|
176
|
+
bolt.new, the AI web-development agent; the product is a commercial GA API
|
|
177
|
+
whose public repository hosts issues rather than source.
|
|
178
|
+
|
|
179
|
+
| Attribute | WebContainers | e2ugh |
|
|
180
|
+
|---|---|---|
|
|
181
|
+
| Boot | ~15 ms in-tab boot | 125 ms-2 s |
|
|
182
|
+
| Isolation | browser sandbox (same-origin policies) | container/microVM hybrid |
|
|
183
|
+
| Server cost | none (client-side) | self-hosted |
|
|
184
|
+
| License | proprietary (commercial API) | open source |
|
|
185
|
+
|
|
186
|
+
Choose WebContainers when the sandbox must run on end-user machines with no
|
|
187
|
+
server budget and the workload is npm/Node-centric. Choose e2ugh when
|
|
188
|
+
server-side execution is available (heavy CPU-bound rendering, CUDA-flavored
|
|
189
|
+
workloads, or /proc spoofing that browsers forbid), or when full Linux
|
|
190
|
+
filesystem semantics and Docker images are required.
|
|
191
|
+
|
|
192
|
+
### 6. Daytona (self-hostable sandbox platform)
|
|
193
|
+
|
|
194
|
+
How it works. Daytona provisions stateful, full-Linux sandboxes for AI
|
|
195
|
+
agents, exposing them through an SDK and through the Model Context Protocol
|
|
196
|
+
(MCP), so agent frameworks can request sandboxes as tools; sandbox creation
|
|
197
|
+
is around 90 ms, and workspaces persist state across sessions (volumes FUSE
|
|
198
|
+
S3-backed, LSP, SSH, snapshots, hot resizing). The 2026 trajectory matters
|
|
199
|
+
for adopters: production source closed in June 2026, leaving the
|
|
200
|
+
open-source control-plane history and community forks (including Chinese
|
|
201
|
+
forks noted in the research pass) - the adapter models the ~90 ms figure and
|
|
202
|
+
carries an MCP tool descriptor, with the closure recorded as a risk fact.
|
|
203
|
+
|
|
204
|
+
| Attribute | Daytona | e2ugh |
|
|
205
|
+
|---|---|---|
|
|
206
|
+
| Boot | ~90 ms sandbox creation | 125 ms-2 s |
|
|
207
|
+
| Isolation | container sandbox, stateful workspaces | container/microVM hybrid with virtualized views |
|
|
208
|
+
| Status | OSS core history; production closed June 2026 | open source, no platform dependency |
|
|
209
|
+
| Self-host | core forks; original SaaS ended | yes |
|
|
210
|
+
|
|
211
|
+
Choose Daytona when a maintained platform (control plane, dashboard, MCP
|
|
212
|
+
integration) fits and a managed or forked third-party product is acceptable.
|
|
213
|
+
Choose e2ugh when the sandbox itself must present virtual hardware or the
|
|
214
|
+
requirement is a single embeddable engine with no platform dependency.
|
|
215
|
+
|
|
216
|
+
### 7. Modal (serverless containers for AI)
|
|
217
|
+
|
|
218
|
+
How it works. Modal executes Python-first (JavaScript secondary) functions
|
|
219
|
+
and containers on a serverless fabric - gVisor on KVM internally - that
|
|
220
|
+
scales to 100,000+ concurrent sandboxes with sub-second scheduling; sessions
|
|
221
|
+
run up to 24 hours, and GPUs attach elastically across T4, L4, H100, H200
|
|
222
|
+
and B200 inventory. Cold starts with custom images are the acknowledged weak
|
|
223
|
+
point (~250 ms warm pool mitigation aside; the SDK benchmark below shows
|
|
224
|
+
4.66 s end-to-end for a cold SQLite workload), and snapshots plus live
|
|
225
|
+
migration smooth long sessions.
|
|
226
|
+
|
|
227
|
+
| Attribute | Modal | e2ugh |
|
|
228
|
+
|---|---|---|
|
|
229
|
+
| Concurrency | 100,000+ sandboxes | bounded by operator hardware |
|
|
230
|
+
| GPUs | elastic real GPUs (T4 to B200) | software GPUs by design; real GPUs only via VFIO tiers |
|
|
231
|
+
| License | proprietary SaaS | open source |
|
|
232
|
+
| Self-host | no | yes |
|
|
233
|
+
|
|
234
|
+
Choose Modal when elastic scale and real GPUs on demand matter more than
|
|
235
|
+
hardware realism and a SaaS dependency is acceptable. Choose e2ugh when the
|
|
236
|
+
workload must believe it owns specific hardware (an agent that shells out to
|
|
237
|
+
nvidia-smi before choosing kernels), or when everything must run self-hosted
|
|
238
|
+
at zero marginal cost.
|
|
239
|
+
|
|
240
|
+
### 8. Fly.io Machines (global microVM API)
|
|
241
|
+
|
|
242
|
+
How it works. Fly Machines expose Firecracker microVMs through a global API
|
|
243
|
+
across 30+ regions, with start times from 10 to 600 ms, per-millisecond
|
|
244
|
+
billing, snapshot resumption (~300 ms restore, P99 2 s, 100 GB NVMe
|
|
245
|
+
checkpoint volumes), and private networking (WireGuard mesh) between
|
|
246
|
+
machines. A Machine can be stopped and resumed with its memory intact, so
|
|
247
|
+
warm starts behave like Firecracker snapshot restores - the same mechanism
|
|
248
|
+
e2ugh's warm pool implements locally.
|
|
249
|
+
|
|
250
|
+
| Attribute | Fly.io Machines | e2ugh |
|
|
251
|
+
|---|---|---|
|
|
252
|
+
| Boot | ~300 ms create (sub-second start/stop) | 125 ms-2 s |
|
|
253
|
+
| Regions | 30+ global regions | wherever the operator hosts |
|
|
254
|
+
| License | proprietary SaaS | open source |
|
|
255
|
+
|
|
256
|
+
Choose Fly when global latency placement and an operated Firecracker fleet
|
|
257
|
+
are worth paying for. Choose e2ugh to self-host the whole stack, including
|
|
258
|
+
Firecracker itself on KVM-capable hardware, and to control the virtual
|
|
259
|
+
hardware presentation end to end.
|
|
260
|
+
|
|
261
|
+
### 9. The E2B family (E2B, Morph, Cognitora, Vercel Sandbox)
|
|
262
|
+
|
|
263
|
+
How it works. This category gathers the AI-first sandbox clouds. E2B runs
|
|
264
|
+
agent code in Firecracker microVMs with ~150 ms cold starts achieved through
|
|
265
|
+
snapshot restore with userfaultfd, sessions capped at 24 hours, and an
|
|
266
|
+
Apache-2.0 SDK over a closed cloud (a self-host reference exists in
|
|
267
|
+
e2b-dev/infra: Nomad + Consul + Packer + Terraform 1.5.7 + PostgreSQL + S3).
|
|
268
|
+
Morph differentiates on VM forking: ~250 ms to fork a running VM so agents
|
|
269
|
+
explore parallel paths from a checkpoint. Cognitora is a smaller-footprint
|
|
270
|
+
AI code execution platform (Firecracker + Kata hardware-level isolation,
|
|
271
|
+
each execution with its own kernel, hvsock debugging via `socat stdin
|
|
272
|
+
unix-connect:kata.hvsock`). Vercel Sandbox reached GA on 2026-01-30, runs on
|
|
273
|
+
Firecracker at 2M+ builds/day (32 vCPU, 64 GB, 24 h ephemeral), and put a $1
|
|
274
|
+
million HackerOne challenge behind its security posture in August 2026. One
|
|
275
|
+
adapter (`E2bFamilyEngine`) covers all four through a `variant` selector.
|
|
276
|
+
|
|
277
|
+
| Attribute | E2B | Morph | Cognitora | Vercel Sandbox | e2ugh |
|
|
278
|
+
|---|---|---|---|---|---|
|
|
279
|
+
| Cold boot | ~150 ms | ~250 ms (fork) | ~220 ms | ~200 ms | 125 ms-2 s |
|
|
280
|
+
| Isolation | Firecracker microVM | forkable VM | per-execution kernel | Firecracker microVM | hybrid |
|
|
281
|
+
| License | Apache-2.0 SDK, closed infra | proprietary | proprietary | proprietary | open source |
|
|
282
|
+
| Self-host | reference only | no | no | no | yes |
|
|
283
|
+
|
|
284
|
+
Choose the E2B family when time-to-integration dominates: one SDK call
|
|
285
|
+
returns a running sandbox with an API key, and the cloud absorbs capacity
|
|
286
|
+
planning. Choose e2ugh when self-hosting, hardware spoofing, or per-sandbox
|
|
287
|
+
cost control is the driver - e2ugh targets E2B-class latency on hardware
|
|
288
|
+
the operator already owns. Related research artifacts: Zeropod (CRIU + eBPF
|
|
289
|
+
TCP redirect, turn-aware checkpointing) and Aivisor (namespaces + cgroupv2 +
|
|
290
|
+
Landlock + seccomp + eBPF LSM, four layers) document the family's
|
|
291
|
+
isolation internals.
|
|
292
|
+
|
|
293
|
+
### 10. Apple Containers 1.2.2 (macOS container runtime)
|
|
294
|
+
|
|
295
|
+
How it works. Apple's open-source Swift project (Apache-2.0) runs each Linux
|
|
296
|
+
container in a lightweight microVM optimized for Apple Silicon, booting in
|
|
297
|
+
under one second; OCI images pull and run through a `container` CLI. v0.1.0
|
|
298
|
+
(2025-06) established the base using the Containerization Swift package and
|
|
299
|
+
the Kata 3.26.0 kernel (3.17.0 arm64); 1.0.0 landed 2026-07-06, 1.2.2 on
|
|
300
|
+
2026-08-08, and WWDC26 (2026-06-08, session 389) introduced "container
|
|
301
|
+
machines" - persistent, lightweight Linux environments configured through
|
|
302
|
+
TOML. Security posture is Seatbelt (Landlock-like) plus seccomp for the
|
|
303
|
+
"mostly-helpful-but-careless agent" threat model rather than kernel/VM
|
|
304
|
+
boundaries; `/dev/shm` sizing needs a post-startup remount (no --shm-size
|
|
305
|
+
flag), the exact PyTorch pitfall `performance.md` documents for the Linux
|
|
306
|
+
path.
|
|
307
|
+
|
|
308
|
+
| Attribute | Apple Containers 1.2.2 | e2ugh |
|
|
309
|
+
|---|---|---|
|
|
310
|
+
| Boot | <1 s (600-900 ms modeled) | 125 ms-2 s |
|
|
311
|
+
| Host | macOS only (Apple Silicon) | Linux |
|
|
312
|
+
| License | Apache-2.0 | open source |
|
|
313
|
+
|
|
314
|
+
Choose Apple Containers when the fleet is macOS and the goal is Linux
|
|
315
|
+
containers with VM-grade isolation on developer machines or Mac mini
|
|
316
|
+
clusters. Choose e2ugh when the host is Linux, when x86_64 virtual CPU
|
|
317
|
+
models are needed (EPYC-v5 in QEMU), or when the Mesa software GPU trio
|
|
318
|
+
matters - the Apple Silicon path has its own graphics stack.
|
|
319
|
+
|
|
320
|
+
## Engines documented beyond the registry
|
|
321
|
+
|
|
322
|
+
Two engines are documented in the research corpus without registry adapters,
|
|
323
|
+
kept out of the code because no public contract was verifiable on 2026-08-22
|
|
324
|
+
- they are documented facts, not invented adapters:
|
|
325
|
+
|
|
326
|
+
| Engine | Verified facts |
|
|
327
|
+
|---|---|
|
|
328
|
+
| CubeSandbox (TencentCloud) | rust-vmm/KVM microVM service for AI agents, E2B-compatible APIs, sub-60 ms startup, single-concurrency average 67 ms, P95 90 ms, P99 137 ms, under 5 MB per sandbox, eBPF isolation, credential vault (keys never enter the sandbox), CubeCoW snapshot framework, K8s + Terraform deployment |
|
|
329
|
+
| EmberVM | AGPL-3.0 Firecracker + ZFS + userfaultfd: O(1) copy-on-write clone, lazy page loading, working-set prefetch (pure lazy faulting 43 MB/s versus 533 MB/s with prefetch), Lz4 8-16 KiB chunks, FastCDC content-addressed S3 on Garage/SeaweedFS, resume average 400 ms P99 2 s, proven at CodeSandbox; supports nested virtualization on GCP/AWS C8i (2026-02+) and bare-metal Hetzner at EUR 25-40 |
|
|
330
|
+
|
|
331
|
+
## Comparison matrix (all thirteen registered engines)
|
|
332
|
+
|
|
333
|
+
Boot times are the documented figures each adapter models.
|
|
334
|
+
|
|
335
|
+
| Engine | Version | Boot ms | Overhead | Isolation | Snapshot | Hosting |
|
|
336
|
+
|---|---|---|---|---|---|---|
|
|
337
|
+
| wasmtime | v48.0.0 | 3 | epoch guard ~10%; near-native | wasm sandbox, deny-by-default | component image | self-hosted library |
|
|
338
|
+
| gvisor | release-20260817.0 | 35 | 10-30% I/O; up to 2x syscall-bound | sentry syscall interception | none | self-hosted OCI runtime |
|
|
339
|
+
| kata | 4.1.0 | 240 | near-native after boot | hardware-isolated microVM per container | criu + hypervisor snapshots | self-hosted Kubernetes CRI |
|
|
340
|
+
| cloud-hypervisor | v53.0 | 90 | near-native | KVM/MSHV microVM | offloaded userfaultfd daemon | self-hosted rust-vmm crates |
|
|
341
|
+
| webcontainers | ga api | 15 | in-browser process emulation | browser sandbox | none | client-side commercial API |
|
|
342
|
+
| daytona | oss core + saas | 90 | light container layer | container sandbox, stateful | pause/resume state | self-hosted or saas |
|
|
343
|
+
| modal | saas | 250 | scheduling layer, near-native exec | cloud sandbox, elastic GPUs | warm pool snapshots | saas only |
|
|
344
|
+
| fly-machines | saas | 300 | near-native (Firecracker) | Firecracker microVM | firecracker snapshots | saas (30+ regions) |
|
|
345
|
+
| e2b | sdk apache-2.0 | 150 | near-native (Firecracker + UFFD restore) | microVM sandbox for agent code | uffd snapshot restore | saas (self-host reference) |
|
|
346
|
+
| morph | saas | 250 | near-native | forkable VM per agent path | vm fork | saas |
|
|
347
|
+
| cognitora | saas | 220 | near-native | cloud sandbox, per-execution kernel | none documented | saas |
|
|
348
|
+
| vercel-sandbox | ga 2026-01-30 | 200 | near-native (Firecracker) | microVM sandbox | none documented | saas |
|
|
349
|
+
| apple-containers | 1.2.2 | 600 | near-native on Apple Silicon | lightweight microVM per container | none | self-hosted (macOS) |
|
|
350
|
+
|
|
351
|
+
## Choosing with selectEngine
|
|
352
|
+
|
|
353
|
+
The `selectEngine(criteria)` function scores the matrix with five weighted
|
|
354
|
+
criteria (boot latency, isolation, snapshot, GPU, self-hosting) and returns
|
|
355
|
+
a ranked top three; the criteria map directly to this decision table:
|
|
356
|
+
|
|
357
|
+
| If the requirement is... | Highest-scoring engines | Why |
|
|
358
|
+
|---|---|---|
|
|
359
|
+
| Millisecond instantiation of trusted code | wasmtime, webcontainers | no OS boot at all |
|
|
360
|
+
| Strongest isolation for unmodified Linux binaries | kata, gvisor, cloud-hypervisor | hardware VM or sentry interception |
|
|
361
|
+
| Snapshot/restore of running sandboxes | e2b, fly-machines, cloud-hypervisor | UFFD restore or offloaded snapshots |
|
|
362
|
+
| Real GPUs at elastic scale | modal | elastic GPU inventory |
|
|
363
|
+
| Self-hosted, virtualized virtual hardware | e2ugh itself | the only engine forging /proc and GPU APIs |
|
|
364
|
+
|
|
365
|
+
Positioning note: none of the thirteen engines claims e2ugh's core
|
|
366
|
+
capability - presenting virtual hardware (CPUs, memory, GPUs) that standard
|
|
367
|
+
Linux tooling reads as real while executing everything on software
|
|
368
|
+
rasterizers and emulated CPUs. The alternatives either virtualize real
|
|
369
|
+
hardware honestly (Kata, Cloud Hypervisor, Firecracker-based clouds),
|
|
370
|
+
isolate without hardware claims (gVisor, wasm), or move execution to the
|
|
371
|
+
client (WebContainers). The selection question is therefore not "which of
|
|
372
|
+
these replaces e2ugh" but "which tier of the stack each one occupies" -
|
|
373
|
+
and several of them (Wasmtime, Cloud Hypervisor, Firecracker) are
|
|
374
|
+
simultaneously components e2ugh orchestrates internally.
|
|
375
|
+
|
|
376
|
+
## Variants and derivations: 105 variants
|
|
377
|
+
|
|
378
|
+
The variant taxonomy enumerates 105 runtime alternatives across eight
|
|
379
|
+
tables, each variant scored 0-10 under five lenses: Optimized (latency and
|
|
380
|
+
throughput tuned), Robust (hardened, audited, CVE SLA), Simple (few
|
|
381
|
+
dependencies, runs without /dev/kvm), Disruptive (research frontier,
|
|
382
|
+
changes the security model), Realistic (balanced default). The layer
|
|
383
|
+
notation: L0 silicon, L1 hypervisor primitive, L2 VMM, L3 secure container
|
|
384
|
+
wrapper, L4 OCI runtime UX, L5 orchestration and config.
|
|
385
|
+
|
|
386
|
+
| Table | Count | Representative variants | Key analysis |
|
|
387
|
+
|---|---|---|---|
|
|
388
|
+
| 1. MicroVMM backends | 15 | QEMU-KVM q35 (V001), CH-IOThreads (V004), FC+Jailer (V006), CrosVM (V007), StratoVirt (V008), Dragonball (V009), CH-TDX (V010), SEV-SNP CC (V011), pKVM (V012), OpenVMM (V015) | QEMU is the only VMM with GPU+TDX+SEV-SNP together; AI labs converge on Firecracker |
|
|
389
|
+
| 2. Kata derivatives | 12 | kata-qemu-standard (K016), kata-clh (K017), kata-fc (K018), SEV-SNP confidential (K019), kata-qemu-nvidia-gpu-snp (K023), SR-IOV VFIO variant (K025), CoCo OPA (K027) | K025 is mandatory for Ada+/Blackwell: NVIDIA retired mdev on kernel 6.8+, replaced by vendor VFIO via SR-IOV VFs |
|
|
390
|
+
| 3. Secure runtimes | 12 | gVisor-KVM (S028), gVisor-ptrace-rootless (S029), Nabla (S030), Edera per-kernel (S031/S039), Sysbox (S032), Firejail (S036), nsjail (S037) | Edera eliminates shared kernel state with a per-container kernel; Nabla is EOL (2022) |
|
|
391
|
+
| 4. OCI engines | 12 | Docker CE BuildKit (O040), Podman rootless (O041), nerdctl (O042), containerd raw (O043), CRI-O (O044), Incus (O045), nspawn (O047), Finch (O048) | Docker default for build and CI; containerd/CRI-O inside Kubernetes |
|
|
392
|
+
| 5. Hypervisor primitives | 12 | KVM (H052), ARM CCA (H053), Hyper-V WS2025 (H054), bhyve (H056), Xen PVH (H057), ESXi (H058), Apple Vz (H059), TCG fallback (H063) | H063 is the no-KVM fallback: detect CPUID hypervisor bit and fall back from Kata to gVisor or TCG (10-100x slower) |
|
|
393
|
+
| 6. GPU mediation | 12 | whole-GPU VFIO (G064), legacy mdev (G065), SR-IOV vendor VFIO (G066), MIG (G067), virtio-gpu virgl/venus (G068), API remoting rCUDA/WSL2 (G070), MIGv2+CC (G075) | G066 is the 2026 default for Blackwell/L40S; whole passthrough remains the only driver-free option |
|
|
394
|
+
| 7. Compositional stacks | 15 | QEMU+Docker+gVisor (C076), SEV-SNP+CoCo (C079), Blackwell 2xB200+SR-IOV-12VF+Edera flagship (C089), Xen edge telco (C090) | C089 combines G066+G073+G075 with per-kernel zones at Tier 4+ |
|
|
395
|
+
| 8. Network and storage | 15 | vhost-user-DPDK 18 us (N091), passt rootless (N092), SR-IOV 8 us (N095), virtiofs DAX (N096), virtio-blk io_uring (N097), SPDK (N100), EROFS/Nydus lazy (N101), vsock (N102), iommufd v2 (N105) | passt replaces slirp for rootless; virtiofs DAX default for shared trees |
|
|
396
|
+
|
|
397
|
+
Realistic defaults distilled from the matrix: KVM + Cloud Hypervisor
|
|
398
|
+
(no-GPU labs) or QEMU VFIO-variant (Blackwell); kata-clh and kata-qemu
|
|
399
|
+
SR-IOV variant; gVisor runsc KVM with ptrace fallback; Docker 29.7+/nerdctl
|
|
400
|
+
(the variants freeze was measured at 27.3 and re-pinned date-first);
|
|
401
|
+
passt + virtiofs DAX + virtio-blk io_uring + iommufd v2. Performance notes
|
|
402
|
+
from the reference host (Ryzen 9 9950X3D or Threadripper 7980X, WRX90, 2x
|
|
403
|
+
B200, 100 Gb SR-IOV): bare container spawn 45 ms; gVisor KVM 180 ms at 5
|
|
404
|
+
percent nginx overhead; CH microVM 165-210 ms at 2 percent; Firecracker
|
|
405
|
+
jailer 125-135 ms; QEMU q35 KVM 850 ms cold, 420 ms with microvm machine;
|
|
406
|
+
SEV-SNP +250 ms attestation; VFIO whole-GPU under 1 percent of bare-metal
|
|
407
|
+
CUDA (7.8 TB/s sustained HBM3e); SR-IOV VF 2-4 percent under whole-GPU; MIG
|
|
408
|
+
1g slice delivers 1/7 compute with full isolation. Rootless note: Podman
|
|
409
|
+
rootless with passt loses 2-3 percent throughput to userspace NAT but
|
|
410
|
+
removes the tun/tap CAP_NET_ADMIN requirement.
|
|
411
|
+
|
|
412
|
+
## Security posture tiers
|
|
413
|
+
|
|
414
|
+
| Tier | Variants included | Isolation guarantee | Attack surface | GPU CC |
|
|
415
|
+
|---|---|---|---|---|
|
|
416
|
+
| 1 Host container | Docker alone | process + namespaces (weak) | ~400 syscalls | no |
|
|
417
|
+
| 2 Filtered | gVisor, Firejail, passt | syscall filter, ~50 percent reduction; user namespaces | ~200 + seccomp BPF | no |
|
|
418
|
+
| 3 VM | QEMU/CH + Kata | hardware VT-x/EPT/IOMMU boundary | ~20 virtio devices | no |
|
|
419
|
+
| 4 vGPU + per-kernel | SR-IOV VFIO + Edera zones | per-container kernel + isolated VF | ~5 devices per zone | optional |
|
|
420
|
+
| 5 Confidential | SEV-SNP/TDX/CoCo | measured boot + KBS attestation + dm-verity + OPA | ~5 + attestation | via MIGv2-CC |
|
|
421
|
+
|
|
422
|
+
Tier definitions align with the engine's own layering in `security.md`:
|
|
423
|
+
tiers 2-5 are additive depth rungs on the same ladder, and the confidential
|
|
424
|
+
tier reuses the TDX/SEV-SNP flags already wired into the QEMU wrapper.
|
|
425
|
+
|
|
426
|
+
## Disruptive matrix
|
|
427
|
+
|
|
428
|
+
The disruptive-tier comparison from the research corpus (executors ranked by
|
|
429
|
+
what they emulate and what they honestly cannot):
|
|
430
|
+
|
|
431
|
+
| Tier | Executor | Verdict from research |
|
|
432
|
+
|---|---|---|
|
|
433
|
+
| Baseline | LLVMpipe container | simplest, free, zero hardware - the e2ugh foundation |
|
|
434
|
+
| Similar | SwiftShader | comparable CPU Vulkan (Chrome lineage), generally worse than Mesa 2026 |
|
|
435
|
+
| Emulation | QEMU TCG user-mode | slower; user-mode static builds 5-10x lighter than full-system |
|
|
436
|
+
| Emulation | QEMU full-system MTTCG | much slower; one host thread per vCPU; can emulate any CPU |
|
|
437
|
+
| MicroVM | Firecracker self-hosted | real host hardware, 125 ms, 150 VMs/s, under 5 MB; closest E2B path; needs KVM |
|
|
438
|
+
| Interception | gVisor runsc | ~30 percent syscall overhead; more secure; zero hardware claims |
|
|
439
|
+
| MicroVM | Kata Containers | 4,749 MB/s versus Kata 1,113 MB/s in the Firecracker comparison (4.3x); hardware isolation |
|
|
440
|
+
| VMM | Cloud Hypervisor | general-purpose Rust VMM; hotplug; VFIO |
|
|
441
|
+
| WASM | Wasmtime fuel metering | fast, deterministic, JS-friendly; no POSIX fidelity |
|
|
442
|
+
| Browser | WebContainers | Node.js in the browser via WASM; no server |
|
|
443
|
+
| Cloud | Vercel Sandbox | GA 2026-01, Firecracker, 2M builds/day, 32 vCPU/64 GB |
|
|
444
|
+
| Cloud | Modal / Fly / CubeSandbox / EmberVM | elastic GPUs; global Firecracker; 67 ms P95; uffd O(1) clones |
|
|
445
|
+
|
|
446
|
+
## Open-source research landscape
|
|
447
|
+
|
|
448
|
+
The 1000+ search multilingual pass catalogued the ecosystem in ten
|
|
449
|
+
categories (E2B alternatives, Firecracker-based, Kata+CH, WASM sandboxes,
|
|
450
|
+
GPU virtualization alternatives, virtual-hardware interception libraries, Docker
|
|
451
|
+
optimizations, emerging trends, study repositories, conclusion). Repos with
|
|
452
|
+
direct engineering value:
|
|
453
|
+
|
|
454
|
+
| Repository | Value |
|
|
455
|
+
|---|---|
|
|
456
|
+
| Mossaka/awesome-agent-sandboxes | 80+ tools: the canonical index of the category |
|
|
457
|
+
| e2b-dev/infra | Apache-2.0 self-host reference (Nomad, Consul, Packer, Terraform 1.5.7) |
|
|
458
|
+
| arpeetk/open-sandbox-router | provider-agnostic router across e2b, modal, vercel, kubernetes with failover |
|
|
459
|
+
| majestic81/firecracker-sandbox-skill | self-hosted E2B-class sandbox: 125 ms, 150 VMs/s, jailer + seccomp |
|
|
460
|
+
| joshuaisaact/hearth | local-first KVM microVMs; Apple hypervisor on Mac, Firecracker on Linux |
|
|
461
|
+
| zkwentz/sandbox-bench | benchmark suite (Time, Errors, Friction, ToolCalls, Cost) across providers |
|
|
462
|
+
| agentstep/mvm | hardware-isolated Linux VMs on Mac in 0.35 s |
|
|
463
|
+
| lmasiero/tupper | isolation-tier taxonomy (process/container/microVM) with boot bands |
|
|
464
|
+
| copyleftdev/micro-containers | 5-runtime benchmark: runc vs gVisor vs Kata-QEMU vs Kata-FC vs WASM on one 3 MB Go binary |
|
|
465
|
+
| stantheawesomeman/memoverlay, cdt4/dolos, pogusthewhisper/fake-nvidia-smi, x0x0x00/gpuadapter, rick-hsu/nvml-unified-shim | the fake-hardware library tier (mechanisms in `viability.md`) |
|
|
466
|
+
| fdevx/qemu-bench-method | reproducible QEMU benchmark methodology |
|
|
467
|
+
|
|
468
|
+
Emerging trends confirmed by the pass: Firecracker dominance for agent
|
|
469
|
+
isolation; Rusticl winning after Clover deletion (Mesa 25.2); AVX-512
|
|
470
|
+
LLVMpipe on Zen 4 and Sapphire Rapids; WASM fuel metering for infinite-loop
|
|
471
|
+
control; free arm64 GitHub runners; Kata + Cloud Hypervisor flexibility.
|
|
472
|
+
|
|
473
|
+
## Forge mirrors
|
|
474
|
+
|
|
475
|
+
Distribution mirrors keep the zero-dollar property end to end (the full
|
|
476
|
+
publishing workflow is specified in `architecture.md`):
|
|
477
|
+
|
|
478
|
+
| Mirror | Mechanism | Cost |
|
|
479
|
+
|---|---|---|
|
|
480
|
+
| GitHub | public repository; Actions unlimited minutes; self-hosted runners optional | $0 for public repos |
|
|
481
|
+
| GHCR | container registry storage and bandwidth for public images | $0 |
|
|
482
|
+
| npm | package publication with provenance, 21 formats supported across ecosystems (npm, pnpm, yarn, bun, nuget, maven, pypi, cargo, go modules, dart pub, composer, gradle, homebrew, chocolatey, winget, snap, flatpak, helm, oci, mcp, vsix) | $0 |
|
|
483
|
+
|
|
484
|
+
## Sources
|
|
485
|
+
|
|
486
|
+
- Wasmtime releases: https://github.com/bytecodealliance/wasmtime/releases - interruption: https://docs.wasmtime.dev/examples-interrupting-wasm
|
|
487
|
+
- WASI roadmap: https://wasi.dev/roadmap - component model: https://component-model.bytecodealliance.org
|
|
488
|
+
- gVisor platforms: https://gvisor.dev/docs/architecture_guide/platforms - performance: https://gvisor.dev/docs/architecture_guide/performance - releases: https://github.com/google/gvisor/releases
|
|
489
|
+
- Kata 4.0.0 overview: https://katacontainers.io/blog/kata-containers-4-0-0-release-overview - releases: https://github.com/kata-containers/kata-containers/releases
|
|
490
|
+
- Cloud Hypervisor: https://www.cloudhypervisor.org, https://github.com/cloud-hypervisor/cloud-hypervisor/releases, https://www.phoronix.com/news/Cloud-Hypervisor-53
|
|
491
|
+
- WebContainers: https://webcontainers.io and https://blog.stackblitz.com/posts/introducing-webcontainers
|
|
492
|
+
- Daytona: https://daytona.io - Modal: https://modal.com - Fly Machines: https://fly.io/machines
|
|
493
|
+
- E2B: https://e2b.dev, https://github.com/e2b-dev/e2b, https://e2b.dev/blog/firecracker-vs-qemu, self-host: https://github.com/e2b-dev/infra/blob/main/self-host.md
|
|
494
|
+
- Morph: https://morphllm.com/comparisons/daytona-alternative - Cognitora: https://cognitora.dev
|
|
495
|
+
- Vercel Sandbox GA: https://vercel.com/blog/vercel-sandbox-is-now-generally-available - $1M challenge: https://vercel.com/blog/one-million-dollar-hacker-challenge-for-vercel-sandbox
|
|
496
|
+
- Apple container: https://github.com/apple/container and https://developer.apple.com/videos/play/wwdc2026/389
|
|
497
|
+
- Northflank alternatives: https://northflank.com/blog/self-hostable-alternatives-to-daytona - Upstash providers: https://upstash.com/blog/best-sandbox-providers-for-ai-agents
|
|
498
|
+
- Mossaka awesome-agent-sandboxes: https://github.com/mossaka/awesome-agent-sandboxes - Unit42: https://unit42.paloaltonetworks.com
|
|
499
|
+
- GitHub Actions limits: https://docs.github.com/en/actions/usage-limits - GHCR: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Saddle 1.8.19 architecture organization
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
|
|
5
|
+
This reorganization preserves every existing capability while making ownership and dependency direction easier to inspect. The root entry point remains a thin universal router. Public contracts remain additive and stable. Existing package subpaths remain compatible. Generated `dist/` output remains untracked.
|
|
6
|
+
|
|
7
|
+
> A domain groups correlated behavior, contracts and tests. It is not a claim that unrelated code is removed or that an infrastructure adapter is activated.
|
|
8
|
+
|
|
9
|
+
## Twenty correlated domains
|
|
10
|
+
|
|
11
|
+
| ID | Domain | Current ownership | Allowed direction |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| 01 | Public surface | `index.ts`, `library/` | Re-exports domain façades only. |
|
|
14
|
+
| 02 | Foundation | `core/` | Defines errors, identifiers, hashing, events and serializable nouns. |
|
|
15
|
+
| 03 | Isolation policy | `isolation/`, API policy helpers | Evaluates approval, denial, handoff and receipt boundaries. |
|
|
16
|
+
| 04 | Execution planning | `runtime/`, `runners/` | Plans and observes work through caller-owned adapters. |
|
|
17
|
+
| 05 | Memory planning | `memory/` | Defines internal working-set, targets, transforms and bounded plans. |
|
|
18
|
+
| 06 | Storage planning | `storage/` | Defines adapter-owned content, cache, chunk and synchronization contracts. |
|
|
19
|
+
| 07 | Persistence | `persistence/` | Defines optional schema, migration and provider-neutral persistence adapters. |
|
|
20
|
+
| 08 | Browser | `browser/`, `extension/` | Defines browser, virtual-browser, extension and session contracts without user-profile access. |
|
|
21
|
+
| 09 | Acquisition | `scrape/`, `captcha/` | Defines request, crawl, extract, proxy and challenge contracts. |
|
|
22
|
+
| 10 | Communication | `api/` | Defines authenticated envelopes, transports, rate policy and event serialization. |
|
|
23
|
+
| 11 | External adapters | `adapters/` | Defines replaceable forge, socket, app and MCP adapters. |
|
|
24
|
+
| 12 | Automation | `automation/`, `surfaces/` | Defines automation manifests, permissions, triggers and surface requirements. |
|
|
25
|
+
| 13 | Intelligence | `ai/` | Defines token, chunk, retrieval, provenance and metric contracts. |
|
|
26
|
+
| 14 | Binary handling | `binary/` | Defines archive, build and transformation plans without execution. |
|
|
27
|
+
| 15 | Distribution | `packager/`, `release/` | Defines package, artifact, delivery, readiness and evidence contracts; filesystem-backed asset verification remains an explicit subpath. |
|
|
28
|
+
| 16 | Modes | `modes/`, `server/` | Defines target modes, surface profiles and host-neutral service/deployment adapters; the Node server remains an explicit subpath only. |
|
|
29
|
+
| 17 | Commands | `cli/` | Defines command parsing, presentation and command-level integration. |
|
|
30
|
+
| 18 | Web application | `web/` | Defines static routes, UI components, visual assets and build boundaries. |
|
|
31
|
+
| 19 | Native modes | `desktop/`, `android/`, `ios/`, `extension/` | Defines platform packaging metadata and calls library contracts. |
|
|
32
|
+
| 20 | Quality and operations | `tests/`, `.github/`, `docs/` | Defines deterministic evidence, build checks, release operations and architecture records. |
|
|
33
|
+
|
|
34
|
+
## Dependency flow
|
|
35
|
+
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
```mermaid
|
|
39
|
+
flowchart TD
|
|
40
|
+
public[Public surface] --> foundation[Foundation]
|
|
41
|
+
public --> policy[Isolation policy]
|
|
42
|
+
public --> execution[Execution planning]
|
|
43
|
+
public --> memory[Memory planning]
|
|
44
|
+
public --> storage[Storage planning]
|
|
45
|
+
public --> browser[Browser]
|
|
46
|
+
public --> acquisition[Acquisition]
|
|
47
|
+
public --> communication[Communication]
|
|
48
|
+
public --> automation[Automation]
|
|
49
|
+
public --> intelligence[Intelligence]
|
|
50
|
+
public --> binary[Binary handling]
|
|
51
|
+
public --> distribution[Distribution]
|
|
52
|
+
public --> modes[Modes]
|
|
53
|
+
foundation --> policy
|
|
54
|
+
policy --> execution
|
|
55
|
+
memory --> storage
|
|
56
|
+
storage --> persistence[Persistence]
|
|
57
|
+
acquisition --> browser
|
|
58
|
+
automation --> communication
|
|
59
|
+
execution --> adapters[External adapters]
|
|
60
|
+
browser --> adapters
|
|
61
|
+
communication --> adapters
|
|
62
|
+
binary --> distribution
|
|
63
|
+
modes --> surfaces[Commands, web and native modes]
|
|
64
|
+
distribution --> operations[Quality and operations]
|
|
65
|
+
surfaces --> operations
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The root may import only domain façades. Each façade may import its owned modules and lower-level contracts. Runtime, browser, storage, binary and remote-provider behavior remain adapter-owned: no domain may add implicit host, filesystem, browser-profile, network or provider effects.
|
|
69
|
+
|
|
70
|
+
## Compatibility rules
|
|
71
|
+
|
|
72
|
+
Existing module paths referenced by package exports remain valid. A module may be moved only after a compatibility shim or an equivalent export is in place, all relative imports are updated, and the package dry-run includes the expected output. Native mode metadata, workflow paths, CLI command paths and static web routing are release boundaries and therefore move only with corresponding validation.
|
|
73
|
+
|
|
74
|
+
## Implementation order
|
|
75
|
+
|
|
76
|
+
The first reorganization block groups the public root exports behind domain façades. The second groups adjacent library modules where no package subpath or native workflow depends on their exact location. The final block aligns tests and documentation with the same 20 domains. Each block must pass the engine build, active tests, legacy tests, formatting, package inspection, web checks and native-flat validation before the next block begins.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
flowchart TD
|
|
2
|
+
public[01 Public surface] --> foundation[02 Foundation]
|
|
3
|
+
public --> policy[03 Isolation policy]
|
|
4
|
+
public --> execution[04 Execution]
|
|
5
|
+
public --> memory[05 Memory]
|
|
6
|
+
public --> storage[06 Storage]
|
|
7
|
+
public --> persistence[07 Persistence]
|
|
8
|
+
public --> browser[08 Browser]
|
|
9
|
+
public --> acquisition[09 Acquisition]
|
|
10
|
+
public --> communication[10 Communication]
|
|
11
|
+
public --> integration[11 External adapters]
|
|
12
|
+
public --> automation[12 Automation]
|
|
13
|
+
public --> intelligence[13 Intelligence]
|
|
14
|
+
public --> binary[14 Binary]
|
|
15
|
+
public --> distribution[15 Distribution]
|
|
16
|
+
public --> modes[16 Modes]
|
|
17
|
+
public --> commands[17 Commands]
|
|
18
|
+
public --> web[18 Web application]
|
|
19
|
+
public --> native[19 Native modes]
|
|
20
|
+
public --> quality[20 Quality operations]
|
|
21
|
+
foundation --> policy
|
|
22
|
+
policy --> execution
|
|
23
|
+
memory --> storage --> persistence
|
|
24
|
+
acquisition --> browser
|
|
25
|
+
automation --> communication --> integration
|
|
26
|
+
execution --> integration
|
|
27
|
+
browser --> integration
|
|
28
|
+
binary --> distribution --> quality
|
|
29
|
+
modes --> commands
|
|
30
|
+
modes --> web
|
|
31
|
+
modes --> native
|
|
32
|
+
web --> quality
|
|
33
|
+
native --> quality
|
|
Binary file
|