A single-header C++ library for displaying async animations, counters, progress bars, and status messages with minimal code changes.
Barkeep is a single-header C++ library that provides asynchronous visual feedback for long-running tasks, such as progress bars, counters, animations, and status messages. It solves the problem of adding user-friendly progress indicators to command-line applications without requiring significant code restructuring by monitoring existing variables via pointers.
C++ developers building command-line tools, scripts, or applications that need visual progress indicators, especially those who want minimal code changes and header-only integration.
Developers choose Barkeep for its non-intrusive design, which allows monitoring of existing variables with pointers, avoiding locks or custom types. It offers flexibility with multiple display types, composite monitoring, and optional advanced formatting, all in a lightweight, header-only package.
Small C++ header to display async animations, counters, progress bars, and status messages
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Monitors existing variables via pointers, as shown in the Before/After table, allowing progress displays with minimal code changes and no need for custom data structures.
Supports animations, counters, progress bars, and status messages with multiple styles and colors, evidenced by code snippets for Earth animations and Rich progress bars in the README.
Enables implicit display finishing via destructors and deferred showing with .show = false, allowing clean resource management and flexible timing, as detailed in the RAII support examples.
Optional integration with fmt or C++20 std::format for custom display formatting and ANSI colors, with examples using format strings and color identifiers in the advanced formatting section.
Relies on concurrent reads without locks, which the README admits can lead to race conditions, requiring careful use of std::atomic for safety in multi-threaded environments.
Requires C++20 for features like designated initializers, and advanced formatting depends on external libraries (fmt) or recent compilers, limiting compatibility with older toolchains.
Designed solely for command-line interfaces with no-TTY mode for logging, making it unsuitable for GUI, web, or embedded applications needing progress feedback.