Penit is an offline-first Markdown note-taking web application built entirely in OCaml.
It uses:
- Irmin (Git backend) for versioned data storage
- WebSocket sync for real-time store synchronization
- Dream as backend server
- Brr + Js_of_ocaml for frontend UI
- Lwt for asynchronous programming
- Create Markdown notes
- Delete notes with confirmation
- Automatic store synchronization
- Git-backed history via Irmin
- Offline-first architecture
- WebSocket-based client-server sync
- Fully written in OCaml (frontend + backend)
Penit follows an offline-first model:
- Notes are stored locally in the client Irmin store
- Changes are pushed to the server
- Server synchronizes via Git backend
- Client pulls updated state
- UI re-renders
This ensures:
- Local-first UX
- Resilience to network failures
- Git-backed version history
- clone the repository
- Run
make installto install all project dependencies - Run
make startto build and start the application - Open the
dist/index.htmlfile in the browser to view the project frontend
