Skip to content

Releases: kaltwrk/spektral

Spektral 0.17.0

Choose a tag to compare

@66HEX 66HEX released this 04 Sep 20:19
7191aef

Spektral 0.17.0 is the complete pre-1.0 rebrand of Motion GPU.

Highlights:

  • package moved from @motion-core/motion-gpu to unscoped spektral
  • public APIs, injected WGSL bindings, diagnostics, CSS, documentation, and repository identity renamed without a compatibility layer
  • asynchronous fullscreen-pass preparation with last-known-good shader recovery and structured diagnostics
  • immutable compute topology caching and public frozen render-graph snapshots
  • hardened package, consumer, bundle, release, and local hardware performance gates

See the 0.17.0 changelog for the complete release scope.

v0.16.0

Choose a tag to compare

@66HEX 66HEX released this 29 Aug 16:06
a438f81

Breaking

  • Compute and fragment-feedback passes are now nominal library-managed contracts. Replace hand-built objects with isCompute: true or isPingPongShader: true with ComputePass, PingPongComputePass, or PingPongShaderPass. Custom RenderPass implementations remain supported.
  • Material resource descriptors, uniform tuples, error reports and history, and public context and scheduler snapshots are now readonly in both types and runtime behavior. Create a new value instead of mutating a returned snapshot: call defineMaterial(...) again for material changes, and copy an array with [...value] before making local edits.

Added

  • Added workgroupSize to ComputePass and PingPongComputePass for auto-dispatch when WGSL uses an override or non-literal @workgroup_size expression. Compute contract validation now ignores comments and accepts valid WGSL attribute ordering.
  • Svelte, React, and Vue entrypoints now export the color-pipeline and MotionGPUError* type families. Packed-consumer checks enforce the exact runtime and type-only declaration surface of all ten entrypoints and verify that each emitted JavaScript namespace matches it.

Changed

  • User-context namespace maps are frozen, null-prototype snapshots. Merge mode now merges only plain records and safely treats toString, constructor, __proto__, and symbols as ordinary namespaces.
  • Material declarations and resolved data now isolate every nested input, including storage-buffer initial bytes, without freezing caller-owned DOM or WebGPU objects. Runtime synchronization reads each material declaration once per cycle.
  • Scheduler diagnostics now keep colliding symbol labels distinct, expose deeply frozen snapshots, and accept profiling windows only as safe integers from 1 through 10,000 frames.

Fixed

  • Error history is now normalized, trimmed, and published only by the runtime as a deeply frozen snapshot, preventing duplicate callbacks or consumer mutation from changing later history in Svelte, React, or Vue.
  • Structured shader-compilation diagnostics now detach and deeply freeze their complete payload, so caller mutation cannot alter an attached error or a later report.
  • Multiple default error overlays now share one document-level owner stack. Only the top overlay traps focus or handles Escape; closing it transfers ownership to the previous overlay, and closing the last one restores focus and background state.
  • Texture and render-target formats are validated against the active device before allocation or pipeline creation. Built-in passes reject incompatible integer and depth slots with a Motion GPU diagnostic, while float32 sampling falls back to nearest filtering when float32-filterable is unavailable.
  • An explicit workgroupSize no longer hides an out-of-range literal or malformed @workgroup_size attribute; explicit dimensions override only valid non-literal WGSL expressions.
  • Pointer hooks now apply enabled and outside-tracking changes without remounting, keep the first pointer active until release, deduplicate bubbling canvas/window moves, and release capture during disable or unmount consistently across Svelte, React, and Vue.
  • Storage-buffer writes now copy their source bytes immediately. Reading a buffer flushes its queued writes in order first, and failed read prerequisites preserve writes for the normal frame flush without replaying failed operations in a later frame.
  • Texture loading now honors both cancellation signals, shares only bodyless GET/HEAD requests, isolates mutation requests, and clears controller loading state when lazy URL or options providers throw.