General
BookShelf is a self-hosted web application for managing your personal book library. It helps you organize books, track reading progress, and read ebooks—all from your own server.
Benefits of self-hosting:
- Privacy - Your data stays on your server
- Control - Customize features and appearance
- No ads - Clean interface without distractions
- Ebook reader - Read books directly in app
- OPDS support - Connect your e-reader devices
- Offline access - Works on your local network
You can still import from Goodreads and keep both!
Yes! BookShelf is open source and released under the MIT License. You only pay for hosting (your own server or cloud provider).
V2 is a complete rewrite with:
- Modern tech stack (SvelteKit, TypeScript)
- Better performance and UX
- Smart Collections (Magic Shelves)
- Enhanced ebook reader
- Improved statistics and heatmap
- Cleaner, more intuitive interface
V1 databases can be migrated to V2.
Installation & Setup
Minimal:
- 512MB RAM
- 1GB storage (plus space for ebooks)
- Docker support (recommended)
Recommended:
- 1GB+ RAM
- 10GB+ storage
- Linux server (Raspberry Pi 4 works great!)
Yes! BookShelf runs well on Raspberry Pi 3B+ or newer. Use the Docker image for easy setup.
No, you can access via:
http://localhost:3000(local machine)http://192.168.x.x:3000(LAN IP)- Port forward for internet access (not recommended without HTTPS)
A domain makes setup cleaner but isn't required.
Use a reverse proxy like:
- Nginx Proxy Manager (easiest, GUI-based)
- Traefik (Docker-native)
- Caddy (auto HTTPS with Let's Encrypt)
See Getting Started for examples.
Yes, options include:
- Port forwarding (with HTTPS!)
- VPN (Tailscale, WireGuard) - more secure
- Cloudflare Tunnel - no port forwarding needed
- Cloud hosting (DigitalOcean, AWS, etc.)
Using BookShelf
Multiple ways:
- Manual entry - Fill out form
- ISBN lookup - Automatically fetch metadata
- CSV import - From Goodreads or spreadsheet
- Audible import - From library HTML export
- BookDrop - Drop ebook files in folder for auto-import
Yes! Export your Goodreads library as CSV, then use Import feature. Ratings, shelves (as tags), and read dates are preserved.
- EPUB - Reflowable ebooks (best supported)
- PDF - Documents and fixed-layout books
- CBZ/CBR - Comic books and manga
Yes, via OPDS catalog! Most e-reader apps (Calibre, KOReader, Moon+ Reader, FBReader) support OPDS and can connect to your BookShelf.
Smart Collections (Magic Shelves) are dynamic - they auto-update based on rules you set.
Example: "5-Star Sci-Fi"
- Genre = Science Fiction
- Rating = 5 stars
- Sort by: Date Read
Any book matching these conditions appears automatically.
Yes! BookShelf supports multiple users with separate libraries or a shared library. Admin users manage the system while members manage their books.
Yes, once loaded in browser. Reading ebooks works offline. Adding/editing books requires the server to be running.
Troubleshooting
Reset via command line:
# Docker
docker exec -it bookshelf npm run reset-password admin
# Manual installation
npm run reset-password admin
Enter new password when prompted.
Check:
- Import completed successfully (check notifications)
- No filters applied (clear all filters)
- Try different sort order
- Check Admin → Data Cleanup for issues
Possible causes:
- Network issue (check internet connection)
- API rate limits (wait and retry)
- Provider is down (try different provider)
- Invalid ISBN (verify ISBN is correct)
Solution: Admin → Settings → Metadata Providers - enable multiple providers. Try manual cover upload as fallback.
Check:
- File format is supported (EPUB, PDF, CBZ)
- File isn't corrupted (try opening in another app)
- File uploaded completely (check file size)
- Browser JavaScript is enabled
Try: Re-upload the file, try different browser, check browser console for errors.
Issue: Can't write files, database locked, etc.
Solution: Set PUID/PGID to match your user:
id -u # Your UID
id -g # Your GID
Update .env file:
PUID=1000
PGID=1000
Restart: docker compose restart
Migrations should run automatically. If not:
# Docker
docker exec -it bookshelf npm run db:migrate
# Manual
npm run db:migrate
If that fails:
- Restore from backup
- Check logs for specific error
- Report issue on GitHub
Features & Functionality
Yes! Set format to "Audiobook" and optionally add narrator. Reading time tracking works for time spent in app.
Yes! Multiple formats:
- CSV - For spreadsheets or other apps
- JSON - Complete backup with all metadata
- Database file - SQLite file for direct access
Based on:
- Shared authors
- Same series
- Common genres
- Matching tags
AI recommendations (optional, requires OpenAI API key) provide more advanced suggestions.
Yes! Enable re-read counting in settings. Each completion is logged separately in reading history.
Not yet, but the web interface is fully responsive and works great on mobile browsers. Add to home screen for app-like experience!
Native iOS/Android apps are on the roadmap. OPDS support means your existing e-reader apps work now.
Data & Privacy
Everything is stored locally on your server:
- Database: SQLite file in
/data - Covers:
/app/static/covers - Ebooks:
/app/static/ebooks - Logs:
/logs
Nothing is sent to external servers except:
- Metadata lookups (when you explicitly fetch)
- AI recommendations (if you enable OpenAI)
Only if you:
- Enable "Public Library" in settings
- Share OPDS catalog publicly
- Enable public widgets
By default, login is required.
Regularly:
- Export → JSON backup (includes metadata)
- Copy database file
- Backup cover and ebook folders
Automated:
- Set up cron job to backup database
- Use Docker volume backups
- Sync to cloud storage (Dropbox, Google Drive)
See Import & Export for scripts.
Yes! BookShelf is portable:
- Export JSON backup
- Copy ebook and cover folders
- Install BookShelf on new server
- Import JSON backup
- Copy ebook and cover folders to new location
Development & Contributing
Yes! BookShelf is open source. Contributions welcome:
- Report bugs
- Suggest features
- Submit pull requests
- Improve documentation
- Translate to other languages
See CONTRIBUTING.md in the repository.
Open an issue on GitHub with:
- BookShelf version
- Environment (Docker, manual, OS)
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Documentation: You're reading it!
- GitHub Issues: For bugs and feature requests
- GitHub Discussions: For questions and community help
Yes, MIT License allows commercial use. Attribution appreciated but not required.