| 1 | <p align="center"> |
| 2 | <img src="assets/app-icon.png" alt="Siti AI" width="96" height="96"> |
| 3 | </p> |
| 4 | |
| 5 | <h1 align="center">Siti AI</h1> |
| 6 | |
| 7 | <p align="center"> |
| 8 | <strong>A private, on-device AI assistant for macOS, iOS, and Android.</strong><br> |
| 9 | Your model runs locally. Your chats never leave the device. |
| 10 | </p> |
| 11 | |
| 12 | <p align="center"> |
| 13 | <a href="https://apps.apple.com/se/app/siti-ai/id6780047972"><img alt="App Store" src="https://img.shields.io/badge/App_Store-live-06a561?style=flat-square&labelColor=1a1a1a"></a> |
| 14 | <a href="https://play.google.com/store/apps/details?id=ai.siti.Siti"><img alt="Google Play" src="https://img.shields.io/badge/Google_Play-live-06a561?style=flat-square&labelColor=1a1a1a"></a> |
| 15 | <a href="https://github.com/ondeinference/onde"><img alt="Built with Onde" src="https://img.shields.io/badge/built_with-Onde-06a561?style=flat-square&labelColor=1a1a1a"></a> |
| 16 | <a href="LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache_2.0-blue?style=flat-square"></a> |
| 17 | <a href="https://github.com/sponsors/ondeinference"><img alt="Sponsor" src="https://img.shields.io/badge/♥-Sponsor-db61a2?style=flat-square"></a> |
| 18 | </p> |
| 19 | |
| 20 | <p align="center"> |
| 21 | <a href="https://getsiti.5mb.app">Website</a> · |
| 22 | <a href="#quick-start">Quick start</a> · |
| 23 | <a href="#architecture">Architecture</a> · |
| 24 | <a href="CONTRIBUTING.md">Contributing</a> · |
| 25 | <a href="SECURITY.md">Security</a> |
| 26 | </p> |
| 27 | |
| 28 | --- |
| 29 | |
| 30 | Siti AI is the assistant you already know, rebuilt around privacy. It loads an |
| 31 | open-weights language model onto your device and runs inference entirely |
| 32 | locally — no server round-trip, no account, nothing to leak. The name is a wink |
| 33 | at the assistant on your phone; the difference is where your words go. |
| 34 | |
| 35 | **Siti is also the flagship open reference app for [Onde](https://ondeinference.com)** — |
| 36 | the on-device inference engine that powers it. If you want to see Onde driving a |
| 37 | real, shipping app on the App Store and Google Play, this is the codebase to read. |
| 38 | |
| 39 | ## Why it exists |
| 40 | |
| 41 | The device you keep closest to you should be the one that keeps your data |
| 42 | private. Most assistants send everything you type to a remote server; Siti keeps |
| 43 | it on your device instead. Using AI shouldn't be the price you pay to give that |
| 44 | up. |
| 45 | |
| 46 | ## Features |
| 47 | |
| 48 | - **Fully on-device inference** — chat runs locally via [Onde](https://crates.io/crates/onde): Metal-accelerated on Apple silicon, CPU on Android. |
| 49 | - **Bring your own model** — pick from on-device open-weights models; download and swap them in-app. |
| 50 | - **No account, no telemetry of your chats** — conversations stay on the device. |
| 51 | - **Native and small** — Rust core + Tauri, a real app rather than a web wrapper. |
| 52 | |
| 53 | ## Quick start |
| 54 | |
| 55 | **Prerequisites:** [Rust](https://rustup.rs) (stable), [pnpm](https://pnpm.io), |
| 56 | and the [Tauri prerequisites](https://tauri.app/start/prerequisites/) for your |
| 57 | platform (Xcode for macOS/iOS; Android SDK + NDK for Android). |
| 58 | |
| 59 | ```bash |
| 60 | git clone https://github.com/getsigit/siti.git |
| 61 | cd siti |
| 62 | pnpm install |
| 63 | make dev # or: pnpm tauri dev |
| 64 | ``` |
| 65 | |
| 66 | The first launch downloads a model; after that, inference is offline. The Onde |
| 67 | engine is pulled from crates.io — no separate SDK checkout needed. To develop |
| 68 | against a local Onde checkout, see the commented `[patch.crates-io]` block in |
| 69 | `src-tauri/Cargo.toml`. |
| 70 | |
| 71 | Common tasks: |
| 72 | |
| 73 | ```bash |
| 74 | make dev # start the Tauri dev server |
| 75 | make build # debug build |
| 76 | make fmt # cargo fmt |
| 77 | make lint # clippy + tsc |
| 78 | ``` |
| 79 | |
| 80 | ## Architecture |
| 81 | |
| 82 | Siti is a thin, native shell around the Onde inference engine. |
| 83 | |
| 84 | ``` |
| 85 | ┌──────────────────────────────┐ |
| 86 | │ React + Vite UI (src/) │ chat view, model settings |
| 87 | ├──────────────────────────────┤ |
| 88 | │ Tauri command layer │ src-tauri/src/chat/command_*.rs |
| 89 | │ (load/unload model, send, │ typed IPC between UI and Rust |
| 90 | │ stream tokens, history) │ |
| 91 | ├──────────────────────────────┤ |
| 92 | │ Onde engine (crates.io) │ GGUF load + streaming generation; |
| 93 | │ Metal on Apple, CPU on │ Metal-accelerated on Apple silicon |
| 94 | │ Android │ |
| 95 | └──────────────────────────────┘ |
| 96 | ``` |
| 97 | |
| 98 | Things worth reading if you're evaluating the engineering: |
| 99 | |
| 100 | - `src-tauri/src/chat/` — the command surface: model lifecycle, streaming token |
| 101 | events, and history. This is the cleanest example of wiring Onde into an app. |
| 102 | - `src-tauri/src/chat/mod.rs` — token-budget heuristics (reasoning models burn |
| 103 | a large `<think>` budget before the visible reply begins). |
| 104 | - `src-tauri/src/setup/` — redirecting the model cache into the App Group |
| 105 | container so the sandbox doesn't fight the download. |
| 106 | - `src-tauri/.cargo/config.toml` — the `+fullfp16` target-feature notes for |
| 107 | Apple silicon fp16 SIMD. Non-obvious, and load-bearing. |
| 108 | |
| 109 | ## Repository layout |
| 110 | |
| 111 | | Path | What | |
| 112 | | ---------- | ----------------------------------------------- | |
| 113 | | `/` | Tauri + Vite desktop/mobile app (the product) | |
| 114 | | `src/` | React UI | |
| 115 | | `src-tauri/` | Rust core, Tauri commands, platform config | |
| 116 | | `web/` | Next.js marketing + legal site (getsiti.5mb.app) | |
| 117 | |
| 118 | ## The Onde SDK |
| 119 | |
| 120 | The inference engine is developed separately and is open source under |
| 121 | MIT OR Apache-2.0, with SDKs for several ecosystems: |
| 122 | |
| 123 | [Rust](https://crates.io/crates/onde) · |
| 124 | [Swift](https://github.com/ondeinference/onde-swift) · |
| 125 | [Kotlin Multiplatform](https://central.sonatype.com/artifact/com.ondeinference/onde-inference) · |
| 126 | [Flutter](https://pub.dev/packages/onde_inference) · |
| 127 | [React Native](https://www.npmjs.com/package/@ondeinference/react-native) · |
| 128 | [CLI](https://github.com/ondeinference/onde-cli) · |
| 129 | [Docs](https://ondeinference.com/sdk) |
| 130 | |
| 131 | If Siti is useful to you, the engine underneath it probably is too. |
| 132 | |
| 133 | ## Contributing |
| 134 | |
| 135 | Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). We ask |
| 136 | contributors to sign a lightweight [CLA](CLA.md) so the project can keep both |
| 137 | its open-source and commercial licensing options open. Start with issues labeled |
| 138 | [`good first issue`](https://github.com/getsigit/siti/labels/good%20first%20issue). |
| 139 | |
| 140 | ## Sponsor |
| 141 | |
| 142 | Siti is built by [PT Sigit Mitra Bangun](https://sigit.si) and published |
| 143 | by Splitfire AB, which also builds the underlying Onde engine. On-device AI |
| 144 | that keeps user data private is worth funding — if you agree, |
| 145 | [**sponsor us on GitHub**](https://github.com/sponsors/ondeinference). Sponsorship |
| 146 | funds the engine, the SDKs, and this app. |
| 147 | |
| 148 | ## Security & privacy |
| 149 | |
| 150 | Chat content is processed on-device and is not transmitted to us. To report a |
| 151 | vulnerability, see [SECURITY.md](SECURITY.md) — please do not open a public |
| 152 | issue for security reports. |
| 153 | |
| 154 | ## License |
| 155 | |
| 156 | Code is licensed under [Apache-2.0](LICENSE). The "Siti AI" name, logos, and app |
| 157 | icons are trademarks of PT Sigit Mitra Bangun and are **not** covered by the code license — |
| 158 | see [TRADEMARK.md](TRADEMARK.md). |