Glyph
Offline-first notes for macOS
Keep your Markdown files close, search them quickly, and work without a server.
Glyph is an offline-first desktop note-taking application. It combines a Tauri 2 shell with a React 19 / TypeScript / Vite 8 frontend and a Rust backend. Notes live on disk as Markdown files with per-space metadata in a .glyph/ directory; a derived SQLite search index lives in app support and rebuilds from the notes. No cloud sync. No server.

Highlights
- Markdown files first — your notes remain readable, portable files on disk.
- Local search — a derived SQLite index keeps navigation fast without sending notes anywhere.
- Focused desktop workspace — a macOS-first Tauri app with a rich editor, spaces, tasks, databases, and optional AI tools.
Prerequisites
| Dependency | Version |
|---|---|
| Node.js | ≥ 20 |
| pnpm | ≥ 10 (corepack enable && corepack prepare [email protected]) |
| Rust | stable (latest) |
| Xcode CLT | required for macOS native compilation |
| macOS | primary target — full Tauri app dev requires macOS |
Build & Run
# Install frontend dependencies
pnpm install
# Development — frontend only (Vite on :1420)
pnpm dev
# Development — full Tauri app (compiles Rust backend + launches Vite)
pnpm tauri dev
# Production build (tsc + vite build; Tauri hooks run beforeBuildCommand)
pnpm build
# Lint & format (Biome)
pnpm check # check only
pnpm format # auto-fix
# Tests (Vitest)
pnpm test # all tests
pnpm test -- src/lib/diff.test.ts # single file
pnpm test -- -t "test name" # single test by name
# Rust checks
cd src-tauri && cargo check # typecheck
cd src-tauri && cargo clippy # lint
Pre-push checklist
pnpm check && pnpm build && cd src-tauri && cargo check
Built with
-
Frontend: React 19, TipTap 3, TypeScript, Vite 8, Tailwind 4, Radix UI (via shadcn/ui), Motion 12, TanStack Table, cmdk, Zod 4, date-fns, Mermaid 11, highlight.js/lowlight, react-resizable-panels, Sonner, react-hook-form
-
Backend: Tauri 2 (
macos-private-api), Rust, rig-core 0.24, rusqlite 0.31 (bundled), notify 6, reqwest 0.12 (rustls), tokio, serde/serde_json/serde_yaml, chrono, uuid, sha2, window-vibrancy, core-text (macOS) -
Tooling: Biome, Vitest 4, Tauri CLI 2, pnpm 10
Conventions
- TypeScript strict mode. No
any— useunknown+ narrowing. - Functional React components only. State via Context, not prop drilling.
- All Tauri IPC through
invoke()fromsrc/lib/tauri.ts. - Rust: atomic writes via
io_atomic, safe paths viapaths::join_under(), SSRF checks vianet.rs. - Hard cutover migrations — no backward-compatibility shims.
- Never log secrets, keys, or sensitive user data.
- ~200 LOC per file guideline; refactor into submodules when exceeded.
Licensing
Glyph's source is available under the GNU Affero General Public License v3.0. Official release binaries include a 7-day trial with Gumroad license activation.
- Releases: GitHub Releases
- Purchase: Gumroad
Contributing
See CONTRIBUTING.md for development setup, project conventions, and pull request guidance.
Platform support
macOS only. Windows and Linux are not actively supported. See CONTRIBUTING.md.