The plain-text web, rendered natively.
A minimal, fast, cross-platform browser for Markdown over HTTPS and local files.
No webview, no JavaScript, no cookies, no cache.
MDowser is a native desktop browser for the plain-text web. Paste an
https:// URL or open a local Markdown file (file:///β¦, an absolute path
or ~/notes.md) and it fetches or reads it, parses it once, and renders it
with a clean, desktop-browser-style UI. The surface is deliberately small
and auditable: one document format, one HTTP method, one network protocol β
any static Markdown host just works.
- Native Markdown engine. CommonMark plus GFM-style extensions (tables,
footnotes, tasklists, strikethrough) and YAML frontmatter, rendered by
MDowser itself with a neutral documentation palette β code cards with
syntax colors and a Copy button, striped bordered tables, callouts and
documentation typography. HTML, JSX and
:::custom containers render at the markup level only: tags are transparent wrappers, MDX components (<Tabs>,<Accordion>,<Card>,<Steps>,<CodeGroup>,<Badge>) and their:::equivalents (:::tabs,:::code-group,:::steps,:::card,:::accordion/:::details) draw natively, and:::/!!!admonitions become callouts β no JavaScript is ever executed. βdocs/RENDERING.md - Real browser chrome. Vertical tab rail, omnibox with address
autocomplete (bookmarks, local history and a curated builtin list) and
favicons, encrypted local history and bookmarks, zoom, light/dark theme,
preferences and the internal
about:home/about:history/about:licensespages. βdocs/INTERFACE.md - Documents as they are. Color emoji, CJK and RTL scripts, images in PNG/JPEG/GIF/WebP/JPEG XL/AVIF/ICO/static SVG β decoded in pure Rust. In-page anchors, footnotes and bare-URL linkification included.
- Private by design.
https://only (neverhttp://),GETonly, no cookies, cache, proxy, webview or JavaScript; local files only from user input. A remote page can never name or load a local path. βdocs/SECURITY.md - Small and auditable. One binary,
unsafe_code = "forbid", hard caps on every input, and a single document format to reason about. Rendering is incremental: code blocks draw only the lines on screen, tables fingerprint once per document, and the palette is interned. βdocs/ARCHITECTURE.md
Prebuilt archives for macOS, Linux and Windows are attached to every release:
| Platform | Download |
|---|---|
| macOS 13+ | MDowser-<ver>-macos-universal.app.zip (Apple Silicon + Intel) |
| Linux | mdowser-<ver>-linux-<arch>.tar.gz, the matching .deb / .rpm, or the mdowser-<ver>.flatpak bundle |
| Windows | mdowser-<ver>-windows-x86_64.zip (x64) or mdowser-<ver>-windows-aarch64.zip (Windows on ARM) |
- macOS: the
.appis ad-hoc signed, not notarized: double-click it once so Gatekeeper registers the block, then allow it in System Settings > Privacy & Security >Open Anyway(right-click > Open no longer bypasses this on current macOS). - Linux:
sudo dpkg -i mdowser_<ver>_amd64.deb(orarm64), orsudo rpm -i mdowser-<ver>-*.rpm, orflatpak install mdowser-<ver>.flatpak. The package installs the desktop entry, hicolor icon and AppStream metadata, so MDowser appears in the applications menu and its Software-center page. - Windows: unzip and run
mdowser.exe(on Windows on ARM use theaarch64zip; the x86_64 one also runs there via emulation). The.exeis unsigned: on the SmartScreen warning clickMore info>Run anyway; seedocs/NAVIGATION.mdto register.mdfiles.
SHA256SUMS.txt travels with every release.
make # deps + host release + current-OS dist into dist/
# macOS: universal .app.zip | Linux: tar.gz/.deb/.rpm/flatpak | Windows: .exe
make dist # deps + host release + EVERY platform into dist/ (macOS, Linux, Windows)
make install # install into /usr/local (PREFIX/DESTDIR honored; `make dist-rpm` for RPM)
make run # debug build + runmake and make dist install what the host is missing first (make deps;
SKIP_SETUP=1 opts out). Requires stable Rust β₯ 1.98 and a C compiler (plus
NASM on x86/x86_64 hosts; ARM64 hosts assemble with the system toolchain and
need none). On native Windows without make, windows.ps1 is the
equivalent entry point (see docs/BUILDING.md).
Full requirements, the make test pipeline and multi-OS
make dist packaging: docs/BUILDING.md.
mdowser ~/notes.md # local document
mdowser https://example.com/readme.md # remote documentType an address or path in the omnibox, or open a file with the app. Every
navigation stays inside MDowser; Esc stops a load. See
docs/NAVIGATION.md for the route cascade and local
file rules.
| Shortcut | Action |
|---|---|
Ctrl/Cmd+T Β· Ctrl/Cmd+W |
New tab Β· close tab |
Ctrl/Cmd+L |
Focus the address field |
Ctrl/Cmd+R / F5 |
Refresh |
Ctrl+H / Cmd+Y |
History (opens in a new tab) |
Ctrl/Cmd+D |
Bookmark the current page |
Ctrl/Cmd + / - / 0 |
Zoom in / out / reset |
Ctrl/Cmd+, |
Preferences |
All shortcuts: docs/INTERFACE.md.
docs/RENDERING.mdβ everything Markdown can put on screen.docs/INTERFACE.mdβ the desktop UI, element by element, plus all shortcuts.docs/NAVIGATION.mdβ URL routes, redirects, local files and file associations.docs/BUILDING.mdβ toolchain,makepipeline, packaging and runtime requirements.docs/ARCHITECTURE.mdβ module map, contracts and the performance model.docs/SECURITY.mdβ threat model, hard caps and vulnerability reporting.docs/CONTRIBUTING.mdβ quick start and code standards.CHANGELOG.mdβ every notable change and fixed bug.THIRD_PARTY_NOTICES.mdβ licenses of the bundled dependencies and fonts (also rendered in-app: Preferences β View third-party licenses).
The network contract is deliberately tiny: https:// only, GET only, one
Markdown content type, no cookies, cache or proxy, and local files only from
user input (or links inside a local document) β a remote page can never
name or load a local path. Every read
and decode path is hard-capped (10 MiB documents, 16 MiB / 48 MP images,
1M events, bounded encrypted history and bookmarks), SVG is rasterized
statically and unsafe_code = "forbid". The full threat model and caps are
in docs/SECURITY.md.
- Optional cache (deliberately cacheless today).
- Per-block unique indent ids, tab drag-reorder.
Mozilla Public License 2.0 (MPL-2.0) β see LICENSE.
MDowser is an independent project, not affiliated with, endorsed by or
sponsored by any product, project or service it may mention. Every
third-party name and mark belongs to its respective owner and is used only
for identification or description; bundled dependencies are listed in
THIRD_PARTY_NOTICES.md.