@solarisdk/daytona-compat
v0.2.13
Published
Daytona-compatible API on top of Solari Sandbox: change the import, keep your sandbox code. Not affiliated with Daytona.
Maintainers
Readme
@solarisdk/daytona-compat
A Daytona-compatible API on top of Solari Sandbox. Change the import, keep your sandbox code.
Not affiliated with, endorsed by, or sponsored by Daytona. "Daytona" is the name of Daytona's product; it appears here only to describe API compatibility. This package was written from Daytona's public documentation and contains no Daytona source code, see NOTICE. Do not look for it under
@daytona/*.
// before: import { Daytona } from '@daytona/sdk';
import { Daytona } from '@solarisdk/daytona-compat';
const daytona = new Daytona({ apiKey: process.env.SOLARI_API_KEY });
const sandbox = await daytona.create({ labels: { project: 'demo' } });
const result = await sandbox.process.executeCommand('echo "Hello, World!"');
console.log(result.result, result.exitCode);
await sandbox.delete();Exports: everything Daytona's SDK exports under the same name (Daytona, Sandbox, Image, the service classes, the enums such as
CodeLanguage and SandboxState, the whole error hierarchy, and the types), plus SolariCompatUnsupported. A name for a feature Solari does not
have still exists and throws SolariCompatUnsupported when used.
Requirements
Node 18+. The type declarations need TypeScript 5.0 or newer.
Configuration
| | Order |
|---|---|
| API key | apiKey option, SOLARI_API_KEY, DAYTONA_API_KEY: only an slr_… Solari key is ever used. A non-slr_ value (for example a real Daytona key) is skipped with a warning (the key is never printed or sent); with no Solari key the constructor throws |
| API URL | apiUrl option, SOLARI_BASE_URL, DAYTONA_API_URL (only if it points at a Solari API host or loopback; otherwise ignored with a warning), default https://api.getsolari.com |
A Daytona key does not work here: use a Solari API key. target throws (Solari has one region); an ambient DAYTONA_TARGET is ignored with a
warning (Solari has no regions). jwtToken / organizationId are not supported. serverUrl is the deprecated name of apiUrl, and
requestTimeoutMs bounds each HTTP request. Any other option throws instead of being dropped.
What works, what does not
COMPAT.md is the support matrix and the list of differences. Anything Solari cannot do raises
SolariCompatUnsupported (a DaytonaError) naming the feature; nothing is silently ignored. In short:
- Works: create / get / list (with filters and sorting) / start / stop / delete / fork, the OS
user, labels, auto-stop / auto-pause / auto-delete, command execution, sessions (with persistentcd/export, async commands, log streaming, stdin), code run, the Python code interpreter, the file-system calls (including streamed uploads and downloads), git (through the guest's git CLI), snapshots (a sandbox's own, and named images), theImagebuilder, volumes,networkBlockAll, preview links. - Not supported (throws): PTY sessions, interpreter contexts listing / deleting, computer use, LSP, SSH access, network allow-lists, secrets, GPU, regions, warm pools, archive / recover / resize.
The sibling Python package is sdk/python-daytona-compat (solari-daytona-compat, import solari_daytona).
Tests
npm test # offline unit tests (a fake gateway and a fake guest)