npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@daohoangson/computesdk-boat

v1.0.1

Published

Boat provider for ComputeSDK - Ubuntu cloud sandboxes with streaming, named snapshots, signed file transfers, and preview URLs

Readme

@daohoangson/computesdk-boat

Interim build of the ComputeSDK Boat provider, published ahead of the upstream @computesdk/boat package. The API is the same; switch the import to @computesdk/boat once it is released.

Boat provider for ComputeSDK: Ubuntu cloud sandboxes with streaming commands, signed file transfers, named snapshots and templates, and HTTPS preview URLs.

Installation

npm install computesdk @computesdk/provider @daohoangson/computesdk-boat

Setup

Create an API key in the Boat dashboard and export it:

export BOAT_API_KEY=boat_...
# Optional: custom API endpoint (defaults to https://boat.dev/api/v1)
export BOAT_API_BASE=https://boat.dev/api/v1

Usage

import { createCompute } from '@computesdk/provider';
import { boat } from '@daohoangson/computesdk-boat';

const compute = createCompute({ provider: boat({}) });
const sandbox = await compute.instances.create({ type: 'small' });

try {
  const result = await sandbox.runCommand('echo "Hello from Boat"');
  console.log(result.stdout);
  await sandbox.filesystem.writeFile('/tmp/hello.txt', 'Hello from Boat');
  console.log(await sandbox.filesystem.readFile('/tmp/hello.txt'));
} finally {
  await sandbox.destroy();
}

Configuration

| Option | Meaning | | --- | --- | | apiKey | API key; falls back to BOAT_API_KEY | | baseURL | API URL; falls back to BOAT_API_BASE, then https://boat.dev/api/v1 | | timeout | Default sandbox lifetime in milliseconds; omitted uses Boat's one-hour default | | readyTimeout | Provisioning wait deadline in milliseconds; defaults to 300000 | | snapshotTimeout | Named snapshot save deadline in milliseconds; defaults to 600000 | | preview | Default preview settings: public, localhost, and title | | createOptions | Native Boat creation defaults, such as type, environment, noEnv, from, org, and ttlSeconds |

Features

  • Sandbox create, get, list, and permanent destroy
  • Foreground commands with reconnecting output streams, optional timeouts, and remote cleanup; background commands
  • Interactive processes through the shared daemon API
  • Filesystem access, with signed binary transfers under /home/user and /tmp (readBoatFile, writeBoatFile)
  • Named snapshots and templates through provider.snapshot and provider.template
  • Token-protected HTTPS preview URLs, with typed controls through getBoatUrl

Limitations

  • Fixed machine types: CPU, memory, disk, GPU, image, region, and arbitrary metadata options are rejected
  • Preview URLs are HTTPS only
  • Snapshots keep disk changes, not process memory; /tmp is excluded
  • Setup scripts run in the background, so readiness does not mean setup has finished

See the Boat provider guide for details and examples.

Development

For local live tests, put BOAT_API_KEY=boat_... in the repository root .env file, which Git ignores. Tests use the live Boat API whenever BOAT_API_KEY is present.

# Unit tests and real-SDK/local-HTTP transport tests; no cloud resources.
pnpm --filter @daohoangson/computesdk-boat test:unit

# Shared conformance, shared CRUD, and Boat-specific integration tests.
# BOAT_API_KEY in the environment or root .env enables live calls.
pnpm --filter @daohoangson/computesdk-boat test:integration

# All tests (also live when credentials are available).
pnpm --filter @daohoangson/computesdk-boat test
pnpm --filter @daohoangson/computesdk-boat typecheck
pnpm --filter @daohoangson/computesdk-boat lint

index.test.ts uses runProviderTestSuite and crud.test.ts uses runProviderCrudTest. The shared contract checks commands, filesystem, streaming, and interactive processes; its baseline tests use shared mocks without credentials. CRUD and Boat-specific integration tests skip without credentials. No separate live opt-in flag is required.

unit.test.ts uses SDK mocks; transport.test.ts uses the real Boat SDK against a local HTTP server. The separate integration.test.ts covers signed large-text/binary transfers, protected/public localhost preview routing, and named snapshot restore. Test files run sequentially to avoid concurrent account-quota pressure. The shared conformance entry point also spaces sandbox starts to stay below Boat's standard 12-starts-per-minute limit; accounts with lower limits may need slower pacing.

Credentialed runs create multiple small billable sandboxes. Shared suite hooks clean up their instances; the Boat-specific test attempts cleanup of both sandboxes and its named snapshot in a finally block. To run every suite without cloud access even when root .env contains a key, use BOAT_API_KEY= pnpm --filter @daohoangson/computesdk-boat test.

License

MIT