Deep-dive into the simulation launcher
Use app.add_launcher_args and app.launch_simulation to configure
a standalone script through command-line arguments and environment variables. This
example enables livestreaming and passes custom options to the Isaac Sim runtime.
Launching is split into two steps. First, app.add_launcher_args appends the launch-related options
to the script’s own argparse.ArgumentParser. Then, the app.launch_simulation context manager
takes the simulation configuration and the parsed arguments, and starts only the runtime that they need.
The PhysX physics backend, Kit-based RTX cameras, the Kit visualizer (--visualizer kit) and
livestreaming all run inside Isaac Sim (Kit), so for these launch_simulation starts a
SimulationApp. A kitless configuration, for example Newton physics
without a Kit visualizer, starts no Isaac Sim at all. The runtime is closed automatically when the
with block exits.
The launcher loads Isaac Sim extensions in the required order and applies startup
options such as headless before creating SimulationApp.
Its command-line options can be combined with arguments defined by your script.
The Code
The tutorial corresponds to the launch_app.py script in the
scripts/tutorials/00_sim directory.
Code for launch_app.py
The Code Explained
Adding arguments to the argparser
The launcher is designed to be compatible with custom CLI args that users need for their own scripts, while still providing a portable CLI interface.
In this tutorial, a standard argparse.ArgumentParser is instantiated and given the
script-specific --size argument, as well as the arguments --height and --width.
The latter are ingested by SimulationApp.
The script handles --size itself. Add the launcher options to the same parser with the
add_launcher_args function, which appends the launcher arguments to the given
ArgumentParser. This can then be processed into an argparse.Namespace using the
standard argparse.ArgumentParser.parse_args method.
Launching the simulator
The parsed arguments are passed, together with the simulation configuration, to
launch_simulation. The configuration tells it which runtime is needed (here, the default
PhysX physics backend, which runs inside Isaac Sim), and the arguments configure that runtime.
Everything that uses the simulator runs inside the with block.
Understanding the output of —help
While executing the script, we can pass the --help argument and see the combined outputs of the
custom arguments and the launcher options (abbreviated below).
uv (Recommended)
isaaclab.sh / isaaclab.bat
This readout details the --size, --height, and --width arguments defined in the script directly,
as well as the launcher arguments.
Script arguments whose name and type match an argument of
SimulationApp, in this case --height and --width, are forwarded
to the SimulationApp instance when launch_simulation
starts Isaac Sim. Please refer to the specification for such arguments for more examples.
Using environment variables
As noted in the help message, launcher arguments such as --livestream
have corresponding environment variables (envar) as well. These are detailed in isaaclab.app
documentation. Providing any of these arguments through CLI is equivalent to running the script in a shell
environment where the corresponding envar is set.
The support for launcher envars is simply a convenience to provide session-persistent
configurations, and can be set in the user’s ${HOME}/.bashrc for persistent settings between sessions.
In the case where these arguments are provided from the CLI, they will override their corresponding envar,
as we will demonstrate later in this tutorial.
These arguments can be used with any script that starts the simulation using launch_simulation.
Camera and offscreen rendering support is configured automatically.
The Code Execution
We will now run the example script:
Linux x86_64
Linux aarch64 (DGX Spark)
Windows
uv (Recommended)
isaaclab.sh / isaaclab.bat
This will spawn a 0.5m\ 3 volume cuboid in the simulation. No GUI will appear, equivalent
to omitting --visualizer in this setup because headlessness is implied by our LIVESTREAM
envar. If a visualization is desired, we could get one via Isaac’s WebRTC Livestreaming. Streaming
is currently the only supported method of visualization from within the container. The
process can be killed by pressing Ctrl+C in the launching terminal.

Now, let’s look at how the launcher handles conflicting commands:
Linux x86_64
Linux aarch64 (DGX Spark)
Windows
uv (Recommended)
isaaclab.sh / isaaclab.bat
This will cause the same behavior as in the previous run, because although we have set LIVESTREAM=0
in our envars, CLI args such as --livestream take precedence in determining behavior. The process can
be killed by pressing Ctrl+C in the launching terminal.
Finally, we will examine passing arguments to SimulationApp through
launch_simulation:
Linux x86_64
Linux aarch64 (DGX Spark)
Windows
uv (Recommended)
isaaclab.sh / isaaclab.bat
This will cause the same behavior as before, but now the viewport will be rendered at 1920x1080p resolution.
This can be useful when we want to gather high-resolution video, or we can specify a lower resolution if we
want our simulation to be more performant. The process can be killed by pressing Ctrl+C in the launching
terminal.
For more details on headless mode and launching visualizers, see /source/isaaclab/migrating.