Open source · Self-hosted · Encrypted

Capture what
you actually learn.

A personal learning journal with spaced repetition, open threads, and end-to-end encryption. Self-hosted. Yours forever.

gleaned /ɡliːnd/ v. to gather grain left in a field after harvest; to collect knowledge gradually, piece by piece.

See it in action

A journal that works
with your memory.

Five views. One habit. Write once, review at the right moment.

Journal view — write today's entries in Markdown with tags and context Journal view — dark theme
Review view — FSRS-5 spaced repetition surfaces entries before you forget Review view — dark theme
Calendar view — heatmap of all entries, browse any day Calendar view — dark theme
Threads view — track open ideas with due dates and colour labels Threads view — dark theme
Settings view — themes, fonts, language, export and security Settings view — dark theme

Write daily entries — text, Markdown, code, images, audio

What's inside

Everything you need.
Nothing you don't.

01

Spaced repetition

FSRS-5 — the state-of-the-art spaced repetition algorithm — decides when to surface an entry, right before you'd forget it. No flashcard decks, no manual scheduling. Write once, review at the exact right moment.

02

Open threads

Ideas that need more thought get a thread — tracked with due dates, color labels, and overdue alerts. Nothing falls through the cracks.

03

End-to-end encryption

Your passphrase derives the key via PBKDF2 at 600k rounds. Content is encrypted with AES-256-GCM before it ever touches the sync server. The key lives only in memory — never stored, never sent.

04

Truly self-hosted

One Docker command. One SQLite file. One account — yours. No shared infrastructure, no other users on the same instance. Your journal lives where you put it, and a single VACUUM INTO backs it up.

Self-hosted

Your data.
Your server.
One command.

No SaaS subscription. No shared infrastructure. A single Docker container with a named SQLite volume. Traefik handles TLS automatically.

Full setup guide →
Terminal
git clone https://github.com/gleaned-app/gleaned
sh docker/setup.sh
# generates .env with random secrets
docker compose -f docker/compose.traefik.yml up -d
# TLS via Let's Encrypt
  • Single container, no external dependencies
  • Data in a named SQLite volume — survives restarts
  • One-time setup token prevents unauthorized first-run
  • Backup is a single VACUUM INTO backup.db

The idea

Most notes are
just graveyards.

You write something down, file it away, and never see it again. gleaned starts from the opposite premise: every entry you write is automatically scheduled to come back — exactly when you're about to forget it. No flashcard decks. No manual tagging for review. Just write, and the algorithm handles the rest.

It's also end-to-end encrypted by default. Your passphrase derives the key in the browser; the server only ever stores ciphertext. Self-hosting means no SaaS subscription and no shared infrastructure — your journal lives where you put it, and a single SQLite file is everything.