star is an accessible, GUI-first document reader and Markdown authoring tool with built-in text-to-speech. It opens PDFs, Word/EPUB/PowerPoint, web pages, spreadsheets, and more, reads them aloud, and highlights each word as it is spoken — with no cloud account and no internet required. You can also write in it: create documents from scratch, format Markdown, and dictate straight into the text.
star is built for students with print disabilities — people who work with
dense, heavily formatted documents and need a reading tool that gets out of the
way. The Qt GUI is the primary interface (it launches by default and is where
development is focused), with a keyboard shortcut for every command; a
full-featured, keyboard-driven curses terminal UI remains available with
--tui for headless or text-only environments.
It draws design inspiration from Emacspeak, Kurzweil 1000, Natural Reader, and Central Access Reader.
Install on any platform with Python 3.11+:
pipx install star-reader # isolated app install (recommended)
# or: pip install star-reader # into the current environmentstar grows on demand — it fetches optional features the first time you use
them, so you don't need to pick extras up front. Want everything available
offline right away? pipx install "star-reader[all]".
Run it:
star # launch the Qt GUI (the primary interface)
star document.pdf # open a document
star --tui # force the terminal UI (headless / text-only)Your first 60 seconds (in the GUI):
- Press
Ctrl+Oto open a document — or just read the welcome page it opens on. - Press
Spaceto hear it read aloud, with each word highlighted as it's spoken. - Put the caret on a word and press
Ctrl+Dfor an offline definition. - Press
Ctrl+Nto start writing your own document;Ctrl+Etoggles edit mode.
Where next:
- Worked examples:
docs/examples/— extract text on the CLI, load documents from Python, and read-aloud / authoring walkthroughs. - Full docs: Usage guide · Features · Installation.
star runs out of the box on nothing but the Python standard library, and
grows on demand — no pip install step anywhere. Whenever you reach for a
feature that needs an add-on (OCR, offline dictionary, summarize, translate,
knowledge-graph extras, dictation, …), star offers to download it in the
background and the feature then works in the same session — no restart. On
first launch the GUI also shows a short optional-features chooser: pick the
Thin or All preset, or tick exactly the capabilities you want. Re-open it
any time from Tools → Install Optional Features…. "All" now means literally
everything (including the large speech-to-text and named-entity packs); the
download size is shown upfront.
Prefer the command line? star --deps shows what's installed,
star --install-optional fetches features, star --plugins list lists the
pluggable backends/formats/exporters, and star --check-update checks PyPI.
Prefer the command line or a scripted setup? star --install-optional installs
the all preset; star --install-optional thin or
star --install-optional ocr,dictionary install a preset or a comma-separated
list of features; run it with no value to list every feature with its size.
star --plugins list and star --check-update round out the CLI. Advanced users
can still install extras the classic way — pip install "star-reader[all]", or
groups like star-reader[translate,vocab] — but the normal path is one click,
in-app.
Full instructions (wheel, single-file star.pyz, native engines, per-platform
notes) are in the Installation guide.
- Reads aloud with live word highlighting in both the Qt GUI and the terminal TUI — including in-process eSpeak-NG with true audio-position sync.
- Many TTS engines + Voice Manager: pyttsx3
(SAPI5 / NSSpeechSynthesizer), macOS
say, eSpeak-NG, Festival, Piper (neural, offline, free), Coqui, DECtalk, and opt-in ElevenLabs cloud neural voices (text leaves your machine only after you set a key and choose the cloud voice; any failure falls back to a local engine) — browse, filter, preview, and favorite voices in the Voice Manager (F4), with one-click download of offline Piper neural voices. - Opens almost anything: PDF (incl. OCR), DOCX, PPTX, EPUB, HTML, Markdown, spreadsheets, DAISY/DTBook, and dozens more formats.
- Write, don't just read: create a document from scratch (File ▸ New, Ctrl+N), format Markdown from an edit-mode toolbar and a Format menu (Bold Ctrl+B, Italic Ctrl+I, Underline Ctrl+U, headings, lists, quotes, links Ctrl+K, inline code, rules) with full Undo/Redo, and dictate straight into the text with Voice Typing (Tools ▸ Voice Typing, Ctrl+Alt+K).
- Find, bookmark, and search: incremental find in document (Ctrl+F), named bookmarks (Ctrl+M) with back/forward history (Alt+←/→), and full-text search inside every document in your library.
- Study & spaced repetition: turn highlights and notes into a review deck (FSRS scheduler), review due cards in-app (Study ▸ Review Due Cards…, Ctrl+Shift+F5), auto-generate cloze cards, and optionally two-way sync with Anki.
- Study tools: notes & annotations, a citation manager, summarization, Anki flashcard export, document translation (15 languages, no API key), RSS/Atom feed reading, and a difficult-word overlay.
- Richer documents: inline LaTeX math rendered as readable Unicode, accessible tables that keep their header structure, clickable footnotes (with a ↩ backlink), and image captions / alt text.
- Knowledge graph: link annotations across documents with typed relations
(
CONFLICTS_WITH,SUPPORTS,CITES, …), extract concepts, view the graph interactively, and export to SVG/PlantUML/DOT/JSON. - Export: Markdown, HTML, EPUB, PDF (with highlights), BRF braille, TTS audio (WAV/MP3/OGG/MP4), chaptered M4B audiobooks (chapters from headings; needs ffmpeg), karaoke video (MP4), Anki decks, and synchronized SRT/VTT subtitles.
- Extensible: TTS engines, document formats, and export targets are
discovered through
importlib.metadataentry-points — installing a third-party plugin package adds backends, loaders, or exporters with no changes to star itself. - Accessibility-first: NVDA/JAWS/Orca/VoiceOver compatible, screen-reader announcements for playback / load / theme / find results, a high-contrast (AAA) theme with automatic light / dark / high-contrast following your OS, a Reading Font chooser (OpenDyslexic, Atkinson Hyperlegible, Lexend — auto-fetched and applied across the whole UI), syllable splitting (display-only decoding aid), a caret-tracking reading ruler, four colorblind-friendly themes + custom CSS themes, bionic reading, adjustable spacing (WCAG 1.4.12), and high-DPI support.
- Guided tour & translations: a skippable first-run walkthrough (replay any
time from Help ▸ Guided Tour, Shift+F1), Help ▸ Check for Updates, and a
translated interface — terminal UI included — in Spanish, French, German, and
Portuguese, with a first-run language picker in the Qt GUI (the TUI honors the
ui_languagesetting). Right-to-left interface languages mirror the whole app — Arabic is included as a first catalog. - Fast on huge documents: opt-in pagination renders only a window of a very large document at a time, dropping first paint on a ~500-page file from seconds to well under one (off by default).
- Sync without losing work: reading progress and annotations from two machines now merge instead of last-write-wins — position resolves by a policy you pick (newest / furthest / manual) and notes union by id.
- Graceful degradation: every third-party dependency is optional and guarded, so the core runs on the Python standard library alone.
- One-click optional features: when a capability needs an add-on, star
downloads it in the background — no
pip installstep anywhere — and it works right away (only the large speech-to-text pack needs a restart). Driven by a first-run chooser orstar --install-optional. - One tabbed Preferences dialog: every reader setting — Reading, Reading Aids, Voice, Display, Fonts, General — in Edit ▸ Preferences… (Ctrl+,), with Apply and Restore Defaults.
- Clear, consistent UI: an all-icon toolbar with descriptive tooltips (vector glyphs drawn programmatically and tinted to your theme — no image files); a readable welcome page that reads aloud like any document; and F1 opens the bundled README as a document on every install.
See the full feature reference for everything.
| Guide | What's in it |
|---|---|
| Examples | Runnable, task-focused examples (CLI text extraction, the Python library, read-aloud & authoring walkthroughs) with a catalog mapping every area |
| Installation | PyPI / wheel / zipapp install, optional packages, native engines, platform notes |
| Usage Guide | Running star, the quick command reference, full keyboard map, M-x commands, CLI options |
| Features | The complete feature reference |
| Knowledge Graph | Typed relations between annotations, concept extraction, graph view, and export |
| Configuration | Every settings.json key |
| Architecture & Contributing | Package layout, distribution artifacts, contributing, tests |
| Changelog | Full record of changes |
| Build guide | Building the cross-platform wheel and the self-contained Windows star.exe / macOS .app |
➡️ Browse all docs in the docs/ directory.
The pure-Python wheel (pip install star-reader) is star's primary, stable
distribution; it works on macOS, Linux, and Windows alike. For anyone who can't
install Python, every GitHub Release also attaches double-click binaries for all
three desktops — a self-contained Windows star-<version>-windows-x64.exe
(Python, the GUI, and all loaders baked in; DECtalk excluded from the public
exe), a macOS star-<version>-macos-arm64.dmg (Apple-Silicon; uses the
built-in Apple voices), and a Linux AppImage. A single-file
star.pyz zipapp is
build-it-yourself. See Installation and
BUILD.md.
Contributions are welcome — please open an issue before a PR for anything beyond
small fixes. Keep every third-party dependency optional and guarded, target
Python 3.11, and document new keybindings and M-x commands. See
Architecture & Contributing for the full
guidelines and how to run the test suite.
star — Speaking Terminal Access Reader
Copyright 2026 Jon Pielaet
Free software under the GNU General Public License version 3 or later. This
program is distributed in the hope that it will be useful, but without any
warranty. See the LICENSE file, or run M-x license in the app, for
the full text.