A personal AI mobile app that runs open-source language models directly on your phone. Private, free, and personalized — no subscriptions, no forced cloud dependency.
AI should be personal, private, affordable, and available to everyone — not locked behind expensive subscriptions or constant internet access.
"Yours" puts open models (Qwen, Gemma, and other lightweight models) on the user's device, giving people a free, private AI assistant they fully control.
Live list in src/inference/modelRegistry.ts. "Training size" is the
model's parameter count; "Actual size" is the real quantized .gguf
download size, verified via HTTP Content-Length on the file itself (not
read off a model page — see CHANGELOG.md for why that distinction
matters).
| Model | Training Size | Quant | Actual Size | Context Length |
|---|---|---|---|---|
| Qwen3 Instruct | 0.6B | Q4_K_M | 484 MB | 32,768 tokens |
| Gemma 3 Instruct | 1B | Q4_K_M | 806 MB | 32,768 tokens |
| SmolLM2 Instruct | 135M | Q4_K_M | 105 MB | 8,192 tokens |
| SmolLM2 Instruct | 360M | Q4_K_M | 271 MB | 8,192 tokens |
| Gemma 3 Instruct | 270M | Q4_K_M | 253 MB | 32,768 tokens |
| FunctionGemma Instruct | 270M | Q4_K_M | 253 MB | 32,768 tokens |
Past the "planning" phase — there's a working app. Two screens (Model
Management, Chat) let you download a small GGUF model, load it, and chat
with it entirely on-device, with history persisted locally. See
CHANGELOG.md for the detailed build history (what was built, what broke
on real hardware, and how it was fixed) and Open Issues.md for what's
still known to be missing, deferred, or scoped down from the original plan
below — most notably, the "Prompt Compiler" concept in this README is
not what's actually implemented; a single shared system prompt is used
for every model instead. Read Open Issues.md before assuming any section
below describes the current behavior rather than the original intent.
- Platform: Mobile app only (for now — no web, no desktop)
- Framework: React Native (bare CLI, not Expo — native modules like
llama.rnneed direct native linking) - Phase: Working MVP on Android; iOS untouched (no Xcode/CocoaPods in
the development environment used so far — see
Open Issues.md) - Storage: SQLite (
@op-engineering/op-sqlite), used today for chat history
Not "another ChatGPT clone" — an AI runtime for open models, built around three ideas:
- Private by default — models run locally on the user's phone.
- Free and accessible — no expensive subscriptions, no API costs passed to the user.
User
│
Mobile App (React Native)
│
Model Adapter Layer
│
Local Inference (on-device)
- Format: GGUF (broadest lightweight model availability)
- Target models: Qwen, Gemma, SmolLM2, and other lightweight models —
currently Qwen3 0.6B, Gemma 3 1B, SmolLM2 135M, SmolLM2 360M, Gemma 3
270M, and FunctionGemma 270M (see
src/inference/modelRegistry.tsfor the live list, with real download URLs and verified file sizes) - Local inference approach:
llama.rn(llama.cpp bridged to React Native) — MLC LLM was considered but not used
Originally specified as a full adapter interface:
generate()
stream()
embedding()
vision()
tool_call()
Currently implemented: generate() and stream() only
(src/inference/InferenceManager.ts). embedding(), vision(), and
tool_call() don't exist yet — see Open Issues.md.
The original plan was a "Prompt Compiler": prompts assembled dynamically from three composable layers (Global / Model-Specific / Feature), sized differently per model parameter count, rather than one large static system prompt.
What's actually implemented (src/inference/systemPrompt.ts) is simpler:
a single unified SYSTEM_PROMPT constant, applied identically to every
model in the registry. This is a deliberate scope reduction, not an
oversight — see Open Issues.md for the reasoning. The three-level
design below is preserved here as the original intent, in case the
Prompt Compiler is revisited later.
- Global Prompt — never changes. Identity, behavior, formatting, honesty, reasoning style.
- Model-Specific Prompt — tuned per model's quirks (e.g., Qwen: concise, structured; Gemma: direct, no preamble).
- Feature Prompt — only added when relevant (coding, writing, translation, math, research, etc.).
| Model Size | System Prompt Strategy |
|---|---|
| 1B and Less | Ultra-short (50–100 tokens) |
| 3B | Short (100–200 tokens) |
| 7B | Medium (200–400 tokens) |
| 14B+ | Full-featured, more detailed guidance |
Each model has its own settings, loaded automatically when selected:
{
"model": "qwen3-4b",
"systemPrompt": "...",
"temperature": 0.7,
"topP": 0.9,
"maxOutputTokens": 2048,
"stopSequences": []
}- Chat interface
- Multiple model support
- Chat history (persisted via SQLite)
- Markdown rendering
- Code block rendering
- Streaming responses
- Image attachments
- Settings screen
- Prompt library
| Layer | Technology |
|---|---|
| Mobile | React Native (bare CLI) |
| Navigation | @react-navigation/bottom-tabs |
| Local Inference | llama.rn (llama.cpp bridged to React Native) |
| Model Format | GGUF |
| Downloads | react-native-fs (downloadFile) |
| Local Storage | @op-engineering/op-sqlite (chat history) |
| Clipboard | @react-native-clipboard/clipboard |
| Backend (future, for hybrid cloud) | FastAPI, Flask or NestJS — not started |
- Originally considered: Nova, Nexa, Synapse, PocketAI, and others
- Final name: Yours — reflects the personal, private, user-owned philosophy of the app
MIT — see LICENSE.