Librius โ A fast, minimalist CLI to manage your personal book collection, built in Rust.
๐งพ Overview
Librius is a cross-platform command-line tool written in Rust that helps you manage your personal library.
It uses a SQLite database to store your books and a simple YAML configuration file
(librius.conf) for flexible setup.
This project aims to provide a clean, modular architecture with future extensions such as search, add/remove commands, and import/export support.
โจ New in v0.4.0
๐ Edit command
- New command
edit book:- Allows editing existing records by ID or ISBN.
- Supports all editable fields:
title,author,editor,year,language,pages,
genre,summary,room,shelf,row,position. - Automatically converts language codes (e.g.,
en โ English) vialang_code_to_name(). - Dynamically generates CLI arguments from a single
EDITABLE_FIELDSlist. - Field updates now show old and new values:
โ Field โyearโ updated successfully (2018 โ 2020). โ Field โlanguageโ updated successfully (Italian โ English). - Final summary messages are plural-aware and localized:
- English โ
โ Book 9788820382698 successfully updated (2 fields modified). - Italian โ
โ Libro 9788820382698 aggiornato correttamente (2 campi modificati).
- English โ
๐ Internationalized CLI
- All commands and help messages are fully localized (
en/it). - Ordered and grouped help output using
display_order()andnext_help_heading(). - Dynamic translations for fields, subcommands, and error messages.
๐ Improved structure
- Modular command layout (
add,edit,list,import,export,backup,config). - Centralized field definitions in
fields.rsfor consistent behavior. - Cleaner
cli.rswith display order and grouped help sections.
๐ฆ Installation
๐ง AUR (Arch Linux)
# or
๐บ Homebrew (macOS/Linux)
๐ฆ Crates.io (Rust)
โ๏ธ Features
| Feature | Command | Description |
|---|---|---|
| List | librius list |
Display all books stored in the local database, in full or compact view |
| Config management | librius config |
Manage YAML configuration via --print, --init, --edit, --editor |
| Backup | librius backup |
Create plain or compressed database backups (.sqlite, .zip, .tar.gz) |
| Export | librius export |
Export data in CSV, JSON, or XLSX format |
| Import | librius import |
Import data from CSV or JSON files (duplicate-safe via ISBN) |
| Database migrations | (automatic) | Automatic schema upgrades and integrity checks at startup |
| Logging system | (internal) | Records all operations and migrations in an internal log table |
| Multilanguage (i18n) | librius --lang <code> |
Fully localized CLI (commands, help, messages); --lang flag and config key |
| Add book | librius add book --isbn <ISBN> |
Add new books using ISBN lookup via Google Books API |
| Edit book | librius edit book <ID/ISBN> |
Edit existing records by ID or ISBN; dynamic field generation, language conversion, and plural-aware messages |
| Dynamic help system | librius help <command> |
Ordered and grouped help output using display_order() and next_help_heading() |
๐ป Usage
๐งฑ Example output
# โ Add a book automatically by ISBN
๐ Multilanguage support (i18n)
Librius now supports a multilingual interface.
| Source | Description |
|---|---|
| ๐ฌ๐ง en.json | Default English messages |
| ๐ฎ๐น it.json | Italian translation |
| ๐ README.md | Located in src/i18n/locales/, describes key naming conventions |
How it works
- On startup, Librius loads the language defined in:
- CLI argument --lang / -l
- Configuration file language:
- Fallback to English (en)
- All user-visible messages (print_info, print_err, etc.) are translated dynamically.
- Missing keys automatically fall back to their key name or English equivalent.
Example Usage
# Default (English)
# Force Italian interface
Example config (librius.conf)
# librius.conf
database: "C:/Users/YourName/AppData/Roaming/librius/librius.sqlite"
language: "it" # Set default language to Italian
๐งฉ Translations
All translations are stored in:
Each .json file contains keyโvalue pairs like:
Variables can be inserted at runtime:
tr_with;
๐งฑ Project structure
src/
โโ main.rs
โโ lib.rs
โโ cli.rs
โ
โโ commands/
โ โโ mod.rs
โ โโ list.rs
โ โโ backup.rs
โ โโ config.rs
โ โโ export.rs
โ โโ import.rs
โ
โโ config/
โ โโ mod.rs
โ โโ load_config.rs
โ โโ migrate_config.rs
โ
โโ db/
โ โโ mod.rs
โ โโ load_db.rs
โ โโ migrate_db.rs
โ
โโ i18n/
โ โโ mod.rs
โ โโ loader.rs
โ โโ locales/
โ โโ en.json
โ โโ it.json
โ โโ README.md
โ
โโ models/
โ โโ mod.rs
โ โโ book.rs
โ
โโ utils/
โโ mod.rs
โโ table.rs
๐งพ Changelog reference
See CHANGELOG.md for a detailed list of changes and updates.
๐ค Export & ๐ฅ Import
Librius now supports full data import/export functionality.
Export
You can export your library to multiple formats:
Exports are automatically saved in your user data directory
(e.g. ~/.config/librius/exports or %APPDATA%\librius\exports).
Import
Import books from CSV or JSON files:
Features:
- Automatic detection of duplicate records via unique
isbn - Skips duplicates gracefully (no interruption)
- Transaction-safe import
- Verbose mode logs skipped ISBNs
Example output:
๐ Quick start
1๏ธโฃ Clone the repository
2๏ธโฃ Build and run
If this is the first launch, Librius will automatically create:
- The config file at
~/.config/librius/librius.conf - A SQLite database at
~/.config/librius/librius.sqlite
๐งฉ Example output
$ librius list
๐ Your Library
- The Hobbit (J.R.R. Tolkien) [1937]
- Foundation (Isaac Asimov) [1951]
- Dune (Frank Herbert) [1965]
โ๏ธ Configuration
# librius.conf
database: "C:/Users/YourName/AppData/Roaming/librius/librius.sqlite"
language: "en"
- Configuration file is automatically migrated if fields are missing or renamed.
- Default path:
- macOS/Linux โ $HOME/.librius/librius.conf
- Windows โ %APPDATA%\Roaming\librius\librius.conf
๐งฉ Development notes
Librius now follows a standard Rust modular structure:
- Each domain (commands, db, config, models, utils, i18n) exposes its API via mod.rs.
- Common utilities like build_table() are reused across commands for consistent output.
- The lib.rs re-exports all major modules for cleaner imports in main.rs.
Example import
use ;
๐ Documentation
The API and user-facing documentation for Librius is available on docs.rs:
- Online: https://docs.rs/librius
To generate and view the documentation locally run:
This will build the documentation and open it in your default browser.
๐งฐ Dependencies
- clap โ Command-line argument parsing
- rusqlite โ SQLite database integration
- serde / serde_json โ Serialization/deserialization
- serde_yaml โ YAML config parsing
- umya-spreadsheet โ XLSX file creation
- csv โ CSV import/export
- colored โ Colored terminal output
- chrono โ Date and time utilities
๐๏ธ Database management
Librius automatically verifies and upgrades the SQLite database schema at startup.
The latest migration adds a unique index on isbn to guarantee
that duplicate imports are ignored safely.
(isbn);
- On first launch โ creates books table.
- On subsequent launches โ runs pending migrations silently.
- Migration results are recorded in the log table.
Each migration patch (PATCH_001, PATCH_002, โฆ) is applied once and recorded in the internal log table.
The process is fully idempotent โ no duplicate operations are ever performed.
๐ Applying database patch: PATCH_002
โ
All pending migrations applied.
โ
Database schema is up-to-date.
Example table log
| id | date | operation | target | message |
|---|---|---|---|---|
| 1 | 2025-10-13T21:45:12+02:00 | DB_CREATED | DB | Created new database |
| 2 | 2025-10-13T21:45:13+02:00 | DB_MIGRATION_OK | DB | Schema updated successfully |
๐ Verbose mode
Run Librius in diagnostic mode to display all internal initialization steps:
Output example:
In normal mode, only command output is displayed.
๐งช Development
Run in debug mode
Run with logging (future)
RUST_LOG=debug
Format and lint
๐งฑ Future roadmap
- Add
add,remove, andsearchcommands - Export/import JSON and CSV
- Add optional TUI (Text UI) with
ratatui - Web dashboard sync
๐งโ๐ป Author
Umpire274 GitHub: @umpire274
๐ License
This project is licensed under the MIT License โ see the LICENSE
โญ Contribute
Contributions, feature requests, and ideas are welcome! If youโd like to contribute, please open a pull request or start a discussion.
๐งก Support
If you enjoy this project, please โญ star the repository โ it helps visibility and development motivation!