hajisensai/Fushi

Immersion language-learning suite: EPUB reader, video subtitle lookup, audiobook sync, and one-tap Anki mining. Android / Windows / macOS / iOS.

Dart

348

12,794 commits

updated Sep 23, 2026

See the code

README

Maintainer

Fushi is maintained by hajisensai. Contact: hajisensai@gmail.com.

Platform Support

PlatformStatusRendering / UI
AndroidMaterial Design 3
WindowsMaterial Design 3
macOSMaterial Design 3
Linux🔧 (build from source)Material Design 3
iOS✅ (TestFlight)Material Design 3

Minimum Android 7.0 (API 24). Galgame voice mining is Windows-only. The languages available for dictionary lookup are determined by the imported dictionaries and Yomitan transformation tables, independently of the interface language. The iOS build is distributed through TestFlight: it omits the discovery and download features that the App Store guidelines do not allow, and its updates arrive a few days later than on the other platforms.

Interface Languages (17)

English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Español · Français · Deutsch · Português (Brasil) · Русский · Tiếng Việt · ภาษาไทย · Bahasa Indonesia · Italiano · Nederlands · Türkçe · العربية

Installation

Download the latest release from the Fushi website — Android APK, Windows installer, and macOS builds are available; iOS is installed through TestFlight. Linux has no prebuilt release yet; build it from source.

Requires Android 7.0 (API 24) or higher.

Building

One-command prep (flutter pub get + apply patches), then build:

# From the repository root
bash tool/bootstrap.sh          # Windows PowerShell: .\tool\bootstrap.ps1

cd fushi
# Android
flutter build apk --release --target-platform android-arm64 --split-per-abi
# Desktop
flutter build windows --release
flutter build macos --release
flutter build linux --release
# iOS
flutter build ipa --release

tool/bootstrap.sh / tool/bootstrap.ps1 collapse flutter pub get and ci/apply-patches.sh into a single command. This project is locked to Flutter 3.44.0 (Dart SDK >=3.5.0 <4.0.0); some upstream dependencies are vendored under third_party/ or patched by ci/apply-patches.sh — see docs/agent/build.md for details.

Tech Stack
LayerTechnology
FrameworkFlutter 3.44.0 (Dart SDK >=3.5.0 <4.0.0)
PlatformsAndroid / Windows / macOS / iOS (Material Design 3)
ReaderWebView paging engine (derived from the Hoshi Reader family)
Videomedia_kit (libmpv core)
StorageDrift (SQLite, WAL) + fushidicts (C++ FFI dictionary engine)
NLPYomitan transformation tables (multilingual lemmatization) + kana_kit (kana conversion); tokenization via fushidicts FFI
Downloadslibtorrent 2.x via a C-ABI FFI bridge
Card CreationAnkiDroid API + AnkiConnect
i18nSlang (17 languages)
Project Structure
Fushi/                      # Repository root (Melos workspace: fushi_workspace)
├── fushi/                  # Flutter app main directory
│   ├── lib/
│   │   ├── i18n/            # Internationalization (17 languages, Slang)
│   │   ├── src/
│   │   │   ├── pages/       # Pages (bookshelf, reader, dictionary, settings, etc.)
│   │   │   ├── reader/      # Reader WebView JS/CSS scripts
│   │   │   ├── media/       # Audiobook, subtitle parsing, reader source
│   │   │   └── models/      # Data models and state management (AppModel)
│   │   └── main.dart
│   └── android/             # Android project (manifest, native fushidicts)
├── packages/                # Internal packages + flutter_inappwebview_windows (fork) + gamepads_android_stub
├── native/                  # C++ sources: fushidicts (dictionary engine), fushi_torrent, galgame_hook
├── third_party/             # Vendored patched packages (dependency_overrides)
├── ci/                      # Build patches and integration test scripts
├── tool/                    # bootstrap / i18n_sync and other scripts
└── docs/                    # Development documentation (incl. docs/agent/ operations manual)

Video import supports grouping by work or folder. See the video workflow and MAL/TMDB metadata with AniDB file hashing for matching and background tasks.

