Installation
hyperlink-ts is published as hyperlink-ts. It builds on Effect, so you bring your own effect version as a peer dependency (the toolkit pins a range; you pick the exact release).
Pre-1.0 beta (0.9.0-beta, tracking Effects own beta). Its stable enough to build on, but shapes can still change between betas. Nothing is frozen until 1.0 (theres no @since yet).
Requirements
Node.js ≥ 20.19
Effect
^4.0.0-beta.98(peer dependency, installed alongside below)
Install
pnpm add hyperlink-ts effectThats enough for day one: define Hyperlink Services, use the included WorkPool / Daemon / Gate kinds, and listen with Node.http / Node.ws / Node.unix (see Managing Layers). No separate platform recipe for the common case. @effect/platform-node already ships as a dependency of hyperlink-ts.
Additional dependencies
Beyond effect, some entry points want extra peers. Install them only when you use that entry point. Nothing here is required for core Hyperlink work.
Other runtimes (Bun / Deno) need their platform HTTP package when you serve outside Node:
@effect/platform-bun@effect/platform-deno
Dashboards render with React:
| Using | Also install |
|---|---|
/web Web dashboard | react, react-dom, recharts, @tanstack/react-table |
/tui Terminal dashboard | react, ink |
/ui Shared dashboard core | pulled in by /web / /tui, no extra install if you only use those |
Install them the same way, for the full web dashboard:
pnpm add react react-dom recharts @tanstack/react-tableThe package surface
Each area is a tree-shakeable subpath under hyperlink-ts/*. Import only what you use:
/Hyperlink: build your own Hyperlink Service/WorkPool,/Daemon,/Gate,/ShardMap: included Hyperlink Services/Store: Soft journals (Store.Service,Daemon.store/WorkPool.store/ …)/DurableWorkPoolStore,/HistoryStore,/storage/sqlite: WorkPool durability + history backfill (SQL)/ui: shared dashboard core (data, routing, atoms) used by web and TUI/web,/tui,/cli: web dashboard, terminal dashboard, CLIhyperlink-ts: the barrel (everything under short names)
TypeScript
hyperlink-ts ships ESM with bundled types. Your tsconfig.json needs modern module resolution and strict mode, the same settings Effect itself wants:
{
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"target": "ES2022"
}
}("NodeNext" works too if youre not on a bundler.)
Editor setup
Two one-time additions make the whole experience better:
Effect Language Service, richer diagnostics, type extraction, and refactors. Install and add the plugin:
pnpm add -D @effect/language-service{
"compilerOptions": {
"plugins": [{ "name": "@effect/language-service" }]
}
}Defaults are enough to start. Ratchet individual rules to error as you adopt them. If you have a browser / React layer, give it its own tsconfig that turns Effect purity rules off for that path (globalDate, globalConsole, globalTimers, asyncFunction, newPromise, …), those primitives are correct in UI code, wrong in Effect-domain code.
Prettify TS, editor extension mylesmurphy.prettify-ts, so type hovers expand into readable shapes instead of a collapsed …. Nearly every type in hyperlink-ts reads better through it.
Next
Head to Core Concepts for the mental model, or jump straight into Creating a Hyperlink Service.