A C++20 template for ImGui desktop applications. Includes build system, CI/CD, and basic application structure.
Skip the setup. Start building.
MetaImGUI is a project starter built for AI-assisted development. This template gives you and your AI coding partner a clean foundationโconsistent patterns, clear architecture, and straightforward documentation mean less explaining and more building. Fork it, customize it with the included init script, and start shipping features instead of fighting configuration. Everything you need is here: CI/CD pipelines, cross-platform builds, automated releases, testing, and security scanning. No hype, just working infrastructure.
Ubuntu 25.10
- ๐ C++20 codebase
- ๐ง CMake build system for Linux, Windows, macOS
- ๐จ ImGui v1.92.4 with GLFW and OpenGL 4.6 (4.1 on macOS)
- ๐ผ๏ธ Menu bar and about dialog
- โ๏ธ JSON configuration (window size, language preference)
- ๐ Thread-safe logging (console and file)
- ๐ฌ Dialog system (message boxes, confirmation, input, progress)
- ๐ Localization (English, Spanish, French, German)
- ๐ฐ๏ธ ISS Tracker demo (real-time plotting with ImPlot)
- โก CI/CD workflows (builds on every push)
- ๐ฆ Automated releases (create tag, get installers)
- ๐ Update checker (GitHub API)
- ๐ท๏ธ Git-based versioning
- ๐ฏ Init script (renames project, updates namespaces)
- โ Catch2 tests
- ๐งช Code coverage tracking (Codecov)
- ๐ก๏ธ Sanitizers (AddressSanitizer, UndefinedBehaviorSanitizer, ThreadSanitizer)
- ๐ Static analysis (clang-tidy with 400+ checks, cppcheck) - enforced on every push/PR
- ๐ Security scanning (CodeQL)
- ๐ Performance benchmarks (Google Benchmark)
- ๐ Packaging (AppImage, .deb, NSIS installer, DMG)
- ๐ค VS Code configuration
See META_FEATURES.md for detailed documentation of all features.
MetaImGUI/
โโโ CMakeLists.txt # Main build configuration
โโโ CMakePresets.json # CMake preset configurations
โโโ README.md # This file
โโโ LICENSE # GPL v3.0 license
โโโ AUTHORS # Project contributors
โโโ CHANGELOG.md # Version history and changes
โโโ CODE_OF_CONDUCT.md # Community guidelines
โโโ CONTRIBUTING.md # Contribution guidelines
โโโ SECURITY.md # Security policy
โโโ SECURITY_CHECKLIST.md # Security best practices
โโโ META_FEATURES.md # Detailed feature documentation
โโโ QUICK_REFERENCE.md # Quick reference guide
โโโ SETUP_GUIDE.md # Setup instructions
โโโ GITHUB_ACTIONS_GUIDE.md # GitHub Actions documentation
โโโ Doxyfile # Doxygen configuration
โโโ entitlements.plist # macOS entitlements
โ
โโโ src/ # Source files
โ โโโ main.cpp # Application entry point
โ โโโ Application.cpp # Main application logic
โ โโโ WindowManager.cpp # Window management
โ โโโ ThemeManager.cpp # Theme/styling system
โ โโโ UIRenderer.cpp # UI rendering logic
โ โโโ UpdateChecker.cpp # Update notification system
โ โโโ ConfigManager.cpp # Settings persistence
โ โโโ Logger.cpp # Logging system
โ โโโ DialogManager.cpp # Dialog system
โ โโโ Localization.cpp # Localization/translations
โ โโโ ISSTracker.cpp # ISS position tracking
โ
โโโ include/ # Header files
โ โโโ Application.h # Application header
โ โโโ WindowManager.h # Window manager header
โ โโโ ThemeManager.h # Theme manager header
โ โโโ UIRenderer.h # UI renderer header
โ โโโ UpdateChecker.h # Update checker header
โ โโโ ConfigManager.h # Config manager header
โ โโโ Logger.h # Logger header
โ โโโ DialogManager.h # Dialog manager header
โ โโโ Localization.h # Localization header
โ โโโ ISSTracker.h # ISS tracker header
โ โโโ version.h.in # Version template
โ
โโโ tests/ # Test suite (Catch2)
โ โโโ test_main.cpp # Test runner
โ โโโ test_theme_manager.cpp # Theme tests
โ โโโ test_update_checker.cpp# Update checker tests
โ โโโ test_version.cpp # Version tests
โ โโโ test_config_manager.cpp# Config manager tests
โ โโโ test_logger.cpp # Logger tests
โ โโโ test_window_manager.cpp# Window manager tests
โ
โโโ benchmarks/ # Performance benchmarks (Google Benchmark)
โ โโโ CMakeLists.txt # Benchmark build configuration
โ โโโ benchmark_main.cpp # Benchmark entry point
โ โโโ benchmark_config.cpp # ConfigManager benchmarks
โ โโโ benchmark_logger.cpp # Logger benchmarks
โ โโโ benchmark_localization.cpp # Localization benchmarks
โ
โโโ cmake/ # CMake modules
โ โโโ GetGitVersion.cmake # Git version extraction
โ โโโ CodeCoverage.cmake # Code coverage configuration
โ โโโ Sanitizers.cmake # Sanitizer configuration
โ โโโ StaticAnalysis.cmake # Static analysis configuration
โ
โโโ scripts/ # Utility scripts
โ โโโ monitor_actions.sh # Linux/macOS workflow monitor
โ โโโ monitor_actions.ps1 # Windows workflow monitor
โ โโโ prepare_release.sh # Interactive release preparation
โ โโโ quick_status.sh # Quick status check
โ โโโ run_clang_tidy.sh # Run clang-tidy locally
โ โโโ run_coverage.sh # Generate coverage report
โ โโโ run_sanitizers.sh # Run sanitizers locally
โ โโโ run_static_analysis.sh # Run static analysis
โ โโโ README.md # Scripts documentation
โ
โโโ packaging/ # Platform-specific packaging
โ โโโ create_linux_packages.sh # Linux package creation
โ โโโ create_windows_installer.ps1 # Windows installer
โ โโโ windows_installer.nsi # NSIS installer script
โ โโโ PACKAGING_GUIDE.md # Packaging documentation
โ โโโ README.md # Packaging overview
โ โโโ flatpak/ # Flatpak packaging
โ โ โโโ com.metaimgui.MetaImGUI.desktop
โ โ โโโ com.metaimgui.MetaImGUI.metainfo.xml
โ โ โโโ com.metaimgui.MetaImGUI.yaml
โ โโโ snap/ # Snap packaging
โ โโโ snapcraft.yaml
โ
โโโ .github/ # GitHub configuration
โ โโโ workflows/ # GitHub Actions CI/CD
โ โ โโโ ci.yml # Continuous Integration
โ โ โโโ coverage.yml # Code coverage analysis
โ โ โโโ sanitizers.yml # Memory safety checks
โ โ โโโ static-analysis.yml # clang-tidy + cppcheck
โ โ โโโ codeql.yml # Security analysis (CodeQL)
โ โ โโโ benchmarks.yml # Performance benchmarks
โ โ โโโ docs.yml # Documentation generation
โ โ โโโ dependency-review.yml # Dependency scanning
โ โ โโโ release.yml # Release automation
โ โโโ ISSUE_TEMPLATE/ # Issue templates
โ โโโ PULL_REQUEST_TEMPLATE.md
โ
โโโ .devcontainer/ # VS Code Dev Container
โ โโโ devcontainer.json # Container configuration
โ โโโ Dockerfile # Container image
โ โโโ post-create.sh # Post-creation script
โ
โโโ .vscode/ # VS Code workspace settings
โ
โโโ docs/ # Documentation
โ โโโ README.md # Documentation index
โ โโโ mainpage.md # Doxygen main page
โ โโโ file-dialogs.md # File dialog documentation
โ โโโ plugin-architecture.md # Plugin system design
โ โโโ security-practices.md # Security guidelines
โ
โโโ resources/ # Application resources
โ โโโ README.md # Resources overview
โ โโโ translations/ # Translation files
โ โ โโโ translations.json # Multi-language strings
โ โโโ icons/ # Application icons
โ โโโ README.md # Icon documentation
โ โโโ metaimgui.svg # Source icon
โ โโโ generate_icons.sh # Icon generation script
โ
โโโ setup_dependencies.sh/.bat # Dependency setup scripts
โโโ build.sh/.bat # Build scripts
โโโ init_template.sh/.ps1 # Project initialization scripts
โ
โโโ external/ # External dependencies (generated)
โ โโโ imgui/ # ImGui library
โ โโโ implot/ # ImPlot library
โ โโโ json/ # nlohmann/json
โ โโโ catch2/ # Catch2 testing framework
โ
โโโ build/ # Build output (generated)
โโโ logs/ # Application logs (generated)
The easiest way to get started is using the pre-configured development container:
- Install Docker and VS Code
- Install the Dev Containers extension
- Open the project in VS Code
- Click "Reopen in Container" when prompted
- Wait for the container to build (first time only)
- Start developing!
The devcontainer includes all tools pre-installed: compilers, CMake, sanitizers, coverage tools, and more.
See .devcontainer/README.md for details.
The recommended workflow:
# 1. Fork this repository on GitHub (click the "Fork" button)
# Technically, its a template, so you do "Use this template"
# 2. Clone your fork (replace YOUR_USERNAME with your GitHub username)
git clone https://github.com/YOUR_USERNAME/MetaImGUI.git MyProject
cd MyProject
# 3. Initialize your project (interactive)
./init_template.sh
# Follow the prompts to customize project name, namespace, etc.
# 4. Setup dependencies
./setup_dependencies.sh
# 5. Build
./build.sh
# 6. Run
./build/MyProject
# 7. Open in your AI-assisted editor (e.g., Cursor) and start developing
cursor .
# 8. When ready, create your first release
./scripts/prepare_release.sh
# Interactive script will guide you through version bumping and release creation
# GitHub Actions will build installers for all platformsAll Platforms:
- ๐จ CMake 3.16 or higher
- โ๏ธ C++20 compatible compiler (GCC 10+, Clang 10+, MSVC 2019 16.11+)
- ๐ฟ Git (for downloading dependencies)
Platform-Specific:
- ๐ง Linux:
libcurl4-openssl-dev,libglfw3-dev,libgl1-mesa-dev,libglu1-mesa-dev,xorg-dev - ๐ช Windows: vcpkg (for GLFW and libcurl)
- ๐ macOS: Homebrew (for GLFW and other dependencies)
If you just want to try the template as-is:
# Setup dependencies
chmod +x setup_dependencies.sh
./setup_dependencies.sh
# Build
chmod +x build.sh
./build.sh
# Run
./build/MetaImGUIIf you prefer to build manually:
mkdir build
cd build
cmake ..
make -j$(nproc) # or make -j4 on WindowsRecommended: Use the initialization script
./init_template.sh # Linux/macOS
# or
.\init_template.ps1 # WindowsThe script automatically updates all project files, namespaces, and configurations.
Manual customization (if needed):
- Update
CMakeLists.txt- Change project name and executable references - Update all source files - Change namespace from
MetaImGUIto your name - Update
include/headers - Update WINDOW_TITLE and other constants - Update GitHub URLs in badges and documentation
Modular structure:
- Application - Lifecycle and coordination
- WindowManager - GLFW window wrapper
- ThemeManager - UI theming (4 themes: Dark, Light, Classic, Modern)
- UIRenderer - ImGui rendering
- UpdateChecker - Update notifications via GitHub API
- ConfigManager - JSON settings (window state, preferences)
- Logger - Thread-safe logging (file and console)
- DialogManager - Reusable dialogs (message boxes, input, progress, lists)
- Localization - Runtime language switching
- ISSTracker - Real-time ISS position tracking and plotting
Extending the template:
- UI components - Add methods to
UIRenderer - Themes - Add color schemes to
ThemeManager - Menu items - Edit
UIRenderer::RenderMenuBar() - Dialogs - Use
DialogManagermethods - Settings - Use
ConfigManagerget/set methods - Logging - Use
Logger::Instance()with LOG_INFO, LOG_ERROR, LOG_DEBUG - Translations - Edit
resources/translations/translations.json - New managers - Follow existing manager patterns
Structured for AI-assisted editors:
- Standard C++ patterns
- Consistent naming conventions
- Clear separation of concerns
- Straightforward file organization
GitHub Actions workflows:
- CI Build - Builds and tests on Linux, Windows, macOS
- Code Coverage - Coverage tracking via Codecov
- Sanitizers - AddressSanitizer, UndefinedBehaviorSanitizer, ThreadSanitizer
- Static Analysis - clang-tidy with 400+ checks, cppcheck (blocks PRs on issues)
- Security Analysis - CodeQL scanning
- Benchmarks - Google Benchmark
- Release - Builds installers on tag push
Advanced Workflow Management:
# Monitor all workflows in real-time
./scripts/monitor_actions.sh
# Watch workflows with auto-refresh
./scripts/monitor_actions.sh watch
# Cancel all running workflows
./scripts/monitor_actions.sh cancel
# Delete all failed/cancelled workflow runs
./scripts/monitor_actions.sh delete
# Show help
./scripts/monitor_actions.sh helpFor detailed information, see:
- Workflow monitoring:
scripts/README.md - Complete guide:
GITHUB_ACTIONS_GUIDE.md - Release preparation:
./scripts/prepare_release.sh --help
- API Documentation: https://andynicholson.github.io/MetaImGUI/
- Quick Reference: QUICK_REFERENCE.md
- Setup Guide: SETUP_GUIDE.md
- Meta Features: META_FEATURES.md
- GitHub Actions Guide: GITHUB_ACTIONS_GUIDE.md
- Contributing: CONTRIBUTING.md
To generate documentation locally:
# Install Doxygen and Graphviz
sudo apt-get install doxygen graphviz # Ubuntu/Debian
brew install doxygen graphviz # macOS
# Generate docs
doxygen Doxyfile
# Open docs/api/html/index.html in browser- ๐จ ImGui v1.92.4
- ๐ ImPlot v0.17
- ๐ช GLFW 3.x
- ๐ฎ OpenGL 4.6 (4.1 on macOS)
- ๐ libcurl (update checking)
- ๐ฆ nlohmann/json v3.11.3
- ๐จ CMake 3.16+
- โ Catch2 v3.4.0
- ๐ ๏ธ C++20 compiler (GCC 10+, Clang 10+, MSVC 2019 16.11+)
- ๐ง Linux (Ubuntu 20.04+, Fedora 33+)
- ๐ช Windows (10/11 with MSVC)
- ๐ macOS (15+)
Tested via GitHub Actions.
- ImGui not found: Run
./setup_dependencies.shfirst - GLFW not found: Install system dependencies via the setup script
- OpenGL errors: Ensure your graphics drivers are up to date
- Build failures: Check that you have a C++20 compatible compiler
Build with debug information:
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
makeThis project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
This project is dual-licensed:
- Open Source (GPLv3): Free to use under the terms of the GNU General Public License v3.0
- Commercial License: Available for purchase for those who cannot or do not wish to comply with GPLv3 terms
A commercial license removes the copyleft requirements and allows you to:
- Use the software in proprietary applications
- Distribute without source code disclosure
- Avoid GPLv3 compliance requirements
For commercial licensing inquiries, please contact: [intothemist@gmail.com]
Suitable for:
- ๐ง Desktop utilities
- ๐ Data visualization
- โ๏ธ Configuration interfaces
- ๐จ GUI prototypes
- ๐ Cross-platform desktop apps
Issues and pull requests welcome.
We follow Conventional Commits for clear and structured commit history. This enables automatic changelog generation and semantic versioning.
Format:
<type>(<scope>): <description>
[optional body]
[optional footer]
Quick Reference:
| Type | Use When | Example |
|---|---|---|
feat |
New feature | feat: add export to PDF |
fix |
Bug fix | fix: prevent null pointer crash |
docs |
Documentation | docs: update API reference |
style |
Formatting | style: apply clang-format |
refactor |
Code restructure | refactor: simplify error handling |
perf |
Performance | perf: cache configuration reads |
test |
Testing | test: add integration tests |
build |
Build/deps | build: update CMake to 3.20 |
ci |
CI/CD | ci: add coverage reporting |
chore |
Maintenance | chore: update .gitignore |
Examples:
feat: add benchmark suite for logger
fix(ui): resolve dialog positioning bug
docs(readme): update installation instructions
feat(config)!: change API signature (breaking change)Breaking Changes:
Add ! after type/scope or include BREAKING CHANGE: in the footer:
feat!: change Initialize() API signatureSee CONTRIBUTING.md for detailed guidelines.





