Maid: a React Native Android client for llama.cpp and remote model APIs
Maid is a free and open source application for interfacing with llama.cpp models locally, and with Anthropic, DeepSeek, Ollama, Mistral and OpenAI models remotely.
At a glance
- What is it?
- Maid is an MIT-licensed Android app built with React Native that runs GGUF models on-device through llama.cpp and also connects to hosted providers with your own API key. The interesting question is not whether it works, but whether on-device inference on a phone is worth the setup.
- Who is it for?
- Maid fits Android users who want one client for both on-device GGUF inference and hosted APIs, and who are willing to manage model files and keys themselves. It is the wrong choice if you need iOS, a desktop UI, or a server-side deployment, since the README describes an Android-only React Native application.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Maid is for, and who it is not for
Maid, short for Mobile Artificial Intelligence Distribution, is an Android application that puts a chat interface on top of two very different inference paths. The first is local: GGUF model files executed on the device through llama.cpp, with no network connection required. The second is remote: the same chat window can point at API Route, Anthropic, DaoXE, DeepSeek, Mistral, Novita, Ollama, llmman, OrcaRouter or OpenAI using a key you supply. The README frames the goal as making it easy to interact with models on the go, and the two-path design is the whole reason the app exists. A phone has limited memory and no GPU worth speaking of, so a local model is a compromise; a hosted model is fast but needs connectivity and money. Maid refuses to pick one.
The audience follows from that. If you carry an Android phone and want a single chat client that behaves the same whether the model is a small quantised file on your storage or a frontier model behind an HTTP endpoint, this is the shape you want. If you need iOS, the README says the application is available for Android, and the build scripts target Android. If you want a terminal tool or a server, this is not it. The project is also explicitly unaffiliated with Hugging Face, Meta, Mistral AI, OpenAI, Google, Microsoft and the other model vendors, which matters when you are deciding who to ask for support.
Two inference paths behind one chat screen
The architecture is a React Native app using expo-router as its entry point, with native Android code underneath for the parts JavaScript cannot do. The dependency list shows the remote side directly: @anthropic-ai/sdk, @mistralai/mistralai, and an OpenAI-compatible path that covers the rest of the provider list. Those SDKs are the reason each provider is not hand-rolled, and they are also the reason provider support tends to lag upstream API changes.
The local side is different in kind. GGUF files are loaded from device storage, and the README lists one-tap downloads of curated Hugging Face models (Qwen, Phi, LFM, TinyLlama and others) alongside a bring-your-own-model option for any GGUF file you already have. Generation parameters are exposed per session: temperature, top-p, top-k and context length. Context length is the parameter to watch, because it is the one that most directly trades against memory on a phone.
Around the inference core sit the ordinary app concerns. Conversations can be created, renamed, deleted, exported and imported as JSON, so history is portable without an account. A global system prompt sets the assistant persona. Optional account sync backs up settings and chat history through Supabase, and the repository contains a supabase directory, so that is a first-party integration rather than a third-party add-on. Material You theming follows the system light or dark preference. The README states there is no telemetry and no ads, which is consistent with the MIT licence and the absence of any analytics dependency in the package manifest.
Installing Maid and running your first local model
Most users will not build this. The README links to two distribution channels: the latest release on GitHub, and Google Play under the package id com.danemadsen.maid. The GitHub release is the one to prefer if you want to verify what you installed, because the README publishes the signing key fingerprints for the release. Compare the SHA-256 fingerprint of your downloaded APK against the published value before installing.
If you do want to build from source, the README gives a short sequence. Clone the repository first:
git clone https://github.com/Mobile-Artificial-Intelligence/maid.gitThen install dependencies with Yarn. The README and package.json both use Yarn, and yarn.lock is committed, so mixing in npm will produce a different dependency tree than the one the project tests against.
yarn installThe build script delegates to Gradle, and the README states where the output lands:
yarn build-androidAfter that command finishes, the release APK is in android/app/build/outputs/apk/release. A debug variant exists as yarn build-android-debug, and yarn test runs the Jest suite with --ci, --runInBand and --forceExit, which is a configuration chosen for CI reliability rather than local speed.
Once installed, the first real task is getting a model onto the device. Open the model browser and pick one of the curated Hugging Face entries, which downloads the GGUF file into app storage. Alternatively, point the app at a GGUF file already on your phone. Then start a conversation and lower the context length before you raise it: the default is the fastest way to hit a memory limit on a mid-range device. If you would rather not run anything locally, skip the download entirely and add a provider key in settings instead.
Where the on-device path breaks down
Local inference on a phone is bounded by RAM and thermal headroom, and Maid does not change that. The README does not publish a device compatibility list, a minimum RAM figure, or a table of which model sizes run acceptably on which hardware. That silence is the single biggest practical gap for a new user: you find out whether a model fits by trying it. Larger quantisations of larger models will fail or thrash, and the failure mode is likely to be an out-of-memory kill or a generation that stalls, not a polite error message.
The remote path has its own limits. Keys are yours, so cost and rate limits are yours too. Ollama is listed as a remote provider, which means Maid expects a reachable Ollama endpoint rather than bundling a server; if your Ollama instance is on your laptop, the phone has to be able to route to it. The README also does not document rollback or downgrade steps, so if a release regresses on your device, the documented recovery path is to install a different release APK rather than to revert through the app.
There is also a scope limit that has nothing to do with performance. Text to speech is not in Maid; the README points to a companion app called Maise for that. If voice output is part of your requirement, you are installing two applications, not one.
Maid compared with running Ollama on a laptop
The obvious alternative for local models is Ollama on a desktop or a home server, with a browser or terminal client in front of it. The difference is where the weights live. Ollama keeps models on a machine with real memory and a real GPU, and the client is thin; Maid keeps the weights on the phone and makes the client heavy. That trade decides most of the comparison. A desktop setup will run models that no phone will run, and it will run them faster, but it is not in your pocket and it is not available on a train.
Maid's position is that it can do both, because Ollama is one of its remote providers. You can point the app at your own Ollama endpoint when you are on the same network and fall back to an on-device GGUF when you are not. That is a genuinely different arrangement from a pure desktop stack, and it is the strongest argument for the app. The cost is that you now maintain two model inventories, two sets of parameters, and a network path between them.
Licence, maintenance and upgrade cost
Maid is MIT licensed, which is permissive: you can use, modify and redistribute it, including in closed products, provided the copyright notice and permission notice are preserved. The README includes a standard warranty disclaimer and states that the software is provided without warranty of any kind. That is a statement about legal risk, not about quality, and it is the normal posture for a project of this kind. Nothing here is legal advice; read the LICENSE file if the distinction matters to your situation.
The repository is not archived, and the last push was on 2026-09-14, so the project is being worked on. Recent release history shows v3.0.0 on 2026-03-10, preceded by v2.0.7 on 2025-04-25 and v2.0.6 on 2025-04-18. The gap between v2.0.7 and v3.0.0 is roughly eleven months, and the jump in major version suggests the release carried breaking changes rather than incremental fixes. package.json reports version 3.0.0 with build 2799, which indicates a high-frequency internal build counter even though tagged releases are infrequent.
The upgrade cost has two parts. The first is the model files: a new release may change how GGUF files are loaded or which parameters are exposed, so a configuration that works today is not guaranteed to survive a major version. The second is the Android build chain. Building from source means Expo prebuild, Gradle and a native Android toolchain, so a contributor is maintaining a mobile build environment, not just a Node project. Exporting conversations as JSON before a major upgrade is the cheap insurance the app already gives you.
Editorial conclusion
Maid fits Android users who want one client for both on-device GGUF inference and hosted APIs, and who are willing to manage model files and keys themselves. It is the wrong choice if you need iOS, a desktop UI, or a server-side deployment, since the README describes an Android-only React Native application. Before adopting it, check the release assets for the current APK, compare the signing key fingerprint against the one published in the README, and confirm which remote providers your own key actually covers.
Frequently asked questions
Does Maid run models on the phone without an internet connection?
Yes. The README states that local inference runs GGUF models fully on-device via llama.cpp with no internet required. The remote provider options need a network connection and your own API key.
Which remote providers can Maid connect to?
The README lists API Route, Anthropic, DaoXE, DeepSeek, Mistral, Novita, Ollama, llmman, OrcaRouter and OpenAI. You supply your own API key for each.
How do I install Maid on Android?
The README links to the latest GitHub release and to Google Play under the package id com.danemadsen.maid. If you install the GitHub APK, the README publishes signing key fingerprints you can compare against your download.
Is Maid available for iOS or desktop?
The README describes Maid as built with React Native and available for Android. The build scripts target Android, and the manual is distributed as a PDF from the releases page.
Does Maid need an account to use?
No. Account sync is described as optional, and it backs up settings and chat history through Supabase when you register or log in. Without it, conversations stay on the device and can be exported and imported as JSON.
Does Maid include text to speech?
Not in the app itself. The README points to a companion app called Maise for text to speech functionality.
Community notes