The cross-platform markdown viewer that doesn't wrap a browser. Native Avalonia rendering, mermaid diagrams via the bundled Naiad engine, real print, PDF export, six themes, and a self-documenting in-app User Manual. Single executable, ~50 MB. By mostlylucid.
Every other markdown viewer either:
- Wraps a Chromium browser (100MB+ bloat, slow startup, weird font rendering)
- Looks like it's from 2005
- Doesn't render mermaid diagrams without an internet round-trip
- Can't open a
.mdfile you double-click
lucidVIEW does none of those. It's a real native desktop app that opens instantly, prints to your printer, and renders mermaid offline.
| Real native rendering | LiveMarkdown.Avalonia on top of Avalonia 11.3 — no browser, no JavaScript runtime |
| Mermaid diagrams | 30+ diagram types via the bundled Mostlylucid.Naiad engine, fully offline |
| 6 themes | Light, Dark, VS Code, GitHub, mostlylucid Dark, mostlylucid Light, Pride, plus user-defined Custom themes via settings.json |
Real Print (Ctrl+P) |
Sends a generated PDF to your default printer (ShellExecute on Windows, lp on macOS / Linux) |
PDF Export (Ctrl+Shift+P) |
Save the document as a real PDF via QuestPDF, mermaid diagrams embedded as PNG |
| Word-style ruler | Toggle a ruler with draggable margin handles to live-resize the document column |
| Auto TOC | Headings populate a docked Table of Contents panel |
Search (Ctrl+F) |
Full-text search inside the rendered markdown |
| Open from URL | Ctrl+Shift+O fetches a remote markdown file with Accept: text/markdown so Cloudflare URL→markdown / Jina Reader return clean MD |
In-app User Manual (F1) |
17-screenshot walkthrough auto-generated by the UI testing harness |
| Drag-and-drop | Drop any .md file on the window to open it |
| macOS .app bundle | Proper Dock icon, file associations, no Terminal launch on double-click |
| Single executable | One ~50 MB self-contained binary per platform — no .NET install required on the target machine |
| Light | Dark | VS Code |
|---|---|---|
![]() |
![]() |
![]() |
| GitHub | mostlylucid Dark | mostlylucid Light |
|---|---|---|
![]() |
![]() |
![]() |
The full feature walkthrough lives in the in-app User Manual — press
F1 from inside lucidVIEW or read MarkdownViewer/Assets/manual/user-manual.md.
Grab the latest release from https://github.com/scottgal/lucidview/releases.
cd $env:USERPROFILE\Downloads
Expand-Archive lucidVIEW-win-x64.zip -DestinationPath "$env:LOCALAPPDATA\Programs\lucidVIEW" -Force
& "$env:LOCALAPPDATA\Programs\lucidVIEW\lucidVIEW.exe"On first launch SmartScreen may flag the unsigned binary — click More info → Run anyway.
One-liner — downloads the latest release for your CPU architecture, clears
the Gatekeeper quarantine attribute, drops the bundle into /Applications
and opens it:
curl -fsSL https://raw.githubusercontent.com/scottgal/lucidview/main/Scripts/install-macos.sh | bashInspect Scripts/install-macos.sh first if you
prefer — it only runs curl, unzip, xattr -dr com.apple.quarantine,
and mv against the lucidVIEW bundle.
If you'd rather drive it by hand:
cd ~/Downloads
unzip -o lucidVIEW-osx-arm64.zip # or osx-x64 on Intel
xattr -dr com.apple.quarantine lucidVIEW.app
mv lucidVIEW.app /Applications/
open /Applications/lucidVIEW.appWhy the xattr step is necessary. The release bundle is ad-hoc
codesigned (codesign --sign -) but not Apple Developer ID-signed and not
notarized. Without the quarantine-clear, the first launch hits Gatekeeper
and shows "lucidVIEW is damaged and can't be opened" — that message is
misleading; the binary is fine, macOS just doesn't trust unsigned code from
the internet. Removing com.apple.quarantine tells the OS the user has
made an explicit decision to run it. (Proper notarization would skip this
step but needs a paid Apple Developer account.)
cd ~/Downloads
unzip -o lucidVIEW-linux-x64.zip -d ~/.local/opt/lucidVIEW
chmod +x ~/.local/opt/lucidVIEW/lucidVIEW
ln -sf ~/.local/opt/lucidVIEW/lucidVIEW ~/.local/bin/lucidview
lucidviewPrinting requires CUPS (sudo apt install cups on Debian/Ubuntu).
lucidVIEW path/to/document.md # opens directly
lucidVIEW # welcome screen, then drag/drop or Ctrl+O| Shortcut | Action |
|---|---|
Ctrl+O |
Open file... |
Ctrl+Shift+O |
Open URL... |
Ctrl+P |
Print to default printer |
Ctrl+Shift+P |
Export PDF... |
Ctrl+F |
Search |
Ctrl+B |
Toggle side panel |
Ctrl+= / Ctrl+- |
Increase / decrease font size |
Ctrl+wheel |
Zoom |
F1 |
Open the in-app User Manual |
Shift+F1 |
Open the README |
F11 |
Fullscreen |
Escape |
Close panels / dialogs / fullscreen |
git clone https://github.com/scottgal/lucidview.git
cd lucidview
dotnet run --project MarkdownViewer/MarkdownViewer.csprojPublish a single-file binary for your platform:
pwsh ./publish.ps1 -Platform osx-arm64 # win | linux | osx-x64 | osx-arm64 | allThe macOS targets assemble a proper .app bundle. See
docs/macos-bundle.md for the full bundle layout
and docs/windows-store.md for the MSIX packaging
flow.
lucidVIEW ships with a Debug-only UI testing harness
(Mostlylucid.Avalonia.UITesting) that drives the app from YAML scripts:
dotnet run --project MarkdownViewer -- --ux-test --script ux-scripts/smoke-all-functions.yaml --output ux-results
dotnet run --project MarkdownViewer -- --ux-repl # interactive REPL
dotnet run --project MarkdownViewer -- --ux-mcp # MCP server for LLM-driven testingThe same harness regenerates the in-app User Manual screenshots
(ux-scripts/capture-manual.yaml).
lucidVIEW bundles a fork of Naiad
(Simon Cropp's pure C# Mermaid renderer), published as Mostlylucid.Naiad.
The fork extends upstream with:
- 12 additional diagram types — Dendrogram, Bubble Pack, Voronoi, Parallel Coordinates, Geo Map, BPMN, Wireframe skin pack, and more
- Multiple render surfaces — core SVG plus SkiaSharp, ImageSharp, Blazor, and WebAssembly targets
- Plugin system — render-surface plugins, skin packs, fluent API plugins
- Mostlylucid.Dagre layout engine — a C# port of dagre with improved edge routing
- Tulip TLP graph format import/export
- Theming — light/dark themes, Mermaid
%%init%%directive support
The intention is to contribute these changes back upstream. See the full Naiad README for diagram previews and documentation.
All rendered natively by Naiad — no browser, no JavaScript, no external services.
| Package | Purpose |
|---|---|
| Avalonia 11.3 | Cross-platform UI |
| FluentAvaloniaUI 2.5 | WinUI 3-style controls and theming |
| FluentIcons.Avalonia.Fluent | 1,800+ Microsoft Fluent UI icons |
| LiveMarkdown.Avalonia 1.7 | Markdown rendering + syntax highlighting |
| Mostlylucid.Naiad (fork) | Mermaid diagrams, 30+ types, pure C# |
| Mostlylucid.Dagre | Graph layout engine |
| QuestPDF + QuestPDF.Markdown | PDF export |
| SkiaSharp 3.119 | 2D graphics, mermaid rasterization |
| Mostlylucid.Avalonia.UITesting (Debug only) | UI testing harness — YAML scripts, REPL, MCP server |
Alongside the lean MarkdownViewer/ project there is a second exe in
the repo, MarkdownViewer.Full/. It is never published. There is no
download link, no release artifact, no Windows Store entry. The only way
to run it is to build from source. It exists as a tight feedback loop
against the Mostlylucid.StyloExtract
2.0 library so the upstream extractor can iterate against real-world
web pages without the lean release path ever changing.
If you came here looking for a more featureful download of lucidVIEW, there isn't one. The lean build below is what ships and is what almost everyone wants.
What FULL adds on top of lean (against Mostlylucid.StyloExtract.* 2.0.0):
Mostlylucid.StyloExtract.Core+.Templates+.Playwright+.Streaming+.Llm.LlamaSharpLLamaSharp0.27.0 for in-process CPU LLM template inductionMicrosoft.Playwright1.60.0 for rendered-DOM auto-retry on SPA pages- Streaming gateway scanner wired into the HTTP byte stream
- F2 Extraction Details panel with NDJSON export
- Pipeline stage indicator in the status bar (
fetch · stream · match · induce · llm · render) - First-run bootstrap dialog (model + browser install)
- Read/Scan mode toggle (RagFull vs Sitemap extraction profile)
- CLI verbs:
--doctor/--install-browsers/--download-model/--shot <url> <out.png>
Run it from source:
dotnet run --project MarkdownViewer.Full/MarkdownViewer.Full.csproj -c DebugLean Release output is unaffected. Every lean source touch that supports
FULL is guarded by #if FULL and runtime-neutral when the constant is not
defined. See docs/full-edition.md for the full
guide: what FULL does, the dogfood pipeline step-by-step, CLI reference,
settings layout, and the rules this branch lives under.
The Unlicense — do whatever you want.
View this README inside lucidVIEW with Shift+F1. The in-app User Manual
(F1) has the full feature walkthrough.





