Skip to content

Commit 41fc42e

Browse files
release: promote Rezi to beta (v0.1.0-beta.1) (#414)
* docs: reposition README, roadmap, and status wording for beta Rewrite the README around the beta line: status and versioning policy, requirements with the prebuilt binary matrix, a short architecture overview, and contribution entry points. Refresh ROADMAP.md to reflect shipped work and the path to 1.0, and update status wording from pre-alpha to beta across the docs index, widget stability pages, protocol versioning notes, and constraint guides. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(jsx): pin JSX component parity to the ui.* factory surface The JSX component layer is maintained by hand. These tests assert that every ui.* factory has a PascalCase component export, that every component maps back to a factory, and that every component is re-exported from the package index, so the wrapper layer cannot drift silently when core widgets change. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * chore(release): prepare v0.1.0-beta.1 Set all workspace and template versions to 0.1.0-beta.1, sync the lockfile, and add the changelog entry. Declare Bun support in the testkit engines field, matching the other runtime packages. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 7190ec0 commit 41fc42e

30 files changed

Lines changed: 231 additions & 138 deletions

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,23 @@ The format is based on Keep a Changelog and the project follows Semantic Version
66

77
## [Unreleased]
88

9+
## [0.1.0-beta.1] - 2026-06-11
10+
11+
### Changed
12+
13+
- **project**: Promoted Rezi from alpha to beta. The core public API is recorded and diffed in CI, widget guarantees are documented as stability tiers, and remaining pre-1.0 breaking changes will be batched and documented with migration notes.
14+
- **testkit**: Declared Bun support (`bun >= 1.3.0`) in `engines`, matching the other runtime packages.
15+
16+
### Added
17+
18+
- **jsx**: Parity tests that pin the JSX component surface to the `ui.*` factory surface in both directions, so the hand-maintained wrapper layer cannot drift silently.
19+
20+
### Documentation
21+
22+
- **README**: Rewritten for the beta line: status and versioning policy, requirements and the prebuilt binary matrix, an architecture overview, and contribution entry points.
23+
- **ROADMAP**: Refreshed to reflect shipped work (Bun support, CI benchmark comparisons) and the path to 1.0.
24+
- **docs**: Status wording updated from pre-alpha to beta across the docs index, widget stability pages, and protocol versioning notes.
25+
926
## [0.1.0-alpha.81] - 2026-06-04
1027

1128
### Release Infrastructure

README.md

Lines changed: 75 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
11
# Rezi
22

3-
> **Status: pre-alpha.** Rezi is under active development. Public APIs, native ABI details, and behavior may change between releases. It is not yet recommended for production workloads.
3+
[![CI](https://github.com/RtlZeroMemory/Rezi/actions/workflows/ci.yml/badge.svg)](https://github.com/RtlZeroMemory/Rezi/actions/workflows/ci.yml)
4+
[![npm](https://img.shields.io/npm/v/%40rezi-ui%2Fcore)](https://www.npmjs.com/package/@rezi-ui/core)
5+
[![license](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
46

5-
Rezi is a TypeScript framework for building serious terminal applications on Node.js and Bun. It gives you structured layout, focus and input handling, routing, widgets, testing tools, and a native-backed rendering pipeline powered by the [Zireael engine](https://github.com/RtlZeroMemory/Zireael) written in C.
7+
Rezi is a TypeScript framework for building terminal applications on Node.js and Bun. It provides structured layout, focus and input handling, routing, widgets, and testing tools, with rendering handled by [Zireael](https://github.com/RtlZeroMemory/Zireael), a terminal engine written in C.
68

79
**Links:** [Website](https://rezitui.dev/) · [Docs](https://rezitui.dev/docs/) · [Quickstart](https://rezitui.dev/docs/getting-started/quickstart/) · [Widgets](https://rezitui.dev/docs/widgets/) · [Benchmarks](https://rezitui.dev/docs/benchmarks/)
810

911
![Rezi command console demo](assets/REZICONSOLE3.gif)
1012

11-
## What Rezi Is For
13+
## Status
1214

13-
Rezi is aimed at dashboards, control planes, internal tools, log viewers, and developer workflows that need more than line-oriented output: multi-panel layouts, routed screens, focusable controls, forms, tables, overlays, testing support, and predictable behavior under keyboard and mouse input.
15+
Rezi is in **beta**. The core API — the app model, layout, input routing, theming, and the widget surface — is stable enough to build on, and the public API of `@rezi-ui/core` is recorded and diffed in CI. Breaking changes still happen before 1.0, but they are deliberate, batched, and documented in the [changelog](CHANGELOG.md) with migration notes.
1416

15-
## Why Rezi
17+
Individual widgets carry explicit [stability tiers](docs/widgets/stability.md) (`stable`, `beta`, `experimental`), so the guarantees that apply to what you use are spelled out rather than implied.
1618

17-
- Structured app model for real TUI workflows
18-
- Declarative widget API without requiring React
19-
- Native-backed framebuffer diffing and terminal output through Zireael
20-
- First-party widgets for forms, tables, overlays, routing, charts, and command flows
21-
- Reproducible rendering and input contracts for behavior-first tests
19+
## What Rezi Is For
2220

23-
## What Rezi Includes
21+
Dashboards, control planes, internal tools, log viewers, agent consoles, and developer workflows that need more than line-oriented output: multi-panel layouts, routed screens, focusable controls, forms, tables, overlays, and predictable behavior under keyboard and mouse input.
22+
23+
## Why Rezi
2424

25-
- Layout primitives for rows, columns, grids, panels, spacing, and layered screens
26-
- Interactive widgets such as buttons, inputs, selects, checkboxes, radios, sliders, tabs, tables, virtual lists, trees, dialogs, dropdowns, and toasts
27-
- Graphics and data-display widgets including canvas, charts, gauges, sparklines, heatmaps, and image support
28-
- Application primitives for focus management, keybindings, routing, theming, and controlled state updates
29-
- Testing utilities for render assertions, routing and focus behavior, and replayable input workflows
30-
- A native-backed rendering path through Zireael for layout, framebuffer diffing, and terminal output
25+
- A structured app model instead of a rendering loop you assemble yourself
26+
- A declarative widget API that does not require React
27+
- Native framebuffer diffing and terminal output through a fuzz-tested C engine
28+
- First-party widgets for forms, tables, trees, overlays, charts, file pickers, and command palettes
29+
- Reproducible rendering and input contracts, so application behavior is testable
3130

3231
## Example
3332

@@ -63,12 +62,6 @@ app.keys({ q: () => app.stop() });
6362
await app.run();
6463
```
6564

66-
Install:
67-
68-
```bash
69-
npm install @rezi-ui/core @rezi-ui/node
70-
```
71-
7265
## Quick Start
7366

7467
```bash
@@ -85,47 +78,85 @@ cd my-app
8578
bun run start
8679
```
8780

88-
## Public Templates
81+
Or add Rezi to an existing project:
82+
83+
```bash
84+
npm install @rezi-ui/core @rezi-ui/node
85+
```
86+
87+
Three templates are available:
8988

90-
- `minimal` - small single-screen starter for focused utilities
91-
- `cli-tool` - routed multi-screen starter for product-style terminal tools
92-
- `starship` - larger command-console showcase with routing, charts, canvas, forms, and overlays
89+
- `minimal` single-screen starter for focused utilities
90+
- `cli-tool` routed multi-screen starter for product-style terminal tools
91+
- `starship` — large command-console showcase with routing, charts, canvas, forms, and overlays
9392

94-
## Starship Demo
93+
Start with `minimal` or `cli-tool`. Use `starship` (`npm create rezi my-console -- --template starship`) when you want the full surface area in one app.
9594

96-
Use the template when you want a larger example of Rezi's app architecture:
95+
## Requirements
9796

98-
```bash
99-
npm create rezi my-console -- --template starship
100-
```
97+
- Node.js 18+ or Bun 1.3+
98+
- Linux, macOS, or Windows
10199

102-
The demo intentionally shows the broad surface area. For new applications, start with `minimal` or `cli-tool` unless you specifically want the full showcase.
100+
`@rezi-ui/native` ships prebuilt binaries for Linux x64/arm64 (glibc), macOS x64/arm64, and Windows x64/arm64, so `npm install` never compiles C. Alpine/musl is not yet supported. Terminal capabilities — color depth, mouse, bracketed paste, synchronized output — are probed at startup, and output adapts to what the terminal reports.
103101

104-
## Feature Maturity
102+
## How It Works
105103

106-
Rezi is still pre-alpha, but not every feature has the same risk profile. Core layout, input, routing, tables, virtual lists, command palette, and file-picker workflows are the current hardening focus. Richer surfaces such as advanced graphics, charts, code/editor-style widgets, and specialized dialogs should be treated as beta or experimental while the public API settles.
104+
Your application builds a widget tree in TypeScript. `@rezi-ui/core` lays it out and serializes the result into a compact binary drawlist. The Zireael engine validates the drawlist, diffs it against the previous frame, and writes the minimal terminal update; in the other direction it parses keyboard, mouse, paste, and resize input into event batches that core routes through focus and keybindings. The protocol at this boundary is versioned and [documented](docs/protocol/zrdl.md).
105+
106+
The API stays in TypeScript; the hot path stays in C; both sides are tested in isolation. See [Architecture](docs/architecture/index.md).
107107

108108
## Packages
109109

110110
| Package | Purpose |
111111
|---|---|
112-
| `@rezi-ui/core` | Widget API, layout, routing, focus, forms, themes, testing hooks |
113-
| `@rezi-ui/node` | Node/Bun backend, terminal I/O, scheduling, native integration |
114-
| `@rezi-ui/native` | N-API binding to the Zireael engine |
115-
| `@rezi-ui/jsx` | Optional JSX runtime over the core API |
116-
| `@rezi-ui/testkit` | Testing utilities |
117-
| `create-rezi` | Project scaffolding CLI |
112+
| [`@rezi-ui/core`](https://www.npmjs.com/package/@rezi-ui/core) | Widget API, layout, routing, focus, forms, themes, test renderer |
113+
| [`@rezi-ui/node`](https://www.npmjs.com/package/@rezi-ui/node) | Node/Bun backend: terminal I/O, scheduling, native engine integration |
114+
| [`@rezi-ui/native`](https://www.npmjs.com/package/@rezi-ui/native) | N-API binding to the Zireael engine, with prebuilt binaries |
115+
| [`@rezi-ui/jsx`](https://www.npmjs.com/package/@rezi-ui/jsx) | Optional JSX runtime over the core API |
116+
| [`@rezi-ui/testkit`](https://www.npmjs.com/package/@rezi-ui/testkit) | Assertions, snapshot helpers, and deterministic fuzz utilities |
117+
| [`create-rezi`](https://www.npmjs.com/package/create-rezi) | Project scaffolding CLI |
118+
119+
All publishable packages share one version and release together.
120+
121+
## Versioning
122+
123+
Rezi follows semantic versioning, applied through stability tiers during the beta line:
124+
125+
- `stable` widgets and the core app, layout, and routing APIs do not change documented behavior without a changelog callout and a migration note
126+
- `beta` widgets are tested for their core invariants; contract details may still evolve
127+
- `experimental` widgets may change at any time
128+
129+
The full tier assignment per widget is in [Widget Stability](docs/widgets/stability.md).
130+
131+
## Testing
132+
133+
Applications are testable without a terminal: `@rezi-ui/core` includes a deterministic test renderer, and `@rezi-ui/testkit` adds assertions, frame snapshots, and seeded fuzz helpers on top of `node:test`. The framework holds itself to the same bar — behavior-contract tests, golden-frame tests, fuzzed parsers on both sides of the native boundary, and a Linux/macOS/Windows × Node 18/20/22 × Bun CI matrix. See the [testing guide](docs/guide/testing.md).
118134

119135
## Performance
120136

121-
Rezi is designed to stay fast on structured terminal workloads. Benchmark methodology, caveats, and committed result snapshots are documented in [BENCHMARKS.md](BENCHMARKS.md) and [docs/benchmarks.md](docs/benchmarks.md).
137+
Rezi is designed to stay fast on structured terminal workloads. Benchmark methodology, caveats, and committed result snapshots are documented in [BENCHMARKS.md](BENCHMARKS.md) and on the [benchmarks page](docs/benchmarks.md).
122138

123139
## Documentation
124140

125141
- [Install](docs/getting-started/install.md)
126142
- [Quickstart](docs/getting-started/quickstart.md)
127-
- [Create Rezi](docs/getting-started/create-rezi.md)
128-
- [Widget Catalog](docs/widgets/index.md)
143+
- [Widget catalog](docs/widgets/index.md)
129144
- [Examples](docs/getting-started/examples.md)
130145
- [Architecture](docs/architecture/index.md)
131146
- [Benchmarks](docs/benchmarks.md)
147+
148+
## Contributing
149+
150+
Bug reports and pull requests are welcome. Start with [CONTRIBUTING.md](CONTRIBUTING.md); the short version:
151+
152+
```bash
153+
npm ci
154+
npm run build
155+
npm test
156+
```
157+
158+
For reporting security issues, see [SECURITY.md](SECURITY.md).
159+
160+
## License
161+
162+
[Apache-2.0](LICENSE)

ROADMAP.md

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,25 @@
22

33
This roadmap is directional only. It is not a commitment to scope, ordering, or dates. Release decisions are based on shipped, tested behavior.
44

5-
## Alpha direction (near term)
5+
## Beta (current)
66

7-
- Close remaining `createApp` lifecycle edge cases
7+
- Hold the documented API surface stable; batch any remaining breaking changes with migration notes
88
- Continue frame coalescing and allocation reduction work
9-
- Add targeted example applications
10-
11-
### Completed in Sprints 1-5
12-
13-
- Widget capability drift -> fixed via protocol registry.
14-
- Narrow action model -> extended routed action model shipped.
15-
- Overlay fragmentation -> unified overlay system shipped.
16-
- DS recipe gap -> recipes wired across major interactive widgets.
17-
- Animation lifecycle gap -> `onComplete` callback support added to animation hooks.
9+
- Harden widget composition APIs (`defineWidget`)
10+
- Expand recipes and real-world examples; refresh the oldest documentation pages
11+
- Deprecate raw string `expr(...)` constraints in favor of the typed constraint helpers
1812

19-
## Beta direction (medium term)
13+
## Toward 1.0
2014

21-
- Harden widget composition APIs (`defineWidget`)
22-
- Expand recipes and patterns documentation
23-
- Add CI benchmark regression tracking
24-
- Evaluate plugin/extension architecture
15+
- Graduate or prune `experimental`-tier widgets so the 1.0 surface is intentional
16+
- Freeze drawlist and event protocol guarantees together with Zireael
17+
- Streaming markdown widget and an agent-console template
18+
- Developer tooling: layout, focus, and frame-timing inspection overlay
19+
- Code coverage reporting and blocking benchmark regression gates in CI
2520

26-
## Stable direction (longer term)
21+
## After 1.0
2722

28-
- Explore additional runtime backends (for example Bun, Deno) via `@rezi-ui/core` portability
29-
- Add platform capabilities as Zireael evolves
30-
- Improve accessibility coverage
31-
- Support a community widget ecosystem
23+
- WebAssembly build of the Zireael engine as a portable fallback and a browser embedding target
24+
- Plugin and community widget ecosystem
25+
- Additional runtime backends (for example Deno) via `@rezi-ui/core` portability
26+
- Accessibility coverage improvements

docs/design-principles.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Design Principles
22

3-
This page records the layout rules Rezi follows in the current alpha line.
3+
This page records the layout rules Rezi follows in the current beta line.
44

55
---
66

@@ -22,7 +22,7 @@ Use the first mechanism that fits the need:
2222
- `visibilityConstraints`, `widthConstraints`, `heightConstraints`, `spaceConstraints`, `groupConstraints`, `conditionalConstraints`
2323
- Raw `expr("...")` is the escape hatch for custom rules.
2424
- `%` size strings and responsive-map layout constraints (`{ sm, md, ... }`) are not part of the public API.
25-
- `grid.columns` accepts `number | string` in alpha; `columns: expr(...)` is invalid.
25+
- `grid.columns` accepts `number | string` in the beta line; `columns: expr(...)` is invalid.
2626
- Layout-driven visibility uses `display: ...` constraints; business logic visibility uses `show(...)`/`when(...)`/`maybe(...)`/`match(...)`.
2727

2828
---

docs/guide/constraint-recipes.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,9 @@ width: conditionalConstraints.ifThenElse(
120120

121121
---
122122

123-
## 6) Responsive grid (alpha contract)
123+
## 6) Responsive grid (beta contract)
124124

125-
Because `grid.columns: expr(...)` is intentionally invalid in alpha, build two grids and switch with `display`.
125+
Because `grid.columns: expr(...)` is intentionally invalid in the beta line, build two grids and switch with `display`.
126126

127127
```ts
128128
ui.column({ gap: 1 }, [

docs/guide/constraints.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Constraints Guide
22

3-
Rezi's helper-first constraints API is the canonical way to express derived layout relationships in the alpha branch.
3+
Rezi's helper-first constraints API is the canonical way to express derived layout relationships in the beta line.
44
Use `expr("...")` as an advanced escape hatch when helper primitives do not cover the case.
55

66
See also:
@@ -19,7 +19,7 @@ See also:
1919
- Use `display: expr("...")` only as an escape hatch when a helper does not fit the visibility rule.
2020
- Keep business-logic visibility in `show(...)`, `when(...)`, `match(...)`, or `maybe(...)`.
2121
- `%` layout size strings and responsive-map layout constraints (`{ sm, md, ... }`) are removed.
22-
- `grid.columns` supports `number | string` only in alpha. `columns: expr(...)` is intentionally invalid.
22+
- `grid.columns` supports `number | string` only in the beta line. `columns: expr(...)` is intentionally invalid.
2323

2424
## Supported References
2525

@@ -104,7 +104,7 @@ Notes:
104104

105105
## Grid Contract (Important)
106106

107-
`grid.columns` does not currently accept `expr(...)` in alpha.
107+
`grid.columns` does not currently accept `expr(...)` in the beta line.
108108

109109
Supported:
110110

@@ -116,7 +116,7 @@ ui.grid({ columns: "14 auto 1fr", gap: 1 }, ...children)
116116
Not supported:
117117

118118
```ts
119-
ui.grid({ columns: expr("max(1, floor(parent.w / 24))") }, ...children) // invalid in alpha
119+
ui.grid({ columns: expr("max(1, floor(parent.w / 24))") }, ...children) // invalid in the beta line
120120
```
121121

122122
For responsive behavior, compose multiple grids and switch with `display: expr(...)`.

docs/guide/debugging-constraints.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Fix:
4646
Cause: prop contract violations, for example:
4747
- `%` size strings
4848
- responsive-map layout constraints (`{ sm, md, ... }`)
49-
- `grid.columns: expr(...)` (invalid in alpha)
49+
- `grid.columns: expr(...)` (invalid in the beta line)
5050

5151
Fix:
5252
- Migrate to helper constraints / `expr` where supported

docs/guide/layout-decision-tree.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Need to set a size?
3131

3232
5. **2D arrangement**
3333
- Use: `ui.grid({ columns: number | string, ... })`
34-
- For responsive columns in alpha: compose multiple grids and switch via `display`
34+
- For responsive columns in the beta line: compose multiple grids and switch via `display`
3535

3636
---
3737

docs/guide/layout.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,8 @@ When these child-constraint props are passed to unsupported widget kinds (for ex
244244
Responsive layout notes:
245245

246246
- Use `fluid(min, max, options?)` to interpolate deterministically between breakpoints (`sm`, `md`, `lg`, `xl`) with floor semantics and clamped bounds.
247-
- `%` size strings and responsive-map layout constraints (`{ sm, md, lg, xl }`) are removed in the breaking alpha. Use `expr("steps(...)")` or `fluid(...)`.
248-
- `grid.columns` currently accepts `number | string` only (alpha contract). `columns: expr(...)` is invalid.
247+
- `%` size strings and responsive-map layout constraints (`{ sm, md, lg, xl }`) were removed during the alpha line. Use `expr("steps(...)")` or `fluid(...)`.
248+
- `grid.columns` currently accepts `number | string` only (beta contract). `columns: expr(...)` is invalid.
249249

250250
```typescript
251251
import { fluid, ui } from "@rezi-ui/core";

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Rezi is a code-first terminal UI framework for Node.js and Bun. It uses a declarative widget API, deterministic input routing, and native-backed rendering through the [Zireael](https://github.com/RtlZeroMemory/Zireael) C engine.
44

5-
> **Status: pre-alpha**. Rezi is under active development. Public APIs, ABI details, and behavior may change between releases. It is not yet recommended for production workloads.
5+
> **Status: beta**. The core API is stable and recorded against a public API report. Breaking changes before 1.0 are batched and documented in the changelog with migration notes. Per-widget guarantees are listed in [Widget Stability](widgets/stability.md).
66
77
## Focus
88

0 commit comments

Comments
 (0)