
Marco is a fast, cross-platform Markdown editor built in Rust with live preview, syntax extensions, and a custom parser for technical documentation.
Polo, its companion viewer, lets you open and read Markdown documents with identical rendering and minimal resource use.
Both run natively on Linux and Windows, built with GTK4 and Rust, designed for speed, clarity, and modern technical writing — with features like executable code blocks, document navigation, and structured formatting.


Marco - Full-featured Markdown editor with live preview

Polo - Lightweight Markdown viewer
Ready to try Marco? Installation is simple and takes less than a minute:
| Linux | Windows |
|---|---|
Download the latest .deb from the Releases page: |
https://github.com/Ranrar/Marco/releases/latest | Download the latest .zip from the Releases page:
https://github.com/Ranrar/Marco/releases/latest |
| Asset: marco-suite_<version>_linux_amd64.deb | Asset: marco-suite_<version>_windows_amd64.zip |
| Install (Debian/Ubuntu):
Download the *.deb asset for your architecture (typically amd64)
Install with your package manager (e.g. dpkg), then resolve any missing dependencies if prompted | Install:
Download the .zip asset
Extract to any location (e.g., C:\Program Files\Marco)
Run marco.exe or polo.exe
Settings are stored in the extracted folder (portable mode) |
Marco's parser, AST, HTML renderer, and language-intelligence features are now published as a standalone crate on crates.io:
[dependencies]
marco-core = "1.0.2"
use marco_core::{parse, render, RenderOptions};
let doc = parse("# Hello\n\nThis is **Marco**.")?;
let html = render(&doc, &RenderOptions::default())?;
marco-core is pure Rust with no GTK dependencies, so it can be embedded in CLIs, build tools, and other editors. It is developed in its own repository (Ranrar/marco-core) and versions independently from the Marco/Polo binaries.
| Use Case | Marco (Editor) | Polo (Viewer) |
|---|---|---|
| Technical documentation & manuals | Yes | Yes |
| Research papers (math, footnotes, references) | Yes | Yes |
| Books & long-form writing | Yes | Yes |
| Presentations & slide decks | Yes | Yes |
| README & project documentation | Yes | Yes |
| Blog posts & articles | Yes | Yes |
| API documentation | Yes | Yes |
| Meeting notes & minutes | Yes | Yes |
| Knowledge base & personal wiki | Yes | Yes |
| Release notes & changelogs | Yes | Yes |
| Study notes & course material | Yes | Yes |
Marco aims for 100% CommonMark compliance (currently 652/652 spec tests passing), plus a practical set of focused extensions.
| Feature | Status |
|---|---|
| CommonMark core (headings, lists, code, links, images, blockquotes…) | Yes |
| International text (Unicode) + RTL text direction support | Yes |
| Tables (GFM) including headerless tables | Yes |
| Task lists and inline checkboxes | Yes |
| Strikethrough, highlight, superscript, subscript | Yes |
| Footnotes and inline footnotes | Yes |
| Admonitions / callouts (Note, Warning, Tip, custom) | Yes |
Emoji shortcodes (:joy:) |
Yes |
User mentions (@name[platform]) |
Yes |
| Math — KaTeX inline and block | Yes |
| Mermaid diagrams | Yes |
| Tab blocks | Yes |
| Slide decks | Yes |
| Heading IDs for stable anchors | Yes |
| GFM autolink literals | Yes |
| PDF export | Yes |
| Print preview with page settings | Yes |
| Table of contents (TOC) sidebar | Yes |
| Bookmarks and cross-file links | Yes |
| Scroll sync between editor and preview | Yes |
| Mode | Purpose | Status | Notes |
|---|---|---|---|
| Live Preview | Real-time rendered Markdown while you edit. | Available | Synced with editor, supports themes and interactive preview behaviors. |
| Print Preview | Paged, print-focused preview for PDF/export workflows. | Available | Uses paged media rules (paper size, orientation, margins, page numbers). |
| Code View | Inspect the underlying rendered HTML source. | Available | Useful for debugging markup/output structure. |
| Presentation View | Slide-style reading/presenting mode for documents and decks. | Planned | In progress for a future release. |
I started building Marco because I couldn't find a simple, reliable Markdown editor for Linux.
As an IT systems manager, I've always preferred local software — fast, safe, and running entirely on my own machine, not in the cloud.
In my daily work, I write a lot of technical documentation and manuals, so I needed a tool that could handle complex documents efficiently and reliably.
That idea became a personal challenge: to create a complete Markdown editor from the ground up — with a custom-built parser and a design focused on performance, clarity, and long-term potential.
Most Markdown editors focus on simplicity. Marco focuses on precision.
It's built for developers, engineers, and writers who need:
- Native performance — no login, no cloud, your documents stay on your machine
- Structured documents — full control over headings, blocks, and formatting
- Custom Markdown grammar — hand-crafted parser for extensibility and AST-level control
- Seamless preview — rendered with WebKit and perfectly synced with the editor
Whether you're writing technical docs, tutorials, or long-form text, Marco turns Markdown into a professional writing tool — fast, clear, and extensible.
GTK4-RS (gtk4, glib, gio) - Cross-platform GUI toolkit powering windows, widgets, menus, and event handling.
Used for Marco and Polo's native Linux/Windows interface.
SourceView5 (sourceview5) - Editor component with syntax highlighting and code-friendly text features.
Powers the Markdown editing area (line numbers, search/replace, formatting aids).
WebKit6 / WebView2 - HTML preview engine (webkit6 on Linux, wry/WebView2 on Windows).
Renders live preview with local images, CSS themes, and scroll-sync interactions.
nom (nom) - Parser combinator library used for Marco's custom Markdown grammar.
Enables recursive-descent parsing and AST generation in the marco-core crate.
RON (ron) - Human-readable configuration format for settings, themes, and preferences.
Easy to edit manually and friendly for version control.
KaTeX (katex-rs) - Rust implementation of KaTeX for math rendering.
Supports fast native inline and block LaTeX output without browser JS dependencies.
Mermaid (mermaid-rs-renderer / mmdr) - Pure Rust renderer by Jeremy Huang.
Supports 23 diagram types and can be 100-1400x faster than mermaid-cli.
Paged.js (paged.js) - CSS Paged Media polyfill used in print-preview pagination.
Project: pagedjs/pagedjs (MIT License).
markdownlint - Marco uses an internal diagnostics catalog aligned with markdownlint-style rule IDs (MD*). Project: DavidAnson/markdownlint.
.md link in the preview to open it in Polo$...$ and display $$...$$)marco-shared/src/assets/language/xx*.toml filesWe welcome contributions of all sizes. Short workflow:
cargo build and cargo test locally.Code style & expectations:
marco/src/ui/ and shared, GTK-free application logic in marco-shared/src/. Pure parser/renderer logic lives in the external marco-core crate.Result<T, E>, avoid panics in library code).tests/ when applicable.If you'd like to make a high-impact contribution, consider one of these areas — open an issue first so we can coordinate:
marco/src/components/collab/ backend that implements a CollabBackend trait and provide in-process tests for concurrent patches and cursor sync.marco/src/components/ai/ interface for suggestions/edits; keep adapters off the UI thread and provide a sm$ claude mcp add Marco \
-- python -m otcore.mcp_server <graph>