Skip to content
Projects

a-ghorbani/pocketpal-ai has 9,190 GitHub stars and 1,067 forks. GitHot measured +46 stars in 24 hours and +206 in 7 days. Last checked 2026-11-11 03:03 UTC. Last push 2026-11-06.

How these counts are measured

An app that brings language models directly to your phone.

What you can do

  • ๐Ÿง  On-device chat โ€” run GGUF language models (Gemma, Qwen, Phi, Llama, and more) fully offline.
  • ๐Ÿ—ฃ๏ธ Text-to-speech โ€” give your assistant a voice with on-device neural voices (Kokoro, Kitten, Supertonic, and Phonon on supported devices) that synthesize speech on your phone, or your phone's system voices.
  • ๐ŸŽ™๏ธ Voice input โ€” dictate messages with on-device Whisper speech recognition (whisper.cpp).
  • ๐ŸŽญ Pals โ€” create personalized assistants with their own model, system prompt, and personality (Assistant and Roleplay types).

Measured star growth

in 24h
+46
in 7 days
+206
in 15 days
Update delayed
in 1 month
Update delayed

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original
PocketPal AI logo

PocketPal AI

A private AI assistant that runs entirely on your phone.

Chat with language models, give them a voice, and let them use tools โ€” all on-device. No account, no cloud, no internet required.

pocketpal.dev ยท Get the app ยท Leaderboard ยท PalsHub ยท Discussions


App Store Google Play

Latest release License: MIT Stars Open issues Sponsor


Why PocketPal AI?

Most AI apps are a thin window onto someone else's server โ€” every message you type gets shipped off, logged, and analyzed somewhere you can't see. PocketPal flips that around: the AI lives on your phone, and your conversations stay on it unless you choose an online feature.

  • ๐Ÿ”’ Private by default โ€” every prompt, response, and document stays on your device unless you turn on an online feature such as web search or a remote server.
  • โœˆ๏ธ Works offline โ€” download a model once and it just works, with no connection and no account. On a plane, on a trail, anywhere.
  • ๐Ÿ“ฑ Runs on hardware you already own โ€” real language models, voices, and tools, tuned to make the most of your phone's CPU, GPU, and NPU.
  • ๐Ÿ†“ Free and open source โ€” chat, models, voices and tools are free, with no account. The store builds offer an optional one-time PocketPal Plus purchase for hands-free voice; builds from source include it. MIT-licensed.

Privacy note: Your chats and documents leave your device only through features you turn on: web search and page reading, a remote server, or a system voice your phone runs online. The app's other network use (model and voice downloads, PalsHub and purchases, device-compatibility rules from the jsDelivr CDN at launch, the opt-in benchmark leaderboard, and feedback or reports you submit) never attaches your chats.

Contents

Features

  • ๐Ÿง  On-device chat โ€” run GGUF language models (Gemma, Qwen, Phi, Llama, and more) fully offline.
  • ๐Ÿ—ฃ๏ธ Text-to-speech โ€” give your assistant a voice with on-device neural voices (Kokoro, Kitten, Supertonic, and Phonon on supported devices) that synthesize speech on your phone, or your phone's system voices.
  • ๐ŸŽ™๏ธ Voice input โ€” dictate messages with on-device Whisper speech recognition (whisper.cpp).
  • ๐ŸŽญ Pals โ€” create personalized assistants with their own model, system prompt, and personality (Assistant and Roleplay types).
  • ๐Ÿ›๏ธ PalsHub โ€” discover and install community Pals, including premium ones via in-app purchase.
  • โœจ PocketPal Plus โ€” an optional one-time purchase in the App Store and Google Play builds that adds hands-free voice conversation. Builds from source include every Plus feature.
  • ๐Ÿ› ๏ธ Talents & tools โ€” let capable Pals call built-in tools (calculator, date/time, rich HTML rendering, opt-in web search and page reading) inside a tool-use loop.
  • ๐Ÿ“ฅ Hugging Face integration โ€” search and download GGUF models, including gated ones, directly from the HF Hub with your access token.
  • ๐Ÿ“Š Benchmarking โ€” measure tokens/sec and memory, and optionally compare on the AI Phone Leaderboard.
  • โšก Hardware acceleration โ€” CPU, GPU (Metal on iOS, OpenCL/Adreno on Android), and NPU (Qualcomm Hexagon) inference paths, with graceful fallback.
  • ๐ŸŒ Localized โ€” available in 16 languages, on phones and tablets, including full iPad support.

