Skip to content

Releases: endojs/endo

@endo/eslint-plugin@2.6.0

Choose a tag to compare

@kriskowal kriskowal released this 12 Jun 04:42
a9d2341

Minor Changes

  • #3263 c423ed3 Thanks @kriskowal! - The internal preset now enforces unicorn/numeric-separators-style with
    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 of plugin:@endo/internal will see lint errors on numeric literals
    that violate the rule; eslint --fix rewrites them automatically.
    Sites extending the preset must add eslint-plugin-unicorn to their devDeps.

  • #3277 da632a2 Thanks @kriskowal! - The @endo/harden-exports rule now skips named exports whose initializer is
    a Pattern maker call of the form M.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 both harden(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 62d1b0a Thanks @turadg! - Declare @typescript-eslint/* and typescript-eslint as 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 redundant parserOptions.project from the
    internal config: typescript-eslint 8.60 errors when project is set
    alongside projectService, which now supplies the type-aware program.

@endo/compartment-mapper@2.3.0

Choose a tag to compare

@kriskowal kriskowal released this 12 Jun 04:42
a9d2341

Minor Changes

  • #2422 fe6be07 Thanks @kriskowal! - Add support for host module exits in bundled compartments.

    ses exports a new StrictModuleDescriptor type that consists only of the
    NamespaceModuleDescriptor and SourceModuleDescriptor shapes mutually
    supported by SES and XS.

    compartment-mapper lets arbitrary module descriptors pass through
    importHook when 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
    (like node:fs) as an exit module when bundling, removing the need for an
    additional bundler flag in the common case.

    import-bundle threads the importHook option 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

Choose a tag to compare

@kriskowal kriskowal released this 12 Jun 04:42
a9d2341

Major Changes

  • #3232 3dee3aa Thanks @kriskowal! - Add @endo/random: a source-agnostic library of random sampling functions (random, randomInt, plus the underlying randomUint8 / randomUint16 / randomUint24 / randomUint32 / randomUint53 readers).
    Each function accepts a RandomSource, which is simply a function (out: Uint8Array) => void matching the shape of crypto.getRandomValues (minus the return value).
    Names follow the TC39 proposal-random-functions translation Random.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 canonical bobsCoffee32 32-byte seed shared across Endo deterministic fuzz suites.

    Add @endo/chacha12: a pure-JavaScript ChaCha12 keystream.
    The factory makeChaCha12(key) returns a ChaCha12Generator record { next, getState, clone, fillRandomBytes }.
    The fillRandomBytes method has the shape (out: Uint8Array) => void, conforming to @endo/random's RandomSource and to crypto.getRandomValues-style ergonomics; it can be passed directly to the samplers.
    The remaining methods expose the keystream's internal state (snapshot via getState, independent copy via clone, signed-int32 pull via next) so the generator satisfies the pure-rand v8 RandomGenerator interface structurally and can be used directly as a fast-check v4 randomType parameter.
    A companion makeChaCha12FromState(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

Choose a tag to compare

@kriskowal kriskowal released this 12 Jun 04:42
a9d2341

Patch Changes

  • Updated dependencies [3dee3aa]:
    • @endo/chacha12@1.0.0

@endo/bundle-source@4.3.2

Choose a tag to compare

@kriskowal kriskowal released this 12 Jun 04:42
a9d2341

Patch Changes

ses@2.1.0

Choose a tag to compare

@kriskowal kriskowal released this 27 May 18:49
f7fc3cd

Minor Changes

  • #3284 f2aa55a Thanks @boneskull! - Allows Map.prototype.getOrInsert, Map.prototype.getOrInsertComputed, WeakMap.prototype.getOrInsert and WeakMap.prototype.getOrInsertComputed.

Patch Changes

@endo/syrup-frame@0.1.1

Choose a tag to compare

@kriskowal kriskowal released this 27 May 18:49
f7fc3cd

Patch Changes

  • #3256 38fe678 Thanks @kriskowal! - - New package @endo/syrup-frame: a sibling of @endo/netstring that
    drops the trailing , separator, so each framed payload on the wire
    is literally a Syrup byte-string record (<length>:<payload>).
    • Provides makeSyrupReader and makeSyrupWriter with the
      same shape as the netstring equivalents, including the chunked
      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).

@endo/patterns@1.9.1

Choose a tag to compare

@kriskowal kriskowal released this 27 May 18:49
f7fc3cd

Patch Changes

  • #3265 45d06cd Thanks @kriskowal! - Add compareRankRemotablesTied and compareAntiRankRemotablesTied,
    which behave like compareRank and compareAntiRank except that they
    treat all remotables as tied for the same rank instead of short-circuiting
    the comparison on encountering a remotable. Make the compare parameter
    optional on isRankSorted, assertRankSorted, sortByRank,
    getIndexCover, unionRankCovers, and intersectRankCovers,
    defaulting to compareRankRemotablesTied.

    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 of unionRankCovers and intersectRankCovers are in
    @endo/patterns's patternMatchers.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

Choose a tag to compare

@kriskowal kriskowal released this 27 May 18:49
f7fc3cd

Minor Changes

  • #3256 bdb9ddc Thanks @kriskowal! - - Add a framing option to makeTcpNetLayer (@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. Pass framing: 'none' to interoperate with the existing ocapn/ocapn-test-suite Python testing_only_tcp netlayer, which writes a syrup-encoded record with sendall and reads one back with syrup.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 08b077d Thanks @kumavis! - Sync @endo/ocapn with ocapn-test-suite at commit 74db78f08a40efba1e2b975d809374ff0e7acf60 (2026-02-25).

    • GC operations use list payloads (exportPositions / wireDeltas, answerPositions); wire labels op:gc-exports and op:gc-answers.
    • Remove op:deliver-only; fire-and-forget delivery uses op:deliver with answerPosition and resolveMeDesc set to false.
    • Codec refactors: makeOcapnFalseForOptionalCodec for optional false branches, homogeneous Syrup lists via makeListCodecFromEntryCodec, and related cleanup in operations and peer location hints.

    CI integration for the Python test suite is pinned to the same commit.

  • #3209 20f9e21 Thanks @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-testing to the package's exports map so consumers can import the existing test netlayer without reaching into src/.
    • The main entry (@endo/ocapn) now re-exports makeClient and the swissnum helpers swissnumFromBytes / swissnumToBytes so consumers don't need a deep src/client/... import for the common case.
    • makeClient accepts a new logger option; when omitted the existing console-based logger is used, so this is backwards-compatible.
    • The CapTP version-mismatch log on start-session now includes both the received and expected version strings.

Patch Changes

@endo/marshal@1.10.0

Choose a tag to compare

@kriskowal kriskowal released this 27 May 18:49
f7fc3cd

Minor Changes

  • #3265 45d06cd Thanks @kriskowal! - Add compareRankRemotablesTied and compareAntiRankRemotablesTied,
    which behave like compareRank and compareAntiRank except that they
    treat all remotables as tied for the same rank instead of short-circuiting
    the comparison on encountering a remotable. Make the compare parameter
    optional on isRankSorted, assertRankSorted, sortByRank,
    getIndexCover, unionRankCovers, and intersectRankCovers,
    defaulting to compareRankRemotablesTied.

    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 of unionRankCovers and intersectRankCovers are in
    @endo/patterns's patternMatchers.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.