v0.11.1
marquee-markdown
TUI markdown reader that renders documents like Claude artifacts

- Ten themes
- Eight ports of established colorschemes
- Rust 1.88 or newer
- Linux, macOS, Windows
Install
cargo install marquee-markdowncargo binstall marquee-markdownbrew install SophanaSok/marquee/marquee-markdownAlso on Scoop, Nix, and the release page as prebuilt binaries, .deb and .rpm packages.
What it does
- Reads markdown properly. Headings become typography rather than hash marks, code blocks become sealed cards, tables get box drawing, and GFM callouts get an icon and a hue.
- Reads the HTML in a README too. A centered
<h1>becomes a heading in the contents pane, badge images become the links they advertise,<br>breaks a line, a<details>block is shown open with its<summary>as the title, and an HTML<ul>or<table>— spans, sections, captions and all — is drawn by the same emitter its markdown spelling is, instead of the tags themselves reaching the page. - Math is notation, not punctuation.
$E = mc^2$reads as a code span rather than as a formula wearing its dollar signs. TeX is not typeset — there is no glyph budget for that in a cell grid — but the delimiters go. - A contents pane that tracks where you are, with folding — the thing
glowhas no equivalent of, and the reason this exists. - Ten themes, or your own, or your terminal’s own colors.
- Search inside a document with
/,nandN, highlighted in place. - A file browser that streams as it walks, with a fuzzy filter.
- Reads what you point it at: a file, a directory, standard input, a URL,
or
github.com/owner/repo. - Reloads when you save, and
eopens your editor at the line on screen. - Everything is configurable and every key is rebindable, from one TOML file.
- Themes are data, so a new palette needs no Rust and no recompile.
A real terminal, not a mock-up
# Marquee
A terminal markdown reader that renders documents the way Claude artifacts do.
> [!NOTE]
> Callouts get an icon, a title, and a hue of their own.
## Rendering
Code blocks are sealed containers — a long line wraps *inside* the card
rather than escaping it:
```rust
fn width(text: &str) -> usize {
text.graphemes(true).map(grapheme_width).sum()
}
```
## Tables
| Construct | Rendered as |
| --- | --- |
| Heading | weight, colour, rhythm |
| Quote | an accent gutter bar |
| Rule | a hairline across the column |
## Navigation
- The contents pane tracks where you are reading
- `/` searches, `n` and `N` step through the hits
- `]` and `[` step through linksWhy not glow
glow is good, and this keeps its flags and its keys so muscle memory carries over. The whole comparison →