Beacon is a private, local-first AI assistant for Apple devices. It downloads and runs MLX language models on-device, so everyday chats and inference stay on your device.
The project explores what a polished, approachable interface for local AI can look like. Beacon supports different model families and capabilities so people can choose the model that best fits their device and task.
- Private on-device chat with local MLX models
- A curated marketplace of iPhone-suitable Hugging Face MLX models
- Persisted conversations with history selection and swipe-to-delete
- Streaming Markdown responses, including code blocks and inline formatting, with a stop button
- Shortcuts/App Intents support for asking the selected model
The bundled catalog contains 50 text and vision models whose architectures and image processors are supported by the pinned MLX Swift LM runtime. Most are 4-bit conversions; the original SmolVLM2 option uses full-precision weights. Download sizes are approximate and exclude runtime memory required during generation. Hub/configuration auditing does not replace iPhone inference testing.
The original 15 entries are listed below. The full catalog is in beacon/Resources/models.json; see the expansion notes and per-repository audit for the additional 35 entries and verification scope. Device names in this historical table are guidance, not download restrictions; the app uses RAM estimates.
| Company | Model | Hugging Face repository | Download | Recommended device |
|---|---|---|---|---|
| Liquid AI | LFM2 1.2B | mlx-community/LFM2-1.2B-4bit |
0.66 GB | iPhone 14+ |
| Liquid AI | LFM2.5 1.2B Instruct | mlx-community/LFM2.5-1.2B-Instruct-4bit |
0.66 GB | iPhone 14+ |
| Alibaba | Qwen3 0.6B | mlx-community/Qwen3-0.6B-4bit |
0.35 GB | iPhone 14+ |
| Alibaba | Qwen3 1.7B | mlx-community/Qwen3-1.7B-4bit |
0.98 GB | iPhone 14+ |
| Alibaba | Qwen3 4B Instruct 2507 | mlx-community/Qwen3-4B-Instruct-2507-4bit |
2.28 GB | iPhone 15 Pro+ |
| Alibaba | Qwen2.5 Coder 3B Instruct | mlx-community/Qwen2.5-Coder-3B-Instruct-4bit |
1.75 GB | iPhone 15 Pro+ |
| Gemma 3 1B Instruct | mlx-community/gemma-3-1b-it-qat-4bit |
0.77 GB | iPhone 14+ | |
| Meta | Llama 3.2 1B Instruct | mlx-community/Llama-3.2-1B-Instruct-4bit |
0.71 GB | iPhone 14+ |
| Hugging Face | SmolLM3 3B | mlx-community/SmolLM3-3B-4bit |
1.75 GB | iPhone 15 Pro+ |
| OpenBMB | MiniCPM5 2B | mlx-community/MiniCPM5-2B-mlx-4Bit |
1.43 GB | iPhone 15 Pro+ |
| IBM | Granite 3.3 2B Instruct | mlx-community/granite-3.3-2b-instruct-4bit |
1.43 GB | iPhone 15 Pro+ |
| DeepSeek | R1 Distill Qwen 1.5B | mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-4bit |
1.01 GB | iPhone 15 Pro+ |
| Microsoft | Phi 3.5 Mini Instruct | mlx-community/Phi-3.5-mini-instruct-4bit |
2.15 GB | iPhone 15 Pro+ |
| Hugging Face | SmolVLM2 500M (vision) | HuggingFaceTB/SmolVLM2-500M-Video-Instruct-mlx |
1.02 GB | iPhone 14+ |
| Alibaba | Qwen2-VL 2B (vision) | mlx-community/Qwen2-VL-2B-Instruct-4bit |
1.26 GB | iPhone 15 Pro+ |
Onboarding offers Chat Core, a bundle of models selected using the device's physical RAM rather than its iPhone generation. It chooses a lightweight chat model, the largest recommended Qwen chat variant, and a vision model when memory permits, without duplicate downloads. Models run one at a time. The same bundle is available in the Model Marketplace in Settings.
The marketplace exposes all 50 catalog models in company tabs, with live Hugging Face metadata fetched for the selected tab. The bundled catalog remains browsable offline; pull to refresh retries Hub information. RAM recommendations estimate weights plus inference overhead while reserving half of physical RAM for the system and app. They are advisory, not a guarantee: larger models remain downloadable with a memory warning. Free device storage and Beacon's 10 GB model-storage limit are still checked, including the combined space needed for a bundle. Models are downloaded from Hugging Face and stored in the app cache. Arbitrary Hub repositories and local GGUF imports are not supported by this MLX catalog.
The chat input's model switcher offers Chat Core for automatic routing or any downloaded, available model for manual use. The choice persists across launches and also applies to Shortcuts. Manual text models still use the vision bridge for image attachments. The switcher includes a shortcut to the marketplace for additional downloads.
The marketplace starts with Chat Core and Recommended models tabs, followed by company tabs. Recommended models includes only good RAM fits; company tabs retain every catalog option, including models with memory warnings. There is no search bar.
Review invitations become eligible after a locally persisted, randomized threshold of 3–6 successful chat replies. They appear only after a short idle pause, not during generation, typing, downloads, other sheets, or release announcements. Dismissing an invitation starts a 90-day cooldown, with at most three invitations per rolling year. Opening the App Store review page stops automatic invitations; Beacon does not claim to know whether a review was actually submitted. Chat content is never included in these local counters.
BeaconModelRuntimeloads MLX models from a Hugging Face repository and streams responsesResources/models.jsondefines the bundled marketplace catalogWebSearchMCPClientimplements the optional MCP-compatible web-search integrationRequestLLMIntentexposes a Shortcuts action for asking the selected model
- Xcode with the iOS SDK
- An iPhone supported by the selected model for on-device inference
Open beacon.xcodeproj in Xcode, select your signing team and bundle identifier, then build the beacon scheme.
Add or update compatible models by editing beacon/Resources/models.json. Each downloadable entry must be a 4-bit Hugging Face MLX repository whose model_type is supported by the pinned MLX Swift LM package. Model cards should use accurate repository IDs, download sizes, and device guidance.
-
Clone the repository:
git clone https://github.com/armondschneider/beacon.git cd beacon -
Open
beacon.xcodeprojin Xcode and wait for Swift Package dependencies to resolve. -
In the target's Signing & Capabilities settings, select your Apple Developer team and choose a unique bundle identifier.
-
Connect and unlock your iPhone, select it as the run destination, then press Run.
-
Download a model from the marketplace, then select it before starting a chat.
Beacon does not require a backend for local chat. The anonymous model-download counter is an optional service that each developer can host for their own build.
The repository also includes a grounded web-search integration, but it is currently disabled in ChatView for this release. Before enabling it in a build, deploy the service below and provide its endpoint. Beacon sends only the resolved search query; returned sources are rendered as numbered citations and tappable inline source cards.
The repository includes a Cloudflare Worker in server/web-search-mcp that provides both the web search MCP endpoint and model download analytics. To run your own instance:
-
Create a Cloudflare account and install Node.js.
-
From
server/web-search-mcp, runnpm installandnpx wrangler login. -
Deploy with
npm run deploy. -
Add the deployed URL to your local
beacon/Resources/LocalConfiguration.plist:<key>WebSearchMCPURL</key> <string>https://your-worker.workers.dev/mcp</string> <key>ModelDownloadsURL</key> <string>https://your-worker.workers.dev/model-downloads</string>
These local configuration files are intentionally ignored by Git. A fresh clone keeps web search and analytics disabled until you provide your own endpoints. The model download counter records at most one download per anonymous app installation and does not collect names, accounts, or device identifiers.
Contributions are welcome. If you find a bug, have a feature request, or want to propose a larger change, open a GitHub issue so it can be discussed and tracked.
To submit a pull request:
- Fork the repository and create a focused branch.
- Make the smallest change that fully addresses the issue.
- Build the app and run the relevant tests.
- Use Conventional Commits for commit messages.
- Open a pull request that explains the problem, the solution, and how it was tested.
Common commit prefixes include:
feat: add a model selector to the chat composer
fix: prevent duplicate chat submissions
docs: clarify local development setup
test: cover reasoning output filtering
chore: update project dependencies
Keep pull requests focused on one concern. Link the relevant issue when one exists, and include screenshots or recordings for visible UI changes.
Report vulnerabilities privately as described in SECURITY.md.
Beacon is available under the MIT License.