A modern C++ game development starter kit built with Raylib, featuring scene management, built-in utilities, and minimal boilerplate.
"Build. Play. Iterate."
- ✅ Zero setup friction — clone and build
- 🎯 Cross-platform: Windows / macOS / Linux
- ⚙️ CMake build system with Ninja and CMakePresets
- 🎮 Raylib 5.5 via FetchContent
- 🎬 Scene management system with lifecycle hooks
- 🛠️ Built-in utilities: Timer node, FastNoiseLite integration
- 🪟 ImGui (rlImGui) debugging UI integrated
- 📦 Automatic asset copying in release builds
- 🎮 Optional Steamworks SDK integration
- 🗂️ Clean project structure with organized source layout
- 🔧 Compile commands export for IDE support (LSP/clangd)
src/- Source code organized by domain:game/- Your game-specific code and scenesraykit/- Reusable framework utilities:scene/- Scene management system (Scene, SceneManager)nodes/- Utility nodes (Timer, etc.)noise/- FastNoiseLite procedural noise generation
assets/- Textures, audio, and other media resourcesvendor/- Third-party libraries (ImGui, optional Steamworks SDK)cmake/- Platform-specific toolchain filesCMakePresets.json- Build configuration presets for all platformsbin/- Output directory for built executableslib/- Output directory for static/shared libraries
- CMake ≥ 3.25
- A C++20-capable compiler (GCC, Clang, or MinGW)
- Ninja build system
# macOS (Native)
make build PRESET=macos-debug
# Linux (Native or WSL)
make build PRESET=linux-debug
# Windows (Cross-compile from WSL using MinGW)
make build PRESET=windows-mingw-debugDebug Mode:
make build PRESET=macos-debugRelease Mode:
make build PRESET=macos-releaseDebug Mode:
make build PRESET=linux-debugRelease Mode:
make build PRESET=linux-releaseDebug Mode:
make build PRESET=windows-mingw-debugRelease Mode:
make build PRESET=windows-mingw-releaseAfter building, the executable will be in the bin/ directory:
./bin/raykit-cppmake build PRESET=<preset-name> # Configure and build using the specified CMake preset
make configure PRESET=<preset-name> # Configure project only (runs cmake --preset)
make clean PRESET=<preset-name> # Clean build artifacts
make rebuild PRESET=<preset-name> # Clean, configure, and rebuildAvailable presets:
macos-debug/macos-releaselinux-debug/linux-releasewindows-mingw-debug/windows-mingw-release
The project includes a scene management system for organizing game states:
// Create a scene by inheriting from Scene
class MyScene : public Scene {
void on_compose() override { /* Initialize resources */ }
void on_dispose() override { /* Cleanup resources */ }
void on_update(float delta) override { /* Update logic */ }
void on_draw() override { /* Rendering */ }
};
// Add and switch scenes
SceneManager::add_scene("MY_SCENE", std::make_unique<MyScene>());
SceneManager::change_scene("MY_SCENE");Simple timer with callback support:
Timer* timer = new Timer();
timer->start(5.0f, []() {
std::cout << "Timer finished!" << std::endl;
});
timer->update(delta); // Call in your update loopProcedural noise generation for terrain, textures, and more. See FastNoiseLite.hpp for usage.
To enable Steamworks SDK integration:
- Download the Steamworks SDK
- Extract it to
vendor/steamworks/ - The build system will automatically detect and integrate it
- A
USE_STEAMWORKSpreprocessor definition will be added
If the SDK is not present, the project builds without Steamworks support.
- Debug: Assets loaded from source tree, debug symbols enabled,
RAYKIT_DEBUG_MODEdefined - Release: Assets automatically copied to binary directory, optimizations enabled,
RAYKIT_RELEASE_MODEdefined
See LICENSE for details.