textweaver documentation
textweaver is a document reader and writer that speaks. It reads aloud with a highlight that follows the spoken word, is fully operable from the keyboard in both a terminal and a graphical app, and converts, exports, and edits documents. It is an independent project descended from star, the Python reader that preceded it.
This is the index of every textweaver document, grouped by audience:
- People who use textweaver: reading, writing, speech, and the tools.
- People who work on textweaver: how it is built, tested, and released.
- The design decisions: the architecture decision records (ADRs).
If you are new, begin with the quick start.
There are also interactive pages that explain textweaver with diagrams operable from the keyboard. They work offline in any browser.
Start here
- For students: from download to hearing a document.
- For accommodation staff: converting course material, preparing computers, and working without internet.
- What is new: a summary of each release.
- Known limits: what does not work yet, and what has not been tested.
- Privacy: what stays on your computer, and when textweaver uses the network.
- Accessibility statement: what has been tested, how, and what has not.
For users
Getting started
- Quick start: installation, a first reading, and navigation on Windows, macOS, and Linux.
- Installing textweaver: the packages, the install scripts, and checking a download.
- Using textweaver with a screen reader: the three accessibility modes (self-voicing, hybrid, and screen reader), settings for NVDA and JAWS, and terminal keys that clash.
- Troubleshooting: the log file, diagnosing speech, and common problems.
Reading
- Reading and moving around: opening files, reading aloud, moving by unit, Speech Cursor, find, go to, and history.
- Keyboard reference: every key in the terminal and the GUI, generated from the keymap.
- The textweaver app (graphical version): starting it, what is on screen, the menus, buttons and panels, its keys, announcements, and the reading aids it draws.
- The app in pictures: eight pictures of the graphical version, each with a text description of what it shows.
- Bookmarks, notes, and highlights: marking your place and your thoughts; the named highlight palette; links between notes and graph exports; and study cards, the self-test, and recall prompts.
- Reading aids: RSVP, bionic reading, the reading ruler, text spacing, fonts, and reading level.
- Themes: the 24 built-in color themes, following your system, and writing your own.
- Math: hearing math read aloud, and writing it in Markdown.
Writing
- Writing and editing: edit mode, typing echo, Markdown commands, undo, saving, the outline, spell check, clipboard and Markdown paste, templates, find and replace with regular expressions, the preview pane, and tracked changes in Word files.
- Citations: inserting citations while writing,
tw cite, the reference library, DOI and ISBN lookup, and citation styles. - Dictation:
tw dictate, turning speech in an audio file into text.
Speech
- Speech engines and voices: the engines, choosing a voice, rate, pitch, and volume.
- Getting ETI-Eloquence: Eloquence on macOS, Linux, and Windows.
- Using DECtalk: a DECtalk you have installed and licensed.
- Audio export:
tw export-audio, audiobooks with chapters, and subtitles.
Files, the library, and settings
- Converting documents:
tw convertto HTML, EPUB, Word, braille, PDF, and more, including DAISY and BRF reading and the formats carta handles; exporting and previewing from inside the reader. - The library: library folders, recent files, sync between computers, and importing from star.
- Optional components: the models, fonts, and voices textweaver downloads only when you agree; Manage optional components, the first-run list,
tw components, installing from a file, and a mirror. - Updates: the daily check and Help, Check for updates; the question before downloading; how a download is checked and installed; and
tw update. - Syncing between computers: notes, highlights, bookmarks, places, statistics, and settings through a folder you choose; what never syncs, setting it up, what you hear, and privacy.
- The Obsidian vault: exporting notes and highlights to a vault, and importing them back.
- Settings: where settings live, every setting, and export, import, and reset.
- Settings reference: every setting with its default, label, help, and values, generated from the settings schema.
- The command line: the rules every
twcommand follows:--out,--to,--json,--home, questions and--yes, exit codes, and error lines. - Scripts: install, update, speech check, doctor, and folder conversion.
For contributors
The developer documents are in dev/, and the decision records in adr/.
Building and working on textweaver
- CONTRIBUTING.md: what textweaver is for, setting up, the checks, accessibility expectations, commit style, and how to propose a change.
- Good first issues: small, well-scoped tasks for a first contribution, each with where to look and how to check it.
- Writing messages: the style guide for everything textweaver says and shows, and the tests that keep it.
- Building: Rust, Python, what each system needs, Docker, the GUI, the lean reader, the helper scripts, and the repository layout.
- Testing: the checks every change must pass, the tests, and the benchmarks.
- The polish checklist and its tests: each row of the consistency, accessibility, visual, and documentation checklist, with the test that holds it or the owner's session that covers it.
- Architecture: the crates, the dependency rules, the threads, and the path from a file to a highlighted word.
- The eSpeak NG helper: how eSpeak NG runs in its own helper program, how textweaver chooses between it and the in-process backend, and the measurement behind the choice.
- The crates: what each of the 39 crates does, with its ADRs.
- CI: the workflows and what they check.
- Docker development container: building and testing Linux features on any machine, and Voxin.
- Fuzzing: the 35 cargo-fuzz targets, run by the nightly workflow when started by hand: the document loaders (RTF, ODT, Word revisions, LaTeX, Obsidian, JSON, SVG, and email among them), PDF annotations, the math and citation parsers, themes, the lexicon, vault import, JSON-RPC, the settings and state files, the sync folder's records and group files, and the engine-host protocol.
- Releasing: making a release, the Linux AppImage, and what the packages hold.
- Third-party data: the bundled pronunciation dictionaries, fonts, and word lists, and their licenses.
- JSON-RPC: driving textweaver from an editor or another program with
tw serve --stdio. - Roadmap: what works today, what is being built next, and what is planned.
- Research for the next waves: the research reports and the wave plans for alpha.8 through beta 1 and later: performance, speech engines, use cases, design, and law and standards.
- star features not yet planned: star features with their status in textweaver.
- Documentation coverage: each feature, the guide that covers it, and whether the guide passes.
- CHANGELOG.md: what changed in each release.
Decisions
Each ADR records one decision: the context, the choice, and its consequences. A dated status update under the date says what changed later. The ADR index lists them with their statuses.
- ADR-0001: Workspace layout and dependency policy: one crate per job, one table of approved dependencies, and no async runtime in speech.
- ADR-0002: Text model: canonical text in a rope plus markers, and character positions.
- ADR-0003: Speech threading and event timing: the speech thread, generations, word timing, and pause.
- ADR-0004: Rate, pitch, and volume: engine-independent voice settings.
- ADR-0005: Narration and the OffsetMap: spoken text built together with its map back to the document.
- ADR-0006: Keymap, actions, and announcements: actions, layers, overrides, and announcing every change.
- ADR-0007: ETI-Eloquence through an ECI host process: Eloquence with exact word timing, and its licensing.
- ADR-0008: Apple speech on macOS: the
nsspeechandavspeechbackends. - ADR-0009: SAPI5 voices on Windows: 64-bit and 32-bit voices in host processes.
- ADR-0010: PDF loader: a pure Rust PDF reader with column-aware reading order.
- ADR-0011: Audio export: sentence-by-sentence synthesis, exact subtitles, and chapters.
- ADR-0012: One engine-host protocol and playback client: the shared protocol for Eloquence, SAPI5, and DECtalk.
- ADR-0013: Dictation through a Whisper program: voice typing with a Whisper subprocess.
- ADR-0014: GUI toolkit (wxDragon): the GUI spike's findings. The GUI moved to Xilem; the wxDragon spike was removed once the Xilem GUI passed its second screen-reader session.
- ADR-0015: JSON-RPC server:
tw serve --stdio, its methods, and notifications. - ADR-0016: Rendering and bulk conversion: Markdown to accessible HTML, and fast, incremental conversion.
- ADR-0017: Native writers: EPUB 3, DOCX, BRF braille, and tagged PDF, and their accessibility checks.
- ADR-0018: Math: LaTeX and ASCIIMath parsing, MathML, and spoken math.
- ADR-0019: Citations: the reference library, lookup, and CSL formatting.
- ADR-0020: Themes: star's palettes, contrast rules, and output for every frontend.
- ADR-0021: DECtalk through a host process: DECtalk with word timing, and its licensing.
- ADR-0022: Reading aids: RSVP, bionic reading, spacing, fonts, the ruler, and more, as pure data.
- ADR-0023: Piper voices and Whisper dictation in-process on RTen: neural voices with word timing from the model, and in-process dictation, on a pure-Rust ONNX runtime.
- ADR-0024: App core for the GUI: the document window, shared list and prompt state, the waker, the replace-range edit, the settings schema, and work moved off the input thread.
- ADR-0025: Define word offline, and the message catalog: Open English WordNet and CMUdict in an fst and zstd file, and a Fluent-subset catalog with pseudo-locales.
- ADR-0026: OCR, and formats for students: OCR of scanned pages (ocrs in process, Tesseract as the fallback), DAISY, PowerPoint, spreadsheets, archives, and web pages.
- ADR-0027: Xilem GUI: the all-Rust GUI on Masonry, Vello, Parley, AccessKit, and winit; our own document widget, the pinned versions, and the accessibility checks.
- ADR-0028: The Xilem GUI after the first listening session: two ways to announce, every list option in the tree, and where the GUI's memory goes.
- ADR-0029: MathCAT speech: MathCAT as a second math speech engine, EPUB 3 MathML read as math, and what waits for math braille.
- ADR-0030: Interface translations: every message from the catalog, five built-in languages, right-to-left display, and a voice per language.
- ADR-0031: Native RTF, ODT, and Word revisions: RTF and OpenDocument without Pandoc, comments as notes, tracked changes, and limits for zip packages.
- ADR-0032: Grammar, lint, highlighting, and clipboard crates: the authoring extras' crates, and two held for later review.
- ADR-0033: The GUI after further accessibility testing, and edit mode: the file chooser, text size and font keys, a key on every button, and edit mode in the graphical version.
- ADR-0034: The rope after measurement: stay on ropey 1.6; ropey 2 and crop measured, and when to look again.
- ADR-0035: Native LaTeX subset, and email and web archives: LaTeX, email, and web archives read natively, and MathML in web pages.
- ADR-0036: Math braille and navigation on MathCAT: Nemeth and UEB math in braille files, and exploring a formula with MathCAT and its braille.
- ADR-0037: Extractive summaries without a model: LexRank in-house,
tw summarizeand Summarize, difficult-word definitions, and the RSVP flash check. - ADR-0039: Automated screen-reader checks beside the listening sessions: the accessibility tree on three systems, and NVDA, Orca, and VoiceOver sessions on CI runners.
- ADR-0041: Publishing templates, real Word footnotes, and PDF page labels: APA, AMA, and reading templates for EPUB, Word, and PDF, Word footnotes, the EPUB cover, and print page labels.
- ADR-0042: Streaming dictation and dictation in the reader: words shown while you talk, each phrase typed at its pause, a gate so dictation is never slower, and the Dictate command in edit mode.
- ADR-0043: Menus and the palette from one model: menus from one model, the palette's names and ranking, interface announcements, macOS keys, and colors.
- ADR-0044: Obsidian, JSON, SVG and content MathML in the reader: Obsidian notes, JSON and notebooks, SVG drawings, content MathML, and more LaTeX, read natively.
- ADR-0045: A file browser on the list model: folders and archives browsed as one list, a preview, and choosing folders for other commands; it never changes a file.
- ADR-0046: Native menus in the GUI: the graphical version's menus from the app's one model, native on Windows and macOS, a list on Linux, with the keys shown and handled by the keymap alone.
- ADR-0048: PDF annotations, links and forms: PDF comments as notes, links, filled-in forms, captions, and sideways and tabular scans.
- ADR-0049: Sync beyond the place: notes, highlights, bookmarks, places, and portable settings synced through a folder you choose, each computer writing only its own files, with no account or server.
Interactive pages
The pages in docs/site/ explain textweaver with diagrams and demonstrations. Each diagram has a full text version next to it, every control works from the keyboard, and changes are announced to screen readers. Open docs/site/index.html in any browser; nothing is downloaded.
- Overview: what textweaver is, and a map of the other pages.
- Architecture: choose a crate to hear its job, its ADRs, and what it depends on.
- Speech pipeline: step from a key press to a highlighted word, with a worked offset map.
- Keyboard: search and filter every key by category, layer, frontend, and platform.
- Features: everything textweaver does, with its status.
- Reading aids: try RSVP, bionic reading, and the reading ruler.
- About the pages: how they are made and regenerated.
See also
- README: what textweaver is, and how to build it.
- Quick start: the shortest route to a first reading.