Get the app

Platform
iOS / iPadOS Download on the App Store
Android Get it on Google Play

Three steps to your first chat:

  1. Install PocketPal from the App Store or Google Play.
  2. Download a model โ€” tap the menu (โ˜ฐ) โ†’ Models, pick one that fits your phone, and download (or add one from Hugging Face).
  3. Load it and start chatting โ€” that's it, you're running AI fully offline.

How it works

You don't need to know any of this to use PocketPal โ€” but if you're curious how a phone runs real AI offline, here's the short version.

PocketPal is a four-layer stack, from the silicon up to the chat UI. Each layer has one job, and the dependency direction is strictly top-down โ€” the JS app talks to native bridges, bridges talk to inference engines, engines target hardware backends.

PocketPal AI on-device stack โ€” UI & Tool Use โ†’ Bridging โ†’ Engine โ†’ Hardware
Layer What runs here
UI & Tool Use The React Native app (UI via React Native Paper, state via MobX, chat history in WatermelonDB). The AgentRunner drives each chat turn โ€” streaming tokens, dispatching Talents (tools) when the model calls them, and feeding results back for follow-up reasoning. Pals are configurable personas; PalsHub is the in-app marketplace for sharing and buying them. In voice mode, your speech is transcribed, answered as a normal chat turn, and the reply is spoken back.
Bridging Native modules that connect JavaScript to the engines. llama.rn bridges LLM inference over JSI; whisper.rn bridges speech recognition; @pocketpalai/react-native-speech and onnxruntime-react-native bridge text-to-speech, with the @pocketpalai/react-native-speech-phonon add-on for Phonon.
Engine The inference engines. llama.cpp runs language models in the quantized GGUF format. whisper.cpp runs Whisper speech recognition models in the GGML format. ONNX Runtime runs the Kokoro, Kitten and Supertonic voice models in the ONNX format. Phonon runs natively in its own Rust runtime: a GGUF model on the CPU on Android, a Core ML model on iOS.
Hardware Where the math actually happens. PocketPal targets CPU (universal fallback), GPU (Metal on iOS, OpenCL on Qualcomm Adreno for Android), and NPU (Qualcomm Hexagon, and the Apple Neural Engine for Phonon on iOS) โ€” falling back gracefully and offloading partial layers when a full backend isn't available.

Using the app

๐Ÿ“ฅ Download & load a model
  1. Open the app and tap the Menu (โ˜ฐ), then go to Models.
  2. Pick a model from the list and tap Download, or tap + to add one from Hugging Face or local storage.
  3. From Hugging Face, search GGUF models and choose a quantization that fits your device's memory and storage โ€” download now or bookmark for later.
  4. After downloading, tap Load (or use the chevron icon left of the chat input to load right from the chat screen).
Download Models
๐Ÿ’ฌ Chat
  1. Make sure a model is loaded.
  2. Open the Chat page and start talking.
  3. The screen stays awake during inference and deactivates when idle.
  4. Copy a full response with the copy icon, or long-press a paragraph to copy just that.
  5. Edit any of your messages with a long-press โ€” the AI regenerates from your change. Hit retry for a fresh answer, optionally with a different model.
Chat
๐ŸŽญ Pals & PalsHub

Create personalized assistants:

  • Assistant Pal โ€” pick a default model, set a system prompt (write it yourself or have the app generate one), and customize the chat input color.
  • Roleplay Pal โ€” everything above, plus location, the AI's role, and other contextual parameters.

