Repository navigation
Releases: endojs/endo
Release list
@endo/eslint-plugin@2.6.0
Minor Changes
-
#3263
c423ed3Thanks @kriskowal! - Theinternalpreset now enforcesunicorn/numeric-separators-stylewith
default groupings: decimal numbers of five or more digits must use underscore
separators every three digits, and hexadecimal, binary, and octal literals must
use the rule's conventional group lengths.
Consumers ofplugin:@endo/internalwill see lint errors on numeric literals
that violate the rule;eslint --fixrewrites them automatically.
Sites extending the preset must addeslint-plugin-unicornto their devDeps. -
#3277
da632a2Thanks @kriskowal! - The@endo/harden-exportsrule now skips named exports whose initializer is
a Pattern maker call of the formM.something(...).
Pattern makers return values that are already hardened, so a follow-up
harden(name)after their export is redundant noise.A new companion rule,
@endo/no-harden-pattern-maker, surfaces existing
sites where code over-hardens a Pattern maker result.
The rule fires on bothharden(M.string())and the indirect form
const x = M.string(); harden(x);, and is included in the recommended
configuration as a warning so existing code doesn't break loudly while
the redundant calls are cleaned up.
Patch Changes
- #3292
62d1b0aThanks @turadg! - Declare@typescript-eslint/*andtypescript-eslintas caret ranges
(^8.39.1) rather than exact pins, so consumers can dedupe them against
their own typescript-eslint versions instead of being forced onto a
single release. Also drop the redundantparserOptions.projectfrom the
internal config: typescript-eslint 8.60 errors whenprojectis set
alongsideprojectService, which now supplies the type-aware program.
@endo/compartment-mapper@2.3.0
Minor Changes
-
#2422
fe6be07Thanks @kriskowal! - Add support for host module exits in bundled compartments.sesexports a newStrictModuleDescriptortype that consists only of the
NamespaceModuleDescriptorandSourceModuleDescriptorshapes mutually
supported by SES and XS.compartment-mapperlets arbitrary module descriptors pass through
importHookwhen no policy is in effect for that edge (the
policy-enforcement runtime was previously limited to virtual module sources).
It also implicitly treats any module specifier with a URL-scheme prefix
(likenode:fs) as an exit module when bundling, removing the need for an
additional bundler flag in the common case.import-bundlethreads theimportHookoption through to the underlying
compartment so that bundled applications can route exits to host-provided
implementations at import time.
Host-provided modules must be hardened and pure to avoid being a
side-channel or man-in-the-middle attack surface between guests.
Patch Changes
@endo/chacha12@1.0.0
Major Changes
-
#3232
3dee3aaThanks @kriskowal! - Add@endo/random: a source-agnostic library of random sampling functions (random,randomInt, plus the underlyingrandomUint8/randomUint16/randomUint24/randomUint32/randomUint53readers).
Each function accepts aRandomSource, which is simply a function(out: Uint8Array) => voidmatching the shape ofcrypto.getRandomValues(minus the return value).
Names follow the TC39 proposal-random-functions translationRandom.method->randomMethod.
Each sampler is its own module so consumers can import only what they use:import { random } from '@endo/random/random.js'; import { randomInt } from '@endo/random/int.js';
The package also ships
@endo/random/seeds.js, exporting the canonicalbobsCoffee3232-byte seed shared across Endo deterministic fuzz suites.Add
@endo/chacha12: a pure-JavaScript ChaCha12 keystream.
The factorymakeChaCha12(key)returns aChaCha12Generatorrecord{ next, getState, clone, fillRandomBytes }.
ThefillRandomBytesmethod has the shape(out: Uint8Array) => void, conforming to@endo/random'sRandomSourceand tocrypto.getRandomValues-style ergonomics; it can be passed directly to the samplers.
The remaining methods expose the keystream's internal state (snapshot viagetState, independent copy viaclone, signed-int32 pull vianext) so the generator satisfies thepure-randv8RandomGeneratorinterface structurally and can be used directly as afast-checkv4randomTypeparameter.
A companionmakeChaCha12FromState(state)reconstructs a generator from a snapshot for deterministic resumption.The keystream is cross-checked against three published ChaCha12 test vectors from
draft-strombergson-chacha-test-vectors-01(TC1, TC4, TC8).ChaCha12 is the 12-round variant of Daniel J. Bernstein's ChaCha family.
The block function is identical to ChaCha20 modulo the round count (6 double-rounds vs 10), so the implementation, API, and harden discipline mirror the sibling 20-round implementation.
ChaCha12 trades cryptographic margin for throughput; for deterministic test fixtures, property-based testing, and fuzzing the extra speed is generally the right tradeoff.
@endo/chacha12-fast-check-test@0.1.1
Patch Changes
- Updated dependencies [
3dee3aa]:- @endo/chacha12@1.0.0
@endo/bundle-source@4.3.2
ses@2.1.0
Minor Changes
- #3284
f2aa55aThanks @boneskull! - AllowsMap.prototype.getOrInsert,Map.prototype.getOrInsertComputed,WeakMap.prototype.getOrInsertandWeakMap.prototype.getOrInsertComputed.
Patch Changes
@endo/syrup-frame@0.1.1
Patch Changes
- #3256
38fe678Thanks @kriskowal! - - New package@endo/syrup-frame: a sibling of@endo/netstringthat
drops the trailing,separator, so each framed payload on the wire
is literally a Syrup byte-string record (<length>:<payload>).- Provides
makeSyrupReaderandmakeSyrupWriterwith the
same shape as the netstring equivalents, including thechunked
zero-copy writer mode. - Intended for testing interoperability with the OCapN
TCP-for-testing protocol, which has moved to adopt this framing.
The framing is among the protocols under consideration in the
OCapN pre-standards group at time of writing; the 2025-12-09 OCapN
plenary recorded the consensus that the TCP-for-testing netlayer
should carry messages as length-prefixed Syrup byte strings
(https://github.com/ocapn/ocapn/blob/main/meeting-minutes/2025-12-09.md
and the parallel discussion on ocapn/ocapn#104).
- Provides
@endo/patterns@1.9.1
Patch Changes
-
#3265
45d06cdThanks @kriskowal! - AddcompareRankRemotablesTiedandcompareAntiRankRemotablesTied,
which behave likecompareRankandcompareAntiRankexcept that they
treat all remotables as tied for the same rank instead of short-circuiting
the comparison on encountering a remotable. Make thecompareparameter
optional onisRankSorted,assertRankSorted,sortByRank,
getIndexCover,unionRankCovers, andintersectRankCovers,
defaulting tocompareRankRemotablesTied.The following parameter orders change so the optional comparator lands
at the end:getIndexCover(sorted, compare, rankCover)→
getIndexCover(sorted, rankCover, compare?)unionRankCovers(compare, covers)→
unionRankCovers(covers, compare?)intersectRankCovers(compare, covers)→
intersectRankCovers(covers, compare?)
These are breaking changes to helpers that have no known external
callers within the Endo monorepo. Within the monorepo, the only
callers ofunionRankCoversandintersectRankCoversare in
@endo/patterns'spatternMatchers.js, which has been updated to
match the new parameter order.Salvaged from #2871 so that the
codec-admission core of that PR (now in #3226) can land independently
of this rank-comparison refactor. -
Updated dependencies [
45d06cd]:- @endo/marshal@1.10.0
@endo/ocapn@1.1.0
Minor Changes
-
#3256
bdb9ddcThanks @kriskowal! - - Add aframingoption tomakeTcpNetLayer(@endo/ocapn/netlayer/tcp-testing). The default is'syrup', which wraps each message in the<length>:<payload>framing implemented by@endo/syrup-frame. This is the framing the OCapN TCP-for-testing netlayer is moving toward (cf. the 2025-12-09 OCapN plenary, https://github.com/ocapn/ocapn/blob/main/meeting-minutes/2025-12-09.md), and is robust to TCP chunk boundaries that split a single OCapN message. Passframing: 'none'to interoperate with the existingocapn/ocapn-test-suitePythontesting_only_tcpnetlayer, which writes a syrup-encoded record withsendalland reads one back withsyrup.syrup_read(no length prefix on the wire). The'none'option exists only for that suite's sake and goes away once the suite either adopts syrup framing or is retired. -
#3192
08b077dThanks @kumavis! - Sync@endo/ocapnwith ocapn-test-suite at commit 74db78f08a40efba1e2b975d809374ff0e7acf60 (2026-02-25).- GC operations use list payloads (
exportPositions/wireDeltas,answerPositions); wire labelsop:gc-exportsandop:gc-answers. - Remove
op:deliver-only; fire-and-forget delivery usesop:deliverwithanswerPositionandresolveMeDescset tofalse. - Codec refactors:
makeOcapnFalseForOptionalCodecfor optionalfalsebranches, homogeneous Syrup lists viamakeListCodecFromEntryCodec, and related cleanup in operations and peer location hints.
CI integration for the Python test suite is pinned to the same commit.
- GC operations use list payloads (
-
#3209
20f9e21Thanks @kumavis! - - Add a WebSocket netlayer exported as@endo/ocapn/netlayer/ws(makeWebSocketNetLayer). Used for interop with Guile-Goblins peers and for any other transport that prefers a framed WebSocket over the raw TCP test netlayer.- Add
@endo/ocapn/netlayer/tcp-testingto the package'sexportsmap so consumers can import the existing test netlayer without reaching intosrc/. - The main entry (
@endo/ocapn) now re-exportsmakeClientand the swissnum helpersswissnumFromBytes/swissnumToBytesso consumers don't need a deepsrc/client/...import for the common case. makeClientaccepts a newloggeroption; when omitted the existing console-based logger is used, so this is backwards-compatible.- The CapTP version-mismatch log on
start-sessionnow includes both the received and expected version strings.
- Add
Patch Changes
@endo/marshal@1.10.0
Minor Changes
-
#3265
45d06cdThanks @kriskowal! - AddcompareRankRemotablesTiedandcompareAntiRankRemotablesTied,
which behave likecompareRankandcompareAntiRankexcept that they
treat all remotables as tied for the same rank instead of short-circuiting
the comparison on encountering a remotable. Make thecompareparameter
optional onisRankSorted,assertRankSorted,sortByRank,
getIndexCover,unionRankCovers, andintersectRankCovers,
defaulting tocompareRankRemotablesTied.The following parameter orders change so the optional comparator lands
at the end:getIndexCover(sorted, compare, rankCover)→
getIndexCover(sorted, rankCover, compare?)unionRankCovers(compare, covers)→
unionRankCovers(covers, compare?)intersectRankCovers(compare, covers)→
intersectRankCovers(covers, compare?)
These are breaking changes to helpers that have no known external
callers within the Endo monorepo. Within the monorepo, the only
callers ofunionRankCoversandintersectRankCoversare in
@endo/patterns'spatternMatchers.js, which has been updated to
match the new parameter order.Salvaged from #2871 so that the
codec-admission core of that PR (now in #3226) can land independently
of this rank-comparison refactor.