Run and monitor Ollama from the Steam Deck Quick Access Menu (QAM).
A Decky Loader plugin that brings Ollama to Gaming Mode. Start and stop the service from the QAM and see what models are loaded. A companion system service automatically evicts models from VRAM when a game launches.
- Service control — start and stop
ollama servefrom the QAM without leaving Gaming Mode - Model info — lists installed models and their disk size at a glance
- VRAM eviction — the
ollama-game-watchersystem service unloads models from VRAM the moment a game starts
I wanted to let my PC run as a game streaming server to play over tailscale and sunshine/moonlight when I'm away from home, but I also wanted my Ollama models to still be available in OpenWebUI. Since user services don't persist into Gaming Mode, I had Claude create this plugin for me to turn it into a system service that would and also check the status. Future features could include some form of assist features for games or errors or whatever else could be useful.
- Steam Deck / SteamOS 3.x or an Arch-based distro (tested on CachyOS)
- Decky Loader installed
- Ollama installed and at least one model pulled (e.g.
ollama pull huihui_ai/qwen3.5-abliterated)
- Download
decky-ollama.zipfrom the latest release - In Decky Loader, open Settings → Developer → Install plugin from zip
- Point it at the downloaded zip
Requires Node.js 20+ and pnpm (npm install -g pnpm).
git clone https://github.com/TuxLux40/decky-ollama.git
cd decky-ollama
bash install.shThen restart Decky Loader from the QAM.
QAM panel (React/TypeScript)
│ callable()
▼
Decky Loader IPC
│
▼
main.py (Python, runs as root)
│
┌──────────┴──────────────┐
│ │
ollama binary Ollama REST API
http://localhost:11434
The game watcher is a separate bash process under systemd. It polls pgrep -f "SteamLaunch AppId" every 2 seconds and calls the Ollama API to evict loaded models when a game starts.
- src/index.tsx — React panel shown in the QAM
- main.py — backend
Pluginclass; public async methods become RPC endpoints automatically - src/types.d.ts — shared TypeScript types between frontend and backend
- ollama-game-watcher — VRAM eviction script
- setup-ollama-game-watcher.sh — installs the watcher as a system service
| Method | Purpose |
|---|---|
get_status() |
Returns { installed, running, version } |
start_service() |
Starts ollama serve |
stop_service() |
Stops the running ollama serve process |
list_models() |
Returns installed models from the Ollama API |
Prerequisites: Node.js 20+, pnpm 10+.
pnpm install # install dependencies
pnpm build # compile frontend → dist/index.js
pnpm run watch # rebuild on changes
pnpm run typecheck # TypeScript type check without emit
pnpm run lint # ESLint on src/For backend-only changes, edit main.py and restart Decky Loader on the Deck.
PRs are welcome. Open an issue first for anything beyond small fixes.
See LICENSE.
