apps.header.allAppsCount
commonplace-multi
apps.detail.types.app from Cansasdon's Repository
apps.detail.sections.overview
Readme
View on GitHubcommonplace-multi
A multi-user fork of Commonplace — the self-hosted Readwise alternative. Same app, now with isolated accounts for family or small teams.
- Multi-user: Admin invites users. No public signup. All data (highlights, reviews, tags, streaks, achievements, push subscriptions) partitioned by
user_id. - All the same features: Capture from KOReader/Kindle/Obsidian/Readwise, full-text search, daily review, achievements, themes, BookOrbit sync, Readeck sync, Readest sync, push notifications, Obsidian sync plugin.
- Self-hosted: Single Docker container, SQLite database, no external services.
Upgrading from Single-User Commonplace
If you already run the original Commonplace (single-user), switching to this fork is a one-time migration:
- Backup your data — copy your volume's
data/directory. - Swap the image — deploy
ghcr.io/cansas/commonplace-multi:latestwith the same mounted volume. - Restart — migration runs automatically on startup:
- Adds
user_idto all tables, sets existing data touser_id=1 - Migrates per-user settings (theme, review count, hardcover key, push prefs) from
.settings.jsonto the DB - Rebuilds FTS5 search index
- Adds
- Your existing admin account (user_id=1) keeps all data. Start inviting users at
/admin/users.
No manual SQL, no config changes, no downtime beyond the container restart.
Quick Start (Fresh Install)
docker run -d --name commonplace-multi -p 8765:8765 \
-v ./data:/app/data \
ghcr.io/cansas/commonplace-multi:latest
Open http://localhost:8765 and the setup wizard creates the admin account. Then visit /admin/users to invite others.
Documentation
| Document | Description |
|---|---|
| API.md | Full API reference — all endpoints with auth, params, and examples |
| ENV.md | Environment variables reference |
| INSTALL.md | Server, KOReader plugin, and Obsidian plugin setup |
| CONTRIBUTING.md | Bug reports, PR workflow, AI code policy |
Features
- Multi-user — invite-only registration, admin user management, data fully isolated
- Highlights — add, edit, delete, search, filter by source/favorites/book
- Books view — browse by book with covers (HardCover.app + Open Library), rename/merge/delete
- Book metadata — set HardCover ID or ISBN for reliable cover lookups
- Tag management — create, rename, merge, delete tags with optional color coding
- Import — Readwise Obsidian .md, KOReader JSON, Kindle My Clippings, Readwise-compatible API
- Export — batch export all highlights as JSON
- Backup & Restore — ZIP download with database + covers, restore from ZIP
- Share cards — PNG/SVG share cards per highlight with OpenGraph meta tags
- Themes — Modern, Reader, Dark, plus custom themes — drop a
.cssfile intodata/themes/or upload via Settings - Streaks — track daily review streaks with current and best counters
- BookOrbit Sync — auto-import annotations from BookOrbit (kobo, koreader, web) with SHA256 fingerprint dedup
- Readeck Sync — pull annotations from a self-hosted Readeck instance (read-it-later) with SHA256 fingerprint dedup and per-bookmark source tracking. Configure in Settings → Readeck tab: server URL, API token (Readeck profile → API token), and an auto-sync toggle. Manual Sync Now runs on demand; token and connection failures surface as errors instead of a silent 0-import report
- Readest Sync — push highlights from the Readest reader (desktop, web, mobile) via its built-in Readwise integration. Configure in Readest → Settings → Integrations → Readwise: paste a Commonplace API token and set the base URL to
https://your-commonplace-host/api. Highlights auto-push while reading (5s debounce) plus a manual "Push All" per book - Push notifications — review reminders and streak-at-risk alerts via Web Push (VAPID)
- First-run wizard — web-based admin creation, no env vars required
License
MIT No Attribution
apps.marketingCta.appInstallTitle
apps.marketingCta.appInstallDescription
apps.detail.sections.categories
apps.detail.sections.related
apps.detail.related.exploreCategories
apps.detail.related.exploreAllapps.detail.sections.links
apps.detail.sections.details
ghcr.io/cansas/commonplace-multi:latestapps.detail.sections.runtime
- apps.detail.details.webui
http://[IP]:[PORT:8765]/- apps.detail.details.network
bridge- apps.detail.details.shell
sh- apps.detail.details.privileged
- false
apps.detail.sections.configuration
Main web interface port
- apps.detail.config.target
- 8765
- apps.detail.config.default
- 8765
Persistent storage for SQLite database, covers, backups, and settings. Maps to /app/data in the container.
- apps.detail.config.target
- /app/data
- apps.detail.config.default
- /mnt/user/appdata/commonplace-multi/data
Secret key for signing session cookies and CSRF tokens. If left empty, a random one is generated and persisted in data/.session_secret on first start. Set explicitly for production to avoid invalidating sessions on restart.
Timezone for the container (used by the email digest scheduler and review timestamps).
- apps.detail.config.default
- America/Chicago
Optional — admin username for auto-creating the initial account on first start. If not set, the setup wizard prompts for credentials in the browser on first launch.
Optional — admin password. Must be set together with COMMONPLACE_USERNAME if that is set. Ignored if USERNAME is empty.
Set to 'true' if you access Commonplace over HTTPS with a valid certificate. Ensures the session cookie is only sent over encrypted connections. Keep 'false' for LAN-only HTTP access.
- apps.detail.config.default
- false
Optional — API key for Hardcover.app for better book cover art. Can also be set later from the Settings page in the web UI. When empty, falls back to Open Library covers (no key needed).