A library of your own.
Bookplate is a reading tracker you run on your own server. Log every book you read, write notes with images, keep the words you learn, and see your reading years add up. Export it all as plain files whenever you like.











Everything on one shelf.
Search it. Crop it. Shelve it.
Search the Open Library catalogue and pick a result. The title, author and page count fill in, and the cover is fetched and opened in a cropper set to book proportions.
- Upload a cover, or paste one from the clipboard with ⌘V
- Covers are compressed in the browser to about 40–80 KB
- Books without a photo get a generated cloth cover in one of twelve colours
- Track the source, status, rating, finish date, and whether you own a copy
A page for every book.
Every book has its own notes page with a Notion-style editor. Markdown renders as you type: ## becomes a heading, **bold** becomes bold, and > starts a quote. Paste an image and it appears inline.
- Notes are stored as Markdown and export as plain .md files
- Large pasted images are downscaled before they are stored
- Images you remove from a note are cleaned up automatically
- Turn on “Show notes” to put a ribbon on every book that has notes

Write anything. Markdown shortcuts work, and you can paste images.
See your reading add up.
Totals for books, pages and ratings, plus charts for books per year, genres, ratings and sources. Click any chart to see the books behind it, with the highest rated first. Any book in the list opens its details.
Keep the words you read.
Type a word you came across. Bookplate looks it up on Wiktionary and shows every sense with its part of speech and an example. Keep the one you meant, or write your own definition if the dictionary has nothing.
- Tag each word with the book it came from
- Each book’s notes page lists its words
- Search, sort and filter the list by book
Your server. Your files.
Your library lives on your own server, behind your own login. One click exports all of it as a zip of ordinary files you can read, back up and version, and imports it into any other Bookplate. Nothing is sent anywhere unless you send it.
- library.json
- Every book, as readable JSON
- covers/*.jpg
- Cropped, compressed covers
- notes/<id>.md
- One Markdown file per book
- notes/images/
- Images pasted into your notes
- vocabulary.json
- Your words and definitions
Bookplate sends no analytics or telemetry. Catalogue, cover and dictionary lookups go through your own server, so your browser never contacts those sites directly, and none of them need an API key.
bookplate-export.zip › library.json{
"books": [
{
"title": "Sapiens",
"author": "Yuval Noah Harari",
"genre": "History",
"pages": 498,
"status": "read",
"rating": 5,
"dateRead": "2025-03-14",
"format": "bookstore",
"copy": true,
"colorIndex": 2
}
]
}On your shelf in a minute.
$ curl -fsSLO https://raw.githubusercontent.com/LeoPhh/bookplate/main/docker-compose.yml$ curl -fsSL https://raw.githubusercontent.com/LeoPhh/bookplate/main/.env.example -o .env$ docker compose up -d
You need Docker. Add two random secrets to .env (the file shows the command that makes them), start it, and open localhost:3000 to create your account. It runs on anything from a Raspberry Pi to a cloud server.
It’s built with Next.js, Postgres and hand-written CSS, with no UI framework, and licensed under Apache 2.0. Updating is one command: docker compose pull && docker compose up -d.