Skip to content
/ MetaImGUI Public template

A template project for creating ImGui-based desktop applications with a modern C++20 codebase and cross-platform build system. Designed for efficient development in AI-assisted editors.

License

Notifications You must be signed in to change notification settings

andynicholson/MetaImGUI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

15 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

MetaImGUI

CI Build Static Analysis codecov Latest Release License: GPL v3 Platform C++20 ImGui

A C++20 template for ImGui desktop applications. Includes build system, CI/CD, and basic application structure.

Overview

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.

Screenshots

Ubuntu 25.10

Main Application Window

Main Window

Theme Variations

Themes

Dialog System

Dialogs

About

About

Menu System

Menu

Localisation

Localisation

Example of Real-Time Plotting, via Threaded Network API JSON fetching, using ImPlot.

ISSTracker

Features

Core Application

  • ๐Ÿš€ 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)

Build & Infrastructure

  • โšก 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.

Project Structure

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)

Development Environment

VS Code Devcontainer (Recommended)

The easiest way to get started is using the pre-configured development container:

  1. Install Docker and VS Code
  2. Install the Dev Containers extension
  3. Open the project in VS Code
  4. Click "Reopen in Container" when prompted
  5. Wait for the container to build (first time only)
  6. Start developing!

The devcontainer includes all tools pre-installed: compilers, CMake, sanitizers, coverage tools, and more.

See .devcontainer/README.md for details.

Quick Start

Using as a Template for Your Project

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 platforms

Prerequisites

All 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)

Building Without Initialization

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/MetaImGUI

Building Manually

If you prefer to build manually:

mkdir build
cd build
cmake ..
make -j$(nproc)  # or make -j4 on Windows

Customization

Renaming the Project

Recommended: Use the initialization script

./init_template.sh  # Linux/macOS
# or
.\init_template.ps1  # Windows

The script automatically updates all project files, namespaces, and configurations.

Manual customization (if needed):

  1. Update CMakeLists.txt - Change project name and executable references
  2. Update all source files - Change namespace from MetaImGUI to your name
  3. Update include/ headers - Update WINDOW_TITLE and other constants
  4. Update GitHub URLs in badges and documentation

Architecture Overview

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

Adding New Features

Extending the template:

  • UI components - Add methods to UIRenderer
  • Themes - Add color schemes to ThemeManager
  • Menu items - Edit UIRenderer::RenderMenuBar()
  • Dialogs - Use DialogManager methods
  • Settings - Use ConfigManager get/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

Working with AI Assistants

Structured for AI-assisted editors:

  • Standard C++ patterns
  • Consistent naming conventions
  • Clear separation of concerns
  • Straightforward file organization

GitHub Actions and Monitoring

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 help

For detailed information, see:

  • Workflow monitoring: scripts/README.md
  • Complete guide: GITHUB_ACTIONS_GUIDE.md
  • Release preparation: ./scripts/prepare_release.sh --help

Documentation

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

Dependencies

Core Dependencies

  • ๐ŸŽจ 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

Build & Development

  • ๐Ÿ”จ CMake 3.16+
  • โœ… Catch2 v3.4.0
  • ๐Ÿ› ๏ธ C++20 compiler (GCC 10+, Clang 10+, MSVC 2019 16.11+)

Platform Support

  • ๐Ÿง Linux (Ubuntu 20.04+, Fedora 33+)
  • ๐ŸชŸ Windows (10/11 with MSVC)
  • ๐ŸŽ macOS (15+)

Tested via GitHub Actions.

Troubleshooting

Common Issues

  1. ImGui not found: Run ./setup_dependencies.sh first
  2. GLFW not found: Install system dependencies via the setup script
  3. OpenGL errors: Ensure your graphics drivers are up to date
  4. Build failures: Check that you have a C++20 compatible compiler

Debug Mode

Build with debug information:

cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

Dual Licensing

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]

Use Cases

Suitable for:

  • ๐Ÿ”ง Desktop utilities
  • ๐Ÿ“Š Data visualization
  • โš™๏ธ Configuration interfaces
  • ๐ŸŽจ GUI prototypes
  • ๐ŸŒ Cross-platform desktop apps

Contributing

Issues and pull requests welcome.

Commit Message Convention

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 signature

See CONTRIBUTING.md for detailed guidelines.

Acknowledgments

About

A template project for creating ImGui-based desktop applications with a modern C++20 codebase and cross-platform build system. Designed for efficient development in AI-assisted editors.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published