Textus
You hold the pen. AI keeps your ink flowing. Textus is a free, open-source, next-generation Markdown editor for macOS, Windows and Linux, with a writing assistant built in.
Free markdown viewer for Windows with native Mermaid diagrams and export to HTML, DOCX and PDF. Native C++ with Direct2D: about 2.5 MB, under 100 ms startup. No Electron.
ProductivityC++ · CMakeGitHub @oipoistarOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Fast, lightweight markdown viewer & reader for Windows. Native C++ with Direct2D — <5MB binary, <100ms startup, no Electron. 10 themes, TOC, search, edit mode.
Loading the full README.
Read the full README ↗Tinta is a fast, lightweight Markdown and Mermaid viewer for Windows, built with Direct2D and DirectWrite for hardware-accelerated rendering. A single native executable of under 5 MB that opens instantly — no Electron, no web engine, no installer.
The recommended way is the Microsoft Store: the build is signed by the Store, trusted by Windows out of the box (no security prompts, works with Smart App Control), and updates automatically. The same signed build installs from the command line:
winget install "Tinta Markdown Viewer" -s msstore
Prefer a single file? Grab the latest release: a portable tinta.exe, no installation required. Because a freshly released exe is not yet code-signed, Windows may show a SmartScreen prompt on first run ("More info", then "Run anyway") until the new version builds up download reputation.
Scoop users can install from the bucket:
scoop bucket add tinta https://github.com/oipoistar/scoop-bucket
scoop install tinta
Most markdown apps ship an entire browser to render text. Tinta uses the GPU-accelerated text stack already built into Windows:
| Tinta | Typora | Obsidian | VS Code | |
|---|---|---|---|---|
| Startup | <100 ms | ~1.5 s | ~3 s | ~2 s |
| Install size | <5 MB | ~90 MB | ~250 MB | ~350 MB |
| Runtime | Native Direct2D | Electron | Electron | Electron |
It's a viewer first: perfect as the double-click default for .md and .mmd files, for reading documentation and diagrams — with an edit mode when you need it.
$inline$ and $$display$$ equations with matrices, cases, aligned equations, fractions, limits, accents and custom macros. Uses an installed math font; no bundled fonts or web engine. See the supported math syntax.status: into the notes dropped in it; the sheet compiles into one document, presents along its arrows, tidies itself, and turns a pasted Mermaid flowchart into cards. A .smd is readable Markdown with a JSON Canvas block, and Obsidian .canvas files open too. See Sheets| Key | Action |
|---|---|
B | Toggle folder browser |
Tab | Toggle table of contents (type to filter, Enter jumps) |
A | Annotate the selected text |
F / Ctrl+F | Open search |
Enter | Next search match |
Ctrl+Shift+F | Search results panel: every match beside the page |
ESC | Close overlay / Quit |
T | Open theme chooser |
S | Toggle stats overlay |
Ctrl+C | Copy selected text (or all if none selected) |
Ctrl+A | Select all text |
Ctrl+Scroll | Zoom in/out |
Arrow keys / J/K | Scroll |
Mouse back/forward / Alt+←/→ | Walk link jumps with scroll restore |
Page Up/Down | Page scroll |
Home/End | Jump to start/end |
Ctrl+G | Go to a line by its number, in the editor or the reading view |
: / Ctrl+E | Enter edit mode |
ESC ESC | Exit edit mode |
Ctrl+N | New quick note — a fresh window, start typing right away; Ctrl+S names it via the save dialog. While the note is still empty, an Open a file button (Ctrl+O) in the preview pane picks an existing file instead |
Ctrl+S | Save (in edit mode) |
Ctrl+Shift+S | Save As: the editor writes the buffer to a new path, the viewer saves a copy, and the document continues under the new name |
Ctrl+H | Find and replace (in edit mode): Tab switches fields, Enter replaces, Ctrl+Enter replaces all |
Shortcut profiles (Settings → Keyboard shortcuts): pick Windows
(E edits, F1 opens help, F searches — the default), Vim (/
searches, : edits, ? helps), or Custom. The Edit button opens a
shortcut editor: click an action, press its new key. Raw : and ?
always work regardless of profile.
Settings live in a plain INI file at %APPDATA%\Tinta\settings.ini (theme,
zoom, window placement, word wrap, and more — written on exit). The [Keys]
section holds the Custom profile's bindings if you prefer editing by hand:
change a value and restart Tinta. Accepted values are letters, digits,
Tab, Space, F1–F12, or any single character.
[Keys]
search=F
browse=B
toc=Tab
theme=T
stats=S
quit=Q
newfile=N
zen=F11
scrollup=K
scrolldown=J
edit=:
help=?
Ctrl combos (save, print, copy, word wrap…) are fixed. The help overlay and context menu show whatever keys are currently bound.
Other settings of note: browserFocusPath=1 makes B open the file browser
with the path box focused and selected, so paste + Enter jumps anywhere
(also in Settings → General). tinta --new starts an untitled quick note
from the command line. The print preview offers 12.7, 19.05 and 25.4 mm page
margins; printMarginMm= takes any value from 5 to 50 for printing and PDF.
cjkFont= names an installed face for a document's Chinese, Japanese and
Korean letters, ahead of the ones Tinta falls back to (Microsoft YaHei UI
first on most systems): a face with lighter bold weights, such as Source Han
Sans or DengXian, sets bold CJK more evenly. mathFont= names one for
equations, such as Latin Modern Math. Both are read at start, and a face that
is not installed is passed over.
The interface language is available in Settings → General. It follows the
Windows display language by default, or can be changed explicitly. Transient
notifications and native error dialogs use the same language. Additional
translations can be added through languages.ini; the app remains a native,
single-file Windows viewer with no web runtime.
Requires Windows with Visual Studio 2019+ and CMake 3.15+.
mkdir build
cd build
cmake ..
cmake --build . --config Release
The executable will be at build/Release/tinta.exe.
# Open a Markdown file
tinta.exe document.md
# Open a Mermaid flowchart
tinta.exe diagram.mmd
# Open with light theme
tinta.exe -l document.md
# Show stats on startup
tinta.exe -s document.md
# Register for Markdown and Mermaid files
tinta.exe /register
Or simply drag and drop a .md, .mmd or .puml file onto the window (.plantuml works too).
To copy a document's full path, right-click the document or its tab (the filename in the title bar when only one file is open) and choose Copy file path, beside Reveal in Explorer. The tab menu copies the clicked tab's path, even if another tab is active. Untitled notes have no path until saved.
On first launch, Tinta will ask if you want to set it as the default viewer for Markdown, Mermaid and PlantUML files. If you choose "No", you won't be asked again.
To register Tinta as the default viewer later, run:
tinta.exe /register
This registers .md, .markdown, .mmd, .puml and .plantuml so you can select Tinta as their default app in Windows Settings.
Tinta natively renders twenty-two Mermaid diagram families in .mmd files and fenced mermaid code blocks — no web engine involved:
flowchart / graph) - TB/TD, BT, LR, RL layouts, subgraph groups, common node shapes, directed and labeled edges, classDef/class/style styling, and graceful handling of Mermaid 11 edge IDs and node configs<br/> breaks, every arrow family, activations, notes, autonumber, and loop/alt/opt/par/critical/break frames~T~ generics, all relation kinds with multiplicities, note and note for[*] start/end, choice/fork/join, descriptions, directions, inline notesC4Context/C4Container/C4Component/C4Dynamic/C4Deployment) - persons, systems, containers, and components in the standard C4 palette, nested boundaries, labeled relationsarchitecture-beta) - services with line-art icons, groups, junctions, and side-anchored edgesblock-beta) - column grids, spans, spaces, nested blocks, block arrows, labeled edgessankey-beta) - ranked nodes with smooth flow ribbonspacket-beta) - 32-bit rows with labeled bit-range fieldstreemap-beta) and radar charts (radar-beta)dateFormat X axis), mindmaps, timelines, user journeys, quadrant charts, and ()Diagrams follow the active theme, print through Ctrl+P, export as SVG in HTML and as crisp images in DOCX, and their text is selectable and searchable like any other content. Anything a native renderer does not cover yet (composite states, zenuml) falls back to readable source code.
PlantUML diagrams render through the real PlantUML tool. Tinta never bundles PlantUML, never downloads anything, and makes no network calls - you point it at a tool you already have: either a native plantuml.exe, or a plantuml.jar run through the java found on your PATH. PlantUML runs in its sandbox security profile, so a diagram in a document you open cannot read files from your disk or fetch anything from the network.
java executable plus the jar path). A plantuml.exe on PATH is auto-detected without touching any setting. The choice persists as plantumlPath in settings.ini.plantuml, puml and pu blocks inside Markdown, and standalone .puml or .plantuml files, which open straight as a diagram and join the open/save dialogs, drag-and-drop and file-association registration.@startuml block: sequence, use case, class, activity, component, state, object, deployment, timing, gantt and the rest. Detection is anchored on @startuml (named blocks such as @startuml Flow and @startuml(Flow) included); non-UML PlantUML start tags such as @startjson, @startyaml or @startmindmap are not detected and fall back to readable source.@startuml anchor, or a failed or timed-out render leaves readable source code on the page - never a broken image.PlantUML ships several license flavors, and some of them (the plantuml-mit jar, for example) omit a few non-UML extras such as ditaa while still generating every UML diagram; Tinta works with any flavor. Setup and troubleshooting: PlantUML support.
Press T to open the theme chooser:
Light Themes:
Dark Themes:
Custom themes live in themes.ini beside the portable executable, or in
%APPDATA%\Tinta. Add inlinecode to a [theme] section to color inline code
independently of fenced blocks:
code=334455
inlinecode=B00020
Here inline code is red and plain fenced code stays neutral. Syntax highlighting
keeps its own colors. Without inlinecode, inline code uses code as before.
The override is preserved when saving a theme from the editor and applies to
HTML and DOCX exports. Native printing keeps Tinta's light print palette, set in
the theme's fonts.
For supported code-fence languages and aliases, including SQL, PowerShell, Java, PHP, HTML/XML, CSS, YAML and Markdown, see Syntax highlighting. The Frontmatter settings page controls property display and optional created/updated dates.
Named, repeated and multiline footnotes include native navigation and HTML/DOCX export.
Individual H1-H6, marked-text, bold, italic, selection and rule colours are described in Theme colours.
MIT
Adocs/plan.md become real links: live targets open as tabs, missing ones render as faded ghosts. Mouse back/forward (or Alt+arrows) walks your jumps with exact scroll restore.md or wiki link and the target appears fully rendered in a panel beside it, no tab opened\\server\share\...) opens only in a document from that same server; anywhere else the image shows a note instead, since opening the share would sign in to it with your Windows credentials. A share mapped to a drive letter opens like any local folder: to edit: your raw Markdown on the left with the rendered page docked beside it. A slim line-number gutter, a soft accent wash on the caret's line and its rendered block, a tool rail with formatting controls (its bullet, numbered, task and quote buttons mark every selected line) plus table-size and diagram-template pickers, and Markdown assists (lists continue on Enter and on a paste of several lines, Tab indents, Ctrl+B/I wrap, and a quote, bracket or * ~ ^ = : typed over a selection wraps it). Alt+↑/↓ moves lines, selected text drags to another place (Ctrl+drag leaves a copy), and several carets (Alt+click, Ctrl+Alt+↑/↓, Ctrl+D) type, delete and move together, handy for lining up tables. A word and character count sits beside the Read button, for the whole document or the selection. Search and find-replace work in the editor too. The source is in colour: headings, links and code stand out, Markdown's marks go faint, and fenced code and the properties take their language's colours (details; Settings → Editor turns it off):rocket: and friends render as real emoji.txt, .json, .yaml and friends link like Markdown files and open as highlighted documentssettings.ini next to tinta.exe (an empty file works) and the whole configuration — settings, custom themes, languages, drafts — lives beside the executable and travels with it; without one, everything stays in %APPDATA%\TintaCtrl+P | Print / export to PDF; the preview picks the paper, orientation and margins |
Ctrl+E | In Source, show/hide the preview pane; in Live, read the page at full width, and Ctrl+E again to go back |
Ctrl+Shift+E | Read the unsaved edits at full width; Esc returns to the source (in edit mode) |
Ctrl+W | Toggle word wrap (in edit mode) |
Alt+↑ / Alt+↓ | Move the current line, or the selected lines, up or down (in edit mode) |
Drag / Ctrl+drag | Move the selected text to where you let go, or leave a copy there; Esc cancels (in edit mode) |
Ctrl+Alt+↑ / Ctrl+Alt+↓ / Alt+Click | Add a caret above, below or at the click; Esc returns to one caret (in edit mode) |
Ctrl+D | Select the word, then add its next occurrence as another caret (in edit mode) |
Ctrl+F4 | Close the current tab (viewer and edit mode) |
Q | Quit |
xychart-beta