Skip to content

Releases: LevelFourAB/syncplane

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 06:12
2b0abd4

0.6.0 (2026-11-03)

Features

  • engine: Support engine syncing with an origin server (61d5093)

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 19:00
f89930c

0.5.0 (2026-11-01)

Features

  • client: Ability to save an undo scope for later use (f656d07)
  • client: Let React tabs and pages keep their undo history after they unmount (71f208c)

Bug Fixes

  • client: Download a cached blob again when its stored bytes do not match its digest (3d0b4c7)

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 31 Oct 18:51
c53c9de

0.4.1 (2026-10-31)

Bug Fixes

  • client: Stop endless pulls when the stored cursor is behind the rows already applied (7643660)

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 16:48
e33852c

0.4.0 (2026-10-31)

Features

  • Blob storage to support attaching binary data to rows (737afcb)
  • client: Let a text patch name the document the editor last saw (dec4715)
  • client: Let apps await setSubscriptions() until the new scope is local (c2efea9)
  • engine: Let server-side code make list order keys that match the client (4783830)
  • engine: Let servers delete a workspace (ae5f336)
  • Let clients sync through a message channel instead of HTTP (e30b89c)

Bug Fixes

  • Return the same rows from an index as from a scan when ordered rows tie (c9cd20e)

Performance Improvements

  • client: Cut IndexedDB storage for full-text search by about a third (e7ca6d4)
  • client: Key search records by a short scope fingerprint instead of entity and workspace (10523bc)
  • client: Store full-text search postings as packed term lists (12a1b41)
  • engine: Cut SQLite index storage by a third for text search (f994128)
  • engine: Cut SQLite index storage for text-heavy rows by a fifth (3af80e4)
  • engine: Make reference indexes sparse to cut storage for empty refs (8111241)
  • engine: Shrink index storage with short scope ids and per-row entry lists (d34c34c)
  • engine: Shrink the SQLite search index by dropping row keys from search entries (3a88b04)
  • query: Serve a sort against an index's direction from the index (e8f8671)

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 09:37
bf8c88f

0.3.0 (2026-10-29)

Features

  • engine: Add typed, iterator-based reads and mutators (35a5f79)
  • engine: Detect restored stores and reset clients ahead of the backup (81a60cf)

Bug Fixes

  • client: Keep a write another tab already pushed instead of dropping it as poison (a35d502)
  • client: Keep a write made during a format upgrade instead of wiping it (41db80c)
  • client: Keep new text typed right after clearing a compacted text field (1bc3956)
  • client: No longer lose queued text edits when a pull brings a compacted document (29c3dd9)
  • client: Report a rejected edit when another tab syncs before the lost push is re-sent (df280ff)
  • client: Report writes the server rejects during a local format upgrade (deca49f)
  • client: Stop compaction recovery from deleting text typed by other users (93e73e2)
  • client: Stop path-style row keys from sharing optimistic text edits (f94b1b9)
  • client: Store recovered text edits until they are re-applied (9fc6e5e)
  • client: Sync rows whose int64 id is written as a string like "007" or "0x10" (68aa054)
  • client: Undo of a mark no longer removes formatting a peer applied on top of it (c156a1e)
  • engine: Accept new text typed into a compacted text field after it was cleared (386abb4)
  • engine: Always keep the rejections of a client's latest push (43ab390)
  • engine: Keep a push batch going when a text document sits under a \u0000 key (ef91e4f)
  • engine: Keep an interrupted bootstrap from leaving rows outside the window or closure (364ef14)
  • engine: Keep indexed queries finding rows after a PATCH into an opaque field or reference (eaaad05)
  • engine: Keep refused in-process writes from leaking text into readers copies (0a0dd53)
  • engine: Keep rows hidden by the read filter off clients that bootstrap during a write (cc669e1)
  • engine: Keep windowed rows in sync when a scope change follows a window move (9c73083)
  • engine: No longer drop a write when a new client's first push sends ids out of order (c32eed4)
  • engine: Refuse idempotency keys that are not valid UTF-8 or hold \u0000 on every store (515b802)
  • engine: Reject duplicate keyed-list keys with invalid_argument instead of storing them (8fb974a)
  • engine: Stop paginated pulls from leaving stale rows outside a window or closure (be447a6)
  • engine: Stop the change feed from skipping writes after an access move (a4de84a)
  • Keep a list element or map entry when a patch clears one of its fields (d3a6ce6)
  • Keep queued writes through a server outage instead of dropping them as poison (eb51312)
  • Keep stored text on PUTs without a document (e6fae74)
  • Merge text in either order to the same bytes when a peer entry has counter 0 (704969c)

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 07:38
1f4a31b