Switch personas with the Pal picker on the chat page. Browse PalsHub in-app to discover community Pals, including premium ones via in-app purchase.

Assistant Pal

Creating a cocktail-recipe assistant

๐Ÿ“Š Benchmark your device
  1. Open the Benchmark page.
  2. Run performance tests to compare speed and efficiency across models.
  3. Review tokens/sec and memory usage.
  4. Optionally share your results to the AI Phone Leaderboard.
Benchmark
๐Ÿ”‘ Set up a Hugging Face token (for gated models)
  1. Create an access token in your Hugging Face account (docs).
  2. In PocketPal, go to Settings โ†’ Set Token, paste it, and save.
Token setup
๐Ÿ’Œ Send feedback

Go to App Info โ†’ "Sharing your thoughts", type your feedback โ€” feature requests, suggestions, anything โ€” and submit.

Send feedback

For developers

PocketPal is a standard React Native app. If you can build a React Native project, you can build PocketPal.

Prerequisites

  • Node.js โ€” version is pinned in .nvmrc (currently 22.21.0); run nvm use to match it. Older Node will fail the engines check.
  • Yarn 1 (Classic) โ€” packageManager is pinned to [email protected].
  • Xcode + CocoaPods, and Ruby + Bundler (for iOS / Fastlane tooling).
    • Xcode 26.6 or later, with the Metal Toolchain: xcodebuild -downloadComponent MetalToolchain.
    • The iOS simulator build needs an Apple silicon Mac.
    • After a change to patches/llama.rn+*.patch, remove node_modules/llama.rn and run yarn --check-files so the patch applies to fresh sources.
  • Android Studio + Android SDK/NDK.

See the React Native environment setup for platform details.

Clone, install & run

git clone https://github.com/a-ghorbani/pocketpal-ai
cd pocketpal-ai

nvm use                       # match the pinned Node version
yarn install                  # install JS dependencies
(cd ios && pod install)       # iOS only

yarn start                    # Metro bundler
yarn ios                      # build + run on iOS simulator
yarn android                  # build + run on Android emulator

Core on-device chat works without any backend keys; only PalsHub/auth features need additional configuration.

Native-change rule: if you change package.json, a native module, ios/, android/, the Podfile, or build.gradle, re-run pod install and rebuild both platforms โ€” a JS reload won't pick up native changes.

Quality gates

yarn lint           # ESLint
yarn typecheck      # tsc --noEmit
yarn test           # Jest
yarn l10n:validate  # validate locale JSON (placeholders, integrity)
yarn test:perf      # render-performance tests (Reassure)
yarn test:perf:compare [base]  # render counts of HEAD vs. base (default: merge-base with origin/main)

Run yarn lint && yarn typecheck && yarn test before opening a PR. Pull requests also run the render-count comparison; see render-performance tests. Commits are validated by Commitlint (Conventional Commits) via a Husky hook.

Repository layout
src/
โ”œโ”€โ”€ screens/        # Chat, Models, Pals, Benchmark, Settings, Plus, About, โ€ฆ
โ”œโ”€โ”€ components/     # Reusable UI
โ”œโ”€โ”€ store/          # MobX stores (Model, ChatSession, Pal, TTS, ASR, VoiceMode, HF, Benchmark, โ€ฆ)
โ”œโ”€โ”€ services/
โ”‚   โ”œโ”€โ”€ agent/      # AgentRunner โ€” the chat / tool loop
โ”‚   โ”œโ”€โ”€ talents/    # Tool engines + registries
โ”‚   โ”œโ”€โ”€ search/     # Web search providers for the search talents
โ”‚   โ”œโ”€โ”€ tts/        # TTS engines (kokoro, kitten, supertonic, phonon, system)
โ”‚   โ”œโ”€โ”€ asr/        # Whisper speech recognition (dictation and voice mode)
โ”‚   โ”œโ”€โ”€ voice/      # Hands-free voice mode
โ”‚   โ”œโ”€โ”€ plus/       # Plus feature catalog and gate
โ”‚   โ”œโ”€โ”€ iap/        # In-app purchases (store bridge)
โ”‚   โ”œโ”€โ”€ palshub/    # PalsHub marketplace integration
โ”‚   โ”œโ”€โ”€ deviceRules/ # Device-compatibility rules: parse, classify, launch-time fetch
โ”‚   โ””โ”€โ”€ downloads/  # Model download manager
โ”œโ”€โ”€ database/       # WatermelonDB schema, models, migrations
โ”œโ”€โ”€ repositories/   # Data-access layer over the DB
โ”œโ”€โ”€ locales/        # i18n JSON + lazy loader (index.ts is the registry)
โ””โ”€โ”€ hooks/  api/  theme/  utils/  config/  specs/
Tech stack

