Changelog
All notable changes to mido are recorded here. The format follows Keep a Changelog, and versions follow semver. Before 1.0, a minor release may change keys or configuration.
[Unreleased]
Added
mido completions <shell>prints a completion script for bash, zsh, fish, elvish or PowerShell.--no-colordraws without color, the same as settingNO_COLOR.mido-high-contrast, a built-in theme for low vision: white on black, with every color that carries text at least 7:1 against what it sits on (WCAG AAA), code highlighting included.Fsearches every Markdown file in the folder, listing each matching line aspath:line.Enteropens the file at that line with the query kept fornandN.ycopies the selected link's target, or a code block on the screen, pressing it again for the next block in view. Code is copied without its trailing newline.- A file opens again where you left it, kept for the last 500 files in the user cache folder.
remember_position = falseturns it off. - UTF-16 files with a byte order mark are read and saved as UTF-16.
- mido-core:
Layout::codelists each code block with the lines it takes and its source.
Changed
- Following a link to a file that is not Markdown, or to a URL other than
http,httpsormailto, asks before the system opens it. The system opener runs programs, so a link tosetup.commandorinstall.batused to run it with oneEnter. - A
.mido.tomlthat sets something this version cannot use, an unknown setting, a bad value, an unknown key action or a missing theme, skips that setting with a warning in the status bar, or on stderr in print mode, instead of stopping mido. The user config stays strict. - A file that is not valid UTF-8 opens with the bad bytes shown as replacement characters and a notice, instead of failing. The editor still refuses it, so no bytes are lost. A file with NUL bytes is refused as binary.
- Copying, in the editor or with
y, also usespbcopy,wl-copy,xcliporxseloutside SSH, for terminals that ignore OSC 52 such as Apple Terminal.
Fixed
- A byte order mark at the start of a file no longer hides its first heading or its front matter.
Security
- Print mode drops control characters from the text and from link targets, so a document can no longer send its own escape sequences to the terminal, such as one that sets the clipboard through OSC 52 or retitles the window. The viewer already dropped them.
- Remote images are fetched with
webpki-roots1.0.10 andrustls-webpki0.103.16, which stop trusting the eight compromised eMudhra intermediate CAs. Older builds would accept a certificate forged with those keys.
[0.6.0] - 2026-10-13
Added
--helpand--versionopen with a pixel-fontmidobanner with the version beside it.- A built-in editor.
eswaps the page for its Markdown source at the part you were reading, colored with the theme, andEscswaps back, asking first about unsaved changes. Undo and redo, selection withShiftor the mouse, cut, copy and paste, word and paragraph moves, and find in the file withCtrl-f. - Markdown help in the editor:
Entercontinues a list, task or quote and ends an empty one,TabandShift-Tabnest a list item,Ctrl-tchecks a task or makes the line one, and backticks and asterisks are typed in pairs or wrap the selection. Ctrl-ssaves through a temporary file and a rename, keeping line endings, a byte order mark and the trailing newline as they were. A file changed on disk since it was opened is not overwritten without asking.mido new <file>, and opening a Markdown path that does not exist, start the file in the editor and create it on the first save.- Copying in the editor also puts the text on the system clipboard through OSC 52, and a terminal paste arrives as one paste.
- A panic while editing writes unsaved changes to a hidden
.<name>.mido-recoverfile beside the original and prints its path. - Editor keys in
[keys]:save,undo,redo,cut,copy,paste,select_all,find,find_next,find_prevandtoggle_task, looked up apart from the reader's keys, andeditorfore. - A live preview beside the editor.
vopens the editor with the rendered page next to it, andCtrl-ein the editor shows or hides it. The preview takes the text when typing pauses and lays it out on a background thread, so a long document never holds up a keystroke. - The editor and the preview scroll together through the source map, whichever was scrolled last leading, down to a line inside a long paragraph or a code block.
sturns sync off and on,<and>resize the split, and a click in the preview puts the cursor on that line. split = "side-by-side"or"stacked"andsplit_ratioin the config. On a narrow terminal the files panel gives way to the split first.- Quitting with
Ctrl-cwhile the editor has unsaved changes asks first. - Print mode writes links as OSC 8 hyperlinks, so terminals that support them make the text clickable. Relative links to files that exist become
file://URLs. - The status bar names where the selected link goes.
docs/rendering.mdrecords the image protocol mido picks in the terminals checked so far: Kitty in Ghostty, half blocks in Apple Terminal.
Changed
- Task marks are
○and✓, the image marker is■and the TIP icon is◊in theunicodetier, so JetBrains Mono, Monaspace and Cascadia Code draw every glyph without a fallback font. The fonts table now covers Fira Code, Monaspace and Cascadia Code. - mido-core:
Inline::SoftBreakandInline::HardBreakcarry the byte offset of the source line they start,BlockKind::CodeBlockhas the offset of each code line, and wrapped lines carry a source offset throughPiece::Source, soLayout::sourcesmaps lines inside a paragraph or a code block. - mido-core: syntax highlighting results are cached by language, code and theme, so laying a document out again does not highlight unchanged code blocks twice.
[0.5.1] - 2026-10-01
Changed
- Table body rows are separated by a blank row inside the borders, so a cell that wraps no longer runs into the next row.
Fixed
- Clicking a file in the files sidebar or a heading in the outline hands the keys back to the document, as
Enterdoes. Before, focus stayed on the panel, so the arrow keys moved the panel selection instead of scrolling, and after an outline clickDownjumped to the next heading from the clicked one rather than scrolling a line.
[0.5.0] - 2026-09-25
Added
- Themes: eleven built in,
mido-dark,mido-light,mido-reading(a warm, low-contrast paper palette), Catppuccin Mocha and Latte, Gruvbox, Nord, Tokyo Night, Dracula, and Solarized dark and light. Pick one with--theme <name>orthemein the config. The themes that come from an editor palette paint their own background. - Theme files in TOML with
schema = 1: a[palette]of named colors,[colors]for every token, andextendsto change a few tokens of another theme. User themes go in~/.config/mido/themes/, a path works too, and a theme missing a token is refused with the token named. mido themeslists every theme with its kind and a swatch of its colors.- Light or dark detection: with the default
theme = "auto", mido asks the terminal for its background once at startup, waits at most 100 ms, falls back toCOLORFGBG, then to dark, and picksmido-lightormido-dark.background,dark_themeandlight_themein the config override it. - Code blocks take their syntax colors from a syntect theme chosen by the mido theme.
- Config at
~/.config/mido/config.toml(%APPDATA%\mido\configon Windows,MIDO_CONFIG_DIRor--configto point elsewhere), and a.mido.tomlin the opened folder or above it that overrides it. Settings:theme,dark_theme,light_theme,background,glyphs,width,gutter,front_matter,extensionsand[keys]. An unknown setting is an error, not ignored. - Glyph tiers:
glyphs = "ascii"draws everything in plain ASCII, Mermaid diagrams included, andglyphs = "nerd"adds Nerd Font icons to the files panel, images and alerts. - Key remapping in
[keys], by action name. The help overlay, the status bar hints anddocs/keys.mdshow the keys actually bound. front_matter = "hidden"starts with the front matter out of sight, andmstill shows it.extensionssets which files count as Markdown, replacing the fixed list.- A theme gallery: the docs site shows the same page drawn in every built-in theme, generated in CI from the screen buffer the tests use.
- A fonts table in the docs recording which glyphs Menlo, MesloLGS NF, JetBrains Mono, SF Mono, Source Code Pro and older macOS fonts cover.
Changed
- The parse, layout and theme code moved into a
mido-corecrate with no terminal dependency, published alongsidemido, so other tools can embed the renderer. - The help overlay lists both keys of a pair, so the panel row reads
j / k, ↓ / ↑ in a panel, and?is listed beforeh. - CI fails on a raw color outside the theme module.
- A table too wide for the screen keeps its short columns, 20 cells or less, on one line and shares the rest of the width in proportion to how much each column has to say, so a prose column no longer shrinks to the size of a label column.
[0.4.1] - 2026-09-21
Added
- Badges render as labels: an image from shields.io, badgen, docs.rs, GitHub Actions and friends becomes a two-tone chip with the badge name and its value, linked like the badge. Static shields badges read their text from the URL, and
--remote-imagesfetches live values from the badge SVG, so a version badge shows the version. The value side takes the badge's color, with dark or light text picked for contrast. - Front matter fields parse into key and value pairs for YAML and TOML, with lists joined by commas and nested tables flattened to dotted keys.
- A test walks every relative link and anchor in the docs, README, CONTRIBUTING and CHANGELOG and fails on a broken one.
Changed
- The collapsed front matter line shows one label chip per field, key on the left and value on the right, instead of listing the keys.
mstill expands the card.
[0.4.0] - 2026-09-20
Added
- Single-file viewer:
mido file.md, andmido -for stdin. - Project mode:
mido <folder>and baremidoopen a folder, honouring.gitignoreand skipping hidden files, starting on README.md, then index.md, then the first file. - Rendering for headings, paragraphs, emphasis, links, footnotes, nested and ordered lists, task lists, blockquotes, fenced and indented code with syntax highlighting, GFM tables, rules and raw HTML.
- Heading design per level: a filled title chip for H1, a text-width underline for H2, faint
#markers for H3 to H6. - Element polish: list markers colored by depth, italic quotes, a header band on tables, superscript footnote markers.
- Images:
on its own line is drawn through Kitty, iTerm2 or Sixel, with half-block characters everywhere else. Local files always load, remote ones with--remote-images, cached in the user cache directory with a 10 MB cap.ihides and shows them, the alt text becomes a caption, and print mode keeps the placeholder. - GitHub alerts:
[!NOTE],[!TIP],[!IMPORTANT],[!WARNING]and[!CAUTION]blockquotes draw a colored bar, an icon and a label. - Front matter in YAML or TOML shows as one collapsed line listing its keys.
mexpands it into a highlighted card. - Emoji shortcodes such as
:tada:render as emoji. - Math:
$..$shows as styled source, and a$$block on its own renders as a fenced block. - Definition lists render with bold terms and indented definitions.
- Mermaid code blocks render as text diagrams: flowcharts, sequence, class and state diagrams through mmdflux, and pie, gantt, mindmap, timeline, git graphs and other types through mermaid-text. Unsupported or too-wide diagrams keep their labelled source.
- Full-width layout with gutters that shrink on narrow terminals.
--widthcaps the measure and centers it. - Viewer chrome: status bar with a file chip, hint titles and a selection marker on overlays, an overflow marker for lines wider than the screen, and an empty-file notice.
- Vim-style scrolling, mouse wheel, smart-case search and a table of contents overlay.
- Help overlay on
?orh, grouping keys by task.docs/keys.mdis generated from the same table, and a test fails when the two drift. - Outline panel on
o: the headings as a foldable tree in a rounded, tinted card at the top right, with the text wrapping before it. It follows the reading position and is navigable with the keyboard and the mouse, shown automatically on wide terminals. - Files sidebar on
b: a flat panel on the left headed by the opened folder's name, the tree hanging from it, folders first, foldable, the open file highlighted, andTto show first headings instead of names. Tabcycles focus through files, document and outline in that order,Shift-TaborTabthen←moves it left, and folding in a panel usesSpaceand the arrow keys.- Focus mode on
f: hides both panels for a full-width document and restores them on a second press. - Panels show only while the document keeps 60 columns, so narrow terminals stay readable.
- Link following:
]and[select links, wikilinks and footnote references, including links inside table cells, and Enter or a click follows them. Relative links open in place,#anchorsjump to headings using GitHub slugs, folders open their README, and web links open in the browser. - Wikilinks:
[[Page]]and[[page#section|label]]open the file in the folder whose name or first heading matches, orpage.mdnext to the current file. - Footnotes: select a reference with
]or[and press Enter to read the note in a popup. - History:
HandLmove back and forward through visited pages and positions. - Fuzzy file finder on
Ctrl-p, matching paths and first headings. The finder and the status bar show project paths with forward slashes on every platform, soguide/faq.mdreads the same everywhere. Eopens the file in$VISUALor$EDITORand reloads it afterwards.- Live reload when the file changes on disk. In a folder the whole tree is watched, so added and removed files appear in the files panel with folds preserved.
- Print mode:
-pwrites styled text to stdout. Piping without it writes plain text. - Truecolor with automatic 256-color fallback, and
NO_COLORsupport. - Documentation site at https://anistark.github.io/mido, built with Eleventy from the Markdown pages in
docs/and deployed by CI. The pages carry only front matter on top of plain Markdown, somido docs/reads them too. mido docsopens the bundled documentation offline, extracted from the binary into a temporary folder, whenever nothing nameddocsexists in the current directory.--manprints the man page, generated at build time with clap_mangen.- Contributor docs: the pipeline, adding a block type, writing snapshot tests.
- CI runs fmt, clippy and the tests on Linux, macOS and Windows, and renders every docs page in print mode.
- The landing page demo is recorded by VHS from
docs/tapes/landing.tapeon every deploy. - MIT license.