0.2.0 (2026-10-24)

Features

  • Add WriteFilter for controlling writes based on current data (11281b2)
  • Declare access permissions, roles and access parents within schema (56165df)

Bug Fixes

  • client: Keep a delete and re-create as separate writes (992e717)
  • client: Keep accepted edits when the server refuses another edit to the same row (fc1caf8)
  • client: Keep an unconfirmed edit queued when the client re-downloads a workspace (c2f7afe)
  • client: Make useGroupCount and useGroupRows respect the workspaceId option (c94c757)
  • client: Refuse map keys outside the key type's range in local queries (6d99d52)
  • client: Stop text fields that start with U+FEFF from becoming unreadable (496943b)
  • engine: Accept compiled messages after a schema is registered from a descriptor set (354065a)
  • engine: Answer out-of-range mutation ids with invalid_argument (cf1e439)
  • engine: Keep idempotency keys per caller so one user never receives another's recorded result (5f9bc9b)
  • engine: Let users reconnect to presence after a stranger takes their session id (f4168e6)
  • engine: Make server queries match local queries for out-of-range integer literals (c4f230b)
  • engine: Purge history rows on Postgres for any non-ASCII key prefix (afbee60)
  • engine: Re-check entity write rules under the write lock (09d5789)
  • engine: Refuse client ids longer than 128 bytes instead of failing the push on Postgres (09013b3)
  • engine: Reject writes whose indexed value is too long instead of dead-lettering them on Postgres (c364310)
  • engine: Remove rows from clients when they stop following a reference (1621ebc)
  • engine: Stop a node from overwriting a newer app schema (e870857)
  • engine: Stop an edited sync cursor from reading rows the read filter hides (f1be064)
  • engine: Stop an older presence update from replacing a newer one (fd8a4e2)
  • engine: Stop leased background work from running twice on one Postgres node (d43855d)
  • engine: Stop open sync streams from sending rows that a permission change hides (dfeb228)
  • engine: Stop other users from blocking a client's writes by reusing its client ID (af4c330)
  • engine: Stop pulls failing after a windowed subscription is removed (ba0e035)
  • engine: Use the default heartbeat for a value that is not positive (24c7eee)
  • Prevent dynamic registrations disagreeing after a server restart (a4f7268)
  • Return the matching rows for prefix searches on descending indexes (d6bb403)
  • Stop an edit to an empty-string key from replacing the whole map, set or list (4fb0588)
  • Stop index reads from rounding integer literals on double fields (056fecd)
  • Stop one malformed text edit from making a field unreadable for everyone (80eb325)
  • Stop one write from making a collaborative text field impossible to edit (4163afe)

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 08:41
3da9658

0.1.0 (2026-09-25)

