Prosaic

May 1, 2026 · View on GitHub

AI-DECLARATION: copilot Build License: MIT Awesome CLI Apps

A writer-first terminal writing app built with Python and Textual, built with the assistance of LLM/Copilot tools.

Landing page

Motivation

I write on multiple devices (an iPad, a laptop, even more), and I wanted a quick way to start every day, get some frontmatter ready for my daily pieces on journal.coffee, jot down notes and even work on books. I have tried several software, some stellar, some half-assed, some bloated, some minimal, but I felt like I needed something of my own.

So, I decided that the best way to go about it is to have a TUI. I can access it from anywhere, and mostly, it will do the job. This way, I can access it from a terminal app on the iPad or Windows (cue: Termix on a browser) and on the Macbook. Hence, Prosaic was born.

Full disclosure: I did rely on LLMs to make it, but as much as I could, I tried to get it to follow best practices, good architecture, and clean code principles.

Publish with Ode

Looking somewhere to publish your writing that is philosophically compatible with Prosaic? Check out Ode. You can also go to the GitHub directly.

Ode is for writers who want to publish in an aesthetically pleasing website, ignoring the bells and whistles of the modern internet. It is opinionated, minimal, and easy to use, guided by an Ethos that prioritizes the craft of writing and the joy of reading over metrics and engagement.

Screenshots

Installation

# Install (requires Python 3.11+)
pipx install prosaic-app

# Upgrade to latest version
pipx upgrade prosaic-app

# Run (first launch runs setup wizard)
prosaic

# Re-run setup wizard anytime
prosaic --setup

Usage

prosaic [OPTIONS] [FILE]
OptionDescription
--lightUse light theme (default)
--darkUse dark theme
--profile <name>Use a specific profile
--profilesList all profiles
--languagesList all supported spell check languages
--setupRun setup wizard again
--referenceShow reference
--licenseShow MIT license
--helpShow help message

Open a file directly:

prosaic ~/writing/draft.md
prosaic --dark ~/writing/draft.md

Features

  • Markdown-first: Live outline, word counting
  • Spell check: 80+ languages powered by hunspell (F7 to toggle)
  • Autosave: Files automatically save every 10 seconds
  • Focus mode: Hide everything except your writing
  • Reader mode: Distraction-free reading
  • Start writing: Quick writing session with all panes open
  • Continue writing: Resume your last edited document
  • Daily metrics: Track words and characters written each day
  • Profiles: Separate workspaces for different projects
  • Status bar: Real-time indicators for spell check, autosave, git status, and save state
  • Git-ready: Archive is Git-initialized for versioning

Profiles

Profiles let you maintain separate workspaces for different writing projects (personal, work, fiction, etc.).

# List profiles
prosaic --profiles

# Use a specific profile
prosaic --profile work

# Create a new profile (runs setup wizard)
prosaic --profile fiction

Each profile has its own:

  • Archive directory
  • Git remote (optional)
  • Theme preference
  • Spell check language (80+ languages supported)

Manage profiles from the dashboard menu (m key) or edit in ~/.config/prosaic/settings.json.

Upgrading from v1.1.1 or older? Your existing setup is automatically preserved as the "default" profile. On first launch after upgrading, you'll be offered the option to set up additional profiles or rename your default.

Spell Check

Prosaic supports 80+ languages powered by hunspell, including English, Spanish, French, German, Arabic, Hungarian, Polish, and many more.

# List all supported languages
prosaic --languages

Spell check settings:

  • Language is set per profile during setup
  • Toggle on/off with F7 in the editor
  • Change language anytime in manage profiles (m key on dashboard)
  • Status bar shows spellcheck:on or spellcheck:off
  • Existing users are prompted to set a language on first launch after upgrading

Common language codes: en_US, en_GB, es_ES, fr_FR, de_DE, pt_BR, ar, hu_HU, pl_PL, ja, zh_CN, ru_RU

Books

Books are long-form writing projects stored as directories in your archive's books/ folder.

