News
louis-rs Release 0.3.0
22 Sep 2026 - louis-rs
Version 0.3.0 of louis-rs, the from-scratch Rust reimplementation of liblouis, is now available on crates.io.
Where it stands. 98.6% of the liblouis test suite passes — some 2.2 million assertions, forward and backward combined. All but one of the 458 table files under tables/ compile.
What works today:
- Translation in both directions, full multi-stage pipeline:
correctbefore the main stage,pass2–pass4after. - Contractions and the whole word family,
word,begword,midword,endword,midendword,prfword,sufword,partword,begmidwordwith theirbefore/afterclass constraints. matchandcontextrules through a purpose-built regexp VM that compiles patterns at table load and matches in linear time.- Braille indicators: number sign, capitalisation at all three tiers including caps passages, letter sign,
nocontract, and the genericbegmode/endmodefamily. - Emphasis:
begemph/endemphand the word/symbol tiers. - Computer braille as a full pipeline feature —
comp6,compbrl,begcomp/endcomp. - Backward indication for
capsletter,begcapsword/endcapsword,numsign/nonumsignand the no-contract family. - Position mapping:
inputPos,outputPosandcursorPos, composed across every pipeline stage in both directions. - Hyphenation natively: liblouis
.dicfiles parsed directly, no external crate, no conversion step. - Display tables as a pipeline stage,
--displayon the CLI. Translator::with_search_pathfor host applications that manage their own table locations.- A CLI:
parse,translate,trace,check,query.
Care for a taste test? louis trace shows every rule that fired, in order, with the stage it fired in:
$ export LOUIS_TABLE_PATH=/usr/share/liblouis/tables
$ louis trace en-us-g2.ctb "Mother's Day"
⠠⠐⠍⠄⠎⠀⠠⠐⠙
┌───┬────────┬────┬──────────────────┬───────┐
│ │ From │ To │ Rule │ Stage │
├───┼────────┼────┼──────────────────┼───────┤
│ 1 │ │ ⠠ │ capsletter ⠠ │ Main │
│ 2 │ mother │ ⠐⠍ │ always mother ⠐⠍ │ Main │
│ 3 │ 's │ ⠄⠎ │ endword 's ⠄⠎ │ Main │
│ 4 │ │ ⠀ │ space ⠀ │ Main │
│ 5 │ │ ⠠ │ capsletter ⠠ │ Main │
│ 6 │ day │ ⠐⠙ │ always day ⠐⠙ │ Main │
└───┴────────┴────┴──────────────────┴───────┘
louis check runs your YAML specs, --summary gives a per-file table, and louis query finds tables by language and grade.
Security. This release fixes three findings from Shielder’s security audit for OSTIF: a stack overflow on a crafted include chain, exponential blowup on nested quantifiers in match/context patterns (the engine is now a linear-time Pike VM), and a panic on double negation. Worth noting that all three are logic bugs — stack depth, algorithmic blowup, an unhandled case — rather than the memory corruption that the C implementation’s CVEs keep coming back to.
Python. Leonard de Ruijter has written PyO3 bindings: liblouis/louis-py.
What it isn’t yet. This is not a 100% replacement for liblouis yet. The library API is not stable. No C ABI. partialTrans and compbrlAtCursor/compbrlLeftCursor aren’t implemented. Back-translation returns text but not typeform. Have a look at the parity report for the remaining issues, if you want somewhere to start contributing.
Installation:
cargo install louis-rs
The source is at liblouis/louis-rs, licensed LGPL-2.1-or-later.
Older news
- Liblouis Release 3.39.0
- Liblouis Release 3.38.0
- Liblouis Release 3.37.0
- Liblouis Release 3.36.0
- Liblouis Release 3.35.0
- Liblouis Release 3.34.0
- liblouis joins the Software Freedom Conservancy
- Liblouis Release 3.33.0
- Liblouis Release 3.32.0
- Liblouis Release 3.31.0
- Liblouis Release 3.30.0
- Liblouis Release 3.29.0
- Liblouis Release 3.28.0
- Liblouisutdml Release 2.12.0
- Liblouis Release 3.27.0
- Improved security for liblouis
- Liblouis Release 3.26.0
- liblouis has a new irc channel
- Liblouis Release 3.25.0
- Liblouis Release 3.24.0
- Liblouis Release 3.23.0
- Liblouis Release 3.22.0
- Emacs mode for editing liblouis tables
- Liblouisutdml Release 2.11.0
- Liblouis Release 3.21.0
- Liblouis Release 3.20.0
- Liblouis Release 3.19.0
- Liblouis mourns the loss of Mike Gray
- Liblouis Release 3.18.0
- Liblouisutdml Release 2.10.0
- Liblouis Release 3.17.0
- Liblouis Release 3.16.1
- Liblouis Release 3.16.0
- Liblouisutdml Release 2.9.0
- Liblouis Release 3.15.0
- Liblouis maintainers receive Google Open Source Peer Bonus
- Liblouis Release 3.14.0
- Liblouis Release 3.13.0
- Liblouis Release 3.12.0
- Liblouisutdml Release 2.8.0
- Liblouis Release 3.11.0
- Liblouis Release 3.10.0
- Liblouisutdml Release 2.7.1
- Liblouis Release 3.9.0
- Liblouis Release 3.8.0
- Liblouis Release 3.7.0
- Liblouis Release 3.6.0
- Liblouis Release 3.5.0
- Liblouis Release 3.4.0
- Docker images
- Liblouis Release 3.3.0
- Liblouis ported to Javascript
- Liblouis Release 3.2.0
- Liblouis Release 3.1.0
- Liblouis Release 3.0.0
- Send To Braille Windows Shortcut
- Liblouis Release 2.6.5
- Liblouis Release 2.6.4
- Liblouisutdml Release 2.6.0
- Liblouis Release 2.6.3
- Liblouis Release 2.6.2
- Liblouis Release 2.6.1
- Liblouis Release 2.6.0
- Liblouis moves to a time based release schedule
- Maintainership succession
- Liblouis Release 2.5.4
- Liblouis Release 2.5.3
- Liblouis Release 2.5.2
- Liblouis Release 2.5.1
- Liblouis Release 2.5.0
- Liblouis Release 2.4.1
- Liblouis Release 2.4.0
- Article about John J. Boyer in the The DAISY Planet
- Liblouisxml Release 2.4.0
- Liblouis Release 2.3.0
- Liblouis Release 2.2.0
- Liblouis Release 2.1.1
- Liblouis Release 2.1.0
- Liblouis Release 2.0.0
- Liblouis Release 1.9.0
- Liblouisxml Release 2.1.0
- Liblouis Release 1.8.0
- Liblouisxml Release 2.0.0
- Liblouis Release 1.7.0
- Liblouis Release 1.6.2
- Liblouisxml Release 1.9.1
- Liblouis Release 1.6.1
- Liblouisxml Release 1.9.0
- Liblouis Release 1.6.0
- Liblouisxml Release 1.8.0
- Liblouis Release 1.5.0