Versions are pinned in package.json; the highlights:

Area Choice
Framework React Native 0.87.1, React 19.2.3 (New Architecture)
Language TypeScript 5.9.3
UI React Native Paper 5.15.3, React Navigation
State MobX 6 (mobx, mobx-react, mobx-persist-store)
Persistence WatermelonDB (chat history), AsyncStorage (settings), Keychain (secrets)
LLM llama.rn 0.13.0-rc.9 โ†’ llama.cpp b11960 ยท GGUF
ASR whisper.rn 0.7.4 โ†’ whisper.cpp ยท GGML; mic via @fugood/react-native-audio-pcm-stream 1.1.4
TTS @pocketpalai/react-native-speech 2.8.2 + onnxruntime-react-native ^1.23.2 ยท ONNX; @pocketpalai/react-native-speech-phonon 0.1.3
Tooling Yarn 1 (Classic), ESLint, Prettier, Jest, Husky + Commitlint
Extending PocketPal

A Talent is a tool the model can call mid-conversation. Engines are registered in a TalentRegistry, exposed to the model as tool schemas; the AgentRunner detects a call, runs the engine, and returns the result for the next turn.

Talent Engine Does
calculate CalculateEngine Arithmetic / expression evaluation
datetime DatetimeEngine Current date / time
render_html RenderHtmlEngine Renders model-produced HTML in chat
web_search WebSearchEngine Searches the web (opt-in; needs a configured provider)
read_url ReadUrlEngine Reads a web page from search results, a site you named, or a link on a page it read (opt-in; needs a configured provider)

Good first contributions:

  • A new Talent โ€” implement a TalentEngine and register it in src/services/talents/.
  • A new TTS engine โ€” model it on an existing engine in src/services/tts/engines/, register it in engineRegistry.ts, wire it into TTSStore, then search src/ for that engine's name, ignoring case, to find every other entry it needs, such as its type, constants, setup-sheet entries and strings.
  • A new locale โ€” translate on Weblate; registering a new language in the app follows the steps in src/locales/index.ts.

Contributing

Contributions are welcome โ€” bug reports, fixes, features, translations, and docs all help.

  1. Fork and branch: git checkout -b feature/your-feature-name
  2. Make your changes; run on a device/emulator (yarn ios / yarn android). Re-run pod install + rebuild if you touched native code.
  3. Gate locally: yarn lint && yarn typecheck && yarn test
  4. Commit with Conventional Commits: git commit -m "feat: add new talent"
  5. Push and open a pull request.

Please read the Contributing Guidelines and Code of Conduct first. Want to translate PocketPal into your language? Join us on Weblate.

Roadmap

  • Tool use expansion โ€” grow the Talents catalog and deepen the agentic loop so Pals can do more, fully on-device.

Have an idea or found a bug? Open an issue or start a discussion.

Community & support

License

Licensed under the MIT License.

Acknowledgements

PocketPal AI stands on the shoulders of the open-source community, including:


Made with โค๏ธ for people who want AI that stays on their phone.


If PocketPal is useful to you, consider giving it a โญ โ€” it helps others find the project.

Explore related projects