v0.15.0
First release of @rift-vs/rift and @rift-vs/rift-embedded cut from achird-labs/rift-node.
Everything below had accumulated as unreleased work in this repo; this is where it reaches npm.
Upgrading from 0.14.0
The published 0.14.0 line came from the old EtaCassiopeia/rift repo and is a different codebase — this release supersedes it. Both are ESM with identical entry points, so your imports are unchanged. What does change:
- Node ≥ 20 is now required (was ≥ 18).
- Zero runtime dependencies —
axiosis gone. - No
postinstalldownload. The engine binary is resolved on demand at first use (RIFT_BINARY_PATH→PATH→ version cache → download), never at install time, and never at all whenRIFT_OFFLINE/RIFT_SKIP_BINARY_DOWNLOADis set. - The
./testkit/vitest,./testkit/jestand./intercept-undicisubpaths are declared in the exports map but remain placeholder modules until those features land.
Highlights
- Typed DSL for imposters, stubs, predicates, responses, behaviors, faults, proxies, scripts and scenarios — alongside the permanent Mountebank-compatible
create()surface. Neither is deprecated; adopt incrementally. - Three transports —
rift.embedded()(in-process, via@rift-vs/rift-embedded),rift.spawn()(child process),rift.connect()(existing admin port). - Verification —
imposter.verify(match, times(n))with WireMock-style near-miss diffs, plusrecorded(), count matchers, and a polling request iterator. datadirpersistence on the compatcreate(), at parity withrift.spawn({ datadir }).- Fail-loud on
impostersRepository/redis— these were previously accepted-and-ignored, silently degrading to a single-process in-memory server. They now throwUnsupportedCreateOptionErrornaming the supported alternatives. - Engine pin defaults to v0.15.0, which fixes the Mountebank-parity 400 on numeric/boolean HTTP header values.
Full detail in CHANGELOG.md · migration guide in docs/migration.md.