The official starter repository for creating plugins for Infernux, an open-source C++17/Vulkan game engine with a Python authoring layer. Use this template for Python extensions, native libraries, Java tools, WebAssembly modules, shaders, materials, web content, or any other files an Infernux project needs.
简体中文 · Infernux Engine · Plugin Documentation · Official Plugins
flowchart LR
A[Your source and build tools] --> B[package/]
B --> C[package.py]
C --> D[Installable .inxpkg]
D --> E[Infernux Editor and Player]
-
Select Use this template on GitHub and clone your new repository.
-
Edit
package/inx_package.json: choose a globally unique lowercasereference, a human-readable name, a version, and the supported Infernux range. -
Put runtime files in
package/runtime/, Editor-only code inpackage/editor/, and plugin documentation inpackage/plugin_pages/. Other assets may use directories that fit your plugin. -
Build and verify the installable package:
python package.py build dist/example-plugin.inxpkg python package.py verify dist/example-plugin.inxpkg
package.py uses only the Python standard library, so packaging does not require an Infernux installation. Your repository may use CMake, Gradle, Cargo, npm, or another build system; copy only the files users need at runtime into package/.
The included Python starter requires Infernux 0.4.1 and uses the lowercase infernux package. Keep the manifest's engine range aligned with the APIs your plugin actually uses.
Inside an Infernux project, the selected folder is already the package root: select it in Project/File Manager, right click, and choose Export InxPackage.... The installed Plugins page contains the full tutorial, including lifecycle ownership, hot reload, Player component registration, large imports, and an Editor-only Flask tool window.
your-plugin/
├─ package.py standalone InxPackage builder
├─ README.md GitHub project documentation
├─ package/
│ ├─ inx_package.json identity, version, engine compatibility
│ ├─ runtime/ available to Editor and exported Players
│ ├─ editor/ Editor-only code, tools, and translations.json
│ ├─ plugin_pages/ documentation shown in the Plugins window
│ ├─ requirements.txt optional Python requirements
│ └─ shaders/, web/, samples/ optional plugin assets
└─ .github/workflows/ validation and release automation
Only package/ enters the .inxpkg. Source trees, build files, repository documentation, tests, and temporary output stay outside. The packer preserves arbitrary file types; directory placement determines how Infernux installs and exports them.
Every pull request and push to main validates the manifest and verifies deterministic package output. Set the manifest version, then push the matching v<version> tag. GitHub Actions publishes the .inxpkg and infernux-plugin-release.json to a GitHub Release, ready for the Infernux Plugins window.
For a complete production example, see the Windows, Linux, Web, Android, and MCP plugins.
plugin_pages/ is the only conventional source for Plugins-panel documentation. Runtime and Editor preloads are deliberately separate: runtime components and preloads are cooked into Players, while Editor panels and tools are excluded. Register threads, servers, watches, and callbacks with PreloadContext.add_cleanup() as soon as they are created. Infernux removes lifecycle-owned contributions during hot reload, disable, uninstall, and project shutdown.
The template includes editor/translations.json. Infernux loads this package-owned catalog before Editor preloads, applies it to panel titles and every declared menu level, and removes it on disable, uninstall, or hot reload.
MIT.