0.0.21 cohort: widgets, text editing and a playground in the docs¶
Published on 2026-10-21, every crate by one release run, with
rs-rich
0.0.9 on PyPI (uploaded early on 2026-10-22, UTC). See
Publication.
0.0.21 fixes what the demo loop's seventh round found and adds what the
clones and a consumer asked for: stock form controls, a log pane fed by
tracing, text editing with Emacs and Vim keys, effect presets, new charts,
Huh-style forms, Mermaid sequence and ER diagrams, and Syntax and
Markdown without syntect. The docs gain a playground: guide blocks, CLI
examples and whole apps run in the reader's tab. rs-rich has a mark of its
own, and intuiTUIve a section of its own with Memo, its mascot. The
0.0.21 plan says what moved on to 0.0.22.
- Round 7's four bugs, fixed. The focus after a modal, a styled
layersnode covering its children's gaps,layout::squarifykeeping the largest tile, and a text box keeping its keys inside apreviews_keyscontainer. The clones lose their workarounds. - csv's million-row filter is fast again.
TableSource::rowsreads in bulk andrich_ext::transform::Patternruns a regex on a&str: 15.4 s to 3.8 s in the unoptimised build (2.3 s to 0.27 s in release). - Form controls.
button,checkbox,switch_toggle,radio,slider,select_field,collapsibleandspinner(withloading_when), with roles and values for assistive technology. See Buttons and form controls. - Logs in a pane. intuiTUIve's
Logkeeps a scrollback, follows the newest line, filters by level, target and query, and has a targets panel; the off-by-defaulttracingplugin feeds it from the app's own events through rs-rich-ext's newChannelSink. - Text editing. A kill ring, search with a find bar, word wrap, tabs,
an undo limit and caret shapes; rebindable keys with Emacs and Vim
presets (Vim behind a
vimfeature). See Editing text. - Effect presets. intuiTUIve's
fxmodule: fades, dissolve, sweep, slide, glitch, rain, shimmer and skeleton placeholders, composed in sequence or in parallel, played once, on a condition or as a transition, and straight to their end in accessible mode. - Charts, QR codes and gradients.
PieChart(and donuts), stacked bars and areas,QrCodebehind the newqrfeature, andGradientText;rich chart --kind pieand--kind stacked. See Charts. - Huh-style forms and
rich spin.Formgains multi-select, notes, descriptions, file and dynamic-choice fields and pages over a newPaginator;rich spin -- COMMANDruns a command under a spinner, aftergum spin. - Mermaid sequence and ER diagrams, drawn as text, and labels at an
edge's ends in rs-rich-diagram (DOT's
taillabelandheadlabel). - For ODS, a consumer's review. rs-rich-ext writes renderables as
GitHub Markdown (Markdown for GitHub),
takes plain-text table cells, and highlights SQL with no syntect. Core's
new
codefeature rendersSyntaxandMarkdownwithout syntect (Divergences #39), andTable,Panel,RuleandMarkdowngain read-only getters that mirror upstream's attributes. - No DevTools port on Linux and macOS. rs-rich-embed's Chrome engine speaks DevTools over a pipe there; Windows keeps the port, still a known limit.
- The marketplace's listing format. A JSON Schema, a validator in CI
and a design note; rs-rich-plugin-api exposes
the checks a resolver makes against the host's plugin API and ABI. The
crate that resolves and installs, and
rich plugin, are 0.0.22's. - A playground in the docs. Try it on guide blocks (rs-rich in
wasm), a terminal for CLI examples (
richon WASI), and Run it forchoose,filter,pager,exploreand four intuiTUIve apps. See the Playground. - Builders are
#[must_use]in every crate but the mirror, so a dropped builder warns. - rs-rich's own identity. A mark, favicon, wordmark, section icons and hero in gold; intuiTUIve as a top-level section with its own mark, a widget index, and Memo and Tui.
A default build of rs-rich still renders exactly like upstream rich
15.0.0: the code feature only changes a build without syntect, and the
getters only read.
Independent package versions¶
| Package | Version | Release role |
|---|---|---|
rs-rich |
0.0.11 | The code feature (Syntax and Markdown without syntect); read-only getters on Table, Panel, Rule and Markdown; table::Column and table::Row public |
rs-rich-macros |
0.0.5 | Lint only; requires core 0.0.11 |
rs-rich-plugin-api |
0.0.5 | is_supported_api_version and abi::is_supported, the checks the marketplace resolves against; #[must_use] |
rs-rich-art |
0.0.14 | #[must_use]; requires core 0.0.11 |
rs-rich-diagram |
0.0.4 | Labels at an edge's ends (Edge::start_label, end_label) |
rs-rich-mermaid |
0.0.7 | Sequence and ER diagrams drawn as text |
rs-rich-lumis |
0.0.5 | Lint only; requires the versions above |
rs-rich-ext |
0.0.18 | markdown_export, plain-text cells, the sql highlighter, the code feature; pie, stacked and gradient charts, qr; ChannelSink and Record::from_event; transform::Pattern |
rs-rich-micro |
0.0.7 | #[must_use]; requires ext 0.0.18 |
rs-rich-record |
0.0.9 | A held key repeats only while it is held; #[must_use] |
rs-rich-interact |
0.0.9 | Text editing, editor keymaps and the vim feature; Huh-style form fields, pages and Paginator; the EventLoop push API; the syntax feature |
rs-rich-ratatui |
0.0.6 | #[must_use]; requires ext 0.0.18 (and interact 0.0.9 behind its interact feature) |
rs-rich-intuituive |
0.0.6 | Round 7's four bugs and TableSource::rows; form controls, the log pane and the tracing plugin, text editing, fx effect presets; the syntax feature and wasm32 builds |
rs-rich-embed |
0.0.4 | Chrome's DevTools over a pipe on Linux and macOS |
rs-rich-web |
0.0.4 | The server feature; input and dom build for wasm32 |
rs-rich-data |
0.0.5 | #[must_use]; requires the versions above |
rs-rich-cli |
0.0.21 | rich spin; rich chart --kind pie and --kind stacked; Mermaid sequence and ER diagrams; builds for wasm32-wasip1; requires the versions above |
The Python package, rs-rich 0.0.9 on PyPI, builds against these crates and
adds bindings for the Markdown export, plain-text cells, the SQL
highlighter, Table.columns and rows, Mermaid sequence and ER diagrams,
line-end labels, and the multi-select and file form fields.
Migration¶
Breaking changes in 0.0.x crates (the CHANGELOG has each):
rich_interact::ValuegainsListandPath. An exhaustivematchon it needs the two arms;Answersgainslistandpath. In Python, a form's path answer is apathlib.Path.rich_diagram::Edgehas two new public fields,start_labelandend_label(Option<String>): a struct literal names them (Nonefor none), or start fromEdge::new(from, to)and set the fields you need.- Builders are
#[must_use]. Nothing stops compiling, but a dropped builder, or a dropped setter on aCopyhandle such asTransport::tickorTimer::max_catch_up, now warns (unused_must_use). A handle's setter still makes its change: writelet _ =to keep the old behaviour without the warning. Under-D warningsthe warning is an error. - Builds without default features. The defaults are unchanged, but what a feature turns on moved:
- core's
markdownturns on the newcodefeature, notsyntax: withdefault-features = false, addsyntaxfor syntect's highlighting in code blocks. rs-rich-ext forwards the same split (code,syntax,markdown;sqlturns oncode). - rs-rich-interact, rs-rich-intuituive and rs-rich-web have a new
default
syntaxfeature: a build without default features leaves syntect out unless it namessyntax. - rs-rich-web's serving code (
serve,serve_command,Server, the page, the session processes) is behind the new defaultserverfeature. - Behaviour: with nothing focused, the arrow keys scroll a scrollable
Logunder the pointer; without a terminal,rich spinruns the command with its output let through.
Release test¶
- The release gate (
scripts/validate_release.py --tag release-0.0.21) onmainatc25f65ewith the notes on top, in a Linux container: fmt; clippy-D warningswith default features,--all-features, and the CLI without default features;cargo test --all(5,548 passed, 8 ignored, none failed), the CLI without default features (545 passed) and the plugin loaders (29 passed); the four release script suites (142 tests); the version tables,RELEASES.tomland the CLI reference up to date;cargo check --workspace --locked;check_packages.py(all 17 crates packaged and verified);release.py plan release-0.0.21selecting all 17. The tests were built without debug info, as the container's disk could not hold a debug build of the workspace's tests. - The golden fixtures (34 files, 4,561 cases) regenerate byte for byte from rich 15.0.0.
- The docs tapes: all 67 tapes, 253 screenshots, match with a release build of the CLI and the examples, built with CI's features.
- The docs:
mkdocs build --strictfor both sites. - The declared MSRV: CI's checks on Rust 1.90 (the workspace with every feature, and the CLI with CI's features) and on 1.91 (rs-rich-lumis, and the CLI with every feature).
- CI on #764's head (
22718fd, which holds #763 too): 68 checks passed, including the feature matrix and the macOS and Windows jobs this pass did not run.
Not in this release¶
The plan's larger workstreams were not started in this cohort, and move to 0.0.22 with the marketplace's commands:
- Parity (workstreams 3 to 6): the partial rows of
PORTING,
scope.py, the divergences' verdicts and the differential fuzzer's new renderers. - The
rs-rich-marketplacecrate (resolving, downloading, the lockfile); only the listing format and the host's version checks shipped. - The gaps three clones share (workstream 2) and a re-run of the clones against it.
- The recorder's frame rate on macOS, the APNG default (still an open decision) and rs-rich-doom on the 0.0.20 crates.
Known limits¶
See Known issues, which applies to this release.
Still open from 0.0.20:
the recorder keeps fewer frames on macOS,
a tape without Output also writes an APNG
and Chrome's DevTools port on Windows.
Publication¶
- On 2026-10-21, on
mainat29084d4, the 17 record tags (rs-rich-v0.0.11,rs-rich-macros-v0.0.5,rs-rich-plugin-api-v0.0.5,rs-rich-art-v0.0.14,rs-rich-diagram-v0.0.4,rs-rich-mermaid-v0.0.7,rs-rich-lumis-v0.0.5,rs-rich-ext-v0.0.18,rs-rich-micro-v0.0.7,rs-rich-record-v0.0.9,rs-rich-interact-v0.0.9,rs-rich-ratatui-v0.0.6,rs-rich-intuituive-v0.0.6,rs-rich-embed-v0.0.4,rs-rich-web-v0.0.4,rs-rich-data-v0.0.5,rs-rich-cli-v0.0.21), thenrelease-0.0.21andpython-v0.0.9, each withRelease: 0.0.21andCommit:lines. - The one
release.ymlrun forrelease-0.0.21published every crate, inRELEASES.toml's order, and verified each version from crates.io (21:53 to 22:48 UTC; run). - The Python package,
python-v0.0.9on29084d4, throughpypi-release.yml: built with the crates, then published to PyPI, finishing at 03:28 UTC on 2026-10-22 (run). - The docs workflow ran on the tag push and succeeded.