0.0.4 release preparation¶
Prepared source, not published. The latest published release remains 0.0.3. This snapshot includes reviewed diagnostics, GIF rendering, CSV memory, wrapping and syntax changes. Each implementation has tests, measurements where applicable, and actual CLI evidence. Publication remains a separate protected workflow action on the verified main commit.
Package selection¶
| Package | Prepared version | Changes |
|---|---|---|
| rs-rich | 0.0.4 | Ownership extension point for tables; wrapping optimization and optional syntax cache. |
| rs-rich-ext | 0.0.4 | Explicit UTF-8/UTF-16 decoding; updated core dependency. |
| rs-rich-art | 0.0.4 | GIF half-block rendering; updated core dependency. |
| rs-rich-cli | 0.0.4 | Input diagnostics, encoding and GIF selectors, and reduced CSV copies. |
Every crate keeps independent SemVer. Each changes in this snapshot, and the
internal dependency requirements move with the selected versions. After final
verification, coordinated v0.0.4 would select all four; preparation neither
creates that tag nor uploads packages.
Explicit text decoding and clearer diagnostics¶
Image-input errors now lead with an actionable hint and clean extension spelling.
The optional --encoding selector supports strict utf-8, utf-16, utf-16le
and utf-16be decoding for files, stdin and supported URL input. Generic UTF-16
requires a BOM; endian-specific choices also support headerless text. Malformed
input fails clearly. Default decoding remains compatible with upstream; it does
not guess headerless encodings.
See text encoding for BOM handling, malformed input and the distinction between default and explicit decoding.
GIF half-block rendering¶
Existing GIF invocations retain ASCII output. Explicit blocks use terminal color
capabilities; no-color or ASCII-only destinations fall back to ASCII. Redirected
stdout still emits one ASCII frame without animation controls or waiting, even
with --loop 0. Image-diff mode selection remains separate.


These are sequential captures of actual CLI PTY output. See the capability matrix and playback limitations. Ctrl-C can leave the cursor hidden, as with existing ASCII playback. Sixel GIF output and GIF HTML/SVG export are outside this release.
Measured performance improvements¶
Measurements are from optimized Linux development builds on one host, with fixed fixtures and output comparisons. They are not cross-platform guarantees. See benchmarks for commands, raw samples and baseline details.
| Workload | Before | Development result | Interpretation |
|---|---|---|---|
| CSV, 100k rows, peak RSS | 49,884 KiB | 27,088 KiB | About 46% lower peak memory by transferring ownership instead of duplicating cells and row containers. |
| Text wrapping, 1 MiB | 3,998 ms | 87 ms | Removes repeated work on the measured extensionless Text CLI path. |
| Markdown paragraph, 1 MiB | 4,143 ms | 113 ms | Long-paragraph wrapping improvement. |
| Markdown paragraph, 5 MiB | >10,000 ms timeout | 531 ms | Completes within the baseline timeout. |
| Repetitive syntax fixture, about 199 KB | 630 ms | 159 ms | About 75% faster with the optional syntax-cache Cargo feature. |
| Real CLI source syntax fixture | 445 ms | 442 ms | No demonstrated speed improvement on this representative input. |
| Text-module syntax fixture | 254 ms | 257 ms | No measured improvement. |
The extensionless Text CLI rows differ from legacy .txt cases, which select
the plain Syntax renderer. Syntax timings use the off-by-default syntax-cache
Cargo feature. Enable it with
cargo build -p rs-rich-cli --release --features syntax-cache. Default builds
retain the uncached Syntect path. The cache benefits repeated eligible lines;
it does not imply a general startup or highlighting speedup. Existing syntax and
theme caches remain, grammars are retained, and syntect/Pygments differences
remain documented.



CSV still retains source rows for inference and global width measurement. Decorated, aligned, paged and exported paths can retain rendered lines; this is not constant-memory processing. The measured decorated 10k-row peak RSS remains about 111 MiB. Two-pass reading and stdin spooling remain possible future work.
Verification and publication gates¶
The source includes the full test suite, pinned Rich 15 goldens, native Windows and feature/MSRV checks, release-selection regressions and reproducible runtime comparisons. The preparation PR records the final CI and package dry-run results. Generated version tables and CLI help describe 0.0.4; the documentation site contains the corresponding screenshots and limitations.
Before publication, inspect the green checks on the exact main commit and audit
python3 scripts/release.py plan v0.0.4. The protected workflow reruns source
verification, selected-package dry runs, registry preflight and exact-version
consumer checks. These gates apply to coordinated and independent releases.
Publication is a separate action through the protected release workflow, using an annotated tag on the verified main commit. The workflow checks registry availability before uploads and verifies exact registry versions in fresh consumers afterward. Verification-only recovery skips uploads; it cannot finish a partially published release. Do not blindly repeat a partial upload.
The development plan records acceptance criteria. Broader benchmark infrastructure, differential fuzzing, bounded-memory CSV processing, new syntax engines and additional terminal graphics protocols remain follow-ups.