- Except ImGui due to massive changes required - Except Vulkan dependent dependencies, wait for dxc spirv alloc fix - Update manifest url
Cranberry Game Engine
Cranberry Game Engine is my Personal hobby game engine. I work on this as best as I could during my holidays. It is MIT Licensed open source engine with high code quality.
The goal of the engine is to have a set of tools required to develop a game without too much dependencies. In the renderer side I aim to be as efficient as possible given the little time I invest in the engine. Physics will be optional for any game so I intend to keep the module and its integration into game objects as decoupled as possible. Audio will always be needed so that will be tightly integrated with other objects.
Join the discord server at https://discord.gg/2xfVG4QPt8 if you want to make some meaningful impact.
All of the engine code is written without using AI, if that matters at all. I assure you not many engines can say that. I am a single person right now working on this engine with very little time to spend in it while spending time with my family, so there are few places AI is used like to comment code, generate build scripts. However all such usage was heavily reviewed/modified to keep the quality high.
Requirement
- Vulkan 1.3 supported hardware is required. Last time I checked the engine runs even on Intel 7th Gen GPU device/driver, I would like to keep it that way as long as possible.
- Windows platform
Instructions
Best practices
Can be found at Best Practices
Contribution
If you are looking to contribute, try to pick a task or issue from issues list. Right now there is no contributor guideline. Regular workflow of forking the engine and creating a merge/pull request with description is good enough. I will add guidelines as nice people starts contributing.
There are some points I would like to highlight
- Project is in early stage so if you contribute you will get opportunity to be a maintainer or lead of certain module as project grows. So now is the best time to contribute.
- If you are a student you have so much to gain by working on this project.
- Some features are over engineered and I am fine with it. So if you want to contribute it is okay to over engineer as long as the changes itself is self contained.
Getting started with first build
- Install CMake from CMake
- Install Visual Studio 2022/2026 from VisualStudio
- Install Vulkan SDK from VulkanSDK. Necessary because I am using
dxcbuilt for SPIR-V. - Run GenerateProject.ps1 to generate Visual Studio solution. This will by default generate solution for
Editor-DynamicLinked-VS2026preset underBuild_VS2026folder
(or)
- You can also run
GenerateProject.ps1with one of following presets(eg.,GenerateProject.ps1orGenerateProject.ps1 <preset> [Some Cmake arguments]..) Note that if using preset and not going to change library dependencies runSetupDeps.ps1first(It will download archive with necessary libraries)Editor-DynamicLinked-VS2026preset creates commandcmake -B Build_VS2026 -G "Visual Studio 18 2026" -A x64 -Thost=x64 -DCMAKE_INSTALL_PREFIX:STRING=${sourceDir}/Installed -DCranberry_STATIC_MODULES:BOOL=OFFRuntime-DynamicLinked-VS2026preset creates commandcmake -B RuntimeBuild_VS2026 -G "Visual Studio 18 2026" -A x64 -Thost=x64 -DCMAKE_INSTALL_PREFIX:STRING=${sourceDir}/Installed -DCranberry_STATIC_MODULES:BOOL=OFF -DCranberry_EDITOR_BUILD:BOOL=OFF
Optional
- In order to make use of precommit you have to install
pre-commitfrom pre-commit webpage
pip install pre-commit
Graphics debugging
- Validation layers in vulkan can be enabled in any build mode. However in non dev build the error messages get ignored. Use
Developmentbuild if you need release matching performance and validations.
Features
Many features listed below are supported but tooling still needs to be developed. Some features are in branches waiting to be ported to latest rendering backend.
- Reflection generator for C++
- Reflection supports metadata classes and flags
- Shaders are assembled with input structure defined in C++. Offers compile time type check for inputs.
- PBR Materials
- Image base lighting
- Point, Spot, Directional lights
- Shadows, Cube mapped shadows and Cascaded shadows
- Mark and sweep garbage collector with reference list
- Object tree actions like deep copy, traversal etc.,
- Multiwindow widgets and Input handling
- Supported inputs mouse and keyboard
- World/Actor/Components
- Unity style prefabs
- Job system using CoPaT
- World editor and any asset editor(Some are Actor Prefab editor and Material Instance editor)
- Full fledged editor with complete Undo/Redo integration for actions and data
Third parties
Licenses for third party packages used is placed under Licenses folder
Current dependencies
| Dependency | Description |
|---|---|
Vulkan |
Headers only. SDK is required |
| Libraries provided as part of external download | |
glm |
|
tinyObjloader |
|
stb |
|
doctest. |
Optional testing framework. |
SPIRV-Tools |
Custom fork to use as dll and used with FindDxc |
LLVM(CLang). |
CMake configs generated required some manual tweaking to support Debug,Development and Release config |
mimalloc. |
CMake configs generated required some manual tweaking to support Debug,Development and Release config |
tracy profiler. |
CMake configs generated required some manual tweaking to support Debug,Development and Release config |
JoltPhysics. |
CMake configs generated required some manual tweaking to support Debug,Development and Release config |
Assimp |
CMake configs generated required some manual tweaking to support Debug,Development and Release config |
| Libraries embedded as part of source | |
xxHash |
Embedded into the project |
CoPaT |
Embedded into the project |
SPIRVCross |
Embedded into the project, Few necessary files are copied directly rather than using as include |
ImGui and ImPlot |
Embedded into the project |
miniaudio |
Embedded into the project |
Some screen shots
TestEngine
CranberryEditor
❤️ Support this project
If you found any piece of this software helpful or used it yourself, please feel free to share it with your circle or support me. I had invested substantial amount of my personal time in this project.

.jpg)
.jpg)
.jpg)