mirror of
https://gitlab.com/ilshat-apps/manuscript.git
synced 2026-07-04 10:42:44 +00:00
A fast, native GNOME Markdown reader and editor written in Rust
- Rust 99.5%
- Makefile 0.5%
The home:ro permission is blocked by flatpak-builder-lint
('finish-args-home-ro-filesystem-access'). Flathub manifest landed
with --filesystem=xdg-pictures:ro as a narrower replacement; full
sibling-asset access from arbitrary directories needs a Flathub
linter exception, deferred to v1.5.
|
||
|---|---|---|
| data | ||
| docs/superpowers/specs | ||
| src | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| cargo-sources.json | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| io.gitlab.ilshat_apps.manuscript.yml | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| test.md | ||
Manuscript
A fast, native GNOME Markdown reader and editor written in Rust
Features
- Beautiful rendering — graduated heading hierarchy with a blue accent per level, bold, italic, strikethrough, lists, blockquotes with a soft tint, horizontal rules, and images with rounded corners
- GFM callouts —
> [!NOTE],> [!TIP],> [!WARNING],> [!DANGER],> [!IMPORTANT]render as coloured blocks with an icon and bold title (custom title supported) - Wikilinks —
[[Note Name]]and[[Note Name|alias]]render in a violet accent (vault navigation is a future feature) - Task lists —
- [ ]/- [x]render as filled / empty discs (●/○) - Inline code with warm palette — amber on cream / dark-on-warm so code stands out without competing with the heading accents
- Syntax-highlighted code blocks — powered by syntect with 100+ languages
- GFM tables — rendered with aligned columns and box-drawing characters
- Rich tables — opt-in GtkGrid rendering with cell borders, header styling and inline formatting inside cells (Preferences → Writer)
- Clickable links — open in default browser with hover cursor
- Three view modes — Read, Edit (GtkSourceView), and Split (side-by-side with live preview)
- Outline panel —
F9toggles a sidebar with all document headings (overlay on phones) - Smart list continuation — Enter inside a
-/1./- [ ]item continues the list with the right marker - Session restore — reopens last file, view mode and scroll position on launch
- Full-text search —
Ctrl+Fwith a liveX / Ymatch counter; current match in green, others in yellow - Find and Replace —
Ctrl+Hwith Replace / Replace All and a brief green flash on changed text - Spell check — inline underlines via libspelling, language picker from installed hunspell/myspell dictionaries
- Multi-window — opening a file from the file manager opens a new window so two docs sit side by side (toggleable)
- Writer modes — Distraction-free fullscreen (
F11hides chrome), Focus mode (dim everything but the current paragraph), Typewriter mode (current line pinned to viewport center) — all toggleable in Preferences - Rendered print —
Ctrl+Pprints the rendered markdown, not the raw source: headings keep size and weight, code blocks keep their shading, tables render as a box-drawing grid - Export as PDF — File menu → Export as PDF… writes an A4 PDF via the same layout engine as print (no pandoc/LaTeX dependency); font and margins configurable in Preferences
- Remote images —
is fetched asynchronously, cached in memory, and rendered inline - Quick Open —
Ctrl+Shift+Oopens a fuzzy popover over recent files and markdown siblings of the current document - Auto-save — optional Preferences toggle that writes the current file ~1.5 s after the last edit; suppresses the reload toast during a self-write
- Mobile UX — edge-swipe to open the outline, bottom action bar with markdown shortcuts (Bold, Italic, Heading, Bullet, Task, Link, Code) when a source view is focused on narrow screens, horizontal swipe to switch Read ↔ Edit
- Customizable — font family, size, line spacing, line numbers, text wrapping
- Session zoom —
Ctrl+=/Ctrl+-/Ctrl+0adjusts text size on the fly - Word count — words and reading time live in the header bar while you edit
- Writing stats footer — optional bottom footer with word count, reading time and a daily-goal tracker (icon-prefixed segments, star icon flips from outline to filled once today's count meets the goal)
- Keyboard scrolling in View mode — Up/Down/PgUp/PgDn/Home/End and Space (Shift+Space scrolls up) scroll the rendered document
- Theme-aware — follows system light/dark preference, updates automatically
- Recent files — quick access to last 10 opened files
- File watching — Reload toast on external changes (no overwriting unsaved edits)
- Print support —
Ctrl+Pto print or export - Drag & drop — drop
.mdfiles onto the window - Adaptive — works on phones and tablets (GNOME Mobile, Phosh)
- Fast — native Rust, no WebKitGTK, instant startup
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl+N |
New file (untitled) |
Ctrl+O |
Open file |
Ctrl+Shift+O |
Quick Open (recents + folder, fuzzy) |
Ctrl+S |
Save file |
Ctrl+W |
Close current file (or window if welcome screen is shown) |
Ctrl+E |
Toggle edit mode |
Ctrl+Shift+E |
Toggle split view |
F9 |
Toggle outline panel |
Ctrl+F |
Search |
Ctrl+H |
Find and Replace (in Edit/Split) |
Ctrl+P |
|
Ctrl+, |
Preferences |
Ctrl+Q |
Close window |
Ctrl+Z / Ctrl+Shift+Z |
Undo / Redo |
Ctrl+Y |
Redo |
Ctrl+B / Ctrl+I |
Bold / Italic (wraps selection) |
Ctrl+K |
Insert link [text](url) |
Ctrl+= / Ctrl+- / Ctrl+0 |
Zoom in / out / reset |
F11 |
Toggle distraction-free fullscreen |
Esc |
Exit fullscreen |
Install
From source
Dependencies (Fedora):
sudo dnf install gcc cargo gtk4-devel libadwaita-devel gtksourceview5-devel pango-devel oniguruma-devel
Dependencies (Debian/Ubuntu):
sudo apt install build-essential cargo libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev libpango1.0-dev
Build and install:
git clone https://gitlab.com/ilshat-apps/manuscript.git
cd manuscript
make install
This installs to ~/.local by default. Use PREFIX=/usr make install for system-wide installation.
Run without installing
cargo run -- path/to/file.md
Flatpak
# Build locally (requires flatpak-builder)
flatpak-builder --user --install build io.gitlab.ilshat_apps.manuscript.yml
Uninstall
make uninstall
Packaging
System integrators can build with a custom prefix and staging directory:
make install PREFIX=/usr DESTDIR=$pkgdir
Community packages
- Arch Linux (AUR):
manuscript-git— build from the latestmaincommit.
Other community-maintained packages are welcome — open an issue with a link and it'll be listed here.
Tech Stack
- Language: Rust
- UI toolkit: GTK4 + libadwaita
- Markdown parser: pulldown-cmark
- Syntax highlighting: syntect
- Editor: GtkSourceView 5
- Rendering: native GtkTextView + TextTags (no WebKitGTK)
License
Manuscript is licensed under the GNU General Public License v3.0.