An AI knowledge base, shared by you and your agent.
Everything you read — PDFs, papers, web pages, books — in one place, then an AI research agent that searches and answers across all of it, with citations you can open.
Most readers just display pages. OakReader keeps everything you read in one place — then puts an AI research agent on top that reads the whole thing for you: search across your entire library, ask questions, and get answers grounded in your sources with citations you can click open. The same knowledge base is something your AI agent can use too.
It's a native macOS app — SwiftUI + AppKit, PDFKit — built to be fast and to stay out of your way.
Use any model, switch anytime — from the frontier labs to a local model running on your Mac. Your choice, every time.
| Component | Framework |
|---|---|
| UI | SwiftUI + AppKit |
| PDF engine | PDFKit |
| Catalog | GRDB (SQLite) |
| AI | Multi-provider (Claude, OpenAI, Gemini, local Ollama/LM Studio, and more) via the local OakReaderAI package |
| Search | Full-text search with CJK support |
| Web capture | Browser extension (WXT) → local snapshot server |
| OCR | Apple Vision |
- macOS 15.4 or later
- Xcode 16 / Swift 6 (to build from source)
git clone https://github.com/oakreader/oakreader.git
cd oakreader
brew install xcodegen
xcodegen generateThe committed project signs with the maintainer's Apple team, which you can't use. Point it at your own identity with a local, git-ignored override — you don't edit any tracked file:
scripts/setup-signing.shIt asks for your Apple Developer Team ID (find it at
developer.apple.com → Account → Membership; a free Apple ID works) and writes
xcconfig/DeveloperSettings.xcconfig. No Apple account? Press Enter to build
ad-hoc instead — fine for local development. (You can also copy
xcconfig/DeveloperSettings.example.xcconfig by hand.)
Debug builds drop the restricted keychain-access-groups entitlement so any
team — or ad-hoc — can build. Your API keys live in your own login keychain
(enter them in Settings → AI), or you can inject them via the provider env
vars, e.g. OPENAI_API_KEY.
open OakReader.xcodeprojSelect the OakReader scheme, then build and run (Cmd+R).
project.yml is the source of truth — the .xcodeproj is generated by XcodeGen.
A signed and notarized build is available on the website and on the Releases page.
OakReader is open source and contributions are welcome — bug reports, fixes, and focused improvements. Open an issue to discuss anything substantial before sending a large PR.
MIT © 2026 Jiwei Yuan






