Skip to content

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.

rich notes.txt --encoding utf-16
rich notes.txt --encoding utf-16le

See text encoding for BOM handling, malformed input and the distinction between default and explicit decoding.

GIF half-block rendering

rich --gif animation.gif --gif-mode blocks --width 40 --loop 2

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.

Actual CLI GIF half-block playback, first capture

Actual CLI GIF half-block playback, later capture

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.

Actual CLI Markdown wrapping

Actual CLI syntax colors across comment boundaries

CSV memory measurements rendered by the actual CLI

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.