Skip to content

Releases: joshburgess/tachys

v0.1.2

02 May 16:36

Choose a tag to compare

Fix h() rest-arg type to accept array children. The 0.1.1 runtime change made h(tag, props, items.map(...)) flatten correctly, but ChildArg was left
non-recursive so the call site still failed type-checking. ChildArg is now VNode | string | number | null | undefined | ChildArg[].

v0.1.1

02 May 15:10

Choose a tag to compare

Patch release.

Fixed

  • h() rest-arg API now flattens a single array child, matching React's and Inferno's createElement. Previously, the single-child fast path in normalizeChildren did not call Array.isArray, so a call like:

    h("ul", null, items.map((item) => h("li", { key: item.id }, item.label)))

    stored the array itself as a single VNode child instead of flattening it, producing broken output. Users had to spread the array (...items.map(...)) to work around it. The multi-child path already handled arrays correctly; this brings the length-1 path in line.

    Fixes the migration story for code coming from React or Inferno's createElement call sites. JSX users were unaffected because the JSX automatic runtime (tachys/jsx-runtime) was already array-aware.

Install

pnpm add tachys@0.1.1

Full diff: v0.1.0...v0.1.1

v0.1.0

02 May 01:05

Choose a tag to compare

First public release of Tachys.

Tachys is a high-performance virtual DOM library with a React-compatible API. On the Krausest js-framework-benchmark, it matches Inferno on click-to-paint time (1.007x geomean) and is ~18% faster on script time (0.823x geomean). Core runtime is ~36KB minified, ~11KB gzipped, zero dependencies.

Packages

Package Description
tachys Core runtime: VDOM, hooks, Suspense, ErrorBoundary, streaming SSR, hydration, concurrent scheduler
babel-plugin-tachys Compiles JSX components to markCompiled + _template form, skipping the VDOM at runtime
swc-plugin-tachys Same compile pipeline, parsed via @swc/core for SWC-based toolchains
compiler-core-tachys Shared portable IR + emitter used by both compiler frontends
tachys-aeon Aeon FRP integration: Behavior and Event as first-class UI primitives via hooks

What's in core

  • Function components and hooks: useState, useReducer, useEffect, useLayoutEffect, useMemo, useCallback, useRef, useContext, useTransition, useDeferredValue, useId, useSyncExternalStore, use
  • memo, forwardRef, lazy, createPortal, createRef
  • Suspense + ErrorBoundary (works with lazy() and use(promise))
  • Streaming SSR (renderToReadableStream) with selective hydration
  • Concurrent scheduler with priority lanes
  • React compatibility shim (tachys/compat) so existing React code can import from Tachys
  • Lean entry points (tachys/sync, tachys/sync-core) that drop the concurrent scheduler and Suspense for apps that don't need them

Install

pnpm add tachys

JSX setup, full API, and architecture notes: https://joshburgess.github.io/tachys/

Notes

  • Dual-licensed under MIT or Apache-2.0
  • Requires Node.js >= 18
  • 962 tests passing across 55 files