# Changelog

## [Unreleased]

## [0.22.4] - 2026-06-21

### Fixed
- Update to ratatui 0.30.2  
  Has some multi-width unicode fixes.

## [0.22.3] - 2026-06-21

### Fixed
- Newlines and spacing  
  List and blockquote items no longer have special treatment and render as most markdown renderers 
  do.
- Link wrapping  
  Fixed for bare links and reference-style links.

## [0.22.2] - 2026-06-13

### Added
- Open images
- Experimental PDF support  
  Can be disabled with the "pdf" feature. Every page is rendered as an image.

### Fixed
- Hide cursor when not in "input queue" mode  
  When not "writing in status bar". Fixes inverse first character of URL in status bar when in link 
  mode.

## [0.22.1] - 2026-06-08

### Fixed
- Relative links and images
- Display image load errors better, inline

## [0.22.0] - 2026-06-07

### Changed
- Better padding config, can set maximum width with `AlignLeft` too.

### Added
- Display error on commands  
  Last error on commands, or similar interactions like opening links, is displayed in status line.
  Cleared by any new input.
- Welcome screen  
  Can start mdfried without any source, displays a small message and the logo.
- `open` command  
  Type `:open <path>` to open a file.
  Can open images.
- OSC8 clickable links  
  Links are clickable in terminals that support the OSC8 sequence.
  Can be disabled with `osc8_links = false` in config.

### Fixed
- Word splitting edge case
- Blank lines after and around images and codeblocks
- Link titles (`[description](url "title")`) don't crash the program anymore
- Link descriptions with softbreaks are joined properly

## [0.21.0] - 2026-06-02

### Added
- Code syntax highlight.  
  Uses arborium, supports over 100 languages.
- Mermaid diagram rendering.  
  A code block annotated as `mermaid` gets rendered either via builtin `mermaid-rs-renderer` (can
  be disabled with the `mermaid` feature), or via external command in config, 
  e.g. `mermaid = "mmdc -i - -o - -e png"`.

## [0.20.3] - 2026-05-29

### Changed
- Soft breaks, or normal line breaks preceded with less than two spaces, are no longer treated as  
  hard breaks, except in list items or blockquotes or code blocks. The lines are joined with a 
  single whitespace, like most markdown renderers do.
- Simplified `--log` argument, replaces `--log-to-stderr`.

### Added
- Render thread, mitigates slow terminal sixel or iterm2 rendering.
- `:help` command that displays `assets/docs/help.md`.
- Track document history, `:back` command to go back to previous.
- Link references, or reference-style links, e.g. `Text[1]` and then `[1]: url`.
- Links in headers produce additional lines with the links below.

### Fixed
- Resizing on `stdin` source (piped).
- Rendering stale (wrong sized) header images after resizing.
- Do not render on navigation events if the scroll did not change.
- Links no longer open on the system (browser) in addition to being navigated to.

## [0.20.2] - 2026-05-15

### Added
- If a link is `#kebab-case`, assume it links to a header and jump there

### Fixed
- Link jumping logic.
- Bare links not showing in some case.
- Use the "document source", file / URL / github / stdin, for fetching images.
- Fix images nested in links.

## [0.20.1] - 2026-05-14

### Fixed
- Line-breaking URLs rendering.
- Stricter image-only-lines.

### Removed
- Logger UI, superseded by `--log-to-stderr` and stderr redirect.

### Added
- Can open URLs: `mdfried http://example.com/markdown.md`.
- Can open github repo `README.md`:, `mdfried github:owner/repo`.
- Config option to transform opened URLs, e.g. `url_transform_command = "readable | html2text"`.

## [0.20.0] - 2026-05-12

### Added
- Partially render images, cropping when partially outside of viewport.  
  This gives a much smoother experience when navigating a document, images no longer pop suddenly
  into the view.
- Smooth header images with Sixels.  
  Query terminal background color, use as blended background for sixel header images.
- Render SVG images, can be disabled with the `svg` feature.

### Fixed
- Custom header color was not being set on "plain" headers.
- Wrapping logic was off for any text following formatted spans.

## [0.19.7] - 2026-04-28

### Fixed
- Custom header color not resetting and affecting following text in kitty.

## [0.19.6] - 2026-04-26