Optional online service setup explains bundled application identities, personal credentials, and the dismissible video setup reminder.

Privacy & Data

Fushi stores imported books, dictionaries, fonts, audiobook data, videos, reading progress, highlights, statistics, and settings in the app's local storage.

Cloud sync (Google Drive / OneDrive / Dropbox) uses user-configured OAuth credentials; WebDAV / FTP / SFTP uses user-provided server addresses and credentials; Fushi Interconnect connects directly to a user-configured address on your own network. Anki card creation communicates with AnkiDroid or a configured AnkiConnect address.

Development Activity

Development Activity

Day-to-day work lands on develop; main only receives release merges. The chart is displayed here on main but is generated from develop, so it reflects actual development rather than merge traffic.

The three lanes are the update channels the app itself offers, and each is scaled to its own peak — debug builds outnumber stable releases by two orders of magnitude, so a shared scale would flatten the other two lanes to nothing.

LaneWhat it countsHow you get it
Debug (rolling)Successful push builds of release.ymlRolling prerelease, republished on every push
Betav<version>-beta.<seq> prereleasesManually dispatched test build
Stablev<version> releasesLatest release

The chart above is generated inside this repository (no third-party service) and refreshed daily by the Update Dev Activity Chart workflow.

Star History

GitHub stars

Star History

The chart above is generated inside this repository (no third-party service) and refreshed daily by the Update Star History workflow.

Acknowledgments

Fushi builds on the following projects and ecosystem:

Learning tools and prior art

ProjectDescription
jidoujishoJapanese immersive learning tool
Hoshi ReaderiOS Japanese reader; reader paging engine reference
Hoshi Reader AndroidAndroid native Japanese reader
hoshidictsC++ dictionary engine
SasayakiAudiobook sync solution
YomitanDictionary format, transformation tables, and lookup experience reference
LapisAnki note type
AnkiDroidAndroid card creation integration
Ankiconnect AndroidLocal audio and AnkiDroid interaction reference
ッツ Ebook ReaderReader, statistics, and sync compatibility reference
media_kitFlutter video playback framework (libmpv core)
NiratanImmersion language learning suite for macOS

Engines and native components

ProjectDescription
LunaHookGalgame text hooking engine (vendored DLLs loaded by the injector)
MinHookInline hooking library used by the galgame injector
libtorrentBuilt-in torrent download engine
mpvlibmpv playback core behind media_kit
FFmpegMedia probing, clipping, and audio extraction
libplaceboGPU video shaders and HDR tone mapping
flutter_inappwebviewWebView engine that renders the EPUB reader
ONNX RuntimeOn-device inference for speech recognition and OCR
zstd · xxHash · libdeflate · glaze · unordered_dense · utf8proc · utfcppDictionary engine dependencies

On-device models

ProjectDescription
sherpa-onnxZipformer speech recognition model packages and VAD builds
ReazonSpeech k2-v2Japanese speech recognition model
Omnilingual ASRMultilingual CTC speech recognition model
Silero VADVoice activity detection model
manga-ocr / manga-ocr-onnxManga OCR model
comic-text-and-bubble-detectorManga text and speech bubble detection model

Content sources and integrations

ProjectDescription
MihonManga source extension ecosystem
M-Extension-ServerManga extension runtime for desktop
aidoku-rsManga source runtime ABI
asbplayerStreaming subtitle bridge reference for the browser extension
Shoko ServerAnime identification and scraping architecture reference
ReinaManagerGalgame library information architecture reference
AniDBAnime, episode, and file identity
TMDBSupplementary metadata and artwork
JimakuJapanese subtitle source
OpenSubtitlesSubtitle source

This application uses TMDB and the TMDB APIs but is not endorsed, certified, or otherwise approved by TMDB.

License

Distributed under the GNU General Public License v3.0. See LICENSE for details.

Contributors

hajisensai

12,093 commits

W1ght

622 commits

Yumesaka13

7 commits

hajisensai/Fushi

