Rust/egui desktop app: draggable markdown file list, editor, git sync, per-file chapter titles, and native ODT export. Includes README and Debian 12 (Surface) install guide. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
md-manuscript
A small desktop application for Debian that treats a directory of markdown files as an ordered manuscript.
- Left pane — every
*.mdfile in the workspace directory, in a manual order you set by dragging the⠿handle up and down. - Right pane — a markdown text editor for the selected file (optional live preview via the Preview checkbox).
- Order + contents are saved and version-controlled with git. The order lives
in
order.jsoninside the workspace, so it syncs along with the files. - Export the whole manuscript as a single concatenated
.odtfile, with a chapter heading before each file's content.
Built in Rust with egui/eframe. The ODT
writer is native (no pandoc/LibreOffice needed at runtime).
Build
cargo build --release
# binary: target/release/md-manuscript
Requires a Rust toolchain. The GUI needs a normal desktop session (X11 or Wayland) with OpenGL — the usual runtime libraries on Debian:
sudo apt install libgl1 libxkbcommon0 libwayland-client0 libx11-6
(Only needed to run the GUI; building does not require them.)
Install
install -Dm755 target/release/md-manuscript ~/.local/bin/md-manuscript
Optionally add a desktop launcher at
~/.local/share/applications/md-manuscript.desktop:
[Desktop Entry]
Type=Application
Name=md-manuscript
Exec=md-manuscript
Categories=Office;TextEditor;
Terminal=false
Use
- Set the Workspace path in the top bar (default:
~/Manuscript) and press Open. The directory is created if it does not exist. - Press Init git once to make the workspace a git repository. To sync with
another machine, add a remote yourself:
After that, the ⟳ Sync (git) button commits all changes,
cd ~/Manuscript git remote add origin <url> git push -u origin mainpull --rebases, and pushes. - Create files with + New, edit on the right,
Ctrl+S(or the Save button) to write to disk. Drag the⠿handles to reorder. - Set the Chapter title for the open file if you want to override the
auto-derived one (the field shows the automatic title as a hint). Leaving it
blank falls back to the file's first level-1 heading (
# ...), or the file name. Titles are saved totitles.jsonand sync with git. - Set the Export path and press Export ODT to produce the concatenated
document. Each file becomes a chapter headed by its (overridden or automatic)
title; the source's leading
# headingis consumed as that title slot.
Files the app writes
| Location | Purpose |
|---|---|
<workspace>/*.md |
your manuscript files |
<workspace>/order.json |
the manual ordering (committed to git) |
<workspace>/titles.json |
chapter-title overrides (committed to git) |
~/.config/md-manuscript/config.json |
last workspace, export path, prefs |
Markdown supported in ODT export
Headings, paragraphs, bold, italic, both, inline code, fenced/indented
code blocks (monospace, whitespace preserved), strikethrough, ordered and
unordered (nested) lists, block quotes, horizontal rules, and links. Images are
rendered as a text placeholder (not embedded).