- Render GitHub-flavored alerts (
> [!NOTE],[!TIP],[!IMPORTANT],[!WARNING],[!CAUTION]) as styled callouts with light/dark palettes that follow the theme toggle and, when JavaScript is disabled, the OS color scheme. - Support YAML front matter: a
---block at the very start of the document is hidden from the rendered output, and itstitle:value (plain, quoted, or containing colons) becomes the page title, ahead of the existing H1 and filename fallbacks. Recognition is conservative and GitHub-like — only at document start, non-empty, first line non-blank — so---blocks elsewhere in a document still render as visible content.
- Add a native Android app that opens Markdown through the system document picker or file/share intents and renders it offline through mdo's existing Rust renderer and sanitizer.
- Add Android debug, release-APK, App Bundle, and lint coverage to CI, plus optional secret-backed APK/AAB signing and publication in tagged releases.
- Add upstream store metadata, a no-data-collection privacy policy, and preparation material for F-Droid and Google Play submissions.
- Publish the Android preview as signed ARM64 APK and AAB assets alongside the desktop archives in the GitHub Release.
- Render the docs site with stock mdo output, keep Markdown links useful on GitHub while rewriting them to HTML at site-build time, and retain the custom faux-browser styling only on the homepage.
- Upgrade
ammoniato 4.1.4 to address RUSTSEC-2026-0213.
--opennow fails honestly: when the browser launch fails after a successful render, mdo exits non-zero and prints the error plus the surviving rendered path to stderr.mdo-openpropagates the child's exit status instead of always reporting success. On Linux, a desktop opener that spawns but exits non-zero (no browser handler configured) is treated as a failure rather than a silent success.- Watch mode survives atomic editor saves:
--watchobserves the parent directory and filters events to the target file, so temp-file-rename saves (Vim, VS Code, and similar editors) no longer kill the watch. Save bursts are debounced into a single re-render, and a failed render keeps the watch alive. - Standards-correct
file://URLs for<base href>: reserved and non-ASCII characters in source paths (spaces,#,%,?, Unicode) are percent-encoded, and Windows drive letters, UNC paths, and\\?\extended-length prefixes are handled. Paths that cannot form a valid URL omit the tag instead of emitting a broken one, so relative images and links keep working from awkward directory names. - New
--verboseflag reports render-workflow timings (read, markdown, sanitize, assemble, write, total — and browser-launch initiation with--open) on stderr only. The generated HTML is byte-identical with and without it; no timing or diagnostic information ever appears in the page. - Quieter generated documents: remove the visible "Generated by mdo" footer,
version, render date, and render duration from full-document output.
Provenance is now carried only by
<meta name="generator" content="mdo <version>">. - Show the source file's filesystem modification time in full-document output
(
Source modified: …) with a machine-readable<time datetime>attribute; the line is omitted (and rendering still succeeds) when the timestamp is unavailable. Bare output is unchanged. - Theme toggle improvements: state-aware
aria-labeland tooltip, live OS theme tracking until a manual choice is made, safelocalStoragehandling onfile://pages, reserved padding so the button does not cover content on narrow screens, hidden when printing, and restylable/hidable from custom--cssvia#theme-toggle. - Setup now detects its own file-manager integration and stays idempotent: interactive setup greets an already-configured user honestly and offers one decision — leave unchanged (default) or reinstall. Detection asks a single question (is mdo's own handler registration present?) with no partial, stale, or system-wide state inference; uninstall still touches only mdo-owned resources. Fuller integration-state management was considered and deferred (ADR 0004).
- Documentation: rewrite the README around Open Markdown as HTML and move
detailed platform, CSS, and maintainer material into focused pages under
docs/(usage.md,file-manager-integration.md,custom-css.md,maintaining.md). - Changelog: restore the missing 0.3.0 section. The 2026-05-29 rename release
shipped as tag
v0.3.0and crates.iomdo-cli 0.3.0but was recorded here under a 0.2.0 heading; it is now labeled 0.3.0, and a 0.2.0 section for the pre-rename 2026-05-12 release has been reconstructed from git history. - CI: Windows now runs the full test suite (previously compile-only). Registry install/uninstall is split into a unit-tested plan builder and a thin executor, so no test touches the real registry.
-
Restore conventional CLI behavior for no-argument
mdo: print a short Open Markdown as HTML landing page and exit successfully, whilemdo --helpretains the full CLI reference. Rename the onboarding command from--tourto--setupand keep the whole flow, including its welcome-sample verification, available through the double-clickablemdo-setupcompanion. -
Linux: add a visible, per-user mdo Setup application-menu launcher. It remains available when the separate Open as HTML file-handler integration is uninstalled, and normal setup runs repair it if necessary.
-
Replace the
mdo-setupmulti-dialog onboarding with a launcher for the single-screenmdo --setup: Linux opens a terminal emulator ($TERMINALor a known one such asgnome-terminal/konsole/xterm, with azenity/kdialog/yadfallback notice), and Windows opens the same styled Windows Terminal (wt) setup as no-filemdo-open.exe, falling back to a new console whenwtis unavailable. This drops the chain of[OK]dialogs in favor of the one-screen, single Y/N setup and avoids the dialog-dismiss and missing-backend failures of the old flow. -
Exit non-zero from
mdowhen a one-shot render fails (refused symlinked output, temp-dir setup failure, or conversion failure) so scripts and the docs pipeline can detect errors;--watchkeeps running. -
Linux: fall back through
gio open/gnome-open/kde-open/wslviewwhenxdg-openis missing, and reap the launcher so it does not linger as a zombie during long--watchsessions. -
Linux: only report "is now the default Markdown handler" when
xdg-mimeactually succeeds (otherwise print the manual command), and drop the no-opgtk-update-icon-cachecalls. -
Do not treat a heading inside a fenced code block as the document title.
-
docs/install.sh: warn and show how to add the install directory toPATHwhen it is not already present, matchinginstall.ps1. -
Reword the welcome-sample tip to match what setup installs (right-click → Open as HTML) instead of implying double-click works by default.
- Add
--csssupport for appending custom CSS after mdo's embedded defaults, plus bundled CSS for restoring vendored simple.css typography. - Soften mdo's default heading typography and move that typography layer into a reusable release asset.
- Rebuild the docs site through mdo's runtime CSS pipeline and add checked-in Markdown sources for the generated pages.
- Move shared rendering, temp-output, browser-launch, tour-sample, and file-manager helpers into
src/lib.rs. - Add
mdo-setup.exe, a Windows GUI-subsystem onboarding/setup entrypoint that can install Explorer integration without opening a terminal. - Teach Windows
mdo-open.exeno-file launches to openmdo --tourin Windows Terminal (wt) using the One Half Light color scheme, centered on the active display, withmdo-setup.exeas a fallback. - Add Linux
mdo-setuponboarding via desktop dialog helpers (zenity,kdialog, oryad) and include it in Linux release archives. - Teach Linux
mdo-opento launchmdo-setupwhen opened directly with no file arguments. - Add a first-run tour and welcome sample that can verify the browser-opening flow without changing source folders.
- Harden Windows browser launches, temporary output paths, and generated HTML handling.
- Add package-manager starter manifests and public project metrics pages.
Released as tag v0.3.0 and crates.io mdo-cli 0.3.0 (0.2.0 was already
taken by the pre-rename release below); this section was previously
mislabeled 0.2.0.
- Rename the project from
md2htmlxtomdo. - Rename the Rust binary from
md2htmlxtomdo. - Rename the Windows no-flash wrapper from
md2htmlx-opentomdo-open. - Publish the crates.io package as
mdo-cli; install withcargo install mdo-cli. - Update Windows Explorer integration to use
mdoregistry entries,%LOCALAPPDATA%\mdo\md.ico, and theOpen as HTMLverb. - Update Linux file-manager integration to use the
Open as HTMLlabel and remove duplicate Nautilus Scripts entries. - Update
--opentemp output paths from%TEMP%\md2htmlx\<hash>\to%TEMP%\mdo\<hash>\. - If you previously installed the Windows Explorer integration, run the old version's
scripts/uninstall-explorer.ps1before upgrading. The new uninstaller also removes the legacy registry entries when present. - Add explicit MIT and Apache-2.0 license files.
- Add release-preflight CI for formatting, linting, tests, and crate packaging.
- Add tag-driven GitHub Release automation for native binary archives and checksums.
- Add a GitHub Pages site under
docs/with install instructions, usage examples, and migration notes. - Add GitHub Pages deployment automation for the static
docs/site. - Set
mdoas the default binary forcargo run.
Released as tag v0.2.0, before the rename, while the project was still
named md2htmlx. Reconstructed from git history.
- Rename the fork to
md2htmlx. - Produce standalone HTML5 documents styled with embedded simple.css by default.
- Make convert-and-exit the default; watch mode becomes opt-in via
--watch. - Add
--barefor fragment-only output. - Add a light/dark mode toggle to non-bare HTML output.
- Add
--open: render to a temp directory and launch the system default browser. - Add Windows Explorer integration with a no-flash
md2htmlx-openlauncher.