Release Notes

Updates and improvements to Sprites and our SDKs.

Sprites API

New: Custom sprite images

You can now specify a custom Docker image when upgrading a sprite. This feature is available behind a feature flag — contact support to enable it for your organization.

New: Redesigned CLI authentication flow

The CLI login experience has been redesigned with an updated look and feel.

Improved: Faster sprite URL requests

Sprite URL requests no longer require a database roundtrip on every call. Frequently accessed data is now cached in memory, reducing latency.

Improved: Deployment documentation expanded

Deployment documentation for the Sprites API has been expanded based on recent operational learnings.

Fixed: MCP tools now correctly accept path parameters

MCP tools like service_get were returning 404 errors because path parameters were missing from the tool schema. All affected tools now include the correct parameters.

Fixed: Service API parameter naming conflict resolved

The service path parameter was renamed to avoid a collision with the sprite name parameter, ensuring MCP service tools correctly identify both the sprite and the service.

Fixed: Sprite version now updates correctly after upgrade

Sprite records were not reflecting the new version after an upgrade completed. The version is now always persisted correctly, even after restarts mid-upgrade.

Sprites API

Improved: Clearer MCP proxy error logs

MCP proxy failures now include inline details (sprite name, tool name, status, error reason) for easier debugging.

Fixed: Token restrictions enforced for MCP

Restricted token policies (name prefix and max sprites) are now properly enforced when creating sprites through MCP, matching the REST API behavior.

Fixed: Login errors resolved

Fixed an issue that was causing 500 errors during login.

Sprites Go SDK

Improved: TTY sessions report correct exit codes

Fixed an issue where TTY sessions always reported exit code -1 instead of the actual exit code.

PR #13

Fixed: WebSocket deadlocks in TTY mode

Fixed deadlocks in TTY exec by decoupling stdin reads from WebSocket writes using a buffered channel pipeline.

PR #11

Sprites JS SDK

Improved: Control mode defaults to off

Control mode now defaults to off and gracefully falls back to direct WebSocket when the control endpoint isn’t available, preventing crashes on older sprites.

PR #6

Sprites Python SDK

Improved: Control mode defaults to off

Control mode now defaults to off and gracefully falls back to direct WebSocket when the control endpoint isn’t available, preventing crashes on older sprites.

PR #15

Sprites API

New: Browser-based sprite authentication

Sprites now support authentication through a browser-based flow, with clear messaging when you’re signed into the wrong organization.

Fixed: OAuth consent flow bug

Fixed a variable shadowing bug in the MCP OAuth consent flow that was preventing authorization codes from being created.

Sprites Go SDK

New: Control WebSocket support

Added persistent multiplexed WebSocket connections for more efficient command execution and filesystem operations, with connection pooling and automatic fallback to direct mode.

PR #9

New: Debug connection mode

Added ConnectionMode() method to help debug whether control or direct WebSocket mode is being used.

PR #8

Sprites JS SDK

New: Control connection support

Added multiplexed WebSocket connections for more efficient command execution, with connection pooling (100 max) and automatic fallback when the control endpoint is unavailable.

PR #4

Sprites Python SDK

New: Control connection support

Added multiplexed WebSocket connections for more efficient command execution, with connection pooling and automatic fallback when the control endpoint is unavailable.

PR #13

Sprites API

New: Email support for paid plans

Hero, Champion, and Legend plans now include standard email support. Epic and Mythic plans include premium email support with faster response times.

New: MCP OAuth consent screen

When connecting MCP clients, you now see a consent screen where you can configure restrictions like sprite name prefixes and maximum sprite count before granting access.

New: Dynamic MCP tool generation

MCP tools are now generated dynamically based on your sprites, giving AI assistants access to your specific sprite capabilities.

Improved: More reliable MCP tool routing

MCP tool calls now use a dedicated proxy for more reliable routing to sprite machines.

Sprites API

New: Restricted API tokens

You can now create API tokens with restrictions like maximum sprite count, required name prefixes, and label-based access control. Tokens can also have expiration dates.

Improved: Separate runtime and environment upgrades

Auto-upgrades now only update the Sprites runtime without changing your environment (Ubuntu base, languages). Use upgrade_type: "all" when you want to update everything.

Improved: Faster cold starts for web requests

Web requests to stopped sprites now automatically start the machine and wait up to 10 seconds before responding, rather than failing immediately.

Improved: Simpler WebSocket channel monitoring

WebSocket channel tracking now uses a simpler architecture with built-in PID monitoring, improving reliability when connections drop.

Improved: Rate limit errors include upgrade link

When you hit rate limits, error responses now include a direct link to upgrade your plan.

Fixed: Litestream restore safety

Fixed an edge case where Litestream could restore from a stale database backup.

Sprites Go SDK

Improved: Structured API errors

WebSocket connection failures now return structured APIError objects with error codes, limits, and upgrade URLs instead of raw JSON strings.

PR #5

Sprites Python SDK

Improved: Structured API errors

API errors now include structured fields like upgrade_url, making it easier to handle rate limits and guide users to upgrade their plans.

PR #12

Sprites JS SDK

Improved: Structured API errors

The APIError class now includes all structured fields including upgradeUrl, matching the improvements in the Go and Python SDKs.

PR #2