Releases: joshburgess/tachys
v0.1.2
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
Patch release.
Fixed
-
h()rest-arg API now flattens a single array child, matching React's and Inferno'screateElement. Previously, the single-child fast path innormalizeChildrendid not callArray.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
createElementcall sites. JSX users were unaffected because the JSX automatic runtime (tachys/jsx-runtime) was already array-aware.
Install
pnpm add tachys@0.1.1Full diff: v0.1.0...v0.1.1
v0.1.0
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,createRefSuspense+ErrorBoundary(works withlazy()anduse(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 tachysJSX 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