Open source version of Good Notes
No AI needed
not yet reviewed by publik. It is live now; the founder has not reviewed this version yet.
Every step written out. No terminal experience needed. Pick your setup.
Free, open-source handwritten notes for iPad, Mac & Windows.
Pressure-sensitive ink · text boxes · shape snap · lasso · images · PDF import & annotation Private by design — your notes never leave your device.
OpenNotes is an installable Progressive Web App (PWA) that brings the paper-notebook experience to every screen you own — one codebase, three platforms. Open it in Safari on your iPad, install it from the browser on your Mac or Windows PC, and write with a stylus, finger, trackpad or mouse.
There is no account, no cloud and no tracking. Notebooks are stored locally in your browser's IndexedDB and render entirely on-device, so the app keeps working at 30,000 feet with the Wi-Fi off.
Ctrl/⌘ + wheel zoom⌘/Ctrl + Z / ⇧Z)P pen · H highlighter · E eraser · S stroke eraser · R shape · T text · V lasso · I image · L laser · ←/→ pages · Delete selectiongit clone https://github.com/<your-org>/opennotes.git
cd opennotes
bun install # or: npm install / pnpm install
bun run dev # or: npm run dev
Open http://localhost:3000. That's it — no database server, no environment variables, no API keys.
| Layer | Choice | Why |
|---|---|---|
| Framework | Next.js (App Router) + TypeScript | One deployable for every platform via PWA |
| Ink engine | Custom canvas engine on perfect-freehand | Pressure-shaped variable-width outlines, tiny and fast |
| State | Zustand | Minimal global state without boilerplate |
| Persistence | IndexedDB (no ORM, no server) | Data stays on the device, works offline |
| UI | Tailwind CSS + shadcn/ui + lucide-react | Warm, paper-inspired interface |
| PDF export | jspdf | Client-side, zero backend |
| PDF import | pdf.js (pdfjs-dist) | Local page rasterization, lazily loaded |
src/
├── app/ # App Router: single-page shell + metadata
├── components/opennotes/
│ ├── ink-engine.ts # Canvas input + rendering engine
│ ├── editor.tsx # Notebook editor (pages, autosave, export, text overlay)
│ ├── toolbar.tsx # Floating tool rail
│ ├── library.tsx # Notebook library grid + PDF import
│ └── logo.tsx # Brand + notebook covers
└── lib/opennotes/
├── types.ts # Data model (strokes, text, images, pages, notebooks)
├── ink.ts # Stroke geometry, hit-testing, erasing, shape recognition
├── render.ts # Shared page renderer (canvas, exports, thumbnails)
├── pdf-import.ts # pdf.js pipeline → annotatable page backgrounds
├── paper.ts # Paper template painter
├── db.ts # IndexedDB wrapper
├── store.ts # Zustand store + welcome seed
└── export.ts # PNG / PDF export pipelines
Contributions are very welcome — handwriting OCR, cloud sync adapters, audio notes… start with CONTRIBUTING.md and pick something from the roadmap.
bun run lint # ESLint
bun run build # production build check
See ROADMAP.md for the full plan — highlights:
MIT — free to use, study, fork and ship.