Immersion language-learning suite: EPUB reader, video subtitle lookup, audiobook sync, and one-tap Anki mining. Android / Windows / macOS / iOS.

Dart

348

12,794 commits

updated Sep 23, 2026

See the code

README

Maintainer

Fushi is maintained by hajisensai. Contact: hajisensai@gmail.com.

Platform Support

PlatformStatusRendering / UI
AndroidMaterial Design 3
WindowsMaterial Design 3
macOSMaterial Design 3
Linux🔧 (build from source)Material Design 3
iOS✅ (TestFlight)Material Design 3

Minimum Android 7.0 (API 24). Galgame voice mining is Windows-only. The languages available for dictionary lookup are determined by the imported dictionaries and Yomitan transformation tables, independently of the interface language. The iOS build is distributed through TestFlight: it omits the discovery and download features that the App Store guidelines do not allow, and its updates arrive a few days later than on the other platforms.

Interface Languages (17)

English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Español · Français · Deutsch · Português (Brasil) · Русский · Tiếng Việt · ภาษาไทย · Bahasa Indonesia · Italiano · Nederlands · Türkçe · العربية

Installation

Download the latest release from the Fushi website — Android APK, Windows installer, and macOS builds are available; iOS is installed through TestFlight. Linux has no prebuilt release yet; build it from source.

Requires Android 7.0 (API 24) or higher.

Building

One-command prep (flutter pub get + apply patches), then build:

# From the repository root
bash tool/bootstrap.sh          # Windows PowerShell: .\tool\bootstrap.ps1

cd fushi
# Android
flutter build apk --release --target-platform android-arm64 --split-per-abi
# Desktop
flutter build windows --release
flutter build macos --release
flutter build linux --release
# iOS
flutter build ipa --release

tool/bootstrap.sh / tool/bootstrap.ps1 collapse flutter pub get and ci/apply-patches.sh into a single command. This project is locked to Flutter 3.44.0 (Dart SDK >=3.5.0 <4.0.0); some upstream dependencies are vendored under third_party/ or patched by ci/apply-patches.sh — see docs/agent/build.md for details.

Tech Stack
LayerTechnology
FrameworkFlutter 3.44.0 (Dart SDK >=3.5.0 <4.0.0)
PlatformsAndroid / Windows / macOS / iOS (Material Design 3)
ReaderWebView paging engine (derived from the Hoshi Reader family)
Videomedia_kit (libmpv core)
StorageDrift (SQLite, WAL) + fushidicts (C++ FFI dictionary engine)
NLPYomitan transformation tables (multilingual lemmatization) + kana_kit (kana conversion); tokenization via fushidicts FFI
Downloadslibtorrent 2.x via a C-ABI FFI bridge
Card CreationAnkiDroid API + AnkiConnect
i18nSlang (17 languages)
Project Structure
Fushi/                      # Repository root (Melos workspace: fushi_workspace)
├── fushi/                  # Flutter app main directory
│   ├── lib/
│   │   ├── i18n/            # Internationalization (17 languages, Slang)
│   │   ├── src/
│   │   │   ├── pages/       # Pages (bookshelf, reader, dictionary, settings, etc.)
│   │   │   ├── reader/      # Reader WebView JS/CSS scripts
│   │   │   ├── media/       # Audiobook, subtitle parsing, reader source
│   │   │   └── models/      # Data models and state management (AppModel)
│   │   └── main.dart
│   └── android/             # Android project (manifest, native fushidicts)
├── packages/                # Internal packages + flutter_inappwebview_windows (fork) + gamepads_android_stub
├── native/                  # C++ sources: fushidicts (dictionary engine), fushi_torrent, galgame_hook
├── third_party/             # Vendored patched packages (dependency_overrides)
├── ci/                      # Build patches and integration test scripts
├── tool/                    # bootstrap / i18n_sync and other scripts
└── docs/                    # Development documentation (incl. docs/agent/ operations manual)

Video import supports grouping by work or folder. See the video workflow and MAL/TMDB metadata with AniDB file hashing for matching and background tasks.

