Browse. Remember. Ask. No cloud required.
Demo • How It Works • Knowledge • Privacy • Stack • Building
I kept reading great stuff online and then completely blanking on where I saw it, and so I built a browser that remembers for me.
Lumen reads along as you browse. It grabs the good parts of every page you actually spend time on, summarizing them, and filing them into a knowledge base that lives entirely on your phone. You can ask about any of it later. A local LLM answers from your reading, not the whole internet, and it never calls any external services.
Runs on any iPhone or iPad on iOS 18+. No account, no server, no "sign in to continue." You browse like normal and it does the rest.
You browse the web
│
▼
┌─────────────────┐ reading signals detect
│ Lumen reads │ ◀─── when you actually engage
│ along with │ with a page, not just
│ you │ open it
└────────┬────────┘
│
▼
┌─────────────────┐ content extracted,
│ Knowledge DB │ ◀─── embedded, summarized,
│ SQLite + FTS5 │ classified — all on-device
└────────┬────────┘
│
┌────┴────┐
▼ ▼
📂 Browse ✦ Ask
Topics → "What did I
Sites → read about
Pages closures?"
The knowledge system has two tabs:
|
Ask like you'd text a friend. Lumen finds the pages that matter, hands them to a local Llama 3.2 1B, and answers from what you read online instead of internet surfing. Every answer shows its sources, so you can always check its validity. |
Everything you read sorts itself into folders: Topics → Websites → Pages Every layer writes its own little summary. Topics get sorted automatically, and each site gets a synthesis of everything you read there. |
┌─────────────────────────────────────────┐
│ EVERYTHING RUNS LOCALLY │
│ │
│ LLM inference ████████ MLX Swift │
│ Embeddings ████████ NLEmbedding │
│ Full-text search ████████ FTS5 │
│ Vector search ████████ Cosine sim │
│ Storage ████████ SQLite │
│ │
│ No networking. │
└─────────────────────────────────────────┘
There's no server that we send anything to. That's kind of the whole point :)
| Layer | Protection |
|---|---|
| Network | HTTPS-only upgrades, mixed-content blocking |
| Cookies | Third-party cookies blocked by default |
| Tracking | Built-in tracker database with threat classification |
| Fingerprinting | Fingerprint resistance via content security policies |
| Data | All knowledge stays in local SQLite |
| AI | LLM runs on-device via MLX |
Swift 6.2 · SwiftUI / iOS 18+ · Xcode 26.2+
│
├── 🧠 MLX Swift ──────── on-device Llama 3.2 1B inference
├── 🌐 WKWebView ──────── hardened browser engine
├── 💾 SQLite + FTS5 ──── full-text search & content tables
├── 🔢 NLEmbedding ────── Apple's sentence-level embeddings
├── 🛡️ ThreatDetector ─── tracker & fingerprint classification
│
└── Zero external dependencies beyond Apple + MLX
- macOS with Xcode 26.2 or newer
- iOS 18 or newer device or simulator (Apple Silicon Mac required for the simulator)
- Apple Developer account for code signing
- Network access on first launch (the LLM weights are pulled from Hugging Face)
# clone
git clone https://github.com/Lux-Softworks/Lumen.git
cd Lumen
# open in Xcode
open Lumen.xcodeprojIn Xcode:
- Select the Lumen target → Signing & Capabilities.
- Replace the bundled team (
XF6K537DNY) with your own, and change the bundle identifier fromcom.luxsoftworks.Lumento something unique to you (e.g.com.yourname.Lumen). Do the same for theLumenTestsandLumenUITeststargets. - Swift Package Manager will resolve the MLX Swift dependencies automatically on first open.
- Pick a destination (iOS 18+ device or iOS 18+ simulator on Apple Silicon) and hit ⌘R.
The first time you open the knowledge panel, Lumen downloads the mlx-community/Llama-3.2-1B-Instruct-4bit weights (~700 MB) from Hugging Face and caches them on-device. After that, everything runs fully offline.
Lumen is a client-only iOS app. "Deploying" means getting the build onto a device:
- Run on your own device — connect an iPhone/iPad (iOS 18+), select it as the destination, and ⌘R. Trust the developer profile under Settings → General → VPN & Device Management on first run.
- Share via TestFlight — in Xcode, Product → Archive, then distribute the archive to App Store Connect and invite testers through TestFlight.
- App Store release — submit the same archive for App Store review. Distribution through Apple's App Store is explicitly permitted by the license exception below.
AGPL-3.0 with an Apple App Store distribution exception — if you build on this, share it back.
The exception (added as additional permission under GNU AGPL version 3 section 7) authorizes distribution of this software through Apple's App Store under Apple's terms. All other distribution remains governed by the AGPL-3.0.
Want to help? Awesome — here's the process:
- Fork the repository and create a feature branch off
main(git checkout -b your-feature). - Match the conventions — read
CLAUDE.mdfor the project's code style. Most importantly: this codebase contains self-explanatory code (meaning no comments), and all building/testing happens in Xcode (build with ⌘R, run tests with ⌘U). - Test on a physical device for anything AI-related. The on-device LLM does not run in the Simulator.
- Open a pull request against
mainwith a clear description of what changed and why.
Thanks for helping improve our community and software!
Lumen was built entirely by me as a solo developer. I used AI tools (primarily Claude) throughout development for brainstorming architecture decisions, debugging, generating boilerplate, and writing code. All design decisions, system architecture, and feature direction are my own. I reviewed and understand every line of code in the project.



