Skip to content

Release notes

Release history

Scan every xote release, grouped by version with the release date visible on each entry. View full changelog

v7.1.0

Latest
23 changes

Bug Fixes

  • effect: keep a disposed effect dead when its queued run fires (547e86c)
  • effect: own effects created while a component renders (ef49150)
  • enforce the public API boundary with interface files (b1d6ded)
  • hydration: a hydrated keyed list never subscribed to its signal (7240c9d)
  • owner: restore the active scope when a component body throws (291d8e9)
  • ppx: leave attrs and event handlers exactly as written (7946943)
  • ppx: leave the data object exactly as written (d9c88b2)
  • remove @rescript/core dependency (fa11c35)
  • render: make a component body its own reactive scope (3bab9b7), closes #17
  • render: release the computeds the library builds for a node (71ec379)
  • render: retire a replaced keyed row where it lives (0807262)
  • render: retire non-keyed children replaced by a keyed list (b56f802)
  • router: release a route region's computed with its node (f0cf2dc)

Features

  • include instructions for agents in the package (450e210)
  • introduce MaybeSignal, deprecate Prop (f5da1e3)
  • jsx: add attrs escape hatch and removable attributes (d405274)
  • maybe-signal: add fold and View.render, fix toSignal (#161) (4222f4d)
  • ppx: add @xote.component for fine-grained components (1515c2c)
  • ppx: ship prebuilt binaries so @xote.component needs no toolchain (0a55a1f)
  • view: add tracked() blocks and coerce bare JSX children (c602626)

Performance Improvements

  • render: allocate an owner only when something registers (89a120b)
  • render: move only the rows a reorder actually displaces (0992cc4)
  • render: walk the disposal tree without snapshotting each node (046e51f)
12 changes

Changes

  • refactor!: remove deprecated modules and redundant API aliases (6745b54)

Bug Fixes

  • docs: resolve accessibility issues (c8f2b45)
  • router: scroll hash targets after navigation (8652f27)
  • view: handle empty value primitive props (e9ccdb1)

Features

  • add focused package entries (e2ee407)
  • add mdx support to xote jsx runtime (e09d13f)
  • jsx: add conditional rendering primitives (ad7558f)
  • jsx: add list rendering primitives (d6958ec)
  • view: add JSX value primitives (bc704c4)
  • view: render primitive children (04305a3)
  • view: support keyed rendering in For (46be19f)

BREAKING CHANGES

  • - Remove the deprecated Node module (use View) - Remove the deprecated ReactiveProp module (use Prop) - Remove View.list / View.keyedList aliases (use View.each / View.eachWithKey) - Remove SSRState.make (use SSRState.signal) and SSRState.syncSignal (use SSRState.sync) Also drops the Node/ReactiveProp entries from rescript.json sources.public and the ./node / ./reactive-prop package exports, migrates in-repo examples/tests to the canonical names, and refreshes the README (favouring the Router/Route/Link component APIs in the Router section), CLAUDE.md, AGENTS.md, and the technical overview.
2 changes

Bug Fixes

  • empty view keyed children (5fbe71b)

Features

  • add SVG attribute props to JSX Elements (63592e5)
1 change

Features

  • add missing pointer event props (3a8f596)
3 changes

Bug Fixes

  • connect keyed JSX to reconciliation (6839f90)

Features

  • add clearer api aliases (1bc01da)
  • promote View and Prop as primary modules (5a1566f)
1 change

Bug Fixes

  • defer initial select value until options mount (7dd1c7f)
1 change

Bug Fixes

  • defer initial select value until options mount (7dd1c7f)
1 change

Performance Improvements

  • bump rescript-signals to ^3.1.0 (f9d3ef9)
1 change

Features

  • add draggable, hidden, title, and other missing JSX props (e6de2ba)
1 change

Bug Fixes

  • add exports field to package.json (c57ed32)
10 changes

Changes

  • refactor!: drop Xote__ prefix and use ReScript namespacing (08991c4)

Changes

  • refactor!: rename Component module to Node (0bb235b)

Changes

  • refactor!: rename JSX module to XoteJSX (ee870d4)

Changes

  • refactor!: split HTML element builders into Html module (8ffd83f)

Changes

  • refactor!: unify reactive node helpers under signal prefix (b1a3ca7)

BREAKING CHANGES

  • Xote.Component is renamed to Xote.Node. Replace all Component.text, Component.signalText, Component.element, Component.mount, etc. with the equivalent Node.* calls.
  • The JSX module is now Xote.XoteJSX. Consumers must update rescript.json: "jsx": { "version": 4, "module": "XoteJSX" }
  • Element builders moved from Component to Html. Replace Xote.Component.div(...) with Xote.Html.div(...) (and the same for span, button, input, h1-h3, p, ul, li, a).
  • The JSX module path changes from Xote__JSX to Xote.JSX. Consumers must update their rescript.json: "jsx": { "version": 4, "module": "JSX" }, "compiler-flags": ["-open Xote"]
  • Xote.Component.textSignal, reactiveString, reactiveInt, and reactiveFloat are removed. Replace call sites with signalText, signalInt, and signalFloat respectively.
2 changes

Changes

  • feat!: update to rescript-signals 2.0.0 (fb2c897)

BREAKING CHANGES

  • Effect.run now returns unit instead of a disposer. Use Effect.runWithDisposer when you need to manually dispose an effect.
1 change

Bug Fixes

  • use createElementNS for SVG elements to fix logo rendering (#61) (7ffefe1)
1 change

Features

  • expose Router.initSSR for server-side route initialization (f232d0b)
1 change

Bug Fixes

  • defer JSX component evaluation to render time via LazyComponent (e685fc1)
1 change

Bug Fixes

  • ensure computed attributes are only updated within the effect context (#49) (ccf9905)
1 change

Bug Fixes

  • remove @rescript/core dependency and code formatting (774b81f)
1 change

Features

  • add support to common mouse events (3811d10)
1 change

Features

  • add server-side rendering with hydration (8a30af3)
1 change

Features

  • router: add scroll restoration for navigation (a5b8434)
1 change

Features

  • jsx: add support to contextmenu event (#36) (68c7ba2)
1 change

Features

  • update rescript from 1.3.0 to 1.3.3 (35c9a4e)
1 change

Bug Fixes

  • ensures all router instances share same state (a754f96)
1 change

Features

  • router: add base path option to router initialization (b54c6e9)
1 change

Features

  • component: add helpers for rendering reactive and static values (c4b7526)
1 change

Features

  • router: add Link component (0e8d215)
2 changes

Features

  • jsx: allow ReactiveProp.t besides raw values (0e082f5)
  • reactive-prop: add helper functions for static and reactive (2e82b1a)
1 change

Features

  • expose ReactiveProp from Xote module (3704a62)
1 change

Features

  • introduce ReactiveProp module (0dde3b8)
1 change

Bug Fixes

  • component: boolean attributes (60e1155)
1 change

Bug Fixes

  • jsx: reactive support for boolean attributes (c54ed60)
1 change

Bug Fixes

  • component: attribute and property handling (c49cbc0)
2 changes

Features

  • jsx: add support to many other common attributes (d3460d8)
  • jsx: add support to name attributes (07de33d)
1 change

Bug Fixes

  • expose missing source files for rescript projects (4d93ebb)
1 change

Features

  • update rescript-signals from 1.2.0 to 1.3.0 (f5f5c1b)
1 change

Features

  • component: introduce keyedList for list reconciliation (#24) (96800de)
1 change

Bug Fixes

  • components: fix component disposal (adbfcce)
1 change

Features

  • update rescript-signals from v1.0.1 to v1.2.0 (d1f76d8)
2 changes

Code Refactoring

  • move signals to rescript-signals (848b3b8)

BREAKING CHANGES

  • - Xote.Core.t -> Xote.Signal.t - Core.batch removed from API
10 changes

Changes

  • fix!: add cleanup callback support to effects (7aade4f)

Changes

  • refactor!: simplify Computed API with internal tracking (5d9bc01)

Bug Fixes

  • add disposal support for computed observers (f2e8a17)
  • add equality check to Signal.set to prevent unnecessary notifications (2680a19)
  • convert recursive scheduler to iterative loop (0b69c76)
  • restore global tracking state on exceptions (a6e5b70)
  • signal set structural equality check on objects with functions (803aaba)

Features

  • add automatic disposal for computed values (d2f04db)

BREAKING CHANGES

  • Computed.make now returns Core.t<'a> instead of (Core.t<'a>, unit => unit). Use Computed.dispose(signal) for manual disposal instead of calling the dispose function from the tuple. Before: let (signal, dispose) = Computed.make(() => ...) dispose() After: let signal = Computed.make(() => ...) Computed.dispose(signal) This aligns better with common patterns in other reactive libraries like Solid and Preact, providing a cleaner and more intuitive API.
  • Effect.run now expects functions to return option<unit => unit> instead of unit. All existing effects must be updated to return None or Some(cleanupFn).
2 changes

Changes

BREAKING CHANGES

  • ReScript v12 introduces API changes that affect the typeof operator and configuration fields. Projects upgrading will need to: - Update rescript.json to use 'dependencies' and 'compiler-flags' instead of 'bs-dependencies' and 'bsc-flags'
1 change

Bug Fixes

  • implement topological ordering to prevent scheduling glitches (51f1a8c)
2 changes

Bug Fixes

  • automatic disposal of reactive observers to prevent memory leaks (befae81), closes #7
  • preserve signal fragment effect when disposing children (c3d530c)
1 change

Bug Fixes

  • preserve observer tracking context during nested execution (afb9450)
1 change

Features

  • add support to data attributes in Xote.JSX (903c265)
1 change

Bug Fixes

  • enable reactivity for JSX element attributes (0ea7235)
1 change

Features

5 changes

Bug Fixes

  • revert keyed list reconciliation (60aa2a0)

Features

  • add JSX support with generic transform (d71175d)
  • change className to class in JSX props (2515242)
  • implement keyed list reconciliation for efficient updates (dd9c0b8)
  • standardize JSX component naming convention (f683316)
14 changes

Bug Fixes

  • optimize build configuration and reduce bundle size (f9e50dc) # 1.0.0 (2025-11-02)

Bug Fixes

  • adjust build configuration and dist output (5dcca3b)
  • improve signal reactivity and add todo styling (495f0bb)
  • rescript build in release workflow (9b2fb19)
  • version bump (2794ae6)
  • version bump for release (72fb74f)

Features

  • add Component system with automatic reactivity (38815ed)
  • add demo (cf3faf3)
  • bump version (5ac8b19)
  • component: set reactivity to component element attributes (57217e3)
  • component: simplify signalText to accept function directly (9a9d551)
  • component: unify attrs and signalAttrs into single attrs parameter (d8942d9)
  • minimal signal implementation based on the TC39 proposal (9b78d0b)
  • router: add signal-based routing with pattern matching (7bab79e)
4 changes

Features

  • component: set reactivity to component element attributes (57217e3)
  • component: simplify signalText to accept function directly (9a9d551)
  • component: unify attrs and signalAttrs into single attrs parameter (d8942d9)
  • router: add signal-based routing with pattern matching (7bab79e)
3 changes

Features

  • component: set reactivity to component element attributes (57217e3)
  • component: simplify signalText to accept function directly (9a9d551)
  • component: unify attrs and signalAttrs into single attrs parameter (d8942d9)
1 change

Features

  • component: add support to a tags (8ea09c1)
2 changes

Bug Fixes

  • adjust build configuration and dist output (5dcca3b)
  • rescript build in release workflow (9b2fb19)
5 changes

Bug Fixes

  • version bump for release (72fb74f) # 1.0.0 (2025-10-30)

Bug Fixes

  • improve signal reactivity and add todo styling (495f0bb)

Features

  • add Component system with automatic reactivity (38815ed)
  • add demo (cf3faf3)
  • minimal signal implementation based on the TC39 proposal (9b78d0b)