Features

  • Ability for an entity to reserve DELETE for trusted writes (a85a506)
  • Add full-text search with relevance ranking (28bff8f)
  • Add one-hop query support for relations (5032134)
  • Allow collaborative text fields inside keyed-list elements and map values (5a25573)
  • Allow grouping a match set by a path, with counts or distinct values (53192c7)
  • Allow limiting which fields a client can write (223b97a)
  • Allow oneof use for references (16ca1db)
  • Allow syncing only certain fields (3c2f02f)
  • client: Add devtools for easier debugging (4c0468b)
  • client: Add purgeLocalData for local sign-out (d6cd206)
  • client: Add storagePrefix option (0b2b9fd)
  • client: Add syncplane/testing for easier testing (e8df539)
  • client: Add useQueryAll hook for React (7a589e4)
  • client: Batch include hydration and add per-relation options (b539af2)
  • client: Cache movable lists (19f3f12)
  • client: Coalesce a burst of local writes into one push (1f15878)
  • client: Cut local index storage by a third and speed up entity scans (818de3d)
  • client: Examine large semi-join membership moves in probe-sized batches (f7bcb5e)
  • client: Fast path for search postings (5bf4da2)
  • client: Hydrate include trees with one read per relation instead of one per row (14d2d8b)
  • client: Improve bootstrap performance by overlapping decoding with store writes (a84ca1e)
  • client: Improve query and indexing speeds (cdd2cac)
  • client: Improve querying performance with focus on total counts (b6fd692)
  • client: Local queries report which path answered them through onSyncEvent (e2d0e52)
  • client: Push the changes that happened mid-push before pulling (4e0ff7c)
  • client: Rank a byWorkspace query by relevance (9d2dd81)
  • client: Read rows across workspaces by ref, and add useRowsAll (47db376)
  • client: Read rows by key without deriving the entity, and add useRows (a8e450c)
  • client: Scope cross-workspace reads to named workspaces (d276525)
  • client: Serve cross-workspace queries from secondary indexes (b96cb5f)
  • client: Serve indexed queries as soon as a cold bootstrap completes (92d346a)
  • client: Speed up watcher scope prune (bd1f16c)
  • client: Support for scoped undo management (e11e7f2)
  • client: Support movable window and totals for live query results (8a35d42)
  • Cross-namespace referencing of objects (3b5f9eb)
  • engine: Add MaxResyncScan to bound delta-resync work per Pull (e05bda2)
  • engine: Add work queries so maintenance passes skip idle workspaces (4fbdf46)
  • engine: Batch queued pokes into one NOTIFY round trip (fccfdb6)
  • engine: Dedup background work across nodes with per-workspace leases (8e2f6a4)
  • engine: Enumerate index candidates by key without reading the rows twice (56a6e7b)
  • engine: Hash-partition support for pgstore (41f1593)
  • engine: Improve background index build performance (421c234)
  • engine: Judge pgstore compatibility by what migrations did not version (e48addd)
  • engine: Let a deployment turn off SQLite's memory-mapped reads (3916fc5)
  • engine: Let text compaction run as its own sweep instead of as part of GC (e84ca8d)
  • engine: Load data in batches when querying via index (d417b29)
  • engine: Maintain a forward follow closure from what changed instead of rebuilding it (8667aea)
  • engine: Prepare SQLite statements once per pool and reuse them across transactions (35cc870)
  • engine: Read a row's recorded actor and version through GetMeta (337b588)
  • engine: Refuse text inside repeated/map elements and list identities inside a oneof (f3f5c2f)
  • engine: Serve delta resync from indexes instead of scanning the workspace (cd4a4dd)
  • engine: Serve partial bootstraps from indexes, closures and windows (bb8496b)
  • engine: Speed up following subscriptions (e2475d6)
  • engine: Subscribe to a workspace set through one wake channel instead of a goroutine per scope (9c785e9)
  • engine: Wake the listener for a new channel without dropping its session (c342eca)
  • engine: Write only the index entries a row write changes (37a782b)
  • Entities can now declare who may create and update their rows (aa1e2fa)
  • Faceting support for queries (1703088)
  • Feed cursors now name the store that issued them for safety (88a4474)
  • Improve performance of pull via incremental window and closure membership ([92ee35d](https://github.com/LevelFourAB/syncplane/co...
Read more