Rikkahub
Rikkahub is a native Windows LLM client with multi-provider switching for conversations 🤖💬
— also runs on Linux (native binary or Docker).
Reconstructed on top of Android edition of Rikkahub by RE.
🚀 Download
Grab the latest installer from the
Releases page and double-click
Rikkahub_X.X.X_x64-setup.exe. The wizard:
- Asks where to install the program (default:
%LOCALAPPDATA%\Rikkahub\, no admin rights required) - Asks where to keep your data — conversations, settings, uploaded files (default:
<install dir>\pc-data\; freely movable later from the in-app settings) - Ships a WebView2 bootstrapper so the app works on any Win10 1809+ / Win11 machine, even without WebView2 pre-installed
Uninstall via Windows "Apps & features". pc-data/ is yours — back it up if you care.
No telemetry, no admin, no cloud account required. Everything is local.
Prefer no installer? Each release also ships a portable .zip — unzip and run, nothing else needed.
On Linux? Each release ships a portable
.tar.gz(binary + frontend, unzip and run). Prefer a native distro package, or building from source / running Docker? See Community packages, Linux binary and Docker below.
📦 Community packages
Beyond the official tar.gz, the community maintains native packages for several Linux
distributions. These are maintained by their respective authors, not this project, and may
lag behind the latest release — for packaging issues please report upstream to the maintainer.
| Distribution | How to install | Maintainer |
|---|---|---|
| Debian / Ubuntu / Mint | .deb from the Releases page or Cloud drive → sudo apt install ./rikkahub-pc_*_amd64.deb | @Noah0932 |
| Arch / Manjaro | .pkg.tar.zst from the Releases page or Cloud drive → sudo pacman -U rikkahub-pc-*-x86_64.pkg.tar.zst | @Noah0932 |
| NixOS / Nix | nur.repos.af-nur.rikkahub-desktop (Built from source, recommended to use the binary cache af-nur.cachix.org)nur.repos.af-nur.rikkahub-desktop-bin (Synchronized with binary builds from Releases) | @AstralFlare-owo |
Many thanks to both for covering these distributions.
✨ Features
- 🎨 Multiple theme palettes (Claude / RikkaHub / Mono / Custom) + 🌙 dark mode
- 🐧 Runs on Linux too — self-contained native binary or multi-arch Docker image (amd64 / arm64)
- 🔄 Multi-provider support: OpenAI / Anthropic / Google Gemini + any OpenAI-compatible endpoint
- 🦙 Local model support via Ollama /
LM Studio /
llama.cpp server — just point an
OpenAI-compatible provider at
http://localhost:11434/v1 - 🖼️ Multimodal input: image, PDF, DOCX, PPTX, EPUB, plain text
- 🛠️ MCP (Model Context Protocol) Streamable HTTP support
- 📝 Markdown rendering with code highlighting, LaTeX formulas, tables, Mermaid diagrams
- Message branching, regeneration, per-branch model switching
- 🔍 17 web-search engines: Tavily, Exa, Brave, Perplexity, Bocha, 智谱, 秘塔, Firecrawl, Grok, Ollama, Jina, SearXNG, custom JS, …
- 🧠 Per-assistant or global memory tool, plus recent-chat awareness and a time-gap reminder
- 🧩 Prompt template variables (model name, current time, locale, device info, …)
- 🤖 Multiple customizable assistants with their own system prompts, prompt injections, world books, quick messages
- 🛠️ Granular per-model configuration: manually add models, set custom request headers / custom request bodies / provider overwrite (per-model baseUrl + API Key)
- 🎨 Image generation: gpt-image-2, DALL·E 3, Imagen, Qwen-Image, FLUX, …
- 🎙️ TTS and ASR via system speech (Windows SAPI / Linux espeak-ng), OpenAI, Gemini, Qwen, Groq, MiniMax, MiMo
- 📥 One-click import from Android .zip backups: conversation history, settings, attachments, Skills, MCP, prompt injections, world books, quick messages
- 📤 WebDAV and S3-compatible cloud backup, plus JSON import/export
- 📊 Request log and usage statistics with a daily activity heatmap
💎 Sponsors
The following organizations sponsor Rikkahub's ongoing development. Our thanks to them.
|
|
钠API One-stop access to 100+ top global models — ChatGPT, Claude, Gemini and more — with competitive pricing and superior stability. |
🏗️ Build from source
Building the installer locally requires the following — for developers only:
- Bun 1.1+
- Rust toolchain (stable, MSVC target — picked automatically by rustup on Windows)
- Visual Studio Build Tools 2022 with the "Desktop development with C++" workload (provides MSVC linker + Windows SDK)
# 1. Compile the embedded backend (Bun --compile → single Windows exe)
cd pc-server
bun run compile
# 2. Copy the freshly compiled sidecar to where Tauri expects it
cp ../dist/rikkahub-pc.exe ../web-ui/src-tauri/binaries/rikkahub-server-x86_64-pc-windows-msvc.exe
# 3. Build the SPA, Tauri shell, and NSIS installer in one go
cd ../web-ui
bun install
./src-tauri/tauri-msvc.cmd build --bundles nsisThe shipped installer lands at dist/Rikkahub_X.X.X_x64-setup.exe. The wrapper
tauri-msvc.cmd activates the MSVC environment and uses an ASCII-only CARGO_TARGET_DIR
to work around two Windows quirks (Git Bash's link.exe conflict and the project path
containing non-ASCII characters).
Dev workflow
# Backend on http://localhost:8080
cd pc-server
bun run server.ts
# Vite dev server on http://localhost:5173 (proxies /api to :8080)
cd ../web-ui
bun run devFor frontend-only iteration just open http://localhost:5173 in any browser — the custom
titlebar auto-hides outside the Tauri shell so the SPA stays usable.
Smoke test
cd pc-server
bun run smoke:request-chainSpins up mock provider / MCP / WebDAV / S3 servers and exercises the full request chain.
Linux binary
Build a self-contained Linux x64 binary (requires only Bun):
# 1. Build the SPA
cd web-ui && bun install && bun run build
# 2. Compile the server binary
cd ../pc-server && bun run compile:linux
# → dist/rikkahub-pcRun it:
./dist/rikkahub-pc
# Open http://localhost:8080 in your browser
# Data is stored in ./pc-data/Required system packages — install before using the relevant features:
| Package | Feature |
|---|---|
espeak-ng | System TTS (text-to-speech tool, voice playback) |
xclip (X11) or wl-clipboard (Wayland) | Clipboard read/write tool |
unzip, zip | Backup restore / skill import from ZIP |
On Debian/Ubuntu: sudo apt install espeak-ng xclip unzip zip
On Fedora/RHEL: sudo dnf install espeak-ng xclip unzip zip
Missing tools are detected at startup and listed as warnings — the server still starts and all other features remain available.
Docker
A multi-arch image can be built from the included Dockerfile:
docker build -t rikkahub-pc .Run with persistent data:
docker run -d \
--name rikkahub \
-p 8080:8080 \
-v ./pc-data:/app/pc-data \
-e RIKKAHUB_PASSWORD=your-password \
rikkahub-pcThen open http://localhost:8080 in your browser. The image uses
distroless/base-debian12 and bundles unzip/zip; clipboard and TTS are
not available inside a headless container.
Set RIKKAHUB_PASSWORD (or pass --password <password>) whenever the server
is reachable beyond your own machine — the container binds 0.0.0.0, so
without a password anyone on the same network can read your conversations and
API keys. With a password set, the web UI shows an unlock prompt and every API
request requires the issued access token. The desktop app binds 127.0.0.1
and does not need this.
Security note for LAN / public deployments: the AI's scrape_web tool fetches
whatever URL the model asks for from inside the container — a prompt-injected web page can
steer it into probing internal services or cloud metadata endpoints (SSRF). If that matters in
your network, isolate the container's network or restrict its egress.
Reverse proxy (nginx)
Two things matter when putting RikkaHub behind a reverse proxy (e.g. for HTTPS):
- Host passthrough — the server rejects state-changing requests whose
Originheader doesn't match the requestHost(CSRF protection). A defaultproxy_passrewritesHostto the upstream address, so every POST/DELETE fails with 403 — "the page loads but nothing saves". Forward the original host withproxy_set_header Host $host. - Streaming — SSE responses carry
X-Accel-Buffering: no, which makes nginx disable response buffering for them automatically;proxy_buffering offis only a fallback for proxies that ignore the header.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
server_name rikka.example.com;
# ssl_certificate ...; ssl_certificate_key ...;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host; # keep the Origin/Host CSRF check working
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; # WebSocket (voice input)
proxy_set_header Connection $connection_upgrade;
proxy_buffering off; # fallback; SSE already sends X-Accel-Buffering: no
proxy_read_timeout 1h; # long-lived SSE / generation streams
client_max_body_size 0; # backup restore uploads can be hundreds of MB
}
}Set RIKKAHUB_PASSWORD whenever the proxy makes the server reachable beyond localhost.
🧰 Tech stack
- Bun — runtime, bundler, package manager
- Tauri v2 + Rust — desktop shell (native window, NSIS installer, sidecar lifecycle, Job-Object-bound process tree)
- TypeScript — strict end-to-end typing
- React 19 + React Router 7 — SPA (client-only mode)
- Tailwind CSS v4 + shadcn/ui — styling
- Zustand — state management
- ky — HTTP client
- Lucide — icon set
- i18next — internationalization (zh-CN / en-US)
🙏 Credits
This project is a Windows port built on top of the product design, brand, and concepts of RikkaHub by @re-ovo.
⭐ Star History
If Rikkahub is useful to you, please give it a star ⭐