Updates

What's new

Release highlights across the stack, newest first. For the full detail, see the commit history.

July 2026

The marquee wave. @mmstack/worker arrived to move state and compute off the main thread, drag and drop got its pointer engine, primitives got the *mmTransition directive and streaming resources, and this documentation site went live, built on the same libraries it documents.

@mmstack/dnd

  • New pointer engine. Sortable lists no longer depend on native HTML5 drag, so reordering stays smooth with FLIP animation and behaves the same on touch.
  • reorderable() covers simple lists, drag handles, cross-list groups, nested lists, and horizontal axes from one controller.
  • The native and pointer engines share one session and load lazily, so both work in an app and you only pay for the one you use.

@mmstack/primitives

  • *mmTransition holds the current view until the next one has loaded, so tab switches and value changes stop flashing a spinner.
  • The deep store gained an operation log, a compact record of every change for replay, sync, and undo.
  • projection, a derived store with keyed reconciliation, so a computation maps into a store that tracks per field.

@mmstack/worker

  • A new library for split-graph state and compute. The main thread renders while a Web Worker owns state and runs heavy work, kept in sync over the store operation log instead of full snapshots.
  • workerResource runs a function off-main with the resource surface, so a slow computation makes the UI pending, not frozen.
  • workerStore mirrors a worker-owned store as a live read-only replica and routes writes to the owner, which sequences them so every replica converges.
  • Worker-side derivations publish read-only and carry their pending state across, and the whole connection is typed from the worker you wrote.

@mmstack/resource

  • streamResource for Server-Sent Events and WebSockets, with the same status surface and automatic reconnection as a query.
  • parse now runs through interceptors, and injector passthrough is fixed for queryResource and mutationResource.

@mmstack/forms

  • changedValues and submitChanges: read the diff of a form, submit only what changed, and re-baseline on success.

@mmstack/router-core

  • Tighter coordination with the concurrency layer, so route data and the transition outlet swap a route in one frame once its data settles.

@mmstack/translate-tools

  • A new lint command, and the 1.0 release: exact-shape key checks, per-file imports that isolate failures, and skipped-file reporting.

June 2026

The build-out. The concurrency foundation landed, resource matured into a full data layer, router-core got the transition outlet, and the forms and dnd libraries were born.

@mmstack/primitives

  • The concurrency foundation: keepPrevious, latest and use, deferredValue, suspense boundaries, and per-element view transitions.
  • Store gained opaque leaves, vivify for missing paths, extendStore overlays, and shape adaptation between arrays and records.
  • A new pointer-drag sensor for building custom pointer gestures.

@mmstack/resource

  • mutateAsync, clearQueue, declarative invalidates for any method with custom prefixes, infinite queries, and an auto-wired cache.

@mmstack/router-core

  • The transition outlet and holdThroughNavigation, which hold the current view through a navigation until the next route settles.
  • mmLink anchor-detection fixes, and no refetch of retained route data on unrelated navigations.

@mmstack/forms

  • New library. Typed field metadata, reusable field compositions, and change tracking layered on Angular Signal Forms.

@mmstack/di

  • Lazy and async injection with injectLazy and injectAsync, plus a no-deps injectable signature.

@mmstack/translate

  • translate-tools gained JSON import and export for round-tripping with translators, and registerNamespace got a cleaner shape.

@mmstack/dnd

  • New library. The native HTML5 engine, typed draggable and drop-target primitives, and the shared drag session.