my-book/
  chapters/               Individual chapter files
    chapter-one.md
    chapter-two.md
  chapters.md             Chapter reading order (one filename per line)
  manuscript.md           Auto-generated compilation (read-only)

Working on a book:

  1. Press b on the dashboard to open book selection
  2. Select an existing book or create a new one
  3. Select an existing chapter or create a new one
  4. The manuscript auto-compiles on every save and when you leave a chapter
  5. Press m in chapter selection to compile manually at any time

The manuscript is read-only in Prosaic — edit your chapters, not the manuscript directly.

Upgrading from v1.3.4 or older? Legacy books (single .md files) are automatically migrated to this structure on first open. Your original file is preserved with a .bak extension.

Keybindings

CategoryKeyAction
DashboardsStart writing (quick session)
DashboardcContinue writing (if last file exists)
DashboardpWrite a piece
DashboardbWork on a book
DashboardnAdd a note
DashboardrRead notes
DashboardfFind files
Dashboard?Help
DashboardmManage profile
DashboardqQuit
EditorCtrl+eToggle file tree
EditorCtrl+oToggle outline
EditorCtrl+pKey palette
EditorCtrl+sSave
EditorCtrl+mCompile manuscript (books only)
EditorCtrl+qGo home
EditorF1Help
EditorF5Focus mode
EditorF6Reader mode
EditorF7Toggle spell check
WritingCtrl+zUndo
WritingCtrl+yRedo
WritingCtrl+xCut
WritingCtrl+cCopy
WritingCtrl+vPaste
WritingCtrl+aSelect all
WritingCtrl+kToggle markdown comment

Pane Defaults

ModeTreeOutline
write a piece (default)shownhidden
start writingshownshown
add a notehiddenshown
read noteshiddenshown
work on a bookhiddenshown
focus modehiddenhidden
reader modehiddenhidden

Status Bar

The status bar at the bottom provides real-time information:

  • Save state: [+] (unsaved changes) or [·] (saved)
  • Autosave indicator: (idle) or (just saved) - files auto-save every 10 seconds
  • Spell check: spellcheck:on or spellcheck:off - toggle with F7
  • Git status: Shows current branch and changes (when in a git repository)
  • Word/character count: Live metrics as you type
  • File type: Current document type (piece/book/note/draft)

Themes

  • Prosaic Light (default): Warm white background with brick accents
  • Prosaic Dark: Deep charcoal with warm tan accents
# Light mode (default)
prosaic

# Dark mode
prosaic --dark

Configuration

Config location (in order of priority):

  1. PROSAIC_CONFIG_DIR env var (explicit override)
  2. $XDG_CONFIG_HOME/prosaic/ (Linux standard)
  3. ~/.config/prosaic/ (default)

Override with environment variable:

PROSAIC_CONFIG_DIR=~/custom/path prosaic

Git Integration

If your chosen archive directory already contains a git repository, the wizard will:

  • Detect the existing .git directory
  • Inherit the repository (no re-initialization)
  • Read the remote URL if configured
  • Prompt for a remote URL if none exists
  • Store this info in settings.json

Example settings.json:

{
  "app_version": "1.5.1",
  "setup_complete": true,
  "active_profile": "default",
  "profiles": {
    "default": {
      "archive_dir": "/Users/you/Prosaic",
      "init_git": true,
      "git_remote": "git@github.com:you/writing.git",
      "theme": "light",
      "spell_lang": "en_US",
      "spell_check": true,
      "last_file": "/Users/you/Prosaic/pieces/2026-03-03-example.md"
    }
  }
}

Archive Structure

~/Prosaic/              # Default archive (configurable)
  pieces/               # Pieces with preloaded markdown frontmatter
    2026-05-01-my-piece.md
  books/                # Long-form projects (folder-based)
    my-book/
      chapters/         # Individual chapter files
        chapter-one.md
        chapter-two.md
      chapters.md       # Chapter reading order
      manuscript.md     # Auto-compiled (read-only)
  *.md                  # Drafts (loose files in root)
  notes.md              # Quick notes with auto date headers
  metrics.json          # Daily statistics for archival and display
  .git/                 # Version control

License

MIT