An open-source, on-device AI assistant for Android
Material 3 Expressive UI · multi-provider model routing · local RAG memory · PRoot Linux tool sandbox · a web UI you open from any browser on your Wi-Fi.
![]() Chat — reasoning timer, tool badges, rendered SVG answer |
![]() Memory — memory modes, RAG retrieval, memory search tool |
![]() Statistics — activity heatmap, conversations, tokens |
More screenshots per release live in docs/, including provider setup walkthroughs (1.1.6_providers_use.gif, 1.3.4_providers_use.gif).
Local AI is a state-of-the-art, open-source AI assistant application for Android engineered around Google's Material 3 Expressive design system.
It provides an entirely private, locally sandboxed environment that unites multi-provider LLM routing, local vector memory (RAG), embedded Linux PRoot workspaces, real-time hardware telemetry, and fluid 60Hz/120Hz spring physics.
All conversations, API keys, documents, vector embeddings, and tool executions reside 100% securely on your device. There is zero telemetry, zero analytics tracking, and no external middleman server.
| Quick facts | Details |
|---|---|
| Application name | Local AI (v1.2 Universal Release) |
| Repository | smartworldarafath/Local-AI |
| Target Platform | Android 9.0+ (API 28 to API 36 / Android 16) · Single Universal APK (180.8 MB) |
| UI System | Google Material 3 Expressive (Jetpack Compose 1.8 · Shapes, Springs & Micro-motions) |
| Display Optimization | Dynamic High Refresh Rate (60Hz & 120Hz ProMotion fluid timing) |
| Native Sandbox | Embedded PRoot Linux user-space environment (CMake / C++ native core) |
| AI Architecture | Multi-Provider Engine (OpenAI, Gemini, Claude, ComfyUI, Ollama, SiliconFlow) |
| Memory & RAG | Local Vector Embeddings + SQLite Vector Engine (Room Database v33) |
| Security & Keys | Hardware-backed Android Keystore + EncryptedSharedPreferences (AES-256) |
| In-App Updates | GitHub Releases API with live speed monitor (MB/s) and background persistence |
| License | GNU General Public License v3.0 (GPL-3.0) |
| I want to… | Local AI does it with… |
|---|---|
| Chat with GPT / Claude / Gemini / DeepSeek / Ollama | One assistant definition, per-assistant model choice, 62 provider presets in the bundled catalog, plus custom OpenAI-compatible endpoints |
| Keep long-term context without cloud memory | Local RAG memory: episodic chunks embedded by an embedding model you pick, stored on device, recalled by cosine similarity |
| Ask a model to do tasks on my phone | Built-in tools: eval_javascript, text_to_speech, generate_image, send_notification, schedule_message, get_notifications, search_memory, manage_skills, ask_user |
| Run Python, a package manager or shell scripts | The :workspace module installs a PRoot Linux rootfs and exposes workspace_shell, workspace_read_file, workspace_write_file, workspace_edit_file — no root required |
| Use custom MCP servers | Built-in Model Context Protocol (MCP) client with SSE and Streamable-HTTP transports |
| Chat from laptop while phone does the work | Embedded Ktor server + React Router SPA + JWT auth + SSE streaming, advertised over mDNS on the LAN |
| Read PDF / Word / Images and ask questions | MuPDF engine, DOCX→Markdown parser, OCR transformer, image/audio attachments, multimodal vision models |
![]() Chat — reasoning timer, tool badges, rendered SVG answer |
![]() Memory — memory modes, RAG retrieval, memory search tool |
![]() Statistics — activity heatmap, conversations, tokens |
More walkthroughs and animated setup demos are in docs/, including 1.1.6_providers_use.gif and 1.3.4_providers_use.gif.
Local AI includes an embedded low-overhead hardware telemetry engine and custom power-budget controls located under Settings ➔ Advanced Settings:
- Real-Time CPU & GPU Usage Monitor: Compact, live-animated monitor card sampling
/proc/statand JVM runtime telemetry to provide instantaneous percentage utilization metrics without draining background battery. - Dual Power Limit Sliders (Default 70%):
- CPU Power Limit: Default set to
70%, adjustable from10%to100%with haptic feedback ticks on every 5% step. - GPU Power Limit: Default set to
70%, adjustable from10%to100%to prevent thermal throttling during intensive local inference passes.
- CPU Power Limit: Default set to
- Display Smoothness & 120Hz Optimization:
- Full support for variable refresh rate displays (60Hz, 90Hz, 120Hz).
- High-performance Compose list keying and memoized state derivations (
derivedStateOf) to eliminate frame drops and scrolling stutters.
The dedicated App Updates section (located directly under About in Settings) connects straight to GitHub Releases:
- Semantic Version Comparison: Verifies if the GitHub release tag is strictly newer than the currently installed build (
v1.2). Lower or identical versions report "App is Up to Date". - Live Progress & Download Speed Counter: Dynamic progress bar calculating transfer speeds in real time (MB/s and KB/s updated every 500ms) with total/downloaded byte tallies.
- Persistence & Force-Close Recovery: Downloaded APKs are cached safely in external files storage. If the user closes the app or swipes it away from Recents, the completed file is recognized instantly on reopen—enabling direct installation without re-downloading.
- One-Tap Package Installer: Direct integration with Android's secure
FileProviderto launch package updates seamlessly.
| Module / Layer | Technology | Architecture Role |
|---|---|---|
| Presentation | Jetpack Compose + Navigation 2 | Single-activity Compose host (RouteActivity) with type-safe screens and adaptive settings layouts. |
| Motion & Theme | Material 3 Expressive + PremiumHaptics | Spring physics (damping=0.5f, stiffness=400f), 12 tactile vibration patterns, and Light Slider tinting. |
| Dependency Injection | Koin 4 (Android + WorkManager) | Clean decoupled dependency graph spanning AppModule, DataSource, Repository, and ViewModel modules. |
| Data & Persistence | Room v33 (10 Entities, 10 DAOs) | Paging 3 conversation feeds, episodic vector embeddings, SHA-256 deduplicated chat attachments. |
| Local Sandbox | PRoot (CMake & C++ native runtime) | On-device unprivileged Linux guest environment executing scripts, Python commands, and developer CLI tools. |
| AI Orchestration | GenerationHandler (~1800 lines) | Autonomous tool-calling loop (up to 256 steps), Pebble prompt templating, and SSE streaming pipeline. |
| Embedded Web UI | Ktor 3.0 Server + React Router 7 | Embedded web server with HMAC-SHA256 JWT auth and NSD mDNS discovery for browser control. |
| Document Engine | MuPDF + XmlPullParser | High-speed extraction and prompt ingestion for PDF and DOCX attachments directly on-device. |
- Go to the Releases page.
- Download the latest
LocalAI_1.2_debug.apk. - Open the downloaded APK on your Android device and confirm installation.
Requirements
- JDK: OpenJDK 17 or newer
- Android SDK: Compile SDK 36, Target SDK 36, Min SDK 28
- Node.js: v20.x or newer (for bundling embedded
web-ui/) - NDK & CMake: NDK 26+ and CMake 3.22+ (for building native PRoot workspace binaries)
# 1. Clone the repository
git clone https://github.com/smartworldarafath/Local-AI.git
cd Local-AI
# 2. Build the embedded Web UI
cd web-ui
npm install
npm run build
cd ..
# 3. Assemble the single universal APK
./gradlew :app:assembleDebug
# 4. Output location:
# app/build/outputs/apk/debug/LocalAI_1.2_debug.apkAre my chats and API credentials private?
Yes, 100%. Local AI has no centralized accounts or telemetry collectors. All API keys and tokens are encrypted via Android's hardware-backed EncryptedSharedPreferences through SecretKeyManager. SQLite databases remain strictly within your device's private app sandbox.
How does the Linux PRoot sandbox function?
PRoot uses the Linux ptrace system call to emulate root file systems and system paths entirely in user-space. It allows executing shell scripts, Python, and terminal utilities inside an isolated Linux environment on Android without requiring device rooting.
What does the Dual Power Limit Slider do?
It sets software execution limits for concurrent CPU worker threads and GPU offload limits (default 70%). This prevents your phone from overheating or throttling battery health during heavy inference sessions.
Can I run local models offline?
Yes. You can connect Local AI to local Ollama endpoints or on-device LLM servers running on your phone or local WiFi network.
Local AI is an independent, ad-free, 100% open-source project. If it enhances your daily workflow, consider supporting development to help maintain Android 16 optimizations, new provider drivers, and Linux PRoot capabilities:
Cards · bKash · Nagad · Global |
![]() Ntag: @arafath_rahman9Email: arafathrahman711@gmail.com
|
![]() ID: 184920485USDT · USDC · BTC · Visa |
![]() Email: arafathrahman711@gmail.comReceiving Accounts (USD/EUR/GBP) |
| Method | Account / Identifier | Details |
|---|---|---|
| SupportKori | supportkori.com/arafathrahman | Credit/Debit Cards, bKash, Nagad, and International payment methods. |
| nsave | arafathrahman711@gmail.com (Ntag: @arafath_rahman9) | Swiss accounts · Direct EUR, USD & GBP transfers with zero cross-border hidden fees. |
| RedotPay | User ID: 184920485 | RedotPay Visa virtual card & crypto wallet · Instant USDT, USDC, BTC, and internal ID transfers. |
| Payoneer | arafathrahman711@gmail.com | Direct bank-to-bank transfer or Payoneer-to-Payoneer in USD, EUR, GBP. |
| GitHub Sponsors | github.com/sponsors/smartworldarafath | Direct monthly or one-time project sponsorship. |
| Developer | Arafath (arafathrahman711@gmail.com) | GitHub: @smartworldarafath |





