Rikkahub is a native desktop client for chatting with large language models, rebuilt for PC from the Android edition of Rikkahub. It supports multiple providers including OpenAI, Anthropic, Google Gemini, and any OpenAI-compatible endpoint, along with local models through Ollama and LM Studio. Conversations accept multimodal input, and the app provides MCP support, web search, image generation, and text-to-speech or speech recognition. It stores everything locally, requires no cloud account, and includes no telemetry.
โจ 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
README
Rikkahub
Rikkahub is a native Windows LLM client with multi-provider switching for conversations ๐ค๐ฌ
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:
\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
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)
๐๏ธ 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.
<a href="https://naapi.cc">
<img src="icons/naapi.jpg" width="100" alt="้ API" />
</a>
<a href="https://naapi.cc"><b>้ API</b></a>
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:
# 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 nsis
The 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:17455
cd pc-server
bun run server.ts
# Vite dev server on http://localhost:5173 (proxies /api to :17455)
cd ../web-ui
bun run dev
For 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-chain
Spins 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-pc
Run it:
./dist/rikkahub-pc
# Open http://localhost:17455 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:
Then 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 ) 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 Origin header
doesn't match the request Host (CSRF protection). A default proxy_pass rewrites
Host to the upstream address, so every POST/DELETE fails with 403 โ "the page loads but
nothing saves". Forward the original host with proxy_set_header Host $host.
Streaming โ SSE responses carry X-Accel-Buffering: no, which makes nginx disable
response buffering for them automatically; proxy_buffering off is 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 / {
# 8080 matches the Docker mapping above; a bare binary defaults to 17455
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.