A fork of SillyTavern with a full native iOS port — runs the complete SillyTavern backend on-device, no server required. Use SillyTavern on your iPhone or iPad without a PC, a VPN, or a remote server.
SillyTavern for iOS lets you run the full SillyTavern experience natively on your iPhone or iPad — no Mac staying on, no external server, no cloud. The complete Node.js backend runs entirely on-device using nodejs-mobile.
This is the only open-source iOS port of SillyTavern that runs the full backend on-device. Connect to any remote LLM API (OpenAI, Claude, OpenRouter, Kobold, etc.) directly from your iPhone.
Supported devices: iPhone and iPad
Minimum iOS: 15.0
SillyTavern version: currently 1.16
| SillyTavern for iOS | Browser (remote server) | Other iOS apps | |
|---|---|---|---|
| Full SillyTavern UI | ✅ | ✅ | ❌ |
| Runs on-device | ✅ | ❌ | varies |
| No server needed | ✅ | ❌ | ✅ |
| Open source | ✅ | — | rarely |
| Character cards & lorebooks | ✅ | ✅ | ❌ |
| Free | ✅ | depends | often paid |
- ✅ Full SillyTavern experience on iOS — same UI as desktop
- ✅ Runs entirely on-device — no external server, no Wi-Fi dependency
- ✅ Character cards, lorebooks, presets — everything syncs to your Files app
- ✅ Data persists in Files app → SillyTavern folder (accessible outside the app)
- ✅ Works with any remote LLM API: OpenAI, Anthropic Claude, OpenRouter, KoboldAI, Ollama...
⚠️ No JIT (Apple restriction) — slower than desktop, but fully functional⚠️ No local AI models (no transformers, captioning, TTS/STT)⚠️ No Extension support⚠️ Sliders don't work⚠️ First start may not launch — force restart may be required⚠️ Many other known issues
You will need a Mac, Xcode, and an Apple ID (free) to sideload.
An IPA will be distributed later for use with SideStore, AltStore, or Sideloadly.
- macOS with Xcode 15+
- iPhone or iPad running iOS 15+
- Apple ID (free account works)
# 1. Clone this repo
git clone https://github.com/elouannd/SillyTavern-iOS.git
cd SillyTavern-iOS/ios-app
# 2. Install dependencies and build the iOS bundle
npm install
bash scripts/prepare-ios.sh
# 3. Open in Xcode
open ios/App/App.xcodeprojThen in Xcode:
- Select your device in the toolbar
- Go to Signing & Capabilities → set your Team to your Apple ID
- Hit Run (▶)
First launch is slow — Node.js parses a 14MB bundle without JIT. Budget 1–3 minutes. Subsequent launches are fast (~1–2s).
Can I use SillyTavern on iPhone without a computer running?
Yes — that's the whole point of this port. The Node.js server runs directly on your iPhone using nodejs-mobile. No PC or Mac needs to stay on.
Does it support local AI models on iPhone?
Not yet. Local model inference (transformers, llama.cpp, etc.) is blocked by Apple's no-JIT policy. You can still connect to any remote API like OpenRouter, OpenAI, or a home server.
Is this available on the App Store?
No. Due to Apple's policies on sideloading and AI apps, this must be sideloaded via Xcode or AltStore/SideStore. An IPA release is planned.
What LLM APIs work with this?
Any API supported by SillyTavern works: OpenAI, Anthropic Claude, OpenRouter, KoboldAI, TabbyAPI, Ollama (remote), and more.
Is this different from NativeTavern or MiniTavern?
Yes. This is a direct port of the full upstream SillyTavern codebase, running the actual Node.js backend on-device. It is not a rewrite or a simplified client.
What iOS version do I need?
iOS 15.0 or later.
SillyTavern-iOS/
├── src/ ← SillyTavern backend (upstream)
├── public/ ← SillyTavern frontend (upstream)
│ ├── scripts/ios-init.js ← iOS-specific frontend init
│ └── css/ios-overrides.css ← iOS layout fixes
└── ios-app/
├── nodejs-project/ ← Node.js project copied to device
│ ├── server-ios.js ← iOS entry point (replaces server.js)
│ └── server-ios-entry.js ← esbuild entry shim
├── nodejs-project-deploy/ ← What Xcode copies to the bundle
├── scripts/
│ ├── prepare-ios.sh ← Full build pipeline
│ └── bundle-server.mjs ← esbuild config
└── ios/App/App/
├── AppDelegate.swift ← Bundle path config
└── SillyTavernViewController.swift ← Loading overlay + polling
prepare-ios.shbundles the SillyTavern backend with esbuild intoserver-bundle.mjs(~14MB) and pre-buildslib.jswith webpack- Xcode copies everything into the app bundle
- On launch,
AppDelegatewrites bundle paths tost_config.json - nodejs-mobile starts
server-ios.jswhich importsserver-bundle.mjs - SillyTavernViewController polls
localhost:8000and loads the WebView when the server is ready
cd ios-app
npm install # if dependencies changed
bash scripts/prepare-ios.sh
# Then rebuild in Xcode- SIGPIPE:
process.stdout.writeandprocess.stderr.writeare replaced with no-ops — nodejs-mobile's pipes have no reader and any write triggers SIGPIPE - No ICU:
Intlis polyfilled inserver-ios.jssince nodejs-mobile has no ICU data - No webpack at runtime:
public/lib.jsmust be pre-built (done byprepare-ios.sh) - Xcode overwrites: Always edit
nodejs-project/server-ios.jsand sync tonodejs-project-deploy/— Xcode reads from there
See ios-app/IOS-PORT.md for full technical documentation.
This repo tracks SillyTavern/SillyTavern. All original features and documentation apply.
- Docs: https://docs.sillytavern.app/
- Discord: https://discord.gg/sillytavern
- Reddit: https://reddit.com/r/SillyTavernAI
AGPL-3.0 — see LICENSE
iOS port additions are also AGPL-3.0.