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
- Comics/Mangas:
.cb7
,.cba
,.cbr
,.cbt
,.cbz
- eBooks:
.epub
,.pdf
- Audiobooks:
- Search engine with Meilisearch
- OPDS feed powered by
kiwilan/php-opds
- Read eBooks, comics/mangas 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 --build
Migrate database with seeders
docker compose exec bookshelves_app php artisan migrate:fresh --seed --force
Execute bash in the app container
docker container exec -it bookshelves_app /bin/zsh
Check logs
docker logs bookshelves_app # docker logs bookshelves_app -f for live logs
Check 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 i
Create .env
file
cp .env.example .env
Generate application key
php artisan key:generate
Create symbolic link for storage
php artisan storage:link
Migrate database with seeders
php artisan migrate:fresh --seed
Build assets
pnpm build
Now you can serve application
php artisan serve
Bookshelves 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 iscollection
depends of Laravel Scout. Bookshelves usemeilisearch
driver.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
(native
orscout
)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
.
Name
is a label for your libraryType
is a select withaudiobook
,book
andcomic_manga
values.Path
is absolute path to your librarySlug
is defined automatically from the name fieldEnabled
is a checkbox to enable or disable the libraryPath is valid
is 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.json
And add your books libraries in libraries.json
.
name
: Library name, you can use any labeltype
:LibraryTypeEnum
(audiobook
,book
,comic_manga
)path
: Absolute path to your libraryis_enabled
: Optional, to enable or disable the library
[
{
"name": "My audiobooks",
"type": "audiobook", // LibraryTypeEnum: audiobook, book, `comic_manga`
"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|--fresh
option for fresh mode (delete all books before analyze)-l|--limit
option for limit mode (limit the number of books to analyze)
php artisan bookshelves:analyze -f
To get full documentation, you can read Bookshelves documentation.
Execute scan command to get a preview of scannable books (libraries have to be created).
-v
option for verbose mode
php artisan bookshelves:scan
Create a .env.testing
file
cp .env.testing.example .env.testing
Create key for testing
php artisan key:generate --env=testing
Run tests
composer test
laravel
for a powerful frameworkfilament
for a so efficient admin panelspatie
for a lot of amazing packagestailwindcss
for a so easy to use CSS frameworkvue
for a so amazing JavaScript frameworkinertia
for a so efficient way to build modern monolithic applicationsmeilisearch
for a fast and relevant search enginekiwilan/php-ebook
for a PHP eBook parserkiwilan/php-opds
for a PHP OPDS feed generatorewilan-riviere
author of Bookshelves
The Bookshelves is open-sourced software licensed under the BSD 2-Clause License.