Learn Japanese by actually reading Japanese.
Shiori — 栞, "bookmark" — is a desktop reading companion built around comprehensible input: the primary activity is reading real Japanese text, and every other feature exists to support that.
Import any book. Read it. Click the words you don't know — Shiori shows the dictionary entry, the usage register, the conjugation explained piece by piece — and one click later the word is in spaced repetition, anchored to the exact sentence you found it in. The app tracks every word you've ever met, grades each book in your library against what you know, and tells you what to read next.
No accounts, no subscription, no cloud. One executable and a folder of SQLite.
Furigana appears only over words you haven't learned — and in its strictest mode, only over the first few occurrences of each word per book, anchored to those exact spots: scaffolding that fades as you read deeper. Unknown words get a subtle tint. Clicking a conjugated verb selects the whole phrase (読んでいる, not 読) and explains the form component by component.
The reading clock is honest: pages you flip through in under a fifth of the expected time don't count, the app pauses itself when you wander off (with a five-second grace period for genuinely hard pages), and your reading velocity in characters per minute feeds everything from away detection to the statistics page.
Chat with a native-speaker persona that converses with you — it never corrects you mid-conversation. Instead, your messages come back marked up like a paper: red underlines for grammar errors, orange for phrasing a native wouldn't use, with the explanation one hover away. Every word in the chat is clickable, just like the reader.
Bring your own brain: Anthropic's API, any local model through Ollama (pull models from inside the app; nothing leaves your machine), or any OpenAI-compatible endpoint. A challenge dial sets whether the partner matches your level, pushes slightly above it, or goes full native.
Search JMdict by kanji, kana, or any word form. Every kanji in your query gets a card: readings, meanings, school grade, and a numbered stroke-order diagram drawn from KanjiVG data. Add any hit straight to spaced repetition from the search results.
Search Aozora Bunko's 17,000+ public-domain works and Japanese Wikisource, then import straight into your library — Shift_JIS, ruby markup and all. Aozora's catalog is downloaded once and cached, so every search after that runs locally and instantly.
More screenshots — library with per-book analytics, statistics that change behavior
Every book shows your progress, known-word share, and difficulty verdict. The info panel adds a coverage forecast ("learning the top 20 unknown words lifts coverage from 87% to 95%"), your reading time, and the most useful unknown words. Finish a book and one click promotes every word still marked unknown to known (proper nouns become ignored) — with rare or out-of-band words flagged for you to confirm before the sweep, so a stray "known" never inflates your stats.
Reading velocity and a reading calendar, a comfortable-reading-level grade against JLPT vocabulary lists, review forecasts, true retention, and per-book difficulty — the numbers that actually tell you what to do next.
- FSRS spaced repetition — cards always show the word inside the sentence you found it in, framed by its neighbors, plus example sentences from your other books.
- Anki interop — export your cards with scheduling, or import an existing deck (SM-2 state seeds FSRS).
- Four knowledge statuses — unknown / learning / known / ignored, so names and noise never pollute your stats.
- Press-to-record shortcuts with modifier combos, dark/light/sepia themes, gothic or mincho Japanese fonts, adjustable reader typography.
- Offline-first — after the first-run data download everything except LLM calls and online search works without a network. Your data is one SQLite file with one-click backup and restore, and your settings export to a single JSON.
- Import anything —
.txt,.md,.html(Aozora),.epub,.pdf, UTF-8 or Shift_JIS, by file dialog or drag-and-drop.
Download — grab the latest shiori-*-windows-x86_64.zip from
Releases, unzip, run
shiori.exe. On first launch the app downloads its reference data (JMdict,
frequency list, kanji data with stroke order, JLPT lists — ~20 MB total)
and you're reading.
Shiori is built and released for Windows x86_64 only — that's the only target the CI tests and ships. The source has no hard OS lock, so building on macOS or Linux may well work, but it's untested and unsupported for now.
Build from source:
cargo build --release -p shiori-gui # first build embeds the IPADIC
./target/release/shiori # dictionary and needs network, onceBuilding needs a recent stable Rust toolchain (CI builds on stable). The
first build downloads and embeds the IPADIC morphological dictionary, so it
needs network access once and takes a few minutes.
Learn more — the user guide covers every feature: Getting Started · Reading · Reviews & SRS · Dictionary & Kanji · Online Sources · AI & Chat · Statistics · Data & Interop · Architecture
The roadmap is a plan of record: as of mid-2026 everything in it ships except two deferred items — an NHK Easy News source (waiting on a usable article index) and text-to-speech (planned in stages, ending in optional local VOICEVOX). One hard non-goal: no embedded LLM inference engine, ever — local AI is delegated to Ollama or any OpenAI-compatible server you point Shiori at.
Found a bug or have a question? Open an issue on the tracker. A couple of known rough edges worth knowing up front:
- KanjiVG stroke-order data covers only about half of the kanji in KANJIDIC2, so rarer characters fall back to a plain large glyph with no numbered diagram.
- Conversation practice and online search are the only features that reach the network after first run; everything else works fully offline.
Contributions are welcome. CONTRIBUTING.md covers development setup, the test suite, and the commit conventions (atomic conventional commits). The codebase is a Cargo workspace split by concern:
| Crate | Concern |
|---|---|
shiori-core |
Shared domain types and errors |
shiori-nlp |
Morphological analysis and sentence segmentation |
shiori-srs |
FSRS spaced-repetition scheduler |
shiori-dict |
JMdict, KANJIDIC2/KanjiVG, JLPT, frequency data |
shiori-db |
SQLite persistence, Anki .apkg read/write |
shiori-app |
Application services: ingestion, reviews, stats, sources |
shiori-llm |
LLM backends: Anthropic, Ollama, OpenAI-compatible |
shiori-gui |
egui desktop interface |
Shiori ships no dictionary data; it downloads everything on first run:
- JMdict and KANJIDIC2 — © the EDRDG, used under the EDRDG licence (CC BY-SA); JMdict fetched via jmdict-simplified.
- KanjiVG stroke-order data — © Ulrich Apel, CC BY-SA 3.0.
- JLPT vocabulary lists — stephenmk/yomitan-jlpt-vocab (CC BY-SA 4.0, over Jonathan Waller's CC BY data).
- Word frequency — Leeds Internet Corpus derived list (CC BY).
- Books — Aozora Bunko (public domain) and Japanese Wikisource.
Dual-licensed under MIT or Apache-2.0, at your option.



