Bookshelves is a web application to handle eBooks, comics/mangas and audiobooks. Powered by Laravel.
- bookshelves-project: Bookshelves project repository
- demo.bookshelves.ink: demo
- bookshelves-documentation.netlify.app: documentation from
bookshelves-project/bookshelves-docs
- All your books in one place, parsed by
kiwilan/php-ebook- Audiobooks:
.mp3,.m4b - Graphics (comics & manga):
.cb7,.cba,.cbr,.cbt,.cbz - eBooks:
.epub,.pdf
- Audiobooks:
- Search engine with Meilisearch
- OPDS feed powered by
kiwilan/php-opds - Read eBooks, graphics and listen audiobooks
- Admin panel made by
filament- Libraries management
- Users management
- SSR option powered by
inertia
docker compose down --remove-orphans
docker compose up -d --buildMigrate database with seeders
docker compose exec bookshelves_app php artisan migrate:fresh --seed --forceExecute bash in the app container
docker container exec -it bookshelves_app /bin/zshCheck logs
docker logs bookshelves_app # docker logs bookshelves_app -f for live logsCheck NGINX logs
docker container exec bookshelves_app tail -f /var/log/nginx/bookshelves.log- Add Docker installation option
- Add Plex-like solution
- Add tests
- find duplicate authors
- Read ebook in browser
- Read comic in browser
- Read audiobook in browser
- Authentication
Download dependencies
composer i
pnpm iCreate .env file
cp .env.example .envGenerate application key
php artisan key:generateCreate symbolic link for storage
php artisan storage:linkMigrate database with seeders
php artisan migrate:fresh --seedBuild assets
pnpm buildNow you can serve application
php artisan serveBookshelves is now available at http://localhost:8000 and you can access to the admin panel at http://localhost:8000/admin.
APP_URL: Application URLVITE_SSR_PORT: Port for SSR, default is 13714 (only used in production, if you use SSR)SCOUT_DRIVER: Search engine driver, default iscollectiondepends of Laravel Scout. Bookshelves usemeilisearchdriver.CLOCKWORK_ENABLE: Enable or disable Clockwork, default isfalse(debug tool)BOOKSHELVES_SUPER_ADMIN_EMAIL: Super admin email, used to create the first userBOOKSHELVES_SUPER_ADMIN_PASSWORD: Super admin password, used to create the first userBOOKSHELVES_ANALYZER_ENGINE: Analyzer engine, default isnative(nativeorscout)BOOKSHELVES_ANALYZER_DEBUG: Analyzer debug mode, default isfalse(print a JSON file for each book analyzed)BOOKSHELVES_IMAGE_CONVERSION: Image conversion engine, default isfalse(convert covers to different sizes)BOOKSHELVES_API_WIKIPEDIA: use Wikipedia API to get author information and photos, default istrue
You have two solutions to create libraries: create a JSON file or use the admin panel (you can add libraries even if you use JSON file).
Connect to the admin panel at http://localhost:8000/admin with the default credentials defined in .env file (BOOKSHELVES_SUPER_ADMIN_EMAIL and BOOKSHELVES_SUPER_ADMIN_PASSWORD).
Go to the admin panel at http://localhost:8000/admin, find the Libraries entry in the sidebar and click on New library.
Nameis a label for your libraryTypeis a select withaudiobook,bookandgraphicvalues.Pathis absolute path to your librarySlugis defined automatically from the name fieldEnabledis a checkbox to enable or disable the libraryPath is validis a read-only field to check if the path is valid (automatically checked when you save the library)
Create a libraries.json file from libraries-template.json.
cp libraries-template.json libraries.jsonAnd add your books libraries in libraries.json.
name: Library name, you can use any labeltype:LibraryTypeEnum(audiobook,book,graphic)path: Absolute path to your libraryis_enabled: Optional, to enable or disable the library
[
{
"name": "My audiobooks",
"type": "audiobook", // LibraryTypeEnum: audiobook, book, `graphic`
"path": "/absolute/path/to",
"is_enabled": true // optional, to enable or disable the library
}
// ...
]And when you execute the analyze command with --fresh option, Bookshelves will create database entries for each library and will scan books.
Execute analyze command to analyze books and create database entries.
-f|--freshoption for fresh mode (delete all books before analyze)-l|--limitoption for limit mode (limit the number of books to analyze)
php artisan bookshelves:analyze -fTo get full documentation, you can read Bookshelves documentation.
Execute scan command to get a preview of scannable books (libraries have to be created).
-voption for verbose mode
php artisan bookshelves:scanCreate a .env.testing file
cp .env.testing.example .env.testingCreate key for testing
php artisan key:generate --env=testingRun tests
composer testlaravelfor a powerful frameworkfilamentfor a so efficient admin panelspatiefor a lot of amazing packagestailwindcssfor a so easy to use CSS frameworkvuefor a so amazing JavaScript frameworkinertiafor a so efficient way to build modern monolithic applicationsmeilisearchfor a fast and relevant search enginekiwilan/php-ebookfor a PHP eBook parserkiwilan/php-opdsfor a PHP OPDS feed generatorewilan-riviereauthor of Bookshelves
The Bookshelves is open-sourced software licensed under the BSD 2-Clause License.