### Added
- Cursor Positioning: if there is an active cursor, input `zt`, `zz`, or `zb` to position the  
  cursor (link or search match) at the top, center, or bottom of the viewport respectively.

### Fixed
- Display image-load error inline.
- Nested image in link, e.g. `[![image desc](http://image.url)](http://link.url)`.
- General link-tracking overhaul.

## [0.19.5] - 2026-04-20

### Added
- If a link ends in `.md` and exists as a file, open it as document.

### Fixed
- Links with multiple spans in the description correctly open the URL again.
- Distinct links in same section getting overwritten by "split link spans" logic.
- Link jumping was broken after sections refactor.
- Don't silently suppress `html_block`s. Render as text without any wrapping.

### Changed
- Logging to stderr with `--log-to-stderr` (replaces `--log`).

## [0.19.4] - 2026-04-18

### Added
- Bake "JetBrains Mono" and "Cascadia Code" fonts into binary.  
  These fonts are baked into ghostty and rio, respectively.
- Autoselect detected font if perfect match, and skip fontpicker UI.

## [0.19.3] - 2026-04-18

### Added
- Use `open` crate for opening instead of `xdg-open`.  
  By Oytech, makes opening links now work on any platform.
- Current terminal font detection.  
  The font picker calls the new sub-crate `what-terminal-font` to get the current terminal font
  family name, and pre-selects this for the fontpicker.
  The fontpicker can now also select the previous and next fonts of the system fonts list.

## [0.19.2] - 2026-04-10

### Fixed
- Sixel and iTerm2 rendering images out of viewport, causing the image to hover somewhere above.

## [0.19.1] - 2026-04-10

### Fixed
- List continuations.  
  Lines following a list item with any indentation are aligned to the list item and do not create a
  (repeated) list item anymore.

### Changed
- List marker color from 189 (barely noticeable) to 222 (light yellow-ish).
- Cleaned up mdfried `Theme` to get defaults from `mdfrier::ratatui::DefaultTheme` instead of  
  duplicating all constants.

### Added
- Benchmark for a full parse in mdfrier.  
  Purely markdown parsing/mapping. It's in the microseconds, which is a good start.

## [0.19.0] - 2026-04-08

### Added
- Set header color via theme setting `header_color` (hex for images, hex or ansi for  
  text-sizing-protocol).

### Changed
- Rewrote "sections" approach to parsing and output.  
  Lots of internal fixes and cleanups.

## [0.18.3] - 2026-04-02

### Fixed
- Skip font rendering for headers if Halfblocks
- Remove BgColor from sixels
- Attempt to fix broken piping on macOS

## [0.18.2] - 2026-01-24

### Fixed
- Updating to ratatui-image 10.0.6 should fix konsole displaying bad kitty graphics, instead  
  displaying Halfblocks.

## [0.18.1] - 2026-01-24

### Added
- Links don't display de URL part by default.  
  The URL is rendered in the status bar when the cursor is over the link description.
  Bare URLs are rendered as usual.
  The setting is at `theme.hide_urls` and can be set to `false` in the config file.

### Fixed
- Kitty text-sizing-protocol emoji (or any >1 wide graphemes) rendering bugs

## [0.18.0] - 2026-01-19

### Added
- Movement-count, similar to vim, typing a number N before a movement repeats the movement N times.

### Changed
- Use tree-sitter / tree-sitter-md for markdown parsing.  
  - Added workspace / crate `mdfrier` that deals with markdown parsing.
  - Flow: `Parse markdown -> Map formatting / decorators -> Wrap lines -> Stylize`
  - Prepares groundwork for various bugfixes that need deeper insight into the markdown source.
  - New "theme" config.
  - Updated to ratatui v0.30.0 and latest ratatui-image.

### Fixed
- Linewrapped links are now recognized.
- Search matches rendering over status line.

### Removed
- `chafa-libload` feature, has been removed from ratatui-image. Simply use halfblocks directly.
- `ratskin` as workspace, as it has been superseded by `mdfrier`.

## [0.17.4] - 2025-12-25

### Fixed
- When entering search (both Link and slash), jump to the first match with the current scroll
  offset

## [0.17.3] - 2025-12-22

