Create new Isaac Sim extensions from standardized templates using the repo template tool.
| Template | Description |
|---|---|
| Isaac Sim Python Extension | Python-only extension with omni.ext.IExt lifecycle, tests, and docs |
| Isaac Sim UI Extension | Python extension with Examples Browser integration, scene management, physics callbacks, and custom UI |
| Isaac Sim C++ and Python Extension | C++ Carbonite plugin with pybind11 bindings and Python wrapper |
| Isaac Sim OmniGraph Node Extension | C++ and Python OmniGraph nodes with .ogn definitions, Carbonite plugin, and pybind11 bindings |
./repo.sh template newThis launches an interactive prompt that walks you through:
- Choosing Extension as the template type
- Selecting one of the four templates above
- Entering variable values (extension name, title, version, etc.)
The generated extension is placed in source/extensions/<extension_name>/ and is automatically discovered by the build system.
Each template prompts for the following variables:
| Variable | Default | Description |
|---|---|---|
extension_name |
isaacsim.my.extension |
Full dotted extension name (e.g. isaacsim.sensors.lidar) |
title |
My Extension |
Human-readable title shown in the Extension Manager |
version |
0.1.0 |
Initial semantic version |
description |
(varies) | One-line description for extension.toml |
category |
Simulation |
Extension category |
The C++ template additionally prompts for:
| Variable | Default | Description |
|---|---|---|
binding_module |
my_extension |
pybind11 module name (produces _<name>.so) |
The OmniGraph template does not need a binding_module — it is derived automatically from the extension name by the OGN build system.
The following variables are derived automatically from extension_name:
| Variable | Example |
|---|---|
python_module |
isaacsim.sensors.lidar |
python_module_path |
isaacsim/sensors/lidar |
python_module_toplevel |
isaacsim |
current_date |
2026-03-31 |
Generate a playback file first:
./repo.sh template new --generate-playback my_extension.tomlThen replay it without prompts:
./repo.sh template replay my_extension.tomlExample playback file:
[isaacsim-python-extension]
extension_name = "isaacsim.sensors.lidar"
title = "Lidar Sensor"
version = "0.1.0"
description = "Provides lidar sensor simulation."
category = "Sensors"./repo.sh template listAfter creating an extension:
# Build
./build.sh
# Run tests
cd _build/linux-x86_64/release
./tests/tests-<extension_name>.shThe new extension's premake5.lua is auto-discovered under source/extensions/.
Extensions must follow the isaacsim.<category>[.<subcategory>...] naming pattern. For example:
isaacsim.sensors.cameraisaacsim.core.utilsisaacsim.robot.controllers
Each template lives under templates/<template-name>/ and contains files with {{variable}} Jinja2 placeholders that are rendered at creation time. The template catalog is defined in templates/templates.toml.
To add a new template, create a directory with the scaffolded files and register it in templates.toml. See the repo_kit_template documentation for the full authoring guide.