Repository navigation
Releases
v0.15.0: Merge pull request #213 from pandemicsyn/changeset-release/main
Beachside v0.15.0
@beachside/adapter
Minor Changes
-
#211
8652541Thanks @pandemicsyn! - Adapters can declaresetup: the environment variable for each credential and config setting, a description, and a link to where a person gets it when there is one.alternativeslists credentials that stand in for each other (exe.dev takes an API key or an SSH key). Every official adapter now declares its own, and the CLI reads them from the installed adapter instead of keeping its own table, so third-party adapters that declaresetupget environment-only settings too. Missing-setting errors andbeachside providerslink to where each value comes from, andproviderslists the profiles that use each provider. Its JSON rows addknown(false when the adapter failed to load or declares no setup, in which casemissingEnvis empty and the text says the settings are unknown) andneeds, with each missing value's description and link.New
beachside profile ls | show | use | rmcommands list profiles, explain where each setting comes from without revealing credentials, change the default and remove profiles.profile showreportsready(true, false, or null when the adapter declares no setup) and what the profile stillneeds.useandrmrewritebeachside.jsonatomically under a lock, keeping its file mode.profile rmrefuses while stored sandboxes, snapshots or images use the profile, unless--force.beachside.jsonhas a published JSON Schema (https://beachside.run/schema/beachside.json, also printed bybeachside schema config), and the file accepts a$schemakey so editors can complete and check it. The schema requires each profile to name aprovideror amodule.beachside doctornow checks that the provider accepts the credentials with one read of its sandbox listing. A rejected key exits 5 (UNAUTHENTICATEDorFORBIDDEN) with the profile name and where to get a new key, here and on any command that connects, instead of an internal error with an unknown outcome.beachside providersno longer marks boxd and Freestyle experimental, and lists providers in the docs' order. -
#212
6c5d263Thanks @pandemicsyn! - Sandboxes now reach the internet unless you ask otherwise. boxd, E2B, Vercel, Modal, Runloop, Freestyle and Archil default tonetwork: "internet"instead ofblocked; setnetwork: "blocked"or an allowlist to restrict egress. Daytona keeps its tier-manageddaytona-default. Boat and exe.dev no longer requirenetwork: "internet"in setup, and the CLI no longer needsBOAT_NETWORKorEXE_NETWORK;BOXD_NETWORK,RUNLOOP_NETWORK,FREESTYLE_NETWORKandARCHIL_NETWORKstay optional, forblockedor (Archil Free plan)archil-managed. An adapter that declares nodefaultNetworkPolicynow defaults tointernet, or to its only policy whensupports.networklists one. Connections that relied on the old blocked default and reopen sandboxes created that way should setnetwork: "blocked"explicitly.
beachside
Minor Changes
- #212
6c5d263Thanks @pandemicsyn! - Sandboxes now reach the internet unless you ask otherwise. boxd, E2B, Vercel, Modal, Runloop, Freestyle and Archil default tonetwork: "internet"instead ofblocked; setnetwork: "blocked"or an allowlist to restrict egress. Daytona keeps its tier-manageddaytona-default. Boat and exe.dev no longer requirenetwork: "internet"in setup, and the CLI no longer needsBOAT_NETWORKorEXE_NETWORK;BOXD_NETWORK,RUNLOOP_NETWORK,FREESTYLE_NETWORKandARCHIL_NETWORKstay optional, forblockedor (Archil Free plan)archil-managed. An adapter that declares nodefaultNetworkPolicynow defaults tointernet, or to its only policy whensupports.networklists one. Connections that relied on the old blocked default and reopen sandboxes created that way should setnetwork: "blocked"explicitly.
Patch Changes
@beachside/daytona
Patch Changes
-
#211
8652541Thanks @pandemicsyn! - Adapters can declaresetup: the environment variable for each credential and config setting, a description, and a link to where a person gets it when there is one.alternativeslists credentials that stand in for each other (exe.dev takes an API key or an SSH key). Every official adapter now declares its own, and the CLI reads them from the installed adapter instead of keeping its own table, so third-party adapters that declaresetupget environment-only settings too. Missing-setting errors andbeachside providerslink to where each value comes from, andproviderslists the profiles that use each provider. Its JSON rows addknown(false when the adapter failed to load or declares no setup, in which casemissingEnvis empty and the text says the settings are unknown) andneeds, with each missing value's description and link.New
beachside profile ls | show | use | rmcommands list profiles, explain where each setting comes from without revealing credentials, change the default and remove profiles.profile showreportsready(true, false, or null when the adapter declares no setup) and what the profile stillneeds.useandrmrewritebeachside.jsonatomically under a lock, keeping its file mode.profile rmrefuses while stored sandboxes, snapshots or images use the profile, unless--force.beachside.jsonhas a published JSON Schema (https://beachside.run/schema/beachside.json, also printed bybeachside schema config), and the file accepts a$schemakey so editors can complete and check it. The schema requires each profile to name aprovideror amodule.beachside doctornow checks that the provider accepts the credentials with one read of its sandbox listing. A rejected key exits 5 (UNAUTHENTICATEDorFORBIDDEN) with the profile name and where to get a new key, here and on any command that connects, instead of an internal error with an unknown outcome.beachside providersno longer marks boxd and Freestyle experimental, and lists providers in the docs' order. -
Updated dependencies [
8652541,6c5d263]:- @beachside/adapter@0.15.0
@beachside/e2b
Minor Changes
- #212
6c5d263Thanks @pandemicsyn! - Sandboxes now reach the internet unless you ask otherwise. boxd, E2B, Vercel, Modal, Runloop, Freestyle and Archil default tonetwork: "internet"instead ofblocked; setnetwork: "blocked"or an allowlist to restrict egress. Daytona keeps its tier-manageddaytona-default. Boat and exe.dev no longer requirenetwork: "internet"in setup, and the CLI no longer needsBOAT_NETWORKorEXE_NETWORK;BOXD_NETWORK,RUNLOOP_NETWORK,FREESTYLE_NETWORKandARCHIL_NETWORKstay optional, forblockedor (Archil Free plan)archil-managed. An adapter that declares nodefaultNetworkPolicynow defaults tointernet, or to its only policy whensupports.networklists one. Connections that relied on the old blocked default and reopen sandboxes created that way should setnetwork: "blocked"explicitly.
Patch Changes
-
#211
8652541Thanks @pandemicsyn! - Adapters can declaresetup: the environment variable for each credential and config setting, a description, and a link to where a person gets it when there is one.alternativeslists credentials that stand in for each other (exe.dev takes an API key or an SSH key). Every official adapter now declares its own, and the CLI reads them from the installed adapter instead of keeping its own table, so third-party adapters that declaresetupget environment-only settings too. Missing-setting errors andbeachside providerslink to where each value comes from, andproviderslists the profiles that use each provider. Its JSON rows addknown(false when the adapter failed to load or declares no setup, in which casemissingEnvis empty and the text says the settings are unknown) andneeds, with each missing value's description and link.New
beachside profile ls | show | use | rmcommands list profiles, explain where each setting comes from without revealing credentials, change the default and remove profiles.profile showreportsready(true, false, or null when the adapter declares no setup) and what the profile stillneeds.useandrmrewritebeachside.jsonatomically under a lock, keeping its file mode.profile rmrefuses while stored sandboxes, snapshots or images use the profile, unless--force.`beachside...
v0.14.0: Merge pull request #210 from pandemicsyn/changeset-release/main
Beachside v0.14.0
@beachside/adapter
No changes in this release.
beachside
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/daytona
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/e2b
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/boxd
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/boat
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/runloop
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/freestyle
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/archil
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/exe-dev
Minor Changes
- #204
6f3a1fcThanks @pandemicsyn! - Add the experimental@beachside/exe-devadapter for exe.dev VMs, built on exe.dev's official@exedev/sdk. It connects with an API token, an Ed25519 SSH key that signs short-lived tokens locally, or both; creates tagged VMs from OCI images (defaultexeuntu) with whole-vCPU sizes, the account's default placement, standalone VMs or a named pool, labels kept in the VM comment and create-time environment variables; runs argv and shell commands with exact output bytes, finite stdin and a truncation bound; streams processes with byte output, piped stdin, signals, status and reopening; reads and writes files of any size with streams, no-clobber writes, copy, move and metadata; pauses and resumes VMs with their memory; forks a VM withcp; and returns protected previews with a signed token header or public previews. A create whose response is lost is found again by its name instead of being resent. The CLI gains anexe-devprovider that readsEXE_API_KEYandEXE_NETWORK=internet.
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/modal
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/vercel
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
@beachside/cli
Minor Changes
- #204
6f3a1fcThanks @pandemicsyn! - Add the experimental@beachside/exe-devadapter for exe.dev VMs, built on exe.dev's official@exedev/sdk. It connects with an API token, an Ed25519 SSH key that signs short-lived tokens locally, or both; creates tagged VMs from OCI images (defaultexeuntu) with whole-vCPU sizes, the account's default placement, standalone VMs or a named pool, labels kept in the VM comment and create-time environment variables; runs argv and shell commands with exact output bytes, finite stdin and a truncation bound; streams processes with byte output, piped stdin, signals, status and reopening; reads and writes files of any size with streams, no-clobber writes, copy, move and metadata; pauses and resumes VMs with their memory; forks a VM withcp; and returns protected previews with a signed token header or public previews. A create whose response is lost is found again by its name instead of being resent. The CLI gains anexe-devprovider that readsEXE_API_KEYandEXE_NETWORK=internet.
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.14.0
- beachside@0.14.0
v0.13.0: Merge pull request #200 from pandemicsyn/changeset-release/main
Beachside v0.13.0
@beachside/adapter
Minor Changes
-
#194
f95dce3Thanks @pandemicsyn! - Egress allowlists: setnetwork: { allow: ["registry.npmjs.org", "*.github.com", "10.0.0.0/8"] }in adapter setup to let sandboxes reach only those hosts and IPv4 ranges. Supported on E2B, Vercel, Modal, Runloop, Archil (paid plans), Daytona (Tier 3+; hosts or ranges, not both) and Freestyle (IPv4 ranges only); where the provider reports the list back, the adapter checks it recorded exactly that list. Modal also gainsnetwork: "internet"; it previously always blocked egress. -
#196
9e3ab39Thanks @pandemicsyn! - Previews on more providers. Daytona'spreview: { access: "public" }now returns an expiring signed URL for one port (preview.expiresInSeconds, default 1 hour) instead of rejecting, and previews gain an optionalexpiresAt. Modal getsbox.preview(port): protected by default through a connect token sent as a bearer header, or public tunnels forpreview.portsdeclared at create (public tunnels neednetwork: "internet"or an allowlist, because Modal refuses open ports on a blocked network). Boat gets public previews through its host-port API. -
#198
f89fde4Thanks @pandemicsyn! - Addbox.fork(),box.submitFork()andbox.checkFork(). A fork copies a running sandbox with the provider's native fork; adapters without one reject withUNSUPPORTED, and Beachside never emulates a fork with a snapshot and restore.capabilities().forkreports what a fork keeps, how the source is interrupted, whether processes resume and whether the fork's lifecycle is independent. boxd, E2B and Archil fork natively with memory and running processes. Adapters declare a fork with the newsandboxForksession hook; uncertain forks recover through operation kindsandbox_fork.
beachside
Minor Changes
-
#194
f95dce3Thanks @pandemicsyn! - Egress allowlists: setnetwork: { allow: ["registry.npmjs.org", "*.github.com", "10.0.0.0/8"] }in adapter setup to let sandboxes reach only those hosts and IPv4 ranges. Supported on E2B, Vercel, Modal, Runloop, Archil (paid plans), Daytona (Tier 3+; hosts or ranges, not both) and Freestyle (IPv4 ranges only); where the provider reports the list back, the adapter checks it recorded exactly that list. Modal also gainsnetwork: "internet"; it previously always blocked egress. -
#196
9e3ab39Thanks @pandemicsyn! - Previews on more providers. Daytona'spreview: { access: "public" }now returns an expiring signed URL for one port (preview.expiresInSeconds, default 1 hour) instead of rejecting, and previews gain an optionalexpiresAt. Modal getsbox.preview(port): protected by default through a connect token sent as a bearer header, or public tunnels forpreview.portsdeclared at create (public tunnels neednetwork: "internet"or an allowlist, because Modal refuses open ports on a blocked network). Boat gets public previews through its host-port API. -
#198
f89fde4Thanks @pandemicsyn! - Addbox.fork(),box.submitFork()andbox.checkFork(). A fork copies a running sandbox with the provider's native fork; adapters without one reject withUNSUPPORTED, and Beachside never emulates a fork with a snapshot and restore.capabilities().forkreports what a fork keeps, how the source is interrupted, whether processes resume and whether the fork's lifecycle is independent. boxd, E2B and Archil fork natively with memory and running processes. Adapters declare a fork with the newsandboxForksession hook; uncertain forks recover through operation kindsandbox_fork.
Patch Changes
@beachside/daytona
Minor Changes
-
#194
f95dce3Thanks @pandemicsyn! - Egress allowlists: setnetwork: { allow: ["registry.npmjs.org", "*.github.com", "10.0.0.0/8"] }in adapter setup to let sandboxes reach only those hosts and IPv4 ranges. Supported on E2B, Vercel, Modal, Runloop, Archil (paid plans), Daytona (Tier 3+; hosts or ranges, not both) and Freestyle (IPv4 ranges only); where the provider reports the list back, the adapter checks it recorded exactly that list. Modal also gainsnetwork: "internet"; it previously always blocked egress. -
#196
9e3ab39Thanks @pandemicsyn! - Previews on more providers. Daytona'spreview: { access: "public" }now returns an expiring signed URL for one port (preview.expiresInSeconds, default 1 hour) instead of rejecting, and previews gain an optionalexpiresAt. Modal getsbox.preview(port): protected by default through a connect token sent as a bearer header, or public tunnels forpreview.portsdeclared at create (public tunnels neednetwork: "internet"or an allowlist, because Modal refuses open ports on a blocked network). Boat gets public previews through its host-port API.
Patch Changes
@beachside/e2b
Minor Changes
-
#193
473b891Thanks @pandemicsyn! - E2B: upgrade toe2b@2.63.0and support protected previews. Withpreview: { access: "protected" },box.preview(port)now returns the sandbox's traffic token as ane2b-traffic-access-tokenheader instead of rejecting.The connect call that returns the token uses the sandbox's observed remaining lifetime as its timeout, so a running sandbox's lifetime is unchanged; if the sandbox paused after the running check, E2B resumes it with that remaining lifetime and
preview()rejects withCONFLICT.Compatibility:
e2b@2.63.0requires Node 22.19 or newer, so@beachside/e2bnow declaresengines.node >=22.19(previously Node 20 worked). -
#194
f95dce3Thanks @pandemicsyn! - Egress allowlists: setnetwork: { allow: ["registry.npmjs.org", "*.github.com", "10.0.0.0/8"] }in adapter setup to let sandboxes reach only those hosts and IPv4 ranges. Supported on E2B, Vercel, Modal, Runloop, Archil (paid plans), Daytona (Tier 3+; hosts or ranges, not both) and Freestyle (IPv4 ranges only); where the provider reports the list back, the adapter checks it recorded exactly that list. Modal also gainsnetwork: "internet"; it previously always blocked egress. -
#198
f89fde4Thanks @pandemicsyn! - Addbox.fork(),box.submitFork()andbox.checkFork(). A fork copies a running sandbox with the provider's native fork; adapters without one reject withUNSUPPORTED, and Beachside never emulates a fork with a snapshot and restore.capabilities().forkreports what a fork keeps, how the source is interrupted, whether processes resume and whether the fork's lifecycle is independent. boxd, E2B and Archil fork natively with memory and running processes. Adapters declare a fork with the newsandboxForksession hook; uncertain forks recover through operation kindsandbox_fork.
Patch Changes
@beachside/boxd
Minor Changes
- #197
3ab2e60Thanks [@pandemicsyn...
v0.12.0: Merge pull request #192 from pandemicsyn/changeset-release/main
Beachside v0.12.0
@beachside/adapter
No changes in this release.
beachside
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/daytona
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/e2b
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/boxd
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/boat
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/runloop
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/freestyle
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/archil
Minor Changes
- #190
3560e72Thanks @pandemicsyn! - Add the experimental@beachside/archiladapter for Archil Sandboxes, built on Archil's officialdiskSDK. It creates persistent Firecracker microVMs from OCI images or built image ids in a chosen region, with blocked egress by default (or Archil's managed allowlist on the Free plan), exact sizes and create-time environment variables; runs argv and shell commands with exact output bytes, finite stdin and a truncation bound; streams processes with byte output, piped stdin, signals, status and reopening; opens terminals on Archil's native PTY; reads and writes files of any size with streams, no-clobber writes, copy, move and metadata; pauses and resumes sandboxes with their memory, or stops and cold-boots them; renews the session deadline; captures memory-and-disk or disk-only snapshots as forks of a retained holder sandbox; builds images; manages Archil disks as volumes and mounts them at create; and returns protected previews with a token header or public previews. A create whose response is lost is found again by its name instead of being resent. The CLI gains anarchilprovider that readsARCHIL_API_KEY,ARCHIL_REGIONand an optionalARCHIL_NETWORK(internetorarchil-managed).
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/modal
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/vercel
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
@beachside/cli
Minor Changes
- #190
3560e72Thanks @pandemicsyn! - Add the experimental@beachside/archiladapter for Archil Sandboxes, built on Archil's officialdiskSDK. It creates persistent Firecracker microVMs from OCI images or built image ids in a chosen region, with blocked egress by default (or Archil's managed allowlist on the Free plan), exact sizes and create-time environment variables; runs argv and shell commands with exact output bytes, finite stdin and a truncation bound; streams processes with byte output, piped stdin, signals, status and reopening; opens terminals on Archil's native PTY; reads and writes files of any size with streams, no-clobber writes, copy, move and metadata; pauses and resumes sandboxes with their memory, or stops and cold-boots them; renews the session deadline; captures memory-and-disk or disk-only snapshots as forks of a retained holder sandbox; builds images; manages Archil disks as volumes and mounts them at create; and returns protected previews with a token header or public previews. A create whose response is lost is found again by its name instead of being resent. The CLI gains anarchilprovider that readsARCHIL_API_KEY,ARCHIL_REGIONand an optionalARCHIL_NETWORK(internetorarchil-managed).
Patch Changes
- Updated dependencies []:
- @beachside/adapter@0.12.0
- beachside@0.12.0
v0.11.0: Merge pull request #183 from pandemicsyn/changeset-release/main
Beachside v0.11.0
@beachside/adapter
Minor Changes
-
#187
ae8c05aThanks @pandemicsyn! - Snapshots can carry labels.snapshot({ labels })sets them at capture where the adapter keeps them, andsnapshots.list({ labels })keeps only matching snapshots.- Adapters: an adapter opts in with
snapshotCapture.labels: true, and listedSnapshotInforeportslabels. Elsewhere a labelled capture is rejected before anything is captured. - Capability:
capabilities().snapshots.capture.value.labelssays whether labels are kept. - Runloop: labels are stored as snapshot metadata, next to the adapter's own
beachside_keys, which stay reserved. - Setup:
box.runSetup()takesenvfor every step, kept out of the digest, andrunStartup: false, which records startup steps without running them so a snapshot can be taken in between.
Setup.parallel([...steps])runs setup steps at the same time as one step; its steps' events and output carrystep.group. - Adapters: an adapter opts in with
beachside
Minor Changes
-
#187
ae8c05aThanks @pandemicsyn! - Sandboxes can now be set up as they start.sandboxes.create(),sandboxes.with()andsnapshot.restore()takesetup(steps that run once per sandbox: shell lines, argv arrays, inline scripts orSetup.file()scripts) andstartup(steps that run whenever the sandbox comes up without its processes, including after a freshresume()).Setup.define()makes named setups that compose. Beachside runs the steps overexecon every provider, streams their output throughonSetupOutput, records progress in the sandbox so a restored snapshot skips setup it already holds, and throwsSetupFailedErrornaming the failed step. A sandbox whose setup fails is destroyed unlessonSetupFailure: "keep".box.runSetup()runs setup on an existing sandbox. -
#187
ae8c05aThanks @pandemicsyn! - Snapshots can carry labels.snapshot({ labels })sets them at capture where the adapter keeps them, andsnapshots.list({ labels })keeps only matching snapshots.- Adapters: an adapter opts in with
snapshotCapture.labels: true, and listedSnapshotInforeportslabels. Elsewhere a labelled capture is rejected before anything is captured. - Capability:
capabilities().snapshots.capture.value.labelssays whether labels are kept. - Runloop: labels are stored as snapshot metadata, next to the adapter's own
beachside_keys, which stay reserved. - Setup:
box.runSetup()takesenvfor every step, kept out of the digest, andrunStartup: false, which records startup steps without running them so a snapshot can be taken in between.
Setup.parallel([...steps])runs setup steps at the same time as one step; its steps' events and output carrystep.group. - Adapters: an adapter opts in with
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/daytona
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/e2b
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/boxd
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/boat
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/runloop
Minor Changes
-
#187
ae8c05aThanks @pandemicsyn! - Snapshots can carry labels.snapshot({ labels })sets them at capture where the adapter keeps them, andsnapshots.list({ labels })keeps only matching snapshots.- Adapters: an adapter opts in with
snapshotCapture.labels: true, and listedSnapshotInforeportslabels. Elsewhere a labelled capture is rejected before anything is captured. - Capability:
capabilities().snapshots.capture.value.labelssays whether labels are kept. - Runloop: labels are stored as snapshot metadata, next to the adapter's own
beachside_keys, which stay reserved. - Setup:
box.runSetup()takesenvfor every step, kept out of the digest, andrunStartup: false, which records startup steps without running them so a snapshot can be taken in between.
Setup.parallel([...steps])runs setup steps at the same time as one step; its steps' events and output carrystep.group. - Adapters: an adapter opts in with
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/freestyle
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/modal
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/vercel
Patch Changes
- Updated dependencies [
ae8c05a]:- @beachside/adapter@0.11.0
@beachside/cli
Minor Changes
-
#187
ae8c05aThanks @pandemicsyn! - Setup scripts:createandruntake--setup <name|path>,--setup-cmd '<shell>',--startup <path>and--startup-cmd '<shell>', which run in the new sandbox once it starts.- Named setups:
setupsinbeachside.jsondefines reusable setups withextends,networkandenv, and a profile'ssetuplist applies by default (--no-default-setupskips it).beachside setup lslists them. - Startup: startup steps run at create and again after every
create --snapshotrestore. - Failures: a failed step exits 9 with
SETUP_FAILED.createkeeps the sandbox, or removes it with--rm-on-failure; the record shows each step's outcome. - Rerun:
beachside setup <sandbox>reruns only the missing steps, and--forcereruns everything. - Add-ons:
--withinstalls its servers through the same setup engine.
Setup caches: a setup with
"cache": true(orcreate --cache) is snapshotted after setup and before startup. The next create with the same setup restores it and runs onlycache: falsesteps and startup.- The key covers the provider, scope, profile, image, every step and the files in
cache.files. - Freshness: caches go stale after
maxAge(7 days by default) and are rebuilt on the next create. - Secrets: a setup whose env holds secrets is refused unless it sets
secrets: "allow". - Commands:
beachside setup cache ls|rm|prunemanages caches, andgcprunes stale ones.--no-cacheand--refresh-cachecontrol one create.
Setups can also come from a repository: with
"projectSetups": trueorBEACHSIDE_PROJECT_SETUPS=1, the CLI reads.beachside/setup.json(setupsplusdefault) from the checkout. A step can be{ "parallel": [...] }to run several steps at once as one setup step. - Named setups:
-
#184
05f225dThanks @pandemicsyn! -beachside create --with rex|herdrinstalls a server in the new sandbox and puts it on your Tailscale tailnet, with the auth key fromTAILSCALE_AUTH_KEYsent only over stdin.- Rex: runs on Rex's own Tailscale, and
createwaits for its HTTPS address. - herdr: gets a Tailscale SSH device to attach to with
herdr --remote. - Connection details:
createandinspectprint how to connect, the sandbox record keeps the add-ons, andrmlogs each device out of the tailnet. - Network:
--withimplies--network internet.
A create the provider rejects with no image set now keeps the provider's own message, rather than always saying an image is needed. Previously an E2B lifetime over its cap read as "needs an image".
- Rex: runs on Rex's own Tailscale, and
Patch Changes
- #182
1577530Thanks @pandemicsyn! - The bundledbeachside-cliskill now shows agents Rex's exact split-pane commands:rex run --split=right -s "$REX_SESSION" --keep-open --json, thenrex waitandrex captureby the saved pane id. It also explains how to start a Rex server inside a sandbox, following the Rex guide. - Updated dependencies [
ae8c05a, [ae8c05a](https://github.com/pandemicsyn/beachside/commit/ae8c05aadf2841f734...
v0.9.0: Merge pull request #160 from pandemicsyn/changeset-release/main
Beachside v0.9.0
@beachside/adapter
Minor Changes
-
#159
d137e90Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as<provider>Adapterand a factory named after the provider:boxd(),boat(),runloop(),modal()andvercel()joindaytona()ande2b(). Docs, examples and skills show the split form,Beachside.connect({ adapter, credentials, config }), which works for every adapter.Breaking for Vercel: the definition is now
vercelAdapter, andvercelis the factory. Replaceadapter: vercelwithadapter: vercelAdapter, or callBeachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails withINVALID_ARGUMENTand names both forms.
beachside
Minor Changes
-
#159
d137e90Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as<provider>Adapterand a factory named after the provider:boxd(),boat(),runloop(),modal()andvercel()joindaytona()ande2b(). Docs, examples and skills show the split form,Beachside.connect({ adapter, credentials, config }), which works for every adapter.Breaking for Vercel: the definition is now
vercelAdapter, andvercelis the factory. Replaceadapter: vercelwithadapter: vercelAdapter, or callBeachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails withINVALID_ARGUMENTand names both forms. -
#164
7b9fa24Thanks @pandemicsyn! - BufferedreadFile/writeFile(and the text variants) have no default size limit: files larger than the adapter's buffered limit move through its file streams underneath.maxBytesstays as an optional guard and the 16 MiB ceiling is gone. Adapters without file streams keep their own limit, and the error names it.capabilities().maxFileBytesnow reports the adapter's buffered limit.execstdinalso accepts anAsyncIterable<Uint8Array>orReadableStream<Uint8Array>, and byte or text input over 1 MiB. These are streamed to the command as it runs on adapters with incremental process stdin (Daytona, E2B, Vercel), withdeadlineSecondsenforced locally.
Patch Changes
- #167
3f414a8Thanks @pandemicsyn! - E2B streamed writes, and buffered writes over 1 MiB, work in sticky directories such as/tmpagain; they used to fail there with "stream completion could not be confirmed". When a streamed E2B write fails, the error now names the step that failed and keeps the provider's original error as itscause. - Updated dependencies [
d137e90]:- @beachside/adapter@0.9.0
@beachside/daytona
Minor Changes
-
#159
d137e90Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as<provider>Adapterand a factory named after the provider:boxd(),boat(),runloop(),modal()andvercel()joindaytona()ande2b(). Docs, examples and skills show the split form,Beachside.connect({ adapter, credentials, config }), which works for every adapter.Breaking for Vercel: the definition is now
vercelAdapter, andvercelis the factory. Replaceadapter: vercelwithadapter: vercelAdapter, or callBeachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails withINVALID_ARGUMENTand names both forms.
Patch Changes
-
#169
1c36875Thanks @pandemicsyn! - Writing to a path whose folder does not exist yet now creates the missing folders on Daytona, boxd and Vercel, as E2B and Modal already did for writes. This coverswriteFile,writeFileStreamandcopyFile, and E2BcopyFilenow creates them too.Daytona no longer leaves
.beachside-exec-*and.beachside-write-*folders in/tmpafter commands and writes succeed. E2B also removes its command capture files and write stages once an interrupted operation is recovered. -
Updated dependencies [
d137e90]:- @beachside/adapter@0.9.0
@beachside/e2b
Minor Changes
-
#159
d137e90Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as<provider>Adapterand a factory named after the provider:boxd(),boat(),runloop(),modal()andvercel()joindaytona()ande2b(). Docs, examples and skills show the split form,Beachside.connect({ adapter, credentials, config }), which works for every adapter.Breaking for Vercel: the definition is now
vercelAdapter, andvercelis the factory. Replaceadapter: vercelwithadapter: vercelAdapter, or callBeachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails withINVALID_ARGUMENTand names both forms.
Patch Changes
-
#169
1c36875Thanks @pandemicsyn! - Writing to a path whose folder does not exist yet now creates the missing folders on Daytona, boxd and Vercel, as E2B and Modal already did for writes. This coverswriteFile,writeFileStreamandcopyFile, and E2BcopyFilenow creates them too.Daytona no longer leaves
.beachside-exec-*and.beachside-write-*folders in/tmpafter commands and writes succeed. E2B also removes its command capture files and write stages once an interrupted operation is recovered. -
#170
2b29fddThanks @pandemicsyn! - E2B overwrites of an existing file directly in a sticky directory such as/tmpnow succeed. They used to fail with an HTTP 500 from the sandbox because the kernel refuses to let E2B reopen a file there that belongs to the sandbox user; the adapter now uploads a fresh copy beside the file and copies it over as the sandbox user. -
#167
3f414a8Thanks @pandemicsyn! - E2B streamed writes, and buffered writes over 1 MiB, work in sticky directories such as/tmpagain; they used to fail there with "stream completion could not be confirmed". When a streamed E2B write fails, the error now names the step that failed and keeps the provider's original error as itscause. -
Updated dependencies [
d137e90]:- @beachside/adapter@0.9.0
@beachside/boxd
Minor Changes
-
#159
d137e90Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as<provider>Adapterand a factory named after the provider:boxd(),boat(),runloop(),modal()andvercel()joindaytona()ande2b(). Docs, examples and skills show the split form,Beachside.connect({ adapter, credentials, config }), which works for every adapter.Breaking for Vercel: the definition is now
vercelAdapter, andvercelis the factory. Replaceadapter: vercelwithadapter: vercelAdapter, or callBeachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails withINVALID_ARGUMENTand names both forms.
Patch Changes
-
#169
1c36875Thanks @pandemicsyn! - Writing to a path whose folder does not exist yet now creates the missing folders on Daytona, boxd and Vercel, as E2B and Modal already did for writes. This coverswriteFile,writeFileStreamandcopyFile, and E2BcopyFilenow creates them too.Daytona no longer leaves
.beachside-exec-*and.beachside-write-*folders in/tmpafter commands and writes succeed. E2B also removes its command capture files and write stages once an interrupted operation is recovered. -
Updated dependencies [[
d137e90](https://github.com/pandemicsyn/beachside/commit/d137e90e8f7bc271713c8b0...
v0.8.0: Merge pull request #138 from pandemicsyn/changeset-release/main
Beachside v0.8.0
@beachside/adapter
Minor Changes
-
#148
29f6896Thanks @pandemicsyn! - AddsnapshotSuiteto@beachside/adapter/testing: a shared snapshot conformance check (exact preserve plan, capture matches plan, saved reference reopens, restore into a new sandbox with the captured files, listing or anUNSUPPORTEDlist, and deletion) that adapter authors run against their fixtures through the public client. -
#152
f9a0bb7Thanks @pandemicsyn! -sandboxes.list()items now carrylabels(the labels set at create, without adapter markers;nullwhere the provider keeps none) andcreatedAt(the provider's creation time, ornull). Daytona, E2B, Vercel and Modal report labels; Daytona, E2B (start time), Vercel, boxd and Runloop report creation time. Adapters add them with the newlistedLabelsandlistedTimehelpers. The CLI'sls --remoteshows both, and the newbeachside gc --label k=v [--older-than 2h] [--dry-run]destroys provider-listed sandboxes whose labels match, such as those a killed CI job left behind, and drops their store records. Durations also accept days, like1d. -
#146
e513d9aThanks @pandemicsyn! - Set the sandbox lifetime the same way everywhere. Every adapter now takeslifecycle: { lifetimeSeconds }in setup, defaulting to 900 seconds; E2B, Vercel and ModaltimeoutSeconds, DaytonattlMinutesand boxd's top-levellifetimeSecondsstill work but are deprecated.create({ lifecycle: { lifetimeSeconds } })overrides it for one sandbox, andcapabilities().lifetimereports the accepted range. The CLI addscreate --ttlandrun --ttl. -
#156
47f5b61Thanks @pandemicsyn! - Rename the project to Beachside. Packages arebeachsideand@beachside/*; the exports areBeachside,BeachsideClient,DirectBeachsideClientandBeachsideError; list coverage"sandbar-managed"is now"managed"; telemetry spans and attributes usebeachside.*. The CLI command isbeachside, with settings in~/.config/beachside/beachside.jsonandBEACHSIDE_*environment variables. Labels, metadata and names written onto provider resources now use thebeachsideprefix, so resources created by earlier releases are no longer recognized. -
#150
e566711Thanks @pandemicsyn! -snapshot.restore()takes the create optionsenv,labelsandlifecycle: { lifetimeSeconds }. Adapters declare which they apply insnapshotRestore.options(shown incapabilities().snapshots.restore); anything else rejects before allocation. The CLI now accepts--env,--labeland--ttlwith--snapshot. -
#136
4a074abThanks @pandemicsyn! - AddPreserveconstants (Preserve.FILESYSTEM,Preserve.FILESYSTEM_AND_MEMORY) for choosing what snapshots and suspension keep. E2B acceptssnapshots: { preserve }for filesystem-only captures, andlifecycle.suspension.preserveis now an exact choice:Preserve.FILESYSTEMpauses without memory, and resumes from disk only, soresume()reports fresh execution. Previously a filesystem setting on E2B still kept memory. E2B snapshots listed without Beachside history now report unknown preservation instead of assuming memory.snapshots.list(),volumes.list()andimages.list()now default to a page of 50 when called without alimit.
beachside
Minor Changes
-
#152
f9a0bb7Thanks @pandemicsyn! -sandboxes.list()items now carrylabels(the labels set at create, without adapter markers;nullwhere the provider keeps none) andcreatedAt(the provider's creation time, ornull). Daytona, E2B, Vercel and Modal report labels; Daytona, E2B (start time), Vercel, boxd and Runloop report creation time. Adapters add them with the newlistedLabelsandlistedTimehelpers. The CLI'sls --remoteshows both, and the newbeachside gc --label k=v [--older-than 2h] [--dry-run]destroys provider-listed sandboxes whose labels match, such as those a killed CI job left behind, and drops their store records. Durations also accept days, like1d. -
#146
e513d9aThanks @pandemicsyn! - Set the sandbox lifetime the same way everywhere. Every adapter now takeslifecycle: { lifetimeSeconds }in setup, defaulting to 900 seconds; E2B, Vercel and ModaltimeoutSeconds, DaytonattlMinutesand boxd's top-levellifetimeSecondsstill work but are deprecated.create({ lifecycle: { lifetimeSeconds } })overrides it for one sandbox, andcapabilities().lifetimereports the accepted range. The CLI addscreate --ttlandrun --ttl. -
#156
47f5b61Thanks @pandemicsyn! - Rename the project to Beachside. Packages arebeachsideand@beachside/*; the exports areBeachside,BeachsideClient,DirectBeachsideClientandBeachsideError; list coverage"sandbar-managed"is now"managed"; telemetry spans and attributes usebeachside.*. The CLI command isbeachside, with settings in~/.config/beachside/beachside.jsonandBEACHSIDE_*environment variables. Labels, metadata and names written onto provider resources now use thebeachsideprefix, so resources created by earlier releases are no longer recognized. -
#150
e566711Thanks @pandemicsyn! -snapshot.restore()takes the create optionsenv,labelsandlifecycle: { lifetimeSeconds }. Adapters declare which they apply insnapshotRestore.options(shown incapabilities().snapshots.restore); anything else rejects before allocation. The CLI now accepts--env,--labeland--ttlwith--snapshot. -
#136
4a074abThanks @pandemicsyn! - AddPreserveconstants (Preserve.FILESYSTEM,Preserve.FILESYSTEM_AND_MEMORY) for choosing what snapshots and suspension keep. E2B acceptssnapshots: { preserve }for filesystem-only captures, andlifecycle.suspension.preserveis now an exact choice:Preserve.FILESYSTEMpauses without memory, and resumes from disk only, soresume()reports fresh execution. Previously a filesystem setting on E2B still kept memory. E2B snapshots listed without Beachside history now report unknown preservation instead of assuming memory.snapshots.list(),volumes.list()andimages.list()now default to a page of 50 when called without alimit.
Patch Changes
- Updated dependencies [
29f6896,f9a0bb7,e513d9a,47f5b61,e566711,4a074ab]:- @beachside/adapter@0.8.0
@beachside/daytona
Minor Changes
-
#148
29f6896Thanks @pandemicsyn! - Acceptsnapshots: { preserve }on the Daytona adapter.Preserve.FILESYSTEM_AND_MEMORYtakes hot snapshots of running Linux VMs (includeMemory: true): the VM keeps running and a restored VM resumes the captured processes. Containers and stopped VMs reject before any change. Omitted orPreserve.FILESYSTEMkeeps today's cold capture. -
#134
3b62728Thanks @pandemicsyn! - Daytona Linux VM sandboxes now supportsnapshot()(cold, filesystem-only capture, restored as a new Linux VM) andsuspend()/resume()through native pause, which keeps files, memory and running processes. Containers are unchanged.lifecycle.suspension.preserve: "filesystem+memory"no longer rejects at connect: it pauses Linux VMs and ...
v0.7.0: Merge pull request #124 from pandemicsyn/changeset-release/main
Sandbar v0.7.0
@sandbar-sdk/adapter
Minor Changes
- #122
43d2993Thanks @pandemicsyn! - Add the portableresources: { vcpus, memoryMiB }adapter setting, given as minimums, andinspect().resources, which reports the size a sandbox actually has orunknown. Adapter authors getResourceMinimums,SandboxResourcesandsmallestSize(), which picks the smallest native size that meets the minimums and otherwise throwsUNSUPPORTEDnaming the largest size.SandboxInfo.resourcesis optional for adapters; the SDK always fills it in.
sandbar-sdk
Minor Changes
- #122
43d2993Thanks @pandemicsyn! - Add the portableresources: { vcpus, memoryMiB }adapter setting, given as minimums, andinspect().resources, which reports the size a sandbox actually has orunknown. Adapter authors getResourceMinimums,SandboxResourcesandsmallestSize(), which picks the smallest native size that meets the minimums and otherwise throwsUNSUPPORTEDnaming the largest size.SandboxInfo.resourcesis optional for adapters; the SDK always fills it in.
Patch Changes
- Updated dependencies [
43d2993]:- @sandbar-sdk/adapter@0.7.0
@sandbar-sdk/daytona
Minor Changes
- #122
43d2993Thanks @pandemicsyn! - Acceptresources: { vcpus, memoryMiB }minimums and report the real size on inspect. boxd, Vercel and Boat pick their smallest native size that meets them and reject at connect, before any provider request, when none does; the oldsize,vcpusandmachinekeys stay as deprecated aliases. Daytona and E2B build OCI snapshots and templates at that size and reject a prepared snapshot or template that is smaller or does not report its size, including E2B'sbasetemplate.
Patch Changes
- #127
6ee114dThanks @pandemicsyn! -daytona({...})ande2b({...})now acceptresources: { vcpus, memoryMiB }, matching the adapter configuration. Thedaytona()network setting's documentation now namesdaytona-defaultas the default. - Updated dependencies [
43d2993]:- @sandbar-sdk/adapter@0.7.0
@sandbar-sdk/e2b
Minor Changes
- #122
43d2993Thanks @pandemicsyn! - Acceptresources: { vcpus, memoryMiB }minimums and report the real size on inspect. boxd, Vercel and Boat pick their smallest native size that meets them and reject at connect, before any provider request, when none does; the oldsize,vcpusandmachinekeys stay as deprecated aliases. Daytona and E2B build OCI snapshots and templates at that size and reject a prepared snapshot or template that is smaller or does not report its size, including E2B'sbasetemplate.
Patch Changes
- #127
6ee114dThanks @pandemicsyn! -daytona({...})ande2b({...})now acceptresources: { vcpus, memoryMiB }, matching the adapter configuration. Thedaytona()network setting's documentation now namesdaytona-defaultas the default. - Updated dependencies [
43d2993]:- @sandbar-sdk/adapter@0.7.0
@sandbar-sdk/boxd
Minor Changes
- #122
43d2993Thanks @pandemicsyn! - Acceptresources: { vcpus, memoryMiB }minimums and report the real size on inspect. boxd, Vercel and Boat pick their smallest native size that meets them and reject at connect, before any provider request, when none does; the oldsize,vcpusandmachinekeys stay as deprecated aliases. Daytona and E2B build OCI snapshots and templates at that size and reject a prepared snapshot or template that is smaller or does not report its size, including E2B'sbasetemplate.
Patch Changes
- Updated dependencies [
43d2993]:- @sandbar-sdk/adapter@0.7.0
@sandbar-sdk/boat
Minor Changes
- #122
43d2993Thanks @pandemicsyn! - Acceptresources: { vcpus, memoryMiB }minimums and report the real size on inspect. boxd, Vercel and Boat pick their smallest native size that meets them and reject at connect, before any provider request, when none does; the oldsize,vcpusandmachinekeys stay as deprecated aliases. Daytona and E2B build OCI snapshots and templates at that size and reject a prepared snapshot or template that is smaller or does not report its size, including E2B'sbasetemplate.
Patch Changes
- Updated dependencies [
43d2993]:- @sandbar-sdk/adapter@0.7.0
@sandbar-sdk/runloop
Minor Changes
- #125
2cb4539Thanks @pandemicsyn! - Add the experimental@sandbar-sdk/runloopadapter for Runloop Devboxes: blocked egress by default through a managed deny-all network policy, argv/shell exec with exact output bytes and finite stdin, binary files, suspend/resume, disk snapshots with restore, authenticated or public previews, and portableresourcessizing. The CLI recognizes--provider runloopwithRUNLOOP_API_KEYand optionalRUNLOOP_NETWORK=internet.
Patch Changes
- Updated dependencies [
43d2993]:- @sandbar-sdk/adapter@0.7.0
@sandbar-sdk/modal
Minor Changes
- #126
4edf15cThanks @pandemicsyn! - Publish the experimental@sandbar-sdk/modaladapter to npm with the rest of the lockstep release group.
Patch Changes
- Updated dependencies [
43d2993]:- @sandbar-sdk/adapter@0.7.0
@sandbar-sdk/vercel
Minor Changes
- #122
43d2993Thanks @pandemicsyn! - Acceptresources: { vcpus, memoryMiB }minimums and report the real size on inspect. boxd, Vercel and Boat pick their smallest native size that meets them and reject at connect, before any provider request, when none does; the oldsize,vcpusandmachinekeys stay as deprecated aliases. Daytona and E2B build OCI snapshots and templates at that size and reject a prepared snapshot or template that is smaller or does not report its size, including E2B'sbasetemplate.
Patch Changes
- Updated dependencies [
43d2993]:- @sandbar-sdk/adapter@0.7.0
@sandbar-sdk/cli
Minor Changes
- #125
2cb4539Thanks @pandemicsyn! - Add the experimental@sandbar-sdk/runloopadapter for Runloop Devboxes: blocked egress by default through a managed deny-all network policy, argv/shell exec with exact output bytes and finite stdin, binary files, suspend/resume, disk snapshots with restore, authenticated or public previews, and portableresourcessizing. The CLI recognizes--provider runloopwithRUNLOOP_API_KEYand optionalRUNLOOP_NETWORK=internet.
Patch Changes
- Updated dependencies [
43d2993]:- sandbar-sdk@0.7.0
- @sandbar-sdk/adapter@0.7.0
v0.6.0: Merge pull request #120 from pandemicsyn/changeset-release/main
Sandbar v0.6.0
@sandbar-sdk/adapter
Minor Changes
-
#118
22e06edThanks @pandemicsyn! -sandboxes.create({ env })sets environment variables for every command, process and terminal in the sandbox, including after reopening; a per-callenvoverrides a name. Daytona, E2B and Vercel map it to their native create-time environment. Adapters opt in withsupports.createEnv, reported ascapabilities().createEnv; elsewhere (boxd)create({ env })rejects withUnsupportedFeatureErrorbefore allocating anything. Values are never saved in recovery references or tokens, and never appear in telemetry or error messages. -
#118
7fc61f8Thanks @pandemicsyn! - Addclient.images.get(),client.images.list()and image handles withinspect(),delete()andsubmitDelete().images.build()results now includereference, an image resource reference whose ownership isverified-createdonly when the adapter proved the build created it. Adapters opt in with theimageInspect,imageList/imageListCoverageandimageDeletehooks, andcapabilities().imageManagementreports what a connection supports; a missing hook rejects withUNSUPPORTED. Image deletion follows the snapshot deletion rules: scope checks, no deletion of borrowed images as a side effect,OUTCOME_UNKNOWNon an unconfirmed result and no replay. -
#118
3a8c047Thanks @pandemicsyn! - Addsandboxes.list({ cursor?, limit? }): a bounded page of sandboxes withid,stateand areferencethatsandboxes.get()reopens, pluscoverage(provider-scopeorsandbar-managed), matchingsnapshots.list()andvolumes.list(). Adapters implement the optionalsandboxListhook and returnreference: nullwhen native evidence cannot verify identity; listed references never claim ownership, generation or creation receipts the provider does not show. Daytona and E2B list Sandbar-created sandboxes withverified-createdreferences; boxd and Vercel list withunknownownership.operations.inventory()is unchanged and is derived fromsandboxListwhen an adapter only implements the new hook.
sandbar-sdk
Minor Changes
-
#118
22e06edThanks @pandemicsyn! -sandboxes.create({ env })sets environment variables for every command, process and terminal in the sandbox, including after reopening; a per-callenvoverrides a name. Daytona, E2B and Vercel map it to their native create-time environment. Adapters opt in withsupports.createEnv, reported ascapabilities().createEnv; elsewhere (boxd)create({ env })rejects withUnsupportedFeatureErrorbefore allocating anything. Values are never saved in recovery references or tokens, and never appear in telemetry or error messages. -
#118
7fc61f8Thanks @pandemicsyn! - Addclient.images.get(),client.images.list()and image handles withinspect(),delete()andsubmitDelete().images.build()results now includereference, an image resource reference whose ownership isverified-createdonly when the adapter proved the build created it. Adapters opt in with theimageInspect,imageList/imageListCoverageandimageDeletehooks, andcapabilities().imageManagementreports what a connection supports; a missing hook rejects withUNSUPPORTED. Image deletion follows the snapshot deletion rules: scope checks, no deletion of borrowed images as a side effect,OUTCOME_UNKNOWNon an unconfirmed result and no replay. -
#118
3a8c047Thanks @pandemicsyn! - Addsandboxes.list({ cursor?, limit? }): a bounded page of sandboxes withid,stateand areferencethatsandboxes.get()reopens, pluscoverage(provider-scopeorsandbar-managed), matchingsnapshots.list()andvolumes.list(). Adapters implement the optionalsandboxListhook and returnreference: nullwhen native evidence cannot verify identity; listed references never claim ownership, generation or creation receipts the provider does not show. Daytona and E2B list Sandbar-created sandboxes withverified-createdreferences; boxd and Vercel list withunknownownership.operations.inventory()is unchanged and is derived fromsandboxListwhen an adapter only implements the new hook.
Patch Changes
@sandbar-sdk/daytona
Minor Changes
-
#118
22e06edThanks @pandemicsyn! -sandboxes.create({ env })sets environment variables for every command, process and terminal in the sandbox, including after reopening; a per-callenvoverrides a name. Daytona, E2B and Vercel map it to their native create-time environment. Adapters opt in withsupports.createEnv, reported ascapabilities().createEnv; elsewhere (boxd)create({ env })rejects withUnsupportedFeatureErrorbefore allocating anything. Values are never saved in recovery references or tokens, and never appear in telemetry or error messages. -
#118
7fc61f8Thanks @pandemicsyn! - Inspect, list and delete prepared images: Daytona maps native snapshots and E2B maps templates. Deletion refuses public or shared images, captured sandbox snapshots and images that sandboxes or warm pools still use before sending one unreplayed native delete. Built images now report areferencewith verified ownership when the build's own request created them. -
#118
3a8c047Thanks @pandemicsyn! - Addsandboxes.list({ cursor?, limit? }): a bounded page of sandboxes withid,stateand areferencethatsandboxes.get()reopens, pluscoverage(provider-scopeorsandbar-managed), matchingsnapshots.list()andvolumes.list(). Adapters implement the optionalsandboxListhook and returnreference: nullwhen native evidence cannot verify identity; listed references never claim ownership, generation or creation receipts the provider does not show. Daytona and E2B list Sandbar-created sandboxes withverified-createdreferences; boxd and Vercel list withunknownownership.operations.inventory()is unchanged and is derived fromsandboxListwhen an adapter only implements the new hook.
Patch Changes
@sandbar-sdk/e2b
Minor Changes
-
#118
22e06edThanks @pandemicsyn! -sandboxes.create({ env })sets environment variables for every command, process and terminal in the sandbox, including after reopening; a per-callenvoverrides a name. Daytona, E2B and Vercel map it to their native create-time environment. Adapters opt in withsupports.createEnv, reported ascapabilities().createEnv; elsewhere (boxd)create({ env })rejects withUnsupportedFeatureErrorbefore allocating anything. Values are never saved in recovery references or tokens, and never appear in telemetry or error messages. -
#118
7fc61f8Thanks @pandemicsyn! - Inspect, list and delete prepared images: Daytona maps native snapshots and E2B maps templates. Deletion refuses public or shared images, captured sandbox snapshots and images that sandboxes or warm pools still use before sending one unreplayed native delete. Built images now report areferencewith verified ownership when the build's own request created them. -
#118
3a8c047Thanks @pandemicsyn! - Addsandboxes.list({ cursor?, limit? }): a bounded page of sandboxes withid, `s...
v0.5.0: Merge pull request #117 from pandemicsyn/changeset-release/main
Sandbar v0.5.0
@sandbar-sdk/adapter
No changes in this release.
sandbar-sdk
Patch Changes
- Updated dependencies []:
- @sandbar-sdk/adapter@0.5.0
@sandbar-sdk/daytona
Patch Changes
- Updated dependencies []:
- @sandbar-sdk/adapter@0.5.0
@sandbar-sdk/e2b
Patch Changes
- Updated dependencies []:
- @sandbar-sdk/adapter@0.5.0
@sandbar-sdk/boxd
Patch Changes
- Updated dependencies []:
- @sandbar-sdk/adapter@0.5.0
@sandbar-sdk/boat
Minor Changes
- #116
67bc9ddThanks @pandemicsyn! - Add the experimental@sandbar-sdk/boatadapter for Boat full-VM sandboxes: create with an idempotency key, argv/shell exec with exact output bytes and finite stdin, binary files up to 5 MiB, archive/resume, renewal and confirmed permanent delete. The CLI recognizes--provider boatwithBOAT_API_KEYandBOAT_NETWORK=internet.
Patch Changes
- Updated dependencies []:
- @sandbar-sdk/adapter@0.5.0
@sandbar-sdk/vercel
Patch Changes
- Updated dependencies []:
- @sandbar-sdk/adapter@0.5.0
@sandbar-sdk/cli
Minor Changes
- #116
67bc9ddThanks @pandemicsyn! - Add the experimental@sandbar-sdk/boatadapter for Boat full-VM sandboxes: create with an idempotency key, argv/shell exec with exact output bytes and finite stdin, binary files up to 5 MiB, archive/resume, renewal and confirmed permanent delete. The CLI recognizes--provider boatwithBOAT_API_KEYandBOAT_NETWORK=internet.
Patch Changes
- Updated dependencies []:
- @sandbar-sdk/adapter@0.5.0
- sandbar-sdk@0.5.0