Skip to content

Releases: elixir-volt/quickbeam

v0.8.1

25 Mar 05:25

Choose a tag to compare

Fixed

  • Fix precompiled NIF checksum mismatch from v0.8.0 release

See 0.8.0 changelog for the full N-API feature release notes.

v0.8.0

24 Mar 19:54

Choose a tag to compare

Added

  • N-API addon supportQuickBEAM.load_addon/3 loads native .node addons into a runtime and optionally exposes their exports as a global.
  • Node-API surface for native addons — adds the N-API implementation needed to run real addons, including constructors, typed arrays, external buffers, async work, and threadsafe functions.
  • Real addon integration coverage — adds tests for a C test addon plus @node-rs/crc32, @node-rs/argon2, @node-rs/bcrypt, and sqlite-napi.
  • Beam.nanoseconds() — monotonic high-resolution timer via :erlang.monotonic_time(:nanosecond)
  • Beam.uniqueInteger() — monotonically increasing unique integer via :erlang.unique_integer
  • Beam.makeRef() — create a unique BEAM reference, useful for request/reply correlation
  • Beam.inspect(value) — pretty-print any value via Kernel.inspect, especially useful for opaque BeamPid/BeamRef terms

Changed

  • TypeScript support in ContextQuickBEAM.Context now auto-transforms .ts/.tsx scripts via OXC and auto-bundles scripts with import statements, matching Runtime behavior. Previously, Context loaded scripts as raw JS.
  • Repo-wide quality gate — added mix ci with test env defaults and brought the full quality pipeline to green: Elixir linting, Dialyzer, Zig lint, TypeScript type-aware linting, duplicate-code checks, and tests now pass together.
  • TypeScript polyfill quality — resolved DOM/global type collisions in priv/ts by moving implementation classes to QB-prefixed names while preserving web-facing globals. Also removed TS lint/type errors and TS clone findings.
  • N-API implementation cleanup — aligned buffer APIs with QuickBEAM's Uint8Array byte representation, tightened wrap and async cleanup behavior, and split napi.zig into focused Zig modules.
  • Zig lint hygiene — added missing SAFETY: notes for intentional undefined initialization, replaced suppressed error handling with explicit handling, removed unused declarations, and fixed style warnings so zlint runs clean.

v0.7.1

17 Mar 09:23

Choose a tag to compare

Release v0.7.1

v0.7.0

17 Mar 06:20

Choose a tag to compare

Release v0.7.0

v0.6.1

14 Mar 15:46

Choose a tag to compare

Changed

  • Bump npm dependency to ~> 0.4.2

v0.6.0

14 Mar 07:08

Choose a tag to compare

Added

  • DOM prototype chain — full hierarchy: NodeElementHTMLElement/SVGElement/MathMLElement, plus Document, DocumentFragment, Text, Comment. Constructor globals on globalThis enable instanceof checks
  • Symbol.toStringTagObject.prototype.toString.call(el) returns [object HTMLDivElement] with 40+ HTML tag mappings
  • MutationObserver no-op stubobserve(), disconnect(), takeRecords() for SSR compatibility
  • document.nodeType (returns 9) and document.nodeName (returns "#document") getters
  • Node object identity — same DOM node always returns the same JS wrapper (el.parentNode === el.parentNode, document.body === document.body). Uses DocumentData.node_map with gc_mark to prevent premature collection
  • 163 WPT-ported testsNode, Element, ChildNode, Document APIs adapted from Web Platform Tests

Changed

  • tagName/nodeName return uppercase for HTML elements (spec compliant). SVG/MathML elements preserve original case
  • textContent = "" removes all children instead of creating an empty text node
  • Default max_stack_size bumped to 4 MB (from 1 MB) — Vue mount path needs ~2 MB+
  • innerHTML setter uses shared remove_all_children path with node map eviction

Fixed

  • Node identity cache leakinnerHTML= and textContent= now recursively evict replaced subtrees from the node map, preventing stale pointers and unbounded map growth
  • JS_DupValue leak on OOM — map put failure now frees the duplicated ref
  • Removed unused qb_node_set_user/qb_node_get_user C bridge functions, NodePtr type alias, and empty element_finalizer

v0.5.0

13 Mar 10:06

Choose a tag to compare

Add precompiled NIF checksums, restrict targets to built platforms