### Fixed
- Chafa linking split into three features  
  - `chafa-dyn` (default) normal dynamic linking.
  - `chafa-static` statically links `libchafa.a`, which is usually not in distributions. The
    flake.nix builds this for the `static` output.
  - `chafa-libload` runtime libloading of chafa with halfblocks fallback. In practice, picking this
    means that `chafa` will most likely not be used for rendering, as it is highly unlikely that
    chafa would be available at runtime but not at compile-time.

## [0.17.1] - 2025-12-21

### Fixed
- Text Sizing Protocol spacing  
  All tiers above #1 had letter spacing too wide.

## [0.17.0] - 2025-12-21

### Added
- Watch mode  
  Use `-w` to watch the file for changes and reload.
- Print config  
  Use `--print-config` to write a default config file to stdout.

### Changed
- Config defaults  
  All config entries are now optional.

## [0.16.0] - 2025-12-20

### Added
- Build a static binary
- [Chafa](https://hpjansson.org/chafa/)  
  Loaded at runtime, falls back to the existing primitive halfblocks implementation if not found.
- `chafa-dyn` (default) and `chafa-static` features  
  Statically building and linking is tricky, so the safe choice it to just stick to `chafa-dyn` and
  then optionally provide `libchafa` on the user's system via distribution means.
  The flake.nix of the projects is an example of how to use `chafa-static`.
- `--no-cap-checks` to entirely skip querying the terminal's stdio for capabilities  
  Useful only for running and testing in pseudoterminals.

### Fixed
- Handle panics gracefully (restore terminal mode)

## [0.15.0] - 2025-12-14

### Added
- Search mode

  Keycode `/` enters search mode, similar to Vim. User can enter search term and press `Enter` to
  enter "search mode", where matches are highlighted in green, and jump to first match. Pressing
  `n` and `N` navigates/jumps between matches. The current cursor position is highlighted in red.
  `Esc` clears "search mode".

### Changed
- Link search mode jumps beyond viewport

  Aligned with "search mode".

## [0.14.6] - 2025-11-17
### Fixed
- Missing link offsets

## [0.14.5] - 2025-11-15
### Added
- `debug_override_protocol_type` config/CLI option

## [0.14.4] - 2025-11-10
### Fixed
- Find links after parsing markdown

## [0.14.3] - 2025-11-09
### Added
- macOS binaries

## [0.14.2] - 2025-11-08
### Added
- `max_image_height` config option
### Fixed
- Find original URL of links that have been line-broken

## [0.14.1] - 2025-11-07
### Added
- Logger window (`l` key)
### Fixed
- Greedy regex matching additional `)`

## [0.14.0] - 2025-11-05
### Fixed
- Updates leaving double-lines

## [0.13.0] - 2025-11-03
### Added
- Link navigation mode (`f` key, `n`/`N` to navigate, Enter to open)
- `enable_mouse_capture` config option

  Mouse capture is nice-to-have for scrolling with the wheel, but it blocks text from being 
  selected.

- Detailed configuration error messages

## [0.12.2] - 2025-06-10
### Fixed
- Scrolling fixes
- Headers no longer rendered inside code blocks

## [0.12.1] - 2025-05-23
### Changed
- Code blocks fill whole lines

## [0.12.0] - 2025-05-20
### Added
- Kitty Text Sizing Protocol support

  Leverage the new Text Sizing Protocol for Big Headers™. Super fast in Kitty, falls back to
  rendering-as-images as before on other terminals.

## [0.11.0] - 2025-05-17
### Changed
- Use cosmic-text for font rendering

  Huge improvement on header rendering.

- Improved font picker UX

## [0.8.1] - 2025-01-26
### Added
- Deep fry mode

## [0.8.0] - 2025-01-26
### Changed
- UI on main thread, commands on tokio thread

## [0.7.0] - 2025-01-25
### Added
- Skin config from TOML config file

## [0.6.0] - 2025-01-19
### Changed
- Replace comrak with termimad parser
### Added
- Blockquotes
- Horizontal rules

## [0.5.0] - 2024-12-30
### Added
- Nested list support

## [0.4.0] - 2024-12-28
### Added
- List support
### Fixed
- Word breaking in styled spans

## [0.3.0] - 2024-12-25
### Added
- Windows cross-compilation
- Arch Linux installation
### Changed
- Use textwrap crate

## [0.2.0] - 2024-12-21
### Added
- Initial release
