Because your notes should be files, not someone else's database.
- Three-column layout borrowed from Apple Notes: folders → notes → content
- Every note is a plain
.mdfile inside iCloud Drive, so it syncs across your Macs for free - No account, no server, no subscription — completely free, no sign-up
- A deliberately small, warm UI — one carefully made theme instead of twenty mediocre ones
| Area | What you get |
|---|---|
| Layout | Folder column, note column, editor — native macOS chrome |
| Editing | CodeMirror 6, Markdown syntax highlighting, live preview (⌘E) |
| Storage | Plain .md files; iCloud Drive when available, otherwise ~/Documents |
| Sync | macOS iCloud Drive, no extra service |
| Safety | Atomic writes, .trash soft delete, iCloud conflict detection |
| Interface | Chinese / English, light and dark themes |
| Updates | Manual check in Settings, plus one silent check per day |
- macOS 12 or later (Apple Silicon or Intel)
- iCloud Drive is optional — without it the library lives in
~/Documents/MiaomiaoNotes
Download the latest build from miao.wordtk.com, open the dmg and drag the app into Applications.
The build is ad-hoc signed, not notarised, so the first launch needs a right click → Open. After that it starts normally.
npm install
npm run dev # Vite + Electron with hot reload
npm run start # build once, then launch Electron
npm run dist # package macOS dmg for arm64 and x64~/Library/Mobile Documents/com~apple~CloudDocs/MiaomiaoNotes/ # iCloud available
~/Documents/MiaomiaoNotes/ # fallback
The path is resolved once on first launch and stored in Settings, so signing into iCloud later never moves your library. You can change it at any time under Settings → Storage, which switches the pointer without moving or deleting files.
iCloud sync is eventually consistent. If the same note is edited on two Macs
before syncing, iCloud creates a copy like 笔记 2.md. Miaomiao Notes:
- detects those copies before and after each write
- shows a warning banner in the editor
- never merges automatically — silent merging loses data more often than it saves it
- The app sends one anonymous launch signal (a random device id) and nothing else
- No IP, no user agent, no hardware details are stored
- The toggle lives in Settings → Behaviour → Anonymous usage
- The website has no analytics, no ads, no cookies and no third-party requests
electron/ Main process: window, vault paths, file IO, native menu, IPC
src/ Renderer: three-column UI, CodeMirror editor, Markdown preview
src/styles/ Design tokens and theme (a new theme is one [data-theme] block)
build/ App icon sources (SVG + generated icns)
site/ Official site: Cloudflare Worker plus static assets
The renderer never touches the filesystem directly — everything goes through a
narrow contextBridge surface with contextIsolation and sandbox enabled.
Dual-licensed:
- Open source — AGPL-3.0-only. Free to use, modify and self-host. If you distribute a modified version, or expose it as a network service, the AGPL requires you to publish the corresponding source as well.
- Commercial — if AGPL does not fit your product (for example, you want to ship a closed-source derivative), a commercial license is available. Contact miao@wordtk.com.
The name "喵喵笔记 / Miaomiao Notes" and the cat icon are not covered by the open-source grant.
