# What changed in @earendil-works/chord

> 88 changes in @earendil-works/chord 1 from its official release notes, upgrade guides and advisories: 41 breaking, 40 new APIs and options. Each one cited. Sources checked 2026-11-01. HTML: https://unstale.sh/npm/@earendil-works/chord/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @earendil-works/chord 1

### Breaking changes

- Custom Context implementations must provide a non-optional telemetry parent; use NOOP_TELEMETRY_CONTEXT when telemetry is disabled. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Accepts spans instead of adapters and derives a context without changing values or cancellation. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Epoch fields are renamed codeVersion across contexts, root options, hosts, frames, and reload reports. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Host creation is generic over the application's principal type and now requires self as the host's own principal. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- ctx.get is asynchronous and resolves when the reference is live and its variant state has its first snapshot. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Roots running on a retired code version are aborted with reason superseded and given up to one second to stop before resources used only by that version close. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Callers no longer select a remote host with GetOptions.at; placement is declared by the remote contract. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Setting state to false creates a method-only reference that does not subscribe to state unless another reference wants it. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- host.get is asynchronous and resolves when the reference is live and its variant state has its first snapshot. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- upstream is now an object containing link and principal plus LinkOptions, replacing a bare link and upstreamOptions. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Factory return values are now named ImplementationOf<C> instead of BehaviorOf<C>. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Calls through remote references now reject contexts from another host or objects not created by Chord. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Replaces awaitEager for waiting on host-lifetime objects. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- MembersOf is removed; remote reference variants are discriminated by variant. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Cells can migrate their state from an older version; a raised version migrates only that cell. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- The new @earendil-works/chord/output entry point exports OutputBuffer for retaining a head or tail window of a stream. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Chord no longer provides a Principal type or invents principals; applications supply their principal type and values. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- The output entry point exports Progress to pace commits of a changing value by size. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- The wire protocol changes incompatibly across this release; peers with different or absent protocol versions cannot communicate. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- References returned by get are now typed Ref<C> instead of Handle<C>. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Reference status is now named RefStatus instead of HandleStatus. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Remote contracts must declare object placement with hostNamed or hostFamily; callers no longer specify a host with GetOptions.at. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Resource options are now named ResourceDeclaration instead of ResourceSpec. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Routes must now supply a principal instead of receiving a default host principal. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Derivations no longer take a name. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Listeners are declared by name using self.on. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Resources are declared by name with self.resource; the resource revision field is now version. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- State declarations are now named calls and return the cell; cell options include version and migrate. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Tasks no longer take a name. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- serve now uses lifetime instead of eager, with referenced as the default and host lifetime for one object per host. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- State version configuration is removed from ServeOptions; versions and migrations now belong to individual cells. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- serve now takes ServeOptionsFor<C>, with options typed according to the contract. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Remote object variants use variant in factory results, references, shapes, and shape frames; kind is no longer reserved. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Removes the `./bundler` export. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- The old `defineFacet` is replaced by the typed host runtime's `defineFacet`. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Removes `defineService` and the listed old runtime APIs, helpers, and types. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Removes this package, which served only the old runtime; it is no longer released. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Removes this package, which served only the old runtime; it is no longer released. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Removes this package, which served only the old runtime; it is no longer released. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Removes facet bundle loaders and changes `./node` to export the child host manager and `nodeLoader`. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Replaces the facet and service runtime with typed hosts, runtime contracts described with TypeBox schemas, handles, JSON frames, and hot reload of plugins. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)

### New APIs and options

- Adds portable SQLite interfaces, an atomic migration runner, and schema-prefix validation. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Adds a Cloudflare Durable Object driver for the portable SQLite interfaces. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Adds a Node driver for the portable SQLite interfaces. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Adds portable SQLite telemetry recording with bounded settled-span queues, ten-second metric aggregates, periodic flushes, and retention cleanup. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Provides a no-op telemetry span for contexts when telemetry is disabled. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Accepts an optional ProgressClock to pace commits, defaulting to Date.now and setTimeout. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Starts a child span and passes its derived context to the callback. (1.4.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#140---2026-10-21)
- Limits concurrent calls from a peer; additional calls receive unavailable with reason too_many_calls while the link remains open. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- boundOutput is newly exported from the output entry point. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- characterEnd is newly exported from the output entry point. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- ConnectOptions is newly exported for principal-aware connections. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- EventOf is newly exported. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- FacetApi exposes a signal that aborts when that facet run is no longer installed; manually constructed FacetApi values must pass it through. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- host.hold is the synchronous reference-acquisition form for UI runtimes and may return a loading reference. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- HostFamily is newly exported for host-family placement typing. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- HostNamed is newly exported for named-host placement typing. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- linger keeps remote bindings held and hydrated after their last reference is released, allowing quick reacquisition. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Bounds how long a reload waits for aborted tasks before starting replacements; the default is 5000 ms. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- inflateMessage converts a packed WebSocket message back into a text frame. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Lifetime is newly exported. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Reports protocol-version mismatches between peers. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Caps waiting flow-control operations per link; excess oldest streams become resets. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Sets the unacknowledged frame window for end-to-end flow control; state frames wait and coalesce while calls, results, and control frames are not held back. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Placement is exported as a type for remote contracts. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- PlacementFor is newly exported for remote contract placement typing. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- PrincipalPattern is newly exported. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- sanitizeOutput is newly exported from the output entry point. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- A cell may initialize its first value from an async source after resources open and references are live; failures prevent activation or reload. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- StateInit is newly exported for cells initialized from a source. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- StateOptions is newly exported. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- utf8ByteLength is newly exported from the output entry point. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- ValueOf is newly exported. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Large JSON payloads can be packed; WebSocketLinkOptions controls sending and accepting packed frames. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Introduces WebSocket acceptance for the typed host runtime. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Remains unchanged and also exports the `Context` and `ContextKey` types. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Introduces host creation for the typed host runtime. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Introduces registry definition for the typed host runtime. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Introduces a Node IPC link for exchanging JSON frames between hosts. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Introduces a memory link for exchanging JSON frames between hosts. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
- Introduces a WebSocket link for exchanging JSON frames between hosts. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)

### Performance

- Appending no longer requires walking the whole array; `applyImmutable` builds an appended array in one copy instead of two. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)

### Behavior and default changes

- Link.send returns the encoded frame size when the transport knows it; flow control counts this size, while links returning nothing are not windowed. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Methods without arguments are called as ref.name(ctx?) and implemented with a context-only function; omitted result means the method is void. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- A reload starts replacement tasks only after aborted tasks finish or the stop deadline is reached. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)

### Fixes and other changes

- Registers every facet directory before importing any facet, preventing duplicate module copies when facets import one another's files. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Avoids socket-path length failures on macOS and BSD by placing the lock socket in a private per-user directory. (1.3.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#130---2026-10-15)
- Keeps its name on the root export, alongside the listed JSON, context, and replicated-state names. (1.2.0) — [release notes](https://github.com/earendil-works/pi/blob/8959ad6e6845933dd01dbaa96929243d68bc4d48/packages/chord/CHANGELOG.md#120---2026-10-12)
