Every note is a plain markdown file on disk — no database, ever. Full GitHub Flavored Markdown, an installable PWA, and nothing locking your notes in.
SELF-HOSTED · OPEN SOURCE
Real database-less notes. Nothing you type here is sent anywhere — it's all running in your browser.
This is not a screenshot. It's the real UI, live — create a note, switch between them, use the full toolbar, toggle Writer/Markdown, even delete one. (This is a demo of a few core features, not the full app — full-content search, import/export, and more are only in the real thing.)
Why
Claunote keeps your notes as plain markdown files on disk — no database, no proprietary format, nothing you can't open in any other editor the moment you stop using this one.
There's no account system, no subscription, and no third-party server holding your notes. It's one container, one folder of .md files, and a full GitHub Flavored Markdown editor that works the same on your phone and your laptop.
What you get
Every note is a .md file. Move it, back it up, or read it with any other tool — nothing is locked away.
Tables, footnotes, task lists, and GitHub-style callouts — the whole spec, not a subset.
Press Enter three times and the extra empty line is really there — saved as a literal <br> line in the markdown, so GitHub renders it the same way. Most editors silently collapse anything beyond one blank line.
A small hand-written markdown converter, not a third-party library loaded from a CDN — nothing external to version-mismatch or break.
Runs in one Docker container. Your notes live on your own disk, not someone else's server.
Follows your system preference automatically. No setting to hunt for.
One click exports every note and attachment as a dated zip. Import it right back in, always yours to take.
Add it to your home screen. Use it like a native app, on desktop or mobile.
Get started
Claunote ships as a Docker image. Point it at two folders on disk — one for your notes, one for the app's own small bit of state — and it takes care of the rest.
# docker-compose.yml services: claunote: image: ghcr.io/lightmorphic/claunote:latest container_name: claunote restart: unless-stopped environment: NOTES_USERNAME: "admin" NOTES_PASSWORD: "changeMe!" volumes: - /opt/media/notes:/notes - /opt/claunote:/data ports: - "8080:8080"
sudo mkdir -p /opt/media/notes /opt/claunotedocker compose up -dhttp://your-server:8080 and write your first note