Booker is a native and extensible toolkit for ebooks and comic archives written in C++17.
It focuses on conversion, processing and future lightweight library management, while keeping both CLI and GUI as first-class citizens.
- Philosophy
- Current Status
- Features
- Dependencies
- Architecture
- Build
- Usage
- Roadmap
- Contributing
- License
Booker is built around a simple idea:
ebook tools should adapt to users, not the opposite.
The project started from real-world needs: converting and processing PDF, CBZ and CBR files quickly and cleanly.
Over time, Booker aims to evolve into a modular ecosystem for ebook and comic workflows, including lightweight library management and community-driven extensions.
Booker is designed to remain:
- native
- modular
- extensible
- cross-platform
- usable from both CLI and GUI
Booker is currently in early development.
The current focus is:
- archive handling
- conversion pipelines
- core architecture
- CLI/GUI foundations
Supported formats and functionalities are still evolving.
- CBZ support
- CBR support
- PDF support
- Archive abstraction layer
- Shared core between CLI and GUI
- EPUB support
- Metadata handling
- Batch processing
- Lightweight library management
- Future plugin system
- GUI (library is not decided)
Dependencies are managed by CMake, with FetchContent and ExternalProject, so, if you are on Windows, MacOS, or Linux (Ubuntu is OK for build, not built for other distributions), you don't have to manage them.
But, there is a list of the dependencies used, and why :
- Zlib : Useful for some other dependencies, and for compress and deflate zip for CBZ archives
- libjpeg (and libjpeg-turbo) : Useful for Poppler and take in charge a part of JPEG workflows
- Freetype : Useful for Poppler
- LibPNG : Useful for Poppler
- Iconv (and win-iconv for Windows) : Useful for Poppler
- Poppler : To read PDF and rasterization of pages
- RarLib : My own wrapper around RAR executables ; to compress CBR archives
- libarchive : To deflate CBR archives
- imageinfo : To get images width and height
- LibHaru : To write PDF
- stb_image and stb_image_write : To help libjpeg
- libwebp : To take in charge WEBP format
- pugixml : To manage ComicInfo.xml of CBR and CBZ (comic metadata)
- CLI11 : To create a CLI interface
Booker is organized around a shared core architecture:
Booker/
├── core/ # Shared library: archive handling, document model, format handlers, and other logic features
│ ├── include/ # Public headers (booker namespace)
│ └── src/ # Implementations
├── cli/ # Command-line interface (uses core)
├── gui/ # GUI application (uses core)
├── locales/ # Localization files (future feature)
└── CMakeLists.txt # Root build configuration
CMake take in charge the dependencies listed above. So, the first build is very slow (around 10~15 minutes). Don't be afraid by that, it's normal.
- C++17 compiler (MSVC, MinGW, GCC, Clang)
- CMake
- Git
git clone https://github.com/DostLeFan/Booker.git
cd Booker
# And then, use these two commands :
# The two presets are build and release
cmake --preset YOUR_PRESET -G "YOUR_GENERATOR"
cmake --build --preset YOUR_PRESET
# For example, on Linux
cmake --preset debug -G "Unix Makefiles"
cmake --build --preset debugThe project is currently running with a minimal command-line interface.
At present, it allows you to convert between CBR, CBZ and PDF formats (CBR->CBZ, CBR->PDF, CBZ->CBR, CBZ->PDF, PDF->CBR, PDF->CBZ).
Conversions may be slow in some cases, as they have not yet been optimised.
But here are a few examples of how to use it:
booker_cli file [FILE_TO_CONVERT].[cbr/cbz/pdf] [OUTPUT_FILE].[cbr/cbz/pdf] [--dpi] # The CLI will automatically detect formats and convert with correct algorithm
# DPI is optional and defaults to 300
# For example :
booker_cli file "Booker - Sample PDF.pdf" "Booker - Sample PDF.cbz" [--dpi 150] # This file, "Booker - Sample PDF.pdf", can be found in "sample data/" directory.
# And, if you want batch conversion :
booker_cli directory [DIRECTORY_CONTAINING_EBOOKS] -d/--destination [OUTPUT_DIRECTORY] -f/--format [cbr/cbz/pdf] [--dpi 200]
# For example :
booker_cli directory yourDirectory -d yourOutputDirectory -f pdf [--dpi 200]
GUI isn't developed yet ; the GUI library isn't decided. But, in the future, this part will be documented.
There is a minimal roadmap for future developments.
- ZIP handling
- RAR handling
- Metadata abstraction
- CBZ -> CBR
- CBZ -> PDF
- CBR -> CBZ
- CBR -> PDF
- PDF -> CBZ
- PDF -> CBR
- Basic batch conversion
- Better design for single file and batch conversion for CLI
- Plugin system
- Lightweight library management
Booker is community-driven.
Feature ideas, discussions and contributions are welcome, but the project aims to remain coherent, modular and maintainable.
Before implementing large features, please open an issue or discussion first.
Copyright (C) 2026 DostLeFan. This software is distributed under the terms of the GNU General Public License v3 or later.