Lightweight TypeScript client for the Hew Playground API.
@hew-lang/playground-client is published to GitHub Packages, the canonical
registry for the @hew-lang scope. Point the scope at GitHub Packages in an
.npmrc (GitHub Packages requires an authenticated token — a read:packages
PAT — even for installs):
@hew-lang:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}npm install @hew-lang/playground-clientA convenience mirror is also published to npmjs as needed, for consumers who prefer it:
npm install @hew-lang/playground-client --@hew-lang:registry=https://registry.npmjs.org/import { HewPlaygroundClient } from '@hew-lang/playground-client';
const client = new HewPlaygroundClient('https://livecode-v1.hew.sh');
const result = await client.run('fn main() { println("hello"); }');
console.log(result.stdout);- Works in modern browsers.
- Works in Node.js when
fetchis available globally. - For older runtimes or custom transport, pass your own
fetchimplementation in the client options.
import { HewPlaygroundClient } from '@hew-lang/playground-client';
const client = new HewPlaygroundClient({
baseUrl: 'https://livecode-v1.hew.sh',
headers: {
Authorization: 'Bearer <token>',
},
});Every run() sends compiler_version in the request body. The client
defaults to '0.5.0'; override it client-wide or per request, or pass
null to omit the field and let the server pick its default version:
// Pin a version client-wide
const pinned = new HewPlaygroundClient({
baseUrl: 'https://livecode-v1.hew.sh',
compilerVersion: '0.4.0',
});
// Let the server decide (tracks the server's default as it advances)
const tracking = new HewPlaygroundClient({
baseUrl: 'https://livecode-v1.hew.sh',
compilerVersion: null,
});
// Per-request override
await pinned.run({ source: 'fn main() {}', compiler_version: '0.5.0' });Examples returned by listExamples() carry a capabilities object
describing their execution tier (browser is always 'analysis-only';
wasi is 'runnable' or 'unsupported').
| Option | Type | Description |
|---|---|---|
baseUrl |
string |
Base URL of the playground server. |
fetch |
PlaygroundFetch |
Optional custom fetch implementation. |
headers |
PlaygroundHeadersInit |
Optional default headers added to every request. |
compilerVersion |
string | null |
Default compiler_version sent on every run(). Defaults to '0.5.0'; pass null to omit it and use the server default. |
The client mirrors the HTTP API with typed methods:
| Method | Description |
|---|---|
health() |
Returns the plain-text health response. |
run(sourceOrRequest) |
Compiles and runs Hew source code. |
listVersions() |
Lists available compiler versions and the server default. |
listExamples() |
Lists built-in example programs. |
createShare(sourceOrRequest) |
Stores source code and returns a share ID. |
getShare(id) |
Fetches a previously shared snippet. |
The package exports these request/response types:
RunRequest,RunResponseExample,ExampleCapabilitiesShareRequest,ShareResponse,ShareGetResponseVersionsResponseErrorResponsePlaygroundClientOptionsPlaygroundApiError
It also exports the createHewPlaygroundClient() factory and the
isPlaygroundApiError() type guard.
Non-2xx HTTP responses throw PlaygroundApiError.
import { HewPlaygroundClient, PlaygroundApiError } from '@hew-lang/playground-client';
const client = new HewPlaygroundClient('https://livecode-v1.hew.sh');
try {
const share = await client.createShare('fn main() { println(1); }');
console.log(share.id);
} catch (error) {
if (error instanceof PlaygroundApiError) {
console.error(error.status, error.body);
}
}run() has one important API-level nuance: compile failures still come back as a normal JSON RunResponse, so check success, compile_error, and exit_code rather than assuming every unsuccessful program run throws.
openapi.json— machine-readable HTTP API specification.hew-playground-client.ts— canonical single-file SDK source if you want to vendor the client directly.
For a local checkout of this repository, you can swap the import path to ./hew-playground-client.
GitHub Packages is canonical; npmjs is an optional mirror published in the same run.
- Bump
versioninpackage.jsonand update the README/API docs. - Run
npm run test:sdklocally. - Commit and push to
main. - Run the Publish workflow (
workflow_dispatch) withdry_run: trueto validate, thendry_run: falseto publish to GitHub Packages (and, whenmirror_npmis enabled, mirror to npmjs in the same run). - Tag the release —
git tag vX.Y.Z && git push --tags— to generate the GitHub Release notes.
MIT License. Copyright (c) 2026 Stephen Olesen.