README.md
July 18, 2026 · View on GitHub
English | 简体中文
Harbor
Local-first reading and curation for macOS — capture, read, organize, and chat with your knowledge, all on your Mac.
▶ Watch full video (MP4 · 55s)
Features
- 🌊 Capture: Extract article text from URLs, subscribe to RSS/Atom/JSON feeds (dedup, conditional requests, parallel sync), import OPML and read-later exports (Pocket / Instapaper), import local PDFs and images
- 📖 Read: Three-column layout, text selection with highlights & notes, bilingual reading, serif fonts with typography controls, reading progress tracking
- 📂 Organize: Tags, tree folders, favorites, SQLite FTS5 full-text search (CJK + Latin), keyboard navigation
- 🤖 AI (Bring Your Own Key): Summarize, translate, chat and remix with AI — results saved locally for offline access
- 🏠 Local-First: All data (library, highlights, notes, reading positions) stored locally; AI is opt-in, explicit, and never auto-sends
⚓ Part of a nautical family: Harbor is where knowledge docks, Beacon lights up expiring certificates before they bite, and TokenAtlas charts your AI coding voyage.
Installation
Download
-
Download
Harbor.dmgfrom Releases -
Open the DMG and drag Harbor to Applications
-
First launch: This version is not notarized by Apple. Right-click Harbor in Applications → Open, or run in Terminal:
xattr -dr com.apple.quarantine /Applications/Harbor.app
Homebrew
brew install --cask can4hou6joeng4/tap/harbor
Auto-Update
Check for updates via Harbor → Check for Updates... in the menu bar. Updates are distributed through Sparkle with EdDSA signature verification.
AI Setup (Bring Your Own Key)
Go to Settings in Harbor, choose a provider, and enter your API key (stored in Keychain only):
- Anthropic: Default endpoint
api.anthropic.com - OpenAI: Official or compatible endpoints (Azure, Groq, Together, etc.)
- Custom: Any OpenAI-compatible service with custom base URL
AI features:
- Summarize: Structured summary of the article
- Translate: Paragraph-by-paragraph translation with preserved IDs
- Chat & Remix: Streaming AI responses, saved to library
All AI results are stored locally and remain accessible offline.
Tech Stack
- Swift 6 + SwiftUI for native macOS experience
- GRDB for local SQLite persistence with FTS5 search
- Sparkle for automatic updates
- SSE streaming for real-time AI responses
Development
Requirements
- macOS 13.0+
- Xcode 16.0+
- Swift 6.0+
Build
# Clone the repository
git clone https://github.com/can4hou6joeng4/Harbor.git
cd Harbor
# Build and run
swift build
swift run
# Or open in Xcode
open Package.swift
Test
swift test
Package
./script/package_app.sh
This generates a DMG with code signing and notarization (requires Apple Developer credentials).
Contributing
Contributions are welcome! Please read CONTRIBUTING.md first (if you have contribution guidelines).
License
GPL v3 — see LICENSE for details.
Acknowledgments
Built with inspiration from:
- Sparkle — Auto-update framework
- GRDB — SQLite toolkit
- Local-first principles from Ink & Switch
Made with ❤️ for knowledge workers who value privacy and local control