A full Markdown workspace whose database is a GitHub repository you already own.
Linked notes, offline search, a visual diagram studio and real version history,
with nothing stored on our servers and nothing to be locked out of.
Open ForkLeaf · Try it without an account · Documentation · Discussions · Wiki · Changelog
Most note apps ask you to trust them with your writing. ForkLeaf doesn't hold your
notes at all. Every note is a plain .md file in a GitHub repository you own.
| 🗂 Storage | Your GitHub repository. Nothing is stored on our servers. |
| 🕰 History | Ordinary git commits. git log your notes, blame a paragraph. |
| Everything is written to IndexedDB first, then pushed. | |
| 📤 Export | PDF, HTML, Word, Markdown, plain text and JSON, all in the browser. |
| 🌐 Publishing | Public pages, books and digital gardens served by GitHub Pages. |
| 🔓 Lock-in | None. Clone the repository and every note is still there. |
Free, all of it, with no tiers. The expensive part of a notes app is storage, and ForkLeaf has none.
And much more:
- 📄 Read PDFs beside your notes. Quote a passage and the citation records the sentence, not the page number.
- 🔄 Local-first sync. Rapid edits coalesce into one clean commit. Offline changes queue up, and conflicts are shown, never silently merged.
- 🕵️ History and review. Every version of every note, blame for prose, a timeline replay of how your notebook grew, and spaced reading.
- 🌿 Branches and pull requests. Write on any branch, or propose changes to a repository you can't push to.
- 🌍 Publish a note, a book or a digital garden to GitHub Pages, with backlinks and a link map.
- 🧩 Browser extension. Save pages, selections and highlights from anywhere on the web to your inbox.
- 🤖 AI assistants. A built-in MCP server lets Claude and other assistants search, read and write your notes as ordinary commits.
- 🎨 Themes, keyboard shortcuts for everything, and installable as an app on desktop.
See the full list on the features page or in features.md.
- Go to www.forkleaf.in and click Continue with GitHub.
- Pick an existing repository or let ForkLeaf create a private one for you.
- Start writing. Every change is saved to your repository as a commit.
You can also try it without an account: notes stay in your browser until you connect GitHub.
Requirements: Node.js 20.9+ and pnpm 9+.
git clone https://github.com/praneeth132006/ForkLeaf.git
cd ForkLeaf
pnpm install
pnpm devOpen http://localhost:3000/editor. With no configuration, ForkLeaf runs in local mode: fully functional, with notes stored in your browser. This is also how the test suite and CI exercise the app.
Connect GitHub while developing
-
Go to GitHub → Settings → Developer settings → OAuth Apps → New OAuth App and set:
- Homepage URL:
http://localhost:3000 - Authorization callback URL:
http://localhost:3000/api/auth/callback
- Homepage URL:
-
Copy the example environment file and fill in your app's values:
cp .env.example apps/web/.env.local
GITHUB_OAUTH_CLIENT_ID=your_client_id GITHUB_OAUTH_CLIENT_SECRET=your_client_secret SESSION_SECRET=generate_with_openssl_rand_base64_32 NEXT_PUBLIC_APP_URL=http://localhost:3000
-
Generate the session secret with
openssl rand -base64 32, then restartpnpm dev.
ForkLeaf requests the repo scope because it writes to private repositories;
public_repo is offered on the sign-in page for anyone keeping notes in public
repositories only.
flowchart LR
You([You type]) --> Editor
Editor --> Store[(IndexedDB)]
Store --> Queue[Change queue]
Queue --> API[Next.js API route]
API --> GH[(Your GitHub repo)]
subgraph Browser
Editor
Store
Queue
end
Your GitHub token lives only on the server, encrypted into an httpOnly cookie. The
browser talks to /api/gh/*, never to GitHub directly, so no script on the page
can read your token. More in docs/architecture.md.
This is a pnpm + Turborepo monorepo.
| Package | Responsibility |
|---|---|
apps/web |
Next.js app: auth, API routes, publishing, the editor shell and docs |
apps/extension |
The "Save to ForkLeaf" browser extension |
@forkleaf/editor |
React editing surfaces: rich text, source, split and the diagram studio |
@forkleaf/store |
IndexedDB storage, change queue, sync engine, conflicts, search index |
@forkleaf/github-client |
GitHub REST client: trees, files, atomic multi-file commits |
@forkleaf/markdown-engine |
Frontmatter, parsing, sanitised rendering, wikilinks |
@forkleaf/diagrams |
Mermaid rendering, templates, autocomplete, visual-builder graph model |
@forkleaf/exporter |
Client-side PDF, HTML, DOCX, Markdown and ZIP export |
@forkleaf/pdf |
PDF text extraction, in-document search, durable citations |
@forkleaf/mcp |
MCP server for AI assistants |
@forkleaf/types |
Shared domain model |
pnpm dev # start the web app
pnpm test # run the test suite
pnpm typecheck # typecheck every package
pnpm lint # lint
pnpm build # production build
pnpm check # everything above, in order (run this before a pull request)- 💬 Discussions: questions, ideas and showing what you've built.
- 🐛 Issues: bug reports and feature requests.
- 📚 Wiki: guides, FAQ and recipes from the community.
- ✉️ Email: support@forkleaf.in for anything private. Replies sometimes land in spam, so check there if you haven't heard back.
Contributions of every size are welcome, from a typo fix to a new feature. Read CONTRIBUTING.md for setup, conventions and good first issues, and please follow the Code of Conduct.
Found a security issue? Please don't open a public issue. See SECURITY.md.
If ForkLeaf is useful to you, a ⭐ on the repository helps other people find it.
Apache License 2.0 © ForkLeaf contributors.