Optional online service setup explains bundled application identities, personal credentials, and the dismissible video setup reminder.

Privacy & Data

Fushi stores imported books, dictionaries, fonts, audiobook data, videos, reading progress, highlights, statistics, and settings in the app's local storage.

Cloud sync (Google Drive / OneDrive / Dropbox) uses user-configured OAuth credentials; WebDAV / FTP / SFTP uses user-provided server addresses and credentials; Fushi Interconnect connects directly to a user-configured address on your own network. Anki card creation communicates with AnkiDroid or a configured AnkiConnect address.

Development Activity

Development Activity

Day-to-day work lands on develop; main only receives release merges. The chart is displayed here on main but is generated from develop, so it reflects actual development rather than merge traffic.

The three lanes are the update channels the app itself offers, and each is scaled to its own peak — debug builds outnumber stable releases by two orders of magnitude, so a shared scale would flatten the other two lanes to nothing.

LaneWhat it countsHow you get it
Debug (rolling)Successful push builds of release.ymlRolling prerelease, republished on every push
Betav<version>-beta.<seq> prereleasesManually dispatched test build
Stablev<version> releasesLatest release

The chart above is generated inside this repository (no third-party service) and refreshed daily by the Update Dev Activity Chart workflow.

Star History

GitHub stars

Star History

The chart above is generated inside this repository (no third-party service) and refreshed daily by the Update Star History workflow.

Acknowledgments

Fushi builds on the following projects and ecosystem:

Learning tools and prior art

ProjectDescription
jidoujishoJapanese immersive learning tool
Hoshi ReaderiOS Japanese reader; reader paging engine reference
Hoshi Reader AndroidAndroid native Japanese reader
hoshidictsC++ dictionary engine
SasayakiAudiobook sync solution
YomitanDictionary format, transformation tables, and lookup experience reference
LapisAnki note type
AnkiDroidAndroid card creation integration
Ankiconnect AndroidLocal audio and AnkiDroid interaction reference
ッツ Ebook ReaderReader, statistics, and sync compatibility reference
media_kitFlutter video playback framework (libmpv core)
NiratanImmersion language learning suite for macOS

Engines and native components

ProjectDescription
LunaHookGalgame text hooking engine (vendored DLLs loaded by the injector)
MinHookInline hooking library used by the galgame injector
libtorrentBuilt-in torrent download engine
mpvlibmpv playback core behind media_kit
FFmpegMedia probing, clipping, and audio extraction
libplaceboGPU video shaders and HDR tone mapping
flutter_inappwebviewWebView engine that renders the EPUB reader
ONNX RuntimeOn-device inference for speech recognition and OCR
zstd · xxHash · libdeflate · glaze · unordered_dense · utf8proc · utfcppDictionary engine dependencies

On-device models

ProjectDescription
sherpa-onnxZipformer speech recognition model packages and VAD builds
ReazonSpeech k2-v2Japanese speech recognition model
Omnilingual ASRMultilingual CTC speech recognition model
Silero VADVoice activity detection model
manga-ocr / manga-ocr-onnxManga OCR model
comic-text-and-bubble-detectorManga text and speech bubble detection model

Content sources and integrations

ProjectDescription
MihonManga source extension ecosystem
M-Extension-ServerManga extension runtime for desktop
aidoku-rsManga source runtime ABI
asbplayerStreaming subtitle bridge reference for the browser extension
Shoko ServerAnime identification and scraping architecture reference
ReinaManagerGalgame library information architecture reference
AniDBAnime, episode, and file identity
TMDBSupplementary metadata and artwork
JimakuJapanese subtitle source
OpenSubtitlesSubtitle source

This application uses TMDB and the TMDB APIs but is not endorsed, certified, or otherwise approved by TMDB.

License

Distributed under the GNU General Public License v3.0. See LICENSE for details.

Contributors

hajisensai

12,093 commits

W1ght

622 commits

Yumesaka13

7 commits

Languages

Dart

67.4%

C++

14.5%

C

11.5%

JavaScript

3.0%