# rs-rich-cli
The `rs-rich-cli` package is a Rust port of the
[`rich-cli`](https://github.com/Textualize/rich-cli) terminal toolbox — rich
output for files, data and URLs, from the command line. Install it from
crates.io with Cargo; the executable it installs is named `rich`:
```bash
cargo install rs-rich-cli
rich --help
```
```bash
rich README.md # auto-detected and rendered as Markdown
rich data.csv # rendered as a table
rich notebook.ipynb # Jupyter notebook, cells and outputs
rich https://example.com # fetched and syntax-highlighted
rich -p "[bold red]hi[/]" # console markup
rich json data.json # preferred subcommand form
rich jsonl events.ndjson # streaming JSON Lines / NDJSON
rich log app.jsonl # structured-log JSONL
```
The Rust package is currently version **`0.0.7`** and follows independent
SemVer; its version does not mirror Python `rich-cli`. The tracked upstream
release is **`rich-cli` 1.8.1**, recorded in
[`../../UPSTREAM.toml`](../../UPSTREAM.toml).
## Render modes
| `-p`, `--print` | the argument as console markup |
| `-m`, `--markdown` | Markdown (headings, lists, quotes, code, links, tables) |
| `-j`, `--json` | pretty-printed, highlighted JSON |
| `-x`, `--syntax` | syntax-highlighted source |
| `--csv` | a CSV/TSV table, with numeric columns right-aligned |
| `--ipynb` | a Jupyter notebook |
| `--jsonl` | streaming JSON Lines / NDJSON |
| `--log` | streaming structured-log JSONL |
| `--gif` | animated GIFs, several at once |
| `--image` | a still image as ASCII, Braille, half-blocks, or Sixel |
| `--rule` | a horizontal rule |
With no flag the mode is picked from the file extension; a bare `-` reads stdin.
Preferred subcommands such as `rich json`, `rich markdown`, `rich csv`,
`rich jsonl` and `rich log` are aliases over the same renderers. Existing flat
flags remain supported.
## Options
Layout
: `-w/--width`, `--left`/`--center`/`--right`, `--panel BOX` with
`--title`/`--caption`/`--style`, `--padding`, `--pager`, `--sanitize`,
`--report json`, `--no-color`.
Export
: `--export-html` and `--export-svg` emit a self-contained document instead of
writing to the terminal — any render mode can be captured this way.
Watch
: `--watch` polls a local file or URL and re-renders changes. Use
`--watch-interval SEC` to change the polling interval. `--watch-cache`
avoids re-rendering unchanged URL responses. Watch mode is intentionally
finite when stdout is redirected: it renders one snapshot and exits, making
pipelines deterministic. Builds without the `fetch` feature reject URL
watches with the same stable URL-support error as one-shot URL input.
## Features
Both are on by default and can be dropped for a smaller binary:
- **`fetch`** — URL support (`rich <url>`), via `ureq` with bundled TLS roots.
- **`art`** — `--gif` playback and `--diff`/`--image` picture rendering, via [`rich-art`](../rich-art).
```bash
cargo install rs-rich-cli --no-default-features # installs `rich`; no network or image decoders
```
## Licence
MIT.
## Optional syntax cache
For repetitive source files, build the CLI with
`cargo build -p rs-rich-cli --release --features syntax-cache`. This feature is
off by default and changes no CLI flags. It reuses parsing work within one
render; varied source files may see no speedup. See the
[measurements](https://buchochelliq-labs.github.io/rs-rich-cli/benchmarks/#004-repeated-source-syntax-results).