Skip to content

Version Packages - #239

Merged
marcus-pousette merged 1 commit into
mainfrom
changeset-release/main
Nov 3, 2026
Merged

marcus-pousette merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 18, 2026 •

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@treecrdt/wa-sqlite@1.0.0

Major Changes

  • 97166eb: Reduce createTreecrdtClient() options to a required docId plus optional persistent, filename, crossTab, and assetsBaseUrl options. The public storage / runtime / nested assets configuration and the TreecrdtStorage, TreecrdtRuntime, and TreecrdtAssets types are removed. The package now selects storage and runtime internally: in-memory + direct runtime by default, OPFS + dedicated worker for persistent: true, and a shared worker when crossTab: true. Browser assets default to Vite's BASE_URL but the base remains overridable for custom asset routing; Vite continues to emit and resolve the WASM through its asset graph. Persistent filenames are derived deterministically from docId when omitted using a readable prefix and the first 16 bytes of its SHA-256 hash encoded as base64url (the derivation is exported as opfsFilenameForDocId). The previous auto default (OPFS when available) becomes in-memory; persistence is always explicit and never silently falls back — when OPFS is unavailable or fails to initialize, client creation throws with the reason. Cross-tab mode throws when SharedWorker is unavailable. On Node, persistent: true and crossTab: true throw; use @treecrdt/sqlite-node for file persistence.

Minor Changes

  • 992283a: Use canonical VersionVector v0 bytes across storage and sync. The new @treecrdt/wasm/codec entry
    point lazily loads the shared Rust implementation and exposes synchronous codec methods once ready.
    Recreate development databases that contain the unreleased JSON format.

  • e1a6f4d: Replace keyset treeChildrenPage with optional index/length slices on treeChildren and TreecrdtNode.children(). Live (non-tombstoned) children are paginated in stable order.

  • 9a0534f: Replace the custom worker RPC with Comlink and split session data access from connection lifecycle. createWaSqliteApi is removed; low-level callers that open a wa-sqlite handle themselves should initialize the extension, set the doc id, then pass the database to createTreecrdtSqliteAdapter from @treecrdt/interface/sqlite. createTreecrdtClient() is unchanged for typical apps.

  • e69c29b: Replace the flat public tree surface with a lazy get() / root Node API, and split the wa-sqlite session into operations and tree sub-objects. Callers navigate with tree.get(id)?.payload() / parent() / children() instead of exists / getPayload / parent / children; Node handles expose canonical 32-character lowercase hex ids, root aliases resolve to the always-available root handle, and parent() returns undefined when either the node or its parent is not visible. Select browser runtime wiring via an exhaustive strategy map instead of ad hoc branching.

  • be09f09: Add tree.changedSince(since, { limit, payloads }) to the SQLite-backed engines. It returns each node whose visible state changed after a headSeq, with its current state and the read's headSeq, so applications can keep derived data in step across restarts without rebuilding it. Materialization records each changed node's headSeq in a new tree_changes table within the same commit; since = 0 reads every node. Existing databases gain the table on open. Paged reads are resumable catch-up, not frozen snapshots: nodes changed during paging may be deferred to the next read. A since ahead of the database's headSeq is rejected. Catch-up reads scan that table, which keeps recording cheap; follow onMaterialized between them.

  • 792a8a0: Initialize the shared TreeCRDT schema through awaited SQL in one transaction,
    replacing the custom VFS retry loop. Failed initialization rolls back schema changes.
    Document ID setup shares the write transaction so concurrent opens cannot race.

    Low-level callers must now pass the connection's SQL runner as the third argument
    to initializeTreecrdtExtension(module, handle, db, docId), with an optional document
    ID to initialize in the same transaction. Rebuild the vendor WASM and
    adapter together. createTreecrdtClient() callers need no changes.

  • ff82374: Open persistent OPFS databases in WAL mode with exclusive locking, roughly halving the cost of a single-operation commit. A database is now held by one client until it closes: without crossTab, another client opening the same database, for example in a second tab, waits until the first client closes or its tab goes away. Use crossTab: true to share a persistent database between tabs. Connections that open these files directly must run PRAGMA locking_mode=EXCLUSIVE before their first statement.

Patch Changes

  • 49ca3c9: Reduce local insert, move, delete, and payload overhead by preparing SQLite helper statements only when each operation needs them.
  • 04663ab: Correct replayed move notifications to use actual before/after parents, and prevent duplicate replay/repair deletion notifications from cancelling each other out.
  • 4686794: Send SQLite operation batches as CBOR blobs instead of JSON byte arrays. Update the adapter and extension together: JSON batch input is no longer accepted. Stored operations and sync formats are unchanged.
  • 73a7205: Allow persistent OPFS storage on pages that are not cross-origin isolated. detectOpfsSupport() and createTreecrdtClient({ persistent: true }) no longer require COOP/COEP headers.
  • 972f402: Build the bundled wa-sqlite assets from upstream using its existing extension inputs instead of a fork.
  • Updated dependencies [e1a6f4d]
  • Updated dependencies [e69c29b]
  • Updated dependencies [4686794]
  • Updated dependencies [be09f09]
  • Updated dependencies [e829a41]
    • @treecrdt/interface@0.3.0

