A modern web application for browsing, searching, and downloading books from Flibusta torrent archives. Built with Kotlin/Ktor backend and Preact frontend.
- π Browse Books: View books with covers, metadata, and descriptions
- π Advanced Search: Search by title, author, genre, and language
- β Favorites: Star books and create personal collections
- π Notes & Comments: Add private notes and public comments
- π₯ Format Conversion: Download books in FB2, EPUB, or MOBI formats
- π Google OAuth: Secure authentication with Google accounts
- π± Responsive Design: Works on desktop and mobile devices
Backend:
- Kotlin + Ktor
- Postgres database with jOOQ
- Google OAuth authentication
- RESTful API design
Frontend:
- Preact (no bundler)
- Modern CSS with CSS Grid/Flexbox
- Native ES modules
- Progressive Web App features
Infrastructure:
- Docker & Docker Compose
- Pandoc-based conversion service
- Read-Only Volume mounts for book data
- Docker and Docker Compose
- Flibusta torrent data (FB2 files and INPX metadata)
- Google OAuth credentials
-
Clone the repository
git clone https://github.com/Heapy/kotbusta.git cd kotbusta
-
Set up environment variables
cp .env.example .env
Edit
.env
and configure the following required variables:KOTBUSTA_GOOGLE_CLIENT_ID
- Your Google OAuth client IDKOTBUSTA_GOOGLE_CLIENT_SECRET
- Your Google OAuth client secretKOTBUSTA_GOOGLE_REDIRECT_URI
- OAuth redirect URI (e.g.,https://yourdomain.com/callback
)KOTBUSTA_SESSION_SIGN_KEY
- Session signing key (will be auto-generated if not provided)KOTBUSTA_SESSION_ENCRYPT_KEY
- Session encryption key (will be auto-generated if not provided)KOTBUSTA_ADMIN_EMAIL
- Your admin email addressKOTBUSTA_POSTGRES_HOST
- PostgreSQL hostKOTBUSTA_POSTGRES_PORT
- PostgreSQL portKOTBUSTA_POSTGRES_USER
- PostgreSQL usernameKOTBUSTA_POSTGRES_PASSWORD
- PostgreSQL passwordKOTBUSTA_POSTGRES_DATABASE
- PostgreSQL database nameKOTBUSTA_DB_DATA_PATH_LOCAL
- Local path for PostgreSQL data storageKOTBUSTA_BOOKS_DATA_PATH_LOCAL
- Local path to your Flibusta book archives
-
Prepare your Flibusta data
# Create directory for book data if it doesn't exist mkdir -p /path/to/flibusta/books # Your directory should contain: # - fb2-*.zip archives with books # - flibusta_fb2_local.inpx metadata file
-
Run the application
docker compose -f deploy/prod/docker-compose.yml up -d
-
Monitor the startup
# Check logs to ensure services started correctly docker compose -f deploy/prod/docker-compose.yml logs -f # Verify containers are running docker compose -f deploy/prod/docker-compose.yml ps
-
Initial setup
- Navigate to your configured URL (e.g.,
https://yourdomain.com
) - Login with Google using your admin email
- Go to the Admin panel
- Run the import process to index your book collection
- The import may take some time depending on your collection size
- Navigate to your configured URL (e.g.,
-
Verify installation
- Check that books appear in the catalog
- Test search functionality
- Try downloading a book in different formats
-
Clone the repository
git clone [email protected]:Heapy/kotbusta.git cd kotbusta
-
Set up environment
cp .env.example .env # Edit .env
-
Configure Google OAuth
- Go to Google Console
- Create a new project or select existing
- Create OAuth 2.0 credentials
- Add authorized redirect URI:
http://localhost:8080/callback
- Copy Client ID and Secret to
.env
- Add your email address as ad
-
Prepare book data
# Create directory for your Flibusta data mkdir books-data # Copy your FB2 archives and INPX files here # Structure should match: books-data/fb2-*.zip, books-data/flibusta_fb2_local.inpx
-
Start postgres container
docker-compose up -d
-
Start the application in IDEA*
- Run Kotbusta run-configuration
-
Access the application
- Open http://localhost:8080
- Click "Login with Google" to authenticate
- Go to "Admin" and run import
- Start browsing your digital library!
GET /login
- Redirects to/oauth/google
GET /oauth/google
- Redirect to Google OAuth login pageGET /callback
- Google OAuth callbackGET /logout
- Logout clearing session data
POST/DELETE /api/books/{id}/star
- Star/unstar booksGET /api/books/starred
- Get starred booksPOST /api/books/{id}/comments
- Add commentPOST /api/books/{id}/notes
- Add/update noteGET /api/books/{id}/download/{format}
- Download bookGET /api/books
- List books with paginationGET /api/books/search
- Search booksGET /api/books/{id}
- Get book detailsGET /api/books/{id}/cover
- Get book cover imageGET /api/books/{id}/comments
- Get book commentsGET /api/activity
- Get recent activity
TODO
-
Backend development
Start `Kotbusta` run-configuration in IDEA # Navigate to http://localhost:8080`
-
Frontend development
- Edit files in
src/main/resources/static/
- No build process needed, Kotbusta uses native ES modules
- Reload browser to see changes
- Edit files in
The application uses SQLite with the following main tables:
books
- Book metadata and file pathsauthors
- Author informationseries
- Book seriesusers
- User accounts (from Google OAuth)user_stars
- User's starred booksuser_comments
- Public commentsuser_notes
- Private notesdownloads
- Download history
kotbusta/
βββ src/main/kotlin/io/heapy/kotbusta/
β βββ Application.kt # Main application
β βββ ApplicationFactory.kt # All services, daos and configurations are created here
β βββ ktor/ # Ktor routes and modules
β βββ database/ # Database setup
β βββ jooq/ # jOOQ code generation
β βββ model/ # Data models
β βββ parser/ # FB2/INPX parsers
β βββ service/ # Business logic
βββ src/main/resources/
β βββ static/ # Frontend files
β βββ application.conf # Ktor Configuration
βββ .env # Application Configuration
- INP File Format - Detailed documentation about the INP/INPX file format used by Flibusta for metadata cataloging
Edit the .env
file to configure all aspects of the application.
Edit src/main/resources/application.conf
to add additional ktor modules and adjust ktor configuration.
# Follow logs in real-time
docker-compose logs -f
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the AGPL-3.0 - see the LICENSE file for details.
- Flibusta library for book archives
- Pandoc for format conversion
- Preact team for the lightweight framework
- Ktor team for the excellent Kotlin framework