Shiotan is a Tauri desktop launcher and reading companion for visual novels. It combines a local VN library, metadata/artwork workflows, playtime tracking, Discord Rich Presence, and text-hook tooling in a single app.
- VN library management with SQLite-backed local data
- Runner support for Windows and Linux (Wine/native/custom)
- Metadata and artwork lookup with provider fallback
- Route/progress tracking and play session history
- Discord Rich Presence with configurable status text
- Text hook support:
- Windows: Textractor
- Linux: LunaTranslator
- Optional plugin system with trust and permissions scaffolding
- Frontend: React + TypeScript + Tailwind CSS
- Desktop runtime: Tauri
- Backend: Rust
- Database: SQLite (
rusqlite)
- Install prerequisites:
- Node.js
- Rust toolchain
- Tauri system deps (Linux: WebKitGTK and related packages)
- Install dependencies:
npm install
- Configure environment:
cp .env.example .env
- Start development app:
npm run tauri dev
- Install Linux Tauri dependencies (WebKitGTK and related system packages).
- Build frontend + desktop app:
npm run tauri build
- Artifacts are output under:
src-tauri/target/release/bundle/
- Install Visual Studio C++ Build Tools (or Visual Studio with Desktop C++), Rust (MSVC target), and Node.js.
- Build frontend + desktop app:
npm run tauri build
- Artifacts are output under:
src-tauri/target/release/bundle/
Notes:
- Cross-compiling Windows installers from Linux is not part of the standard flow here.
- Prefer building each platform on its native OS for release artifacts.
.envis loaded from project root (andsrc-tauri/.envif present).- Keep
.envprivate and out of version control. - Discord App ID and SteamGridDB key have bundled defaults for packaged builds.
- Key options:
STEAMGRIDDB_API_KEY: optional override for SteamGridDB artwork lookup keyDISCORD_APP_ID: optional override for Discord Rich Presence app IDVNHUB_WINE_BINARY: force a specific Wine binary on LinuxVNHUB_FORCE_X11=1: Wayland fallback if compositor issues occurVNHUB_TEXT_HOOK_PROVIDER=auto|textractor|lunatranslator
- Set
DISCORD_APP_IDin.env. - Optional fallback image key:
DISCORD_ASSET_FALLBACK_KEY. - HTTP(S) VN artwork is sent to Discord as
mp:<url>when available.
- Windows (Textractor):
- Configure
VNHUB_TEXTRACTOR_GUI_PATH - Optional:
VNHUB_TEXTRACTOR_GUI_ARGS,VNHUB_TEXTRACTOR_WS_URL
- Configure
- Linux (LunaTranslator):
- Configure
VNHUB_LUNA_PATH - Optional:
VNHUB_LUNA_ARGS,VNHUB_LUNA_WS_URL,VNHUB_LUNA_WINEPREFIX - Optional connect-only mode:
VNHUB_LUNA_SPAWN=0
- Configure
Plugin runtime is optional and disabled by default.
- Enable bootstrap:
VITE_SHIOTAN_ENABLE_PLUGINS=1 - Enable local discovery:
VITE_SHIOTAN_ENABLE_LOCAL_PLUGIN_DISCOVERY=1 - Enable runtime imports:
VITE_SHIOTAN_ENABLE_PLUGIN_RUNTIME_IMPORTS=1 - Acknowledge trust gate:
VITE_SHIOTAN_PLUGIN_TRUST_ACKNOWLEDGED=1
Plugin docs:
- Overview:
docs/plugins/README.md - API contract:
docs/plugins/PLUGIN_API.md - SDK quickstart:
docs/plugins/SDK.md - Permissions:
docs/plugins/PERMISSIONS.md - Publishing:
docs/plugins/PUBLISHING.md - Manifest schema:
docs/plugins/manifest.schema.json
- Docs index:
docs/README.md - Architecture:
docs/ARCHITECTURE.md - Changelog:
CHANGELOG.md - Known issues:
docs/KNOWN_ISSUES.md - QA smoke plan:
docs/QA_SMOKE.md - Release checklist:
docs/RELEASE_CHECKLIST.md - Release process:
docs/RELEASING.md
MIT License. See LICENSE.