@treecrdt/sync-protocol@0.2.0

Minor Changes

  • 2594f3d: Require every duplex transport to expose an idempotent close method and a read-only closeSignal, treat each transport object as one connection lifecycle, propagate malformed frames and WebSocket closure through sync sessions instead of leaving pending work unresolved, and scope protocol session routing to the originating transport. The high-level custom-transport factory now owns transport cleanup and no longer accepts a separate close callback.

Patch Changes

  • Updated dependencies [e1a6f4d]
  • Updated dependencies [e69c29b]
  • Updated dependencies [4686794]
  • Updated dependencies [be09f09]
  • Updated dependencies [e829a41]
    • @treecrdt/interface@0.3.0

@treecrdt/auth@0.2.0

Minor Changes

  • 917d930: Bind defensive-delete knownState into operation signatures to prevent undetected tampering.

Patch Changes

  • Updated dependencies [992283a]
  • Updated dependencies [e1a6f4d]
  • Updated dependencies [5b816c5]
  • Updated dependencies [e69c29b]
  • Updated dependencies [2594f3d]
  • Updated dependencies [4686794]
  • Updated dependencies [be09f09]
  • Updated dependencies [e829a41]
  • Updated dependencies [1f1ef27]
  • Updated dependencies [78d132c]
    • @treecrdt/wasm@0.1.0
    • @treecrdt/interface@0.3.0
    • @treecrdt/sync-protocol@0.2.0

@treecrdt/sync@0.2.0

Minor Changes

  • 2594f3d: Require every duplex transport to expose an idempotent close method and a read-only closeSignal, treat each transport object as one connection lifecycle, propagate malformed frames and WebSocket closure through sync sessions instead of leaving pending work unresolved, and scope protocol session routing to the originating transport. The high-level custom-transport factory now owns transport cleanup and no longer accepts a separate close callback.

Patch Changes

  • Updated dependencies [e1a6f4d]
  • Updated dependencies [e69c29b]
  • Updated dependencies [2594f3d]
  • Updated dependencies [4686794]
  • Updated dependencies [be09f09]
  • Updated dependencies [e829a41]
    • @treecrdt/interface@0.3.0
    • @treecrdt/sync-protocol@0.2.0
    • @treecrdt/sync-sqlite@0.1.3

@treecrdt/interface@0.3.0

Minor Changes

  • e1a6f4d: Replace keyset treeChildrenPage with optional index/length slices on treeChildren and TreecrdtNode.children(). Live (non-tombstoned) children are paginated in stable order.
  • e69c29b: Replace the flat public tree surface with a lazy get() / root Node API, and split the wa-sqlite session into operations and tree sub-objects. Callers navigate with tree.get(id)?.payload() / parent() / children() instead of exists / getPayload / parent / children; Node handles expose canonical 32-character lowercase hex ids, root aliases resolve to the always-available root handle, and parent() returns undefined when either the node or its parent is not visible. Select browser runtime wiring via an exhaustive strategy map instead of ad hoc branching.
  • be09f09: Add tree.changedSince(since, { limit, payloads }) to the SQLite-backed engines. It returns each node whose visible state changed after a headSeq, with its current state and the read's headSeq, so applications can keep derived data in step across restarts without rebuilding it. Materialization records each changed node's headSeq in a new tree_changes table within the same commit; since = 0 reads every node. Existing databases gain the table on open. Paged reads are resumable catch-up, not frozen snapshots: nodes changed during paging may be deferred to the next read. A since ahead of the database's headSeq is rejected. Catch-up reads scan that table, which keeps recording cheap; follow onMaterialized between them.
  • e829a41: Remove unused legacy sync, storage, access-control, and adapter-factory declarations. Active filtered-sync contracts remain available from @treecrdt/sync-protocol.

Patch Changes

  • 4686794: Send SQLite operation batches as CBOR blobs instead of JSON byte arrays. Update the adapter and extension together: JSON batch input is no longer accepted. Stored operations and sync formats are unchanged.

@treecrdt/wasm@0.1.0

Minor Changes

  • 992283a: Use canonical VersionVector v0 bytes across storage and sync. The new @treecrdt/wasm/codec entry
    point lazily loads the shared Rust implementation and exposes synchronous codec methods once ready.
    Recreate development databases that contain the unreleased JSON format.

Patch Changes

  • 5b816c5: Apply out-of-order payload-only batches without replaying retained history, preserving per-node conflict resolution and the latest operation head.
  • 1f1ef27: Apply operation batches through one WASM call, replaying retained history at most once. Decode and validate the complete batch before applying any operations.
  • 78d132c: Pass operation objects and binary fields directly into WASM instead of encoding inputs as JSON and hex. Preserve the adapter API, operation-read format, and canonical version-vector bytes.
  • Updated dependencies [e1a6f4d]
  • Updated dependencies [e69c29b]
  • Updated dependencies [4686794]
  • Updated dependencies [be09f09]
  • Updated dependencies [e829a41]
    • @treecrdt/interface@0.3.0

@treecrdt/sync-postgres@0.1.3

Patch Changes

  • Updated dependencies [e1a6f4d]
  • Updated dependencies [e69c29b]
  • Updated dependencies [2594f3d]
  • Updated dependencies [4686794]
  • Updated dependencies [be09f09]
  • Updated dependencies [e829a41]
    • @treecrdt/interface@0.3.0
    • @treecrdt/sync-protocol@0.2.0

@treecrdt/sync-sqlite@0.1.3

Patch Changes

  • Updated dependencies [917d930]
  • Updated dependencies [e1a6f4d]
  • Updated dependencies [e69c29b]
  • Updated dependencies [2594f3d]
  • Updated dependencies [4686794]
  • Updated dependencies [be09f09]
  • Updated dependencies [e829a41]
    • @treecrdt/auth@0.2.0
    • @treecrdt/interface@0.3.0
    • @treecrdt/sync-protocol@0.2.0

@treecrdt/sync-server-core@0.1.3

Patch Changes

  • 2594f3d: Require every duplex transport to expose an idempotent close method and a read-only closeSignal, treat each transport object as one connection lifecycle, propagate malformed frames and WebSocket closure through sync sessions instead of leaving pending work unresolved, and scope protocol session routing to the originating transport. The high-level custom-transport factory now owns transport cleanup and no longer accepts a separate close callback.
  • Updated dependencies [2594f3d]
    • @treecrdt/sync-protocol@0.2.0

@treecrdt/sync-server-postgres-node@0.1.3

Patch Changes

  • d582500: Remove capability-CWT authentication because the server does not enforce token grants or signed operation authorship end to end.
  • Updated dependencies [e1a6f4d]
  • Updated dependencies [e69c29b]
  • Updated dependencies [2594f3d]
  • Updated dependencies [4686794]
  • Updated dependencies [be09f09]
  • Updated dependencies [e829a41]
    • @treecrdt/interface@0.3.0
    • @treecrdt/sync-protocol@0.2.0
    • @treecrdt/sync-server-core@0.1.3
    • @treecrdt/sync-postgres@0.1.3

@github-actions
github-actions Bot force-pushed the changeset-release/main branch 3 times, most recently from a2f0829 to 03d876d Compare August 20, 2026 09:06
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 03d876d to fdd6f08 Compare August 26, 2026 07:04
@marcus-pousette
marcus-pousette marked this pull request as draft September 2, 2026 12:46
@marcus-pousette

Copy link
Copy Markdown
Collaborator

Release hold for the Sync v0 auth clean-slate sequence:

If the currently staged releases need to ship before #157 merges, this PR may instead be reviewed and released first; the hold then applies to the next generated Version Packages PR.

@github-actions
github-actions Bot force-pushed the changeset-release/main branch 3 times, most recently from bfcc009 to 1925e81 Compare September 7, 2026 18:12
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 1925e81 to d8668c9 Compare September 11, 2026 14:21
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 6 times, most recently from 3208a96 to d4d65c6 Compare September 23, 2026 12:59
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 3 times, most recently from 71569e3 to b91b773 Compare October 7, 2026 07:41
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 4 times, most recently from 67e4c9f to c8589f6 Compare October 19, 2026 10:02
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 3 times, most recently from 15287cd to 83ef1ef Compare October 30, 2026 17:57
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 83ef1ef to f65b8eb Compare November 2, 2026 11:27
@marcus-pousette
marcus-pousette marked this pull request as ready for review November 3, 2026 14:07
@marcus-pousette

Copy link
Copy Markdown
Collaborator

Release hold lifted. There are no production users and no stored signed ops, so @treecrdt/auth can ship intermediate minors while #255 rewrites the auth profile in place. Expect @treecrdt/auth 0.3.0 once #262, #268 and the #255 rewrite land; anything signed with an earlier draft format must be recreated.

@marcus-pousette
marcus-pousette merged commit 6813718 into main Nov 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant