JenovaRuntime is an [[MIT License]] licensed [[Godot Add-ons|Addon for Godot]] written in [[C++]] (with [[C]]-like headers). - [Website](https://jenova-framework.github.io/) - [Source](https://github.com/Jenova-Framework/Jenova-Runtime) - [Documentation](https://jenova-framework.github.io/docs/pages/Introduction) >It introduces fully-featured C++ scripting within the Godot Editor and allows the use of modern C++ 20/23 standards within the Godot Engine, similar to GDScript/C#. > > By using Jenova Framework you can easily program your entire game or application in C/C++ without any issues. You can also integrate OpenCV, CUDA, Vulkan, OpenMP and any other modern C++ features seamlessly, All supported by the powerful backend. \- Jenova documentation introduction[^5] See also: [[Projekt Jenova]] # Notability May greatly improve the ergonomics of the Godot engine for developers. I don't distinguish between `JenovaFramework`, `JenovaRuntime`, or `JenovaSDK` in this note. They're all part of the same source and documentation as far as I can tell, the different names are primarily for marketing and/or the developer's mental model. See also: [[Projekt Jenova#Disclaimer]] # Philosophy ## GenAI Slop The JenovaRuntime has an optional [[Generative AI|generative AI slop]] `JenovaLLM` module,[^3] intended for use with NPCs. This is available as a download[^4] in the package manager and not part of the Runtime itself. See also: [[Projekt Jenova#GenAI Slop]] ## Licensing Originally all of [[Projekt Jenova]] was the dev's personal project. Gradually they made the Runtime open source, starting by extracting it from their "proprietary" version. > I develop features and improvements on the Proprietary Version first. If I find time I add these changes to the open-source version. However, there's no guarantee that the open-source version will receive all updates applied to the Proprietary Version. Once the open-source version was released, it's no longer my responsibility, though I contribute to it if time permits. \- [[#Creator|TheAenema]], in reply[^12] to questions about Jenova being open source Thereafter, it went fully open source and became the primary way the developer made changes, deprecating the proprietary version entirely. Not all of the pieces have source available or support the same [[#Platform Support|platforms]]: - [[JenovaRuntime]] ([[MIT License]] on GitHub) - ImGUI integration (via package manager, Windows-only) - IDE / VSCodium integration (via package manager, Windows-only) - LLM local models (via package manager, Windows-only) ## Project Repository and Commit History The Runtime repo[^6] is simple and well-structured. Containing relatively few files. This is wildly deceiving. [[cloc - count lines of code|cloc]] reports over 15,000 lines of [[C++]] code and nearly 300,000 lines of headers. Each individual commit in the Runtime repo[^6] is made as if it were itself a full release. Originally code was extracted from an internal prototype and published when the developer felt it was ready.[^12] But now all development is apparently done in the open. The [[Commit Message#Summary|commit summary]] is just a version number, making `git blame` entirely useless for understanding why a change was made. On the up side, each full commit message contains a full list of features and/or bugs that the commit affects. # Platform Support ## Engine Jenova supports official [[Godot]] builds, but also has its own soft fork[^19] (which stays relatively up to date) to add [[#Nested Extension Hot Reloading]] support. ## Host - Windows - Linux ### Linux Support > I can't provide specific information on required Linux libraries since each distro has its own quirks. \- Jenova build guide[^7] The project also includes a [[Python]] script for building on Linux, which seems to [[#Building|work fine]]. Doesn't support Linux for [[#Static Compilation]]. ## Target - Windows - Linux Doesn't support Web, Android, or macOS targets, but they are planned.[^8][^18] # Features It is [[#Building|built]] as a [[Godot - GDExtensions|GDExtension]] and dynamic library which hooks deep into the engine to add features. ## Scripting Because the JenovaRuntime allows [[C++]] to be used in place of [[GDScript]]/[[C Sharp|C#]] it also allows the same level of feature integration that scripts enjoy, like using the Inspector to modify script properties.[^2] You can of course already write [[C++]] using [[Godot - GDExtensions|GDExtensions]] or by editing the engine directly, but what JenovaRuntime does is different and automates pretty much the full lifecycle. For devs who do both core-engine code and game logic this could be particularly helpful, as it skips the need to recompile the engine for every change to game logic, while also reducing context switching. ## C++ Pipeline The core of Jenova is the "runtime". Everything else is built using it. It is composed[^1] of several parts: - [[C++]] interpreter - Parses source files to get the metadata needed to produce bindings for you - Compiler management - Installs its own compilation toolchain ([[MSVC]] or [[GCC]]) to recompile code in the background and re-link it at runtime - JIT - Generates the bindings themselves to connect compiled scripts to engine and library code using [[AsmJIT]] ## Hot Reloading This means that Jenova has hot-reloading and can be attached to nodes just like [[GDScript]] (neither of which [[Godot - GDExtensions|GDExtension]]s can do), but also allows you to seamlessly access all [[C++]] APIs as if you were editing engine code without writing FFI code (like with [[Godot - GDExtensions|GDExtension]]s) or having to recompile the engine (like with engine modifications), making dev cycles far faster and reducing tedium. ### Nested Extension Hot Reloading Requires `Jenova-Godot` custom build[^19] of [[Godot]] to support hot reloading of nested extensions. ## IDE There is also a full [[C++]] IDE that runs inside [[Godot]]'s editor, built on [[VS Code|VSCodium]]. Windows-only. # Tips ## Building >[!WARNING] > The build script (as of [[2025-09-11]]) does not detect a change in compiler tooling and will not rebuild if it is changed, producing incorrectly named distro packages if `--clean-up` is not run beforehand. These are the commands I used to build it[^14]:: ```sh cd Jenova-Runtime python3 -m venv venv ./venv/bin/pip install requests py7zr colored ./venv/bin/python ./Jenova.Builder.py --compiler linux-gcc --deps-ver "4.5" --generate-gdsdk ``` You can use either `linux-gcc` or `linux-clang` as the `--compiler` option. As I already have a ton of development tools and libraries installed I didn't have to do anything special to get it to build and it took less than 2 minutes on my machine. ### Static Compilation >[!BUG] > For me, static compilation fails at linking, complaining about `_start` being defined twice. Linux isn't supported for this feature, which the dev calls `Jenova Core`. It doesn't make a [[Godot - GDExtensions|GDExtension]], but produces a "native module".(needs further explanation) ## Installing >[!WARNING] > Using my source[^14] build, Jenova would only run successfully with Godot 4.5-rc2, and not any other pre-releases of 4.5 or stable releases of 4.4 or 4.3 that I tested. I installed like this: ```sh 7z x Linux64/Distribution/Jenova-Framework-Linux64-llvm.7z -o"$godot_project_path" mkdir -p "$godot_project_path/Jenova/Packages/GodotSDK-Base" cp -r -v Linux64/GodotSDK/* "$godot_project_path/Jenova/Packages/GodotSDK-Base/" ``` After an incredible amount of trial and error and using some pointers[^13] from the documentation I wrote this script to launch Godot with the needed libraries preloaded on my system: ```sh #!/usr/bin/env sh handle_info="$(lsof -p $ -Fn0 | tail -1)" script_fullpath="${handle_info#n}" scriptdir="$(dirname "$script_fullpath")" export LD_PRELOAD=/usr/lib/libnghttp2.so:/usr/lib/libacl.so.1:/usr/lib/libssh2.so.1:/usr/lib/liblz4.so.1:/usr/lib/libb2.so.1:/usr/lib/libidn2.so cd "$scriptdir" touch "_sc_" "$scriptdir/Godot" ``` >[!HINT] > The above script creates an `_sc_` file, which tells Godot to store its settings and cache in that directory. You can change the `cd` to point at your own project directory instead. > > See also: [[Godot#Shared Cache]] >[!HINT] > I symlink the version of Godot I want to use like `ln -s Godot_v4.5-rc2_linux.x86_64 Godot` so I can just call `Godot` from scripts and not have to edit everything after every update. After getting it running in Godot, you will need to click the new `Jenova` menu item and go to `Tools/Open Package Manager` and install these things: - a compiler toolchain - GCC - Clang - Use System GCC (new as of [[2025-09-12]] or so) - a Godot SDK - Base - this allows you to use the one you built with `--generate-gdsdk` - various specific versions # References This note was split from another, so some citations remained behind at [[Projekt Jenova]]. [^1]: https://jenova-framework.github.io/docs/pages/Mechanism/ [^2]: https://jenova-framework.github.io/docs/pages/Basics/Properties/ [^3]: https://github.com/Jenova-Framework/J.E.N.O.V.A/blob/b15ba409eed2e1583f2cc68e67434e396599cf75/README.md?plain=1#L20 [^4]: https://jenova-framework.github.io/docs/pages/Basics/Addons [^5]: https://jenova-framework.github.io/docs/pages/Introduction [^6]: https://github.com/Jenova-Framework/Jenova-Runtime [^7]: https://jenova-framework.github.io/docs/pages/Advanced/Build-Guide/ [^8]: https://github.com/Jenova-Framework/J.E.N.O.V.A/discussions/13 [^9]: https://github.com/Jenova-Framework/Jenova-Runtime/issues/9 [^12]: https://github.com/Jenova-Framework/Jenova-Runtime/issues/9#issuecomment-2629259347 [^13]: https://jenova-framework.github.io/docs/KnownBugs [^14]: Git commit: `9065f18ec20704e4e7886404264c30c183d3618c` [^18]: https://github.com/Jenova-Framework/J.E.N.O.V.A/discussions/14 [^19]: https://github.com/TheAenema/godot-jenova