⭐ star — Speaking Terminal Access Reader
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 environment
Then run it:
star # launch the Qt GUI
star document.pdf # open a file
star --tui # force the terminal UI
star --deps # show which optional features are installed
star --install-optional # fetch optional features from the command line
star --plugins list # list registered backends / formats / exporters
star --check-update # check PyPI for a newer release (offline-safe)
Optional features
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, …), star offers to download it in the background and
the feature then works in the same session — only the large speech-to-text pack
asks for a 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 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.
✨ Highlights
- 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.
📚 Documentation
| Guide | What's in it |
|---|---|
| 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.
📦 Distribution
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.
🤝 Contributing
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.
📜 License
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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file star_reader-0.1.24.tar.gz.
File metadata
- Download URL: star_reader-0.1.24.tar.gz
- Upload date:
- Size: 779.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f76a92a10891bf95ff42a41e868a4aade1dc545f047d3690d01ece76bdff655b
|
|
| MD5 |
580be6c3b6b20f1b9b811acf9e7e1767
|
|
| BLAKE2b-256 |
3f5a3c98c8b970f62db0de5a712b00e4735280841dba87acef339a5f74bd0eec
|
Provenance
The following attestation bundles were made for star_reader-0.1.24.tar.gz:
Publisher:
release.yml on leavesofgrass/star
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
star_reader-0.1.24.tar.gz -
Subject digest:
f76a92a10891bf95ff42a41e868a4aade1dc545f047d3690d01ece76bdff655b - Sigstore transparency entry: 2136132453
- Sigstore integration time:
-
Permalink:
leavesofgrass/star@3d06ba951fb09847f858ffcf1c66c788406dbf71 -
Branch / Tag:
refs/tags/v0.1.24 - Owner: https://github.com/leavesofgrass
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3d06ba951fb09847f858ffcf1c66c788406dbf71 -
Trigger Event:
push
-
Statement type:
File details
Details for the file star_reader-0.1.24-py3-none-any.whl.
File metadata
- Download URL: star_reader-0.1.24-py3-none-any.whl
- Upload date:
- Size: 700.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4ab886c5f47b1a9a35699bc5df8649bc0cb08f561746d8c6da2279f7c90e3ed
|
|
| MD5 |
fdf3744567da9d1addcd50c313b405e4
|
|
| BLAKE2b-256 |
40316946204eb5bb2518962df6e4a3d8af491538dcf87d6652451d04901e2364
|
Provenance
The following attestation bundles were made for star_reader-0.1.24-py3-none-any.whl:
Publisher:
release.yml on leavesofgrass/star
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
star_reader-0.1.24-py3-none-any.whl -
Subject digest:
a4ab886c5f47b1a9a35699bc5df8649bc0cb08f561746d8c6da2279f7c90e3ed - Sigstore transparency entry: 2136132472
- Sigstore integration time:
-
Permalink:
leavesofgrass/star@3d06ba951fb09847f858ffcf1c66c788406dbf71 -
Branch / Tag:
refs/tags/v0.1.24 - Owner: https://github.com/leavesofgrass
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3d06ba951fb09847f858ffcf1c66c788406dbf71 -
Trigger Event:
push
-
Statement type: