Skip to main content
Box was renamed Boat on September 15, 2026. Same product, same account, same machines, same data. Two words replaced one:
  • Boat is the product: the site, the CLI, the API, your account and plan.
  • a sandbox is what you create in it: what a “box” used to be. Paths, keys, events and error codes say sandbox.
Existing Box endpoints, CLI integrations, SDK packages, environment variables and hosted URLs remain compatible. The retirement policy is not yet settled. The advertised Sunset header is a migration warning, not an implemented shutdown or a promise of permanent support.

Timeline

The rename in one table

Not changed: ids (bx_...), snapshot ids, the X-Ascii-* headers, Idempotency-Key, sandboxId on API keys (it already said sandbox), and every piece of your data.

1. CLI

Your login carries over: boat reads the config box wrote. Then:
  • Replace box with boat in scripts and CI. Subcommands are unchanged: boat new, boat list, boat ssh.
  • Rename BOX_* variables to BOAT_*. An unset BOAT_* currently falls back to its BOX_* twin with a one-line notice on stderr.
  • Rename .boxignore files to .boatignore (both are currently read; .boatignore wins when a directory has both).
  • boat api-key create --box bx_1 is now --sandbox bx_1.
The final compatibility release of box prints a migration reminder. Move to boat for subsequent updates; legacy binaries are not disabled by a date check.

2. SDKs

Then in your code:
  • the import: ascii_box_sdkboat_sdk, @asciidev/box-sdk@boatdev/sdk
  • the base URL: https://ascii.dev/api/box/v1https://boat.dev/api/v1
  • the client class keeps its product name: BoxApiBoatApi (ascii_box_sdk.api.box_apiboat_sdk.api.boat_api)
  • request and response types say sandbox: CreateBoxRequestCreateSandboxRequest, BoxSandbox, boxIdsandboxId, .box.sandbox, .boxes.sandboxes, deleteBoxdeleteSandbox
  • the helpers keep their names: Python wait_until_ready, wait_until_idle, wait_for_desktop, wait_for_prompt, wait_for_prompt_done, stream_events, stream_prompt, stop_and_remove, read_text, write_text, exec_command; TypeScript waitUntilReady, waitUntilIdle, waitForDesktop, waitForPrompt, waitForPromptDone, streamEvents, streamPrompt, stopAndRemove, readText, writeText, execCommand
A whole-word search-and-replace of box/Box/boxes/Boxessandbox/Sandbox/sandboxes/Sandboxes covers the types and keys; the package import and BoxApiBoatApi are the two by hand.

3. Raw HTTP

Responses come back in the new vocabulary: sandbox / sandboxes / sandboxId, type: "sandbox.created", code: "sandbox_not_found". Request bodies use the new keys too (passSandboxCredentials, sourceSandboxId). A request to /api/box/* currently answers in box vocabulary and carries:
If your client logs response headers, grep for Sunset to find the calls you have not moved yet.

4. Webhooks

Webhooks you created before the rename keep delivering box.* events with box-spelled payloads. To move one, create it again through the Boat API (or boat webhook create) and delete the old one; the new one delivers sandbox.* events and X-Ascii-Event: sandbox.ready. Signatures, headers and retries are unchanged.

5. Hosted URLs

Every hosted route answers under both https://<label>.on.ascii.dev and https://<label>.on.boat.dev, with the same _token. Update the links you have published or embedded to the on.boat.dev form; the retirement policy for the on.ascii.dev form remains unresolved.

6. Inside a sandbox

The boat CLI is on the PATH of every sandbox, and box still resolves to it. BOAT_ID, BOAT_CURRENT_ID and BOAT_CLI_* are exported next to their BOX_* twins. Agent skills reference the boat skill; a box skill directory is removed on the next start.

Am I done?

  • No Sunset header in your API client’s logs.
  • No box binary invoked by your scripts (the reminder line has stopped).
  • pip show ascii-box-sdk / npm ls @asciidev/box-sdk are empty.
  • Webhooks listed by GET /api/v1/webhooks show sandbox.* events.
  • Published links say on.boat.dev.

Appendix: every renamed name

Generated from the API specifications and the CLI source (backend/src/api/boat/inventory.ts), so this is the whole list, not a sample. Anything not in these tables did not change. API paths JSON keys (requests and responses) OpenAPI schema / SDK type names OpenAPI operation ids / SDK method names Envelope type values Error code values Webhook events CLI environment variables In-sandbox environment variables (both spellings are exported inside every sandbox) HTTP headers and query parameters CLI flags Files and directories

Retirement policy

The current implementation preserves legacy API routes, binary and environment aliases, and hosted addresses. The October 31 header does not implement a 410 Gone, disable installed clients, or remove DNS. The scope and timing of any future retirement still need an explicit policy decision; this guide does not promise either a shutdown on that date or permanent support. Questions: support@ascii.dev.