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.