@solarisdk/runloop-compat
v0.2.14
Published
Runloop-compatible API on top of Solari Sandbox: change the import, keep your devbox code. Not affiliated with Runloop.
Maintainers
Readme
@solarisdk/runloop-compat
A Runloop-compatible API on top of Solari Sandbox. Change the import, keep your devbox code.
Not affiliated with, endorsed by, or sponsored by Runloop. "Runloop" and "Devbox" are Runloop's product names; they appear here only to describe API compatibility. Type definitions are derived from
@runloop/api-client2.0.0 (MIT), see NOTICE. Do not look for this package under@runloop/*.
// before: import { RunloopSDK } from '@runloop/api-client';
import { RunloopSDK } from '@solarisdk/runloop-compat';
const sdk = new RunloopSDK({ bearerToken: process.env.SOLARI_API_KEY });
const devbox = await sdk.devbox.create();
const result = await devbox.cmd.exec('echo "Hello, World!"');
console.log(await result.stdout(), result.exitCode);
await devbox.shutdown();Exports: Runloop (default and named; the REST layer, client.devboxes.*), RunloopSDK (the object layer), Devbox,
Snapshot, Execution, ExecutionResult, the Runloop error classes (RunloopError, APIError, BadRequestError,
AuthenticationError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError,
RateLimitError, InternalServerError, APIConnectionError, APITimeoutError), SolariCompatUnsupported, and the types.
Requirements
Node 18+. The type declarations need TypeScript 5.0 or newer (5.7 or newer unless your project sets skipLibCheck: true: the declarations use Uint8Array<ArrayBufferLike>).
Configuration
| | Order |
|---|---|
| API key | bearerToken / apiKey option, SOLARI_API_KEY, RUNLOOP_API_KEY: only an slr_… Solari key is ever used. A non-slr_ value (for example a real Runloop key) is skipped with a warning (the key is never printed or sent); with no Solari key the constructor throws |
| Base URL | baseURL option, SOLARI_BASE_URL, RUNLOOP_BASE_URL (only if it points at a Solari API host or loopback; otherwise ignored with a warning), default https://api.getsolari.com |
A Runloop key does not work here: use a Solari API key.
What works, what does not
COMPAT.md is the support matrix. Anything Solari cannot do raises SolariCompatUnsupported
(an APIError) naming the feature; nothing is silently ignored. The sibling Python package is
sdk/python-runloop-compat and shares the same mapping rules.
Tests
npm test # offline unit tests (a fake gateway)A live suite (maintainers' CI, not shipped in this package) runs Runloop's own TypeScript README snippets with only the import swapped.
