A website for working with braille documents: type braille, or upload a braille file, and view it alongside the same document as LaTeX or Markdown — editing either side updates the other. Download the result as LaTeX, Markdown, or Word, or open an HTML preview. It supports math in Nemeth format. Try it at https://brailletools.org/
- Two live-synced panes. The braille pane is the source of truth; the second pane shows LaTeX or Markdown (switch with the format selector). Edits in either pane update the other at paragraph/equation granularity, and anything that can't be synced is listed under "sync issues" with a link to jump to it.
- Upload
.brf/.brl(braille),.md,.texand.docx(converted through Pandoc, in your browser), or photos of embossed braille pages (read with OCR, entirely client-side). - Download LaTeX, Markdown, or Word, or Open HTML for a preview.
- Braille table — the liblouis table used to translate between braille and text.
- Treat each braille line as a paragraph — a blank line starts a new paragraph and a single line break is just a wrapped line (right for hard-wrapped BRFs). Turn it on for files where every line is its own paragraph, so you don't need blank lines between them in the braille.
Everything runs in the browser; nothing you upload is sent to a server.
The downloaded .tex is set up to compile to a tagged PDF (PDF/UA-2) — the structure, language, document title and MathML-tagged math that screen readers need. The title comes from the file name. Compile it with pdflatex or lualatex from TeX Live / MiKTeX 2025 or later (older versions don't understand the tagging commands). This produces the tags but doesn't validate them; check the PDF with veraPDF or PAC before claiming conformance. Details and one lualatex limitation are in braille-bridge's README.
Uses Node 20 and pnpm 10. The conversion and OCR code live in sibling repositories that this project installs from sibling directories, so check them out next to this one:
braille/
├── webeditor/ ← this repo
├── braille-bridge/ ← https://github.com/brailletools/braille-bridge
└── brailleocr/ ← https://github.com/brailletools/brailleocr
pnpm install
pnpm dev # fetches liblouis + the OCR models, then starts Vite
pnpm dev -- --open # ...and opens the app in a browser tabIf you change a sibling repo, re-run pnpm install and clear node_modules/.vite — pnpm copies
file: dependencies, so the app won't see the change otherwise.
CI (and the deploy) don't use your local siblings; they clone the exact tags named in:
| File | Repository | Purpose |
|---|---|---|
braille-bridge.version |
braille-bridge | braille ⟷ LaTeX/Markdown conversion |
brailleocr.version |
brailleocr | photo OCR |
dataset.version |
dataset | OCR model weights |
To pick up a new release, change the file in a pull request — see RELEASING.md.
pnpm lint # Prettier + ESLint
pnpm check # Svelte type check
pnpm test:unit # Vitest
pnpm exec playwright install chromium # once
pnpm test:a11y # axe-core accessibility checks (see CLAUDE.md)
pnpm test:sync # bidirectional sync, in a real browser
pnpm test:format # second-pane formats and uploadsRun pnpm test:a11y after any UI change — this tool's audience includes screen-reader users, so
treat a failure as a real bug.
pnpm build # static site in build/
pnpm previewChanges go through pull requests that must pass CI; main deploys to GitHub Pages when a PR is
merged, and releases are version tags on main. See RELEASING.md.
This project uses the following open-source libraries:
The braille ⟷ LaTeX/Markdown conversion and the live-sync document model.
- License: BSD-3-Clause
Reads photos of embossed braille pages, running ONNX models in the browser.
- License: BSD-3-Clause (brailleocr), MIT (onnxruntime-web)
Abraham (Desmos)
Handles Nemeth to LaTeX conversion for mathematical notation.
- License: Proprietary (Desmos API)
- Usage: Converts ASCII Braille math (Nemeth) to LaTeX format
Provides Braille translation tables and conversion logic for various languages and Braille grades.
- License: LGPL v2.1+
- Usage: Translates between Braille and text, supports Grade 1, Grade 2, and UEB; the JavaScript binding (compiled to WebAssembly) runs it in the browser
Pandoc compiled to WebAssembly.
- License: GPL-2.0-or-later
- Usage: Converts uploaded
.tex/.docxfiles to Markdown, and Markdown to Word
A JavaScript LaTeX parser that generates HTML from LaTeX source code, enabling client-side rendering.
- License: MIT
- Usage: Converts LaTeX to HTML for the "Open HTML" preview