A modern, full-featured personal library management system built entirely in Rust using Slint for the user interface. Designed for small-scale use (friends and family) with a focus on simplicity, data integrity, and flexible deployment options.
- π Title Management - Full CRUD operations with ISBN lookup via Google Books API
- π Volume Management - Track multiple physical copies per title with unique barcodes
- βοΈ Author Management - Complete biographical information and title associations
- π’ Publisher Management - Company details and catalogs
- π Genre Management - Categorize your collection
- π Series Management - Organize titles into series (e.g., Asterix, Harry Potter)
- π Location Management - Hierarchical storage organization (House > Room > Shelf)
- π₯ Borrower Management - Track who you lend books to
- πͺ Borrower Groups - Organize borrowers with custom loan policies
- π Loan Management - Barcode-based lending with automatic due dates
- π Statistics Dashboard - Visual analytics for your library:
- Library overview (titles, volumes, authors, genres, active/overdue loans)
- Volumes per genre with bar charts
- Volumes per location
- Loan status breakdown
- π Dewey Decimal Classification - Manual code entry and categorization
- π Multi-language Support - Internationalization infrastructure ready
- Title/Volume Separation - Titles represent abstract book metadata, volumes are physical copies
- Barcode System - Code 128 format for volume tracking (VOL-XXXXXX)
- Hierarchical Locations - Organize storage with parent-child relationships
- Trust-Based Lending - Simple loan management without complex restrictions
- Cross-Platform UI - Native desktop now, WASM for web deployment later
- Slint 1.14.1 - Declarative UI framework for native and web
- Rust - Type-safe, memory-safe systems programming language
- Reqwest - HTTP client for API communication
- WASM Optimization - Configured for minimal binary size (~55MB -> optimized)
- Actix-web 4.11.0 - High-performance web framework
- Tokio 1.47.1 - Async runtime
- SQLx - Compile-time verified SQL queries
- MariaDB - Production-grade relational database
- Native-first - Develop as desktop app for faster iteration
- WASM-ready - Same codebase will compile to WebAssembly for browser deployment
- Client-Server - REST API backend with native/web frontend options
-
Rust (latest stable) - Install from rustup.rs
-
MariaDB/MySQL - Installation guide
-
SQLx CLI - For database migrations:
cargo install sqlx-cli --no-default-features --features mysql
You can run rbibli using Docker. Official images are available on Docker Hub: https://hub.docker.com/r/gcorbaz/rbibli
Example docker-compose.yml:
services:
rbibli:
image: gcorbaz/rbibli:latest
ports:
- "8080:8080"
environment:
# Database Connection
# Note: Use APP__ prefix (double underscore) for configuration
- APP__DATABASE__URL=mysql://user:password@db:3306/rbibli
# Optional: Individual fields can also be used
# - APP__DATABASE__HOST=db
# - APP__DATABASE__USERNAME=user
# - APP__DATABASE__PASSWORD=passwordConfiguration: The application is configured entirely via environment variables.
-
Clone the repository
git clone https://github.com/yourusername/rbibli.git cd rbibli -
Set up the database
a. Configuration Create a
.envfile in the project root:DATABASE_URL=mysql://rbibli:your_password@127.0.0.1:3306/rbibli HOST=127.0.0.1 PORT=8000
-
Run database migrations
cd backend sqlx database create sqlx migrate run -
Start the application
Option A: Docker (Recommended)
docker compose up --build
The application will be available at
http://localhost:8080.Option B: Manual (Development) Start the backend:
cd backend cargo run --releaseStart the frontend (in a new terminal):
cd frontend trunk serve --releaseThe frontend will be available at
http://localhost:8080. Note:trunk serveis configured to proxy API requests to the backend athttp://127.0.0.1:8000.
-
Manage Your Collection
- Add titles with ISBN lookup for automatic metadata
- Create multiple volumes (physical copies) per title
- Organize volumes in hierarchical storage locations
-
Track Loans
- Scan barcodes to check out books
- Automatic due date calculation based on borrower groups
- Visual indicators for overdue items
-
View Statistics
- See which genres dominate your collection
- Track where volumes are located
- Monitor active and overdue loans
- Titles - Browse and manage your book collection
- Locations - Organize physical storage spaces
- Authors - Manage author information
- Publishers - Track publishing companies
- Genres - Categorize your books
- Series - Organize titles into series collections
- Loans - Check out, return, and manage loans
- Statistics - View library analytics
- About - Application information
rbibli/
βββ frontend/ # Slint UI application
β βββ src/ # Rust source code
β β βββ main.rs # Entry point
β β βββ models.rs # Data structures
β β βββ api_client.rs # HTTP client
β βββ ui/ # Slint UI files
β βββ app-window.slint
β βββ pages/ # Page components
β βββ side_bar.slint
βββ backend/ # REST API server
β βββ src/
β β βββ main.rs # Server entry point
β β βββ handlers/ # API endpoints
β β βββ models/ # Database models
β βββ migrations/ # SQLx database migrations
βββ documentation/ # Detailed documentation
βββ requirements.md
βββ architecture.md
βββ api.md
βββ ...
Comprehensive documentation is available in the documentation/ folder:
- Requirements - Complete functional specifications
- Architecture - Technical design and data models
- API Documentation - REST API endpoints
- Development Setup - Detailed setup instructions
- Planning - Development roadmap
Current Phase: Late Phase 3 (88% Complete)
- Database integration with 15 migrations
- Full CRUD for titles, authors, publishers, genres, series, locations
- Volume management with barcode support
- Complete loan management system
- Statistics dashboard with visualizations
- ISBN lookup integration
- Dewey Decimal Classification (Manual input)
- Series management with title associations
- Cover image upload API
- Title-Author relationship management
- WASM compilation support (Async UI refactoring complete)
- Barcode generation (Code 128)
- Import/export functionality (CSV, JSON)
- Duplicate detection algorithms
- Cover image upload UI
- Progressive Web App (PWA) features
The system makes a crucial distinction:
- Title - Abstract book metadata (ISBN, authors, genre, summary)
- Volume - Physical copy with unique barcode, condition, location
This allows:
- Wishlist functionality (titles with 0 volumes)
- Multiple copies tracking
- Individual volume notes and locations
- Volume Barcodes -
VOL-000001(Code 128) for physical copies - ISBN Barcodes - Standard EAN-13 for title identification
- Title-based requests, volume-specific fulfillment
- Automatic due date calculation based on title type
- Simple, trust-based system (no fines or suspensions)
This is currently a personal project. Feel free to fork and adapt for your own use!
Licensed under the MIT License - see LICENSE for details.
- Slint - Cross-platform UI framework
- Actix-web - Web framework
- SQLx - SQL toolkit
- Google Books API - ISBN metadata lookup
For questions or suggestions, please open an issue on GitHub.
Built with β€οΈ using Rust and Slint