Skip to content

Releases

v0.15.0: Merge pull request #213 from pandemicsyn/changeset-release/main

Choose a tag to compare

@github-actions github-actions released this 14 Nov 07:02
68b1db1

Beachside v0.15.0

@beachside/adapter

Minor Changes

  • #211 8652541 Thanks @pandemicsyn! - Adapters can declare setup: the environment variable for each credential and config setting, a description, and a link to where a person gets it when there is one. alternatives lists 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 declare setup get environment-only settings too. Missing-setting errors and beachside providers link to where each value comes from, and providers lists the profiles that use each provider. Its JSON rows add known (false when the adapter failed to load or declares no setup, in which case missingEnv is empty and the text says the settings are unknown) and needs, with each missing value's description and link.

    New beachside profile ls | show | use | rm commands list profiles, explain where each setting comes from without revealing credentials, change the default and remove profiles. profile show reports ready (true, false, or null when the adapter declares no setup) and what the profile still needs. use and rm rewrite beachside.json atomically under a lock, keeping its file mode. profile rm refuses while stored sandboxes, snapshots or images use the profile, unless --force.

    beachside.json has a published JSON Schema (https://beachside.run/schema/beachside.json, also printed by beachside schema config), and the file accepts a $schema key so editors can complete and check it. The schema requires each profile to name a provider or a module.

    beachside doctor now checks that the provider accepts the credentials with one read of its sandbox listing. A rejected key exits 5 (UNAUTHENTICATED or FORBIDDEN) 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 providers no longer marks boxd and Freestyle experimental, and lists providers in the docs' order.

  • #212 6c5d263 Thanks @pandemicsyn! - Sandboxes now reach the internet unless you ask otherwise. boxd, E2B, Vercel, Modal, Runloop, Freestyle and Archil default to network: "internet" instead of blocked; set network: "blocked" or an allowlist to restrict egress. Daytona keeps its tier-managed daytona-default. Boat and exe.dev no longer require network: "internet" in setup, and the CLI no longer needs BOAT_NETWORK or EXE_NETWORK; BOXD_NETWORK, RUNLOOP_NETWORK, FREESTYLE_NETWORK and ARCHIL_NETWORK stay optional, for blocked or (Archil Free plan) archil-managed. An adapter that declares no defaultNetworkPolicy now defaults to internet, or to its only policy when supports.network lists one. Connections that relied on the old blocked default and reopen sandboxes created that way should set network: "blocked" explicitly.

beachside

Minor Changes

  • #212 6c5d263 Thanks @pandemicsyn! - Sandboxes now reach the internet unless you ask otherwise. boxd, E2B, Vercel, Modal, Runloop, Freestyle and Archil default to network: "internet" instead of blocked; set network: "blocked" or an allowlist to restrict egress. Daytona keeps its tier-managed daytona-default. Boat and exe.dev no longer require network: "internet" in setup, and the CLI no longer needs BOAT_NETWORK or EXE_NETWORK; BOXD_NETWORK, RUNLOOP_NETWORK, FREESTYLE_NETWORK and ARCHIL_NETWORK stay optional, for blocked or (Archil Free plan) archil-managed. An adapter that declares no defaultNetworkPolicy now defaults to internet, or to its only policy when supports.network lists one. Connections that relied on the old blocked default and reopen sandboxes created that way should set network: "blocked" explicitly.

Patch Changes

@beachside/daytona

Patch Changes

  • #211 8652541 Thanks @pandemicsyn! - Adapters can declare setup: the environment variable for each credential and config setting, a description, and a link to where a person gets it when there is one. alternatives lists 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 declare setup get environment-only settings too. Missing-setting errors and beachside providers link to where each value comes from, and providers lists the profiles that use each provider. Its JSON rows add known (false when the adapter failed to load or declares no setup, in which case missingEnv is empty and the text says the settings are unknown) and needs, with each missing value's description and link.

    New beachside profile ls | show | use | rm commands list profiles, explain where each setting comes from without revealing credentials, change the default and remove profiles. profile show reports ready (true, false, or null when the adapter declares no setup) and what the profile still needs. use and rm rewrite beachside.json atomically under a lock, keeping its file mode. profile rm refuses while stored sandboxes, snapshots or images use the profile, unless --force.

    beachside.json has a published JSON Schema (https://beachside.run/schema/beachside.json, also printed by beachside schema config), and the file accepts a $schema key so editors can complete and check it. The schema requires each profile to name a provider or a module.

    beachside doctor now checks that the provider accepts the credentials with one read of its sandbox listing. A rejected key exits 5 (UNAUTHENTICATED or FORBIDDEN) 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 providers no 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 6c5d263 Thanks @pandemicsyn! - Sandboxes now reach the internet unless you ask otherwise. boxd, E2B, Vercel, Modal, Runloop, Freestyle and Archil default to network: "internet" instead of blocked; set network: "blocked" or an allowlist to restrict egress. Daytona keeps its tier-managed daytona-default. Boat and exe.dev no longer require network: "internet" in setup, and the CLI no longer needs BOAT_NETWORK or EXE_NETWORK; BOXD_NETWORK, RUNLOOP_NETWORK, FREESTYLE_NETWORK and ARCHIL_NETWORK stay optional, for blocked or (Archil Free plan) archil-managed. An adapter that declares no defaultNetworkPolicy now defaults to internet, or to its only policy when supports.network lists one. Connections that relied on the old blocked default and reopen sandboxes created that way should set network: "blocked" explicitly.

Patch Changes

  • #211 8652541 Thanks @pandemicsyn! - Adapters can declare setup: the environment variable for each credential and config setting, a description, and a link to where a person gets it when there is one. alternatives lists 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 declare setup get environment-only settings too. Missing-setting errors and beachside providers link to where each value comes from, and providers lists the profiles that use each provider. Its JSON rows add known (false when the adapter failed to load or declares no setup, in which case missingEnv is empty and the text says the settings are unknown) and needs, with each missing value's description and link.

    New beachside profile ls | show | use | rm commands list profiles, explain where each setting comes from without revealing credentials, change the default and remove profiles. profile show reports ready (true, false, or null when the adapter declares no setup) and what the profile still needs. use and rm rewrite beachside.json atomically under a lock, keeping its file mode. profile rm refuses while stored sandboxes, snapshots or images use the profile, unless --force.

    `beachside...

Read more

v0.14.0: Merge pull request #210 from pandemicsyn/changeset-release/main

Choose a tag to compare

@github-actions github-actions released this 11 Nov 15:10
0160fe1

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 6f3a1fc Thanks @pandemicsyn! - Add the experimental @beachside/exe-dev adapter 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 (default exeuntu) 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 with cp; 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 an exe-dev provider that reads EXE_API_KEY and EXE_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 6f3a1fc Thanks @pandemicsyn! - Add the experimental @beachside/exe-dev adapter 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 (default exeuntu) 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 with cp; 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 an exe-dev provider that reads EXE_API_KEY and EXE_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

Choose a tag to compare

@github-actions github-actions released this 11 Nov 06:22
ec80ac7

Beachside v0.13.0

@beachside/adapter

Minor Changes

  • #194 f95dce3 Thanks @pandemicsyn! - Egress allowlists: set network: { 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 gains network: "internet"; it previously always blocked egress.

  • #196 9e3ab39 Thanks @pandemicsyn! - Previews on more providers. Daytona's preview: { access: "public" } now returns an expiring signed URL for one port (preview.expiresInSeconds, default 1 hour) instead of rejecting, and previews gain an optional expiresAt. Modal gets box.preview(port): protected by default through a connect token sent as a bearer header, or public tunnels for preview.ports declared at create (public tunnels need network: "internet" or an allowlist, because Modal refuses open ports on a blocked network). Boat gets public previews through its host-port API.

  • #198 f89fde4 Thanks @pandemicsyn! - Add box.fork(), box.submitFork() and box.checkFork(). A fork copies a running sandbox with the provider's native fork; adapters without one reject with UNSUPPORTED, and Beachside never emulates a fork with a snapshot and restore. capabilities().fork reports 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 new sandboxFork session hook; uncertain forks recover through operation kind sandbox_fork.

beachside

Minor Changes

  • #194 f95dce3 Thanks @pandemicsyn! - Egress allowlists: set network: { 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 gains network: "internet"; it previously always blocked egress.

  • #196 9e3ab39 Thanks @pandemicsyn! - Previews on more providers. Daytona's preview: { access: "public" } now returns an expiring signed URL for one port (preview.expiresInSeconds, default 1 hour) instead of rejecting, and previews gain an optional expiresAt. Modal gets box.preview(port): protected by default through a connect token sent as a bearer header, or public tunnels for preview.ports declared at create (public tunnels need network: "internet" or an allowlist, because Modal refuses open ports on a blocked network). Boat gets public previews through its host-port API.

  • #198 f89fde4 Thanks @pandemicsyn! - Add box.fork(), box.submitFork() and box.checkFork(). A fork copies a running sandbox with the provider's native fork; adapters without one reject with UNSUPPORTED, and Beachside never emulates a fork with a snapshot and restore. capabilities().fork reports 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 new sandboxFork session hook; uncertain forks recover through operation kind sandbox_fork.

Patch Changes

@beachside/daytona

Minor Changes

  • #194 f95dce3 Thanks @pandemicsyn! - Egress allowlists: set network: { 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 gains network: "internet"; it previously always blocked egress.

  • #196 9e3ab39 Thanks @pandemicsyn! - Previews on more providers. Daytona's preview: { access: "public" } now returns an expiring signed URL for one port (preview.expiresInSeconds, default 1 hour) instead of rejecting, and previews gain an optional expiresAt. Modal gets box.preview(port): protected by default through a connect token sent as a bearer header, or public tunnels for preview.ports declared at create (public tunnels need network: "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 473b891 Thanks @pandemicsyn! - E2B: upgrade to e2b@2.63.0 and support protected previews. With preview: { access: "protected" }, box.preview(port) now returns the sandbox's traffic token as an e2b-traffic-access-token header 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 with CONFLICT.

    Compatibility: e2b@2.63.0 requires Node 22.19 or newer, so @beachside/e2b now declares engines.node >=22.19 (previously Node 20 worked).

  • #194 f95dce3 Thanks @pandemicsyn! - Egress allowlists: set network: { 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 gains network: "internet"; it previously always blocked egress.

  • #198 f89fde4 Thanks @pandemicsyn! - Add box.fork(), box.submitFork() and box.checkFork(). A fork copies a running sandbox with the provider's native fork; adapters without one reject with UNSUPPORTED, and Beachside never emulates a fork with a snapshot and restore. capabilities().fork reports 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 new sandboxFork session hook; uncertain forks recover through operation kind sandbox_fork.

Patch Changes

@beachside/boxd

Minor Changes

Read more

v0.12.0: Merge pull request #192 from pandemicsyn/changeset-release/main

Choose a tag to compare

@github-actions github-actions released this 10 Nov 14:36
b12fda2

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 3560e72 Thanks @pandemicsyn! - Add the experimental @beachside/archil adapter for Archil Sandboxes, built on Archil's official disk SDK. 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 an archil provider that reads ARCHIL_API_KEY, ARCHIL_REGION and an optional ARCHIL_NETWORK (internet or archil-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 3560e72 Thanks @pandemicsyn! - Add the experimental @beachside/archil adapter for Archil Sandboxes, built on Archil's official disk SDK. 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 an archil provider that reads ARCHIL_API_KEY, ARCHIL_REGION and an optional ARCHIL_NETWORK (internet or archil-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

Choose a tag to compare

@github-actions github-actions released this 09 Nov 17:45
049ab53

Beachside v0.11.0

@beachside/adapter

Minor Changes

  • #187 ae8c05a Thanks @pandemicsyn! - Snapshots can carry labels. snapshot({ labels }) sets them at capture where the adapter keeps them, and snapshots.list({ labels }) keeps only matching snapshots.

    • Adapters: an adapter opts in with snapshotCapture.labels: true, and listed SnapshotInfo reports labels. Elsewhere a labelled capture is rejected before anything is captured.
    • Capability: capabilities().snapshots.capture.value.labels says 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() takes env for every step, kept out of the digest, and runStartup: 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 carry step.group.

beachside

Minor Changes

  • #187 ae8c05a Thanks @pandemicsyn! - Sandboxes can now be set up as they start. sandboxes.create(), sandboxes.with() and snapshot.restore() take setup (steps that run once per sandbox: shell lines, argv arrays, inline scripts or Setup.file() scripts) and startup (steps that run whenever the sandbox comes up without its processes, including after a fresh resume()). Setup.define() makes named setups that compose. Beachside runs the steps over exec on every provider, streams their output through onSetupOutput, records progress in the sandbox so a restored snapshot skips setup it already holds, and throws SetupFailedError naming the failed step. A sandbox whose setup fails is destroyed unless onSetupFailure: "keep". box.runSetup() runs setup on an existing sandbox.

  • #187 ae8c05a Thanks @pandemicsyn! - Snapshots can carry labels. snapshot({ labels }) sets them at capture where the adapter keeps them, and snapshots.list({ labels }) keeps only matching snapshots.

    • Adapters: an adapter opts in with snapshotCapture.labels: true, and listed SnapshotInfo reports labels. Elsewhere a labelled capture is rejected before anything is captured.
    • Capability: capabilities().snapshots.capture.value.labels says 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() takes env for every step, kept out of the digest, and runStartup: 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 carry step.group.

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 ae8c05a Thanks @pandemicsyn! - Snapshots can carry labels. snapshot({ labels }) sets them at capture where the adapter keeps them, and snapshots.list({ labels }) keeps only matching snapshots.

    • Adapters: an adapter opts in with snapshotCapture.labels: true, and listed SnapshotInfo reports labels. Elsewhere a labelled capture is rejected before anything is captured.
    • Capability: capabilities().snapshots.capture.value.labels says 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() takes env for every step, kept out of the digest, and runStartup: 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 carry step.group.

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 ae8c05a Thanks @pandemicsyn! - Setup scripts: create and run take --setup <name|path>, --setup-cmd '<shell>', --startup <path> and --startup-cmd '<shell>', which run in the new sandbox once it starts.

    • Named setups: setups in beachside.json defines reusable setups with extends, network and env, and a profile's setup list applies by default (--no-default-setup skips it). beachside setup ls lists them.
    • Startup: startup steps run at create and again after every create --snapshot restore.
    • Failures: a failed step exits 9 with SETUP_FAILED. create keeps 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 --force reruns everything.
    • Add-ons: --with installs its servers through the same setup engine.

    Setup caches: a setup with "cache": true (or create --cache) is snapshotted after setup and before startup. The next create with the same setup restores it and runs only cache: false steps 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|prune manages caches, and gc prunes stale ones. --no-cache and --refresh-cache control one create.

    Setups can also come from a repository: with "projectSetups": true or BEACHSIDE_PROJECT_SETUPS=1, the CLI reads .beachside/setup.json (setups plus default) from the checkout. A step can be { "parallel": [...] } to run several steps at once as one setup step.

  • #184 05f225d Thanks @pandemicsyn! - beachside create --with rex|herdr installs a server in the new sandbox and puts it on your Tailscale tailnet, with the auth key from TAILSCALE_AUTH_KEY sent only over stdin.

    • Rex: runs on Rex's own Tailscale, and create waits for its HTTPS address.
    • herdr: gets a Tailscale SSH device to attach to with herdr --remote.
    • Connection details: create and inspect print how to connect, the sandbox record keeps the add-ons, and rm logs each device out of the tailnet.
    • Network: --with implies --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".

Patch Changes

  • #182 1577530 Thanks @pandemicsyn! - The bundled beachside-cli skill now shows agents Rex's exact split-pane commands: rex run --split=right -s "$REX_SESSION" --keep-open --json, then rex wait and rex capture by 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...
Read more

v0.9.0: Merge pull request #160 from pandemicsyn/changeset-release/main

Choose a tag to compare

@github-actions github-actions released this 08 Nov 20:46
07fe483

Beachside v0.9.0

@beachside/adapter

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). 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, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

beachside

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). 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, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

  • #164 7b9fa24 Thanks @pandemicsyn! - Buffered readFile/writeFile (and the text variants) have no default size limit: files larger than the adapter's buffered limit move through its file streams underneath. maxBytes stays 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().maxFileBytes now reports the adapter's buffered limit. exec stdin also accepts an AsyncIterable<Uint8Array> or ReadableStream<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), with deadlineSeconds enforced locally.

Patch Changes

  • #167 3f414a8 Thanks @pandemicsyn! - E2B streamed writes, and buffered writes over 1 MiB, work in sticky directories such as /tmp again; 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 its cause.
  • Updated dependencies [d137e90]:
    • @beachside/adapter@0.9.0

@beachside/daytona

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). 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, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • #169 1c36875 Thanks @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 covers writeFile, writeFileStream and copyFile, and E2B copyFile now creates them too.

    Daytona no longer leaves .beachside-exec-* and .beachside-write-* folders in /tmp after 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 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). 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, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • #169 1c36875 Thanks @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 covers writeFile, writeFileStream and copyFile, and E2B copyFile now creates them too.

    Daytona no longer leaves .beachside-exec-* and .beachside-write-* folders in /tmp after commands and writes succeed. E2B also removes its command capture files and write stages once an interrupted operation is recovered.

  • #170 2b29fdd Thanks @pandemicsyn! - E2B overwrites of an existing file directly in a sticky directory such as /tmp now 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 3f414a8 Thanks @pandemicsyn! - E2B streamed writes, and buffered writes over 1 MiB, work in sticky directories such as /tmp again; 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 its cause.

  • Updated dependencies [d137e90]:

    • @beachside/adapter@0.9.0

@beachside/boxd

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). 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, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • #169 1c36875 Thanks @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 covers writeFile, writeFileStream and copyFile, and E2B copyFile now creates them too.

    Daytona no longer leaves .beachside-exec-* and .beachside-write-* folders in /tmp after 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...

Read more

v0.8.0: Merge pull request #138 from pandemicsyn/changeset-release/main

Choose a tag to compare

@github-actions github-actions released this 07 Nov 19:12
48c262d

Beachside v0.8.0

@beachside/adapter

Minor Changes

  • #148 29f6896 Thanks @pandemicsyn! - Add snapshotSuite to @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 an UNSUPPORTED list, and deletion) that adapter authors run against their fixtures through the public client.

  • #152 f9a0bb7 Thanks @pandemicsyn! - sandboxes.list() items now carry labels (the labels set at create, without adapter markers; null where the provider keeps none) and createdAt (the provider's creation time, or null). Daytona, E2B, Vercel and Modal report labels; Daytona, E2B (start time), Vercel, boxd and Runloop report creation time. Adapters add them with the new listedLabels and listedTime helpers. The CLI's ls --remote shows both, and the new beachside 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, like 1d.

  • #146 e513d9a Thanks @pandemicsyn! - Set the sandbox lifetime the same way everywhere. Every adapter now takes lifecycle: { lifetimeSeconds } in setup, defaulting to 900 seconds; E2B, Vercel and Modal timeoutSeconds, Daytona ttlMinutes and boxd's top-level lifetimeSeconds still work but are deprecated. create({ lifecycle: { lifetimeSeconds } }) overrides it for one sandbox, and capabilities().lifetime reports the accepted range. The CLI adds create --ttl and run --ttl.

  • #156 47f5b61 Thanks @pandemicsyn! - Rename the project to Beachside. Packages are beachside and @beachside/*; the exports are Beachside, BeachsideClient, DirectBeachsideClient and BeachsideError; list coverage "sandbar-managed" is now "managed"; telemetry spans and attributes use beachside.*. The CLI command is beachside, with settings in ~/.config/beachside/beachside.json and BEACHSIDE_* environment variables. Labels, metadata and names written onto provider resources now use the beachside prefix, so resources created by earlier releases are no longer recognized.

  • #150 e566711 Thanks @pandemicsyn! - snapshot.restore() takes the create options env, labels and lifecycle: { lifetimeSeconds }. Adapters declare which they apply in snapshotRestore.options (shown in capabilities().snapshots.restore); anything else rejects before allocation. The CLI now accepts --env, --label and --ttl with --snapshot.

  • #136 4a074ab Thanks @pandemicsyn! - Add Preserve constants (Preserve.FILESYSTEM, Preserve.FILESYSTEM_AND_MEMORY) for choosing what snapshots and suspension keep. E2B accepts snapshots: { preserve } for filesystem-only captures, and lifecycle.suspension.preserve is now an exact choice: Preserve.FILESYSTEM pauses without memory, and resumes from disk only, so resume() 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() and images.list() now default to a page of 50 when called without a limit.

beachside

Minor Changes

  • #152 f9a0bb7 Thanks @pandemicsyn! - sandboxes.list() items now carry labels (the labels set at create, without adapter markers; null where the provider keeps none) and createdAt (the provider's creation time, or null). Daytona, E2B, Vercel and Modal report labels; Daytona, E2B (start time), Vercel, boxd and Runloop report creation time. Adapters add them with the new listedLabels and listedTime helpers. The CLI's ls --remote shows both, and the new beachside 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, like 1d.

  • #146 e513d9a Thanks @pandemicsyn! - Set the sandbox lifetime the same way everywhere. Every adapter now takes lifecycle: { lifetimeSeconds } in setup, defaulting to 900 seconds; E2B, Vercel and Modal timeoutSeconds, Daytona ttlMinutes and boxd's top-level lifetimeSeconds still work but are deprecated. create({ lifecycle: { lifetimeSeconds } }) overrides it for one sandbox, and capabilities().lifetime reports the accepted range. The CLI adds create --ttl and run --ttl.

  • #156 47f5b61 Thanks @pandemicsyn! - Rename the project to Beachside. Packages are beachside and @beachside/*; the exports are Beachside, BeachsideClient, DirectBeachsideClient and BeachsideError; list coverage "sandbar-managed" is now "managed"; telemetry spans and attributes use beachside.*. The CLI command is beachside, with settings in ~/.config/beachside/beachside.json and BEACHSIDE_* environment variables. Labels, metadata and names written onto provider resources now use the beachside prefix, so resources created by earlier releases are no longer recognized.

  • #150 e566711 Thanks @pandemicsyn! - snapshot.restore() takes the create options env, labels and lifecycle: { lifetimeSeconds }. Adapters declare which they apply in snapshotRestore.options (shown in capabilities().snapshots.restore); anything else rejects before allocation. The CLI now accepts --env, --label and --ttl with --snapshot.

  • #136 4a074ab Thanks @pandemicsyn! - Add Preserve constants (Preserve.FILESYSTEM, Preserve.FILESYSTEM_AND_MEMORY) for choosing what snapshots and suspension keep. E2B accepts snapshots: { preserve } for filesystem-only captures, and lifecycle.suspension.preserve is now an exact choice: Preserve.FILESYSTEM pauses without memory, and resumes from disk only, so resume() 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() and images.list() now default to a page of 50 when called without a limit.

Patch Changes

@beachside/daytona

Minor Changes

  • #148 29f6896 Thanks @pandemicsyn! - Accept snapshots: { preserve } on the Daytona adapter. Preserve.FILESYSTEM_AND_MEMORY takes 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 or Preserve.FILESYSTEM keeps today's cold capture.

  • #134 3b62728 Thanks @pandemicsyn! - Daytona Linux VM sandboxes now support snapshot() (cold, filesystem-only capture, restored as a new Linux VM) and suspend()/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 ...

Read more

v0.7.0: Merge pull request #124 from pandemicsyn/changeset-release/main

Choose a tag to compare

@github-actions github-actions released this 19 Oct 14:15
3854200

Sandbar v0.7.0

@sandbar-sdk/adapter

Minor Changes

  • #122 43d2993 Thanks @pandemicsyn! - Add the portable resources: { vcpus, memoryMiB } adapter setting, given as minimums, and inspect().resources, which reports the size a sandbox actually has or unknown. Adapter authors get ResourceMinimums, SandboxResources and smallestSize(), which picks the smallest native size that meets the minimums and otherwise throws UNSUPPORTED naming the largest size. SandboxInfo.resources is optional for adapters; the SDK always fills it in.

sandbar-sdk

Minor Changes

  • #122 43d2993 Thanks @pandemicsyn! - Add the portable resources: { vcpus, memoryMiB } adapter setting, given as minimums, and inspect().resources, which reports the size a sandbox actually has or unknown. Adapter authors get ResourceMinimums, SandboxResources and smallestSize(), which picks the smallest native size that meets the minimums and otherwise throws UNSUPPORTED naming the largest size. SandboxInfo.resources is 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 43d2993 Thanks @pandemicsyn! - Accept resources: { 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 old size, vcpus and machine keys 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's base template.

Patch Changes

  • #127 6ee114d Thanks @pandemicsyn! - daytona({...}) and e2b({...}) now accept resources: { vcpus, memoryMiB }, matching the adapter configuration. The daytona() network setting's documentation now names daytona-default as the default.
  • Updated dependencies [43d2993]:
    • @sandbar-sdk/adapter@0.7.0

@sandbar-sdk/e2b

Minor Changes

  • #122 43d2993 Thanks @pandemicsyn! - Accept resources: { 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 old size, vcpus and machine keys 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's base template.

Patch Changes

  • #127 6ee114d Thanks @pandemicsyn! - daytona({...}) and e2b({...}) now accept resources: { vcpus, memoryMiB }, matching the adapter configuration. The daytona() network setting's documentation now names daytona-default as the default.
  • Updated dependencies [43d2993]:
    • @sandbar-sdk/adapter@0.7.0

@sandbar-sdk/boxd

Minor Changes

  • #122 43d2993 Thanks @pandemicsyn! - Accept resources: { 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 old size, vcpus and machine keys 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's base template.

Patch Changes

  • Updated dependencies [43d2993]:
    • @sandbar-sdk/adapter@0.7.0

@sandbar-sdk/boat

Minor Changes

  • #122 43d2993 Thanks @pandemicsyn! - Accept resources: { 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 old size, vcpus and machine keys 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's base template.

Patch Changes

  • Updated dependencies [43d2993]:
    • @sandbar-sdk/adapter@0.7.0

@sandbar-sdk/runloop

Minor Changes

  • #125 2cb4539 Thanks @pandemicsyn! - Add the experimental @sandbar-sdk/runloop adapter 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 portable resources sizing. The CLI recognizes --provider runloop with RUNLOOP_API_KEY and optional RUNLOOP_NETWORK=internet.

Patch Changes

  • Updated dependencies [43d2993]:
    • @sandbar-sdk/adapter@0.7.0

@sandbar-sdk/modal

Minor Changes

  • #126 4edf15c Thanks @pandemicsyn! - Publish the experimental @sandbar-sdk/modal adapter 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 43d2993 Thanks @pandemicsyn! - Accept resources: { 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 old size, vcpus and machine keys 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's base template.

Patch Changes

  • Updated dependencies [43d2993]:
    • @sandbar-sdk/adapter@0.7.0

@sandbar-sdk/cli

Minor Changes

  • #125 2cb4539 Thanks @pandemicsyn! - Add the experimental @sandbar-sdk/runloop adapter 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 portable resources sizing. The CLI recognizes --provider runloop with RUNLOOP_API_KEY and optional RUNLOOP_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

Choose a tag to compare

@github-actions github-actions released this 19 Oct 01:15
1226190

Sandbar v0.6.0

@sandbar-sdk/adapter

Minor Changes

  • #118 22e06ed Thanks @pandemicsyn! - sandboxes.create({ env }) sets environment variables for every command, process and terminal in the sandbox, including after reopening; a per-call env overrides a name. Daytona, E2B and Vercel map it to their native create-time environment. Adapters opt in with supports.createEnv, reported as capabilities().createEnv; elsewhere (boxd) create({ env }) rejects with UnsupportedFeatureError before allocating anything. Values are never saved in recovery references or tokens, and never appear in telemetry or error messages.

  • #118 7fc61f8 Thanks @pandemicsyn! - Add client.images.get(), client.images.list() and image handles with inspect(), delete() and submitDelete(). images.build() results now include reference, an image resource reference whose ownership is verified-created only when the adapter proved the build created it. Adapters opt in with the imageInspect, imageList/imageListCoverage and imageDelete hooks, and capabilities().imageManagement reports what a connection supports; a missing hook rejects with UNSUPPORTED. Image deletion follows the snapshot deletion rules: scope checks, no deletion of borrowed images as a side effect, OUTCOME_UNKNOWN on an unconfirmed result and no replay.

  • #118 3a8c047 Thanks @pandemicsyn! - Add sandboxes.list({ cursor?, limit? }): a bounded page of sandboxes with id, state and a reference that sandboxes.get() reopens, plus coverage (provider-scope or sandbar-managed), matching snapshots.list() and volumes.list(). Adapters implement the optional sandboxList hook and return reference: null when 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 with verified-created references; boxd and Vercel list with unknown ownership. operations.inventory() is unchanged and is derived from sandboxList when an adapter only implements the new hook.

sandbar-sdk

Minor Changes

  • #118 22e06ed Thanks @pandemicsyn! - sandboxes.create({ env }) sets environment variables for every command, process and terminal in the sandbox, including after reopening; a per-call env overrides a name. Daytona, E2B and Vercel map it to their native create-time environment. Adapters opt in with supports.createEnv, reported as capabilities().createEnv; elsewhere (boxd) create({ env }) rejects with UnsupportedFeatureError before allocating anything. Values are never saved in recovery references or tokens, and never appear in telemetry or error messages.

  • #118 7fc61f8 Thanks @pandemicsyn! - Add client.images.get(), client.images.list() and image handles with inspect(), delete() and submitDelete(). images.build() results now include reference, an image resource reference whose ownership is verified-created only when the adapter proved the build created it. Adapters opt in with the imageInspect, imageList/imageListCoverage and imageDelete hooks, and capabilities().imageManagement reports what a connection supports; a missing hook rejects with UNSUPPORTED. Image deletion follows the snapshot deletion rules: scope checks, no deletion of borrowed images as a side effect, OUTCOME_UNKNOWN on an unconfirmed result and no replay.

  • #118 3a8c047 Thanks @pandemicsyn! - Add sandboxes.list({ cursor?, limit? }): a bounded page of sandboxes with id, state and a reference that sandboxes.get() reopens, plus coverage (provider-scope or sandbar-managed), matching snapshots.list() and volumes.list(). Adapters implement the optional sandboxList hook and return reference: null when 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 with verified-created references; boxd and Vercel list with unknown ownership. operations.inventory() is unchanged and is derived from sandboxList when an adapter only implements the new hook.

Patch Changes

@sandbar-sdk/daytona

Minor Changes

  • #118 22e06ed Thanks @pandemicsyn! - sandboxes.create({ env }) sets environment variables for every command, process and terminal in the sandbox, including after reopening; a per-call env overrides a name. Daytona, E2B and Vercel map it to their native create-time environment. Adapters opt in with supports.createEnv, reported as capabilities().createEnv; elsewhere (boxd) create({ env }) rejects with UnsupportedFeatureError before allocating anything. Values are never saved in recovery references or tokens, and never appear in telemetry or error messages.

  • #118 7fc61f8 Thanks @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 a reference with verified ownership when the build's own request created them.

  • #118 3a8c047 Thanks @pandemicsyn! - Add sandboxes.list({ cursor?, limit? }): a bounded page of sandboxes with id, state and a reference that sandboxes.get() reopens, plus coverage (provider-scope or sandbar-managed), matching snapshots.list() and volumes.list(). Adapters implement the optional sandboxList hook and return reference: null when 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 with verified-created references; boxd and Vercel list with unknown ownership. operations.inventory() is unchanged and is derived from sandboxList when an adapter only implements the new hook.

Patch Changes

@sandbar-sdk/e2b

Minor Changes

  • #118 22e06ed Thanks @pandemicsyn! - sandboxes.create({ env }) sets environment variables for every command, process and terminal in the sandbox, including after reopening; a per-call env overrides a name. Daytona, E2B and Vercel map it to their native create-time environment. Adapters opt in with supports.createEnv, reported as capabilities().createEnv; elsewhere (boxd) create({ env }) rejects with UnsupportedFeatureError before allocating anything. Values are never saved in recovery references or tokens, and never appear in telemetry or error messages.

  • #118 7fc61f8 Thanks @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 a reference with verified ownership when the build's own request created them.

  • #118 3a8c047 Thanks @pandemicsyn! - Add sandboxes.list({ cursor?, limit? }): a bounded page of sandboxes with id, `s...

Read more

v0.5.0: Merge pull request #117 from pandemicsyn/changeset-release/main

Choose a tag to compare

@github-actions github-actions released this 18 Oct 23:05
b2bb1f0

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 67bc9dd Thanks @pandemicsyn! - Add the experimental @sandbar-sdk/boat adapter 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 boat with BOAT_API_KEY and BOAT_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 67bc9dd Thanks @pandemicsyn! - Add the experimental @sandbar-sdk/boat adapter 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 boat with BOAT_API_KEY and BOAT_NETWORK=internet.

Patch Changes

  • Updated dependencies []:
    • @sandbar-sdk/adapter@0.5.0
    • sandbar-sdk@0.5.0