Prerequisites
Before you begin, ensure you have the following installed:- C++26 compiler - Clang 17+, GCC 13+, or MSVC 19.36+
- Meson (1.1+) and Ninja - Build system
- just (optional) - Command runner for simplified build commands
Getting started
Make your changes
Build configuration options
You can customize the build by setting various options:| Option | Type | Default | Description |
|---|---|---|---|
weather | feature | enabled | Weather data fetching |
nowplaying | feature | enabled | Now playing media info |
packagecount | feature | enabled | Package count functionality |
caching | feature | enabled | Caching system |
plugins | feature | enabled | Plugin support |
precompiled_config | bool | false | Use compile-time configuration |
Common build commands
Project architecture
Draconis++ follows a layered architecture:include/Drac++/ - Public API
Headers exposed to consumers of the library. These define the stable interface.
- Core/ - System data structures (
System.hpp,Package.hpp) - Services/ - Service interfaces for external data (weather, packages)
- Utils/ - Type aliases, error handling, macros
src/Lib/ - Library implementation
The core library containing all platform-agnostic and platform-specific code.
- Core/ - Cross-platform implementations
- OS/ - Platform-specific code (Windows, Linux, macOS, BSD, etc.)
- Services/ - External service integrations
- Wrappers/ - Thin wrappers around third-party libraries
src/CLI/ - Command-line interface
The user-facing application that consumes the library.
- Config/ - TOML configuration parsing and management
- Core/ -
SystemInfoclass that aggregates all system data - UI/ - Terminal output formatting and theming
Submitting changes
Commit messages
Use Conventional Commits format:Pull request guidelines
- Descriptive title - Clearly summarize the change
- Reference issues - Include
Fixes #123if applicable - Include tests - Add tests for new functionality
- Update documentation - Document new public APIs
- Keep changes focused - One feature or fix per PR
Getting help
If you have questions or need help:- Open an issue on GitHub
- Start a discussion in the repository
- Check existing issues and pull requests
Next steps
Code style
Learn about naming conventions and formatting rules
Adding platforms
Add support for new operating systems
Testing
Write and run tests for your changes