Local-first macOS app for Markdown notes, EPUB reading, and media playback. Three separate on-disk roots (Notes / Media / Ebooks), multi-provider AI (on-device MLX + remote OpenAI-compatible + Gemini), optional YouTube downloads via yt-dlp. No account, no telemetry. macOS 14+.
- End-user docs → USER_GUIDE.md
- Contributor / architecture reference → TUTORIAL.md
- LLM provider setup → docs/LLM_SETUP.md
- Release process → RELEASE.md
- Known rough edges + UX roadmap → UX_AUDIT.md
- Changelog → CHANGELOG.md
brew install xcodegen # one-time
# optional (enables YouTube downloads):
brew install yt-dlp ffmpeg
git clone https://github.com/NextAgentBC/NextNote.git
cd NextNote
make build # xcodegen + xcodebuild + ad-hoc sign
make run # launch nextNote.appFirst launch: pick (or accept defaults for) three folders — Notes, Media, Ebooks — under ~/Documents/nextNote/. Everything else is configured from Settings and Library menu.
- Notes. Plain
.mdfiles on disk, folder tree in the sidebar, Markdown editor with split preview, search, tabs, focus mode, per-note chat, dashboard, daily digest. - Ebooks.
.epubreader inline: TOC, page turn (click edge / arrows / space), highlights, fonts, themes. Auto-scanned from the Ebooks root. - Media. Music and video auto-scanned from the Media root. Click a track →
AmbientPlayerstarts; click a video → inlineMediaPlayerView. - AI. Polish / summarize / translate / grammar / continue writing. Swap providers in Settings — MLX on-device, remote OpenAI-compatible (Ollama, vLLM, LM Studio, any HTTP endpoint), or Google Gemini (free tier with automatic key rotation).
- YouTube. Paste URL →
yt-dlpdownloads to the Media folder (mp3 / mp4). Needsyt-dlpinstalled;ffmpegunlocks mp3 + ≥1080p video.
make gen # regenerate nextNote.xcodeproj via xcodegen
make build # Debug build + ad-hoc code sign (survives iCloud xattrs)
make run # build + launch
make clean # nuke generated project + build outputBuild artifacts live in build.nosync/ — the .nosync suffix keeps iCloud Documents from syncing a multi-GB bundle.
nextNote/
├── Makefile build targets
├── project.yml xcodegen config
├── TUTORIAL.md full reference for contributors
├── nextNote/
│ ├── nextNoteApp.swift @main; scene + env object wiring
│ ├── Models/ data types + SwiftData @Models
│ ├── Services/ business logic
│ │ ├── AI/ LLMProvider + MLX / remote / Gemini impls
│ │ ├── Audio/ AmbientPlayer + legacy MediaLibrary
│ │ ├── Chat/ per-note chat sessions
│ │ ├── Dashboard/ pinned notes + AI rollup view service
│ │ ├── Digest/ daily digest rollups
│ │ ├── Download/ yt-dlp locator + downloader + search
│ │ ├── EPUB/ parser + importer + book-library scanner
│ │ ├── Media/ MediaCatalog (music + video scan for sidebar)
│ │ ├── Security/ Keychain
│ │ └── Vault/ LibraryRoots + VaultStore + NoteIO
│ ├── Views/ SwiftUI — grouped by feature
│ ├── Utilities/ menu commands
│ └── Resources/ Info.plist, Assets.xcassets
└── build.nosync/ generated
All pulled via SwiftPM (see project.yml):
mlx-swift-lm— MLXLLM + MLXVLMswift-tokenizers-mlxswift-hf-api-mlxZIPFoundation— EPUB unzipSwiftSoup— OPF / NCX / nav parsing
Apple platform frameworks only beyond those.
v0.1. Features listed above are working. Test target not added yet — high-value candidates are in TUTORIAL.md.
PolyForm Noncommercial License 1.0.0 — source-available, free for personal / research / nonprofit / educational use. Commercial use is not granted. For a commercial license, contact NextAgentBC via GitHub. See also NOTICE.
Note: PolyForm Noncommercial is a source-available license, not an OSI-approved open-source license — the OSI definition prohibits field-of-use restrictions, and "noncommercial only" is one. The source is public, forkable, and modifiable for any noncommercial purpose.