Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
jazzy

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
kilted

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
rolling

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

better_launch package from better_launch repo

better_launch

ROS Distro
humble

Package Summary

Tags No category tags.
Version 1.0.1
License MIT
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/dfki-ric/better_launch.git
VCS Type git
VCS Version main
Last Updated 2025-08-01
Dev Status DEVELOPED
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

A better replacement for the ROS2 launch system: intuitive, simple, memorable.

Additional Links

Maintainers

  • Nikolas Dahn

Authors

  • Nikolas Dahn

Logo

About Why? Features Usage TUI Differences Performance Installation ROS2 Contributors

[!TIP] Just looking for the documentation? We also have multiple examples!

🧭 About

Let’s face it: ROS2 has been a severe downgrade in terms of usability compared to ROS1. While there are many considerable improvements, the current launch system is borderline unusable. I’ve listed my personal gripes below, but if you’re here you likely feel the same. This is why I wrote better_launch.

Instead of dozens of imports and class instances for even the most basic tasks, your launch files could look as simple and beautiful as this:

from better_launch import BetterLaunch, launch_this

@launch_this(ui=True)
def my_main(enable_x: bool = True):
    """
    This is how nice your launch files could be!
    """
    bl = BetterLaunch()

    if enable_x:
        bl.node(
            "examples_rclpy_minimal_publisher",
            "publisher_local_function",
            "example_publisher",
        )

    # Include other launch files, even regular ROS2 launch files!
    bl.include("better_launch", "ros2_turtlesim.launch.py")

$> bl my_package my_launch_file.py --enable_x True

Do I have your attention? Read on to learn more!

🤔 Why not improve the existing ROS2 launch?

Because I think it is beyond redemption and no amount of refactoring and REPs (ROS enhancement proposals) will turn the sails. Tools like the highly rated simple_launch or launch-generator exist, but still use ROS2 launch under the hood and so inherit much of its clunkiness. Rather than fixing an inherently broken solution, I decided to make a RAP - a ROS abandonment proposal :)

Essentially, better_launch is what I wish ROS2 launch would be: intuitive to use, simple to understand, easy to remember. This is why better_launch is not yet another abstraction layer over ROS2 launch; it is a full replacement with no required dependencies on the existing launch system.

🧩 Okay, what can I do with it?

Everything you would expect and a little more! The BetterLaunch instance allows you to

  • create subscribers, publishers, services, service clients, action servers and action clients on the fly
  • start and stop nodes
  • start and stop lifecycle nodes and manage their lifecycle stage
  • start and stop composers and load components into them
  • organize your nodes in groups
  • define hasslefree topic remaps for nodes and groups
  • pass any arguments from the command line without having to declare them
  • easily load parameters from yaml files
  • locate files based on filenames and package names
  • use string substitutions to resolve e.g. paths
  • include other better_launch launch files
  • include other ROS2 launch files
  • let regular ROS2 launch files include your better_launch launch files
  • configure logging just as you would in ROS2, yet have much more readable output
  • manage your node using a nice terminal UI reminiscent of rosmon

For a quick comparison, bravely unfold the sections below:

ROS2 ```python # Taken from https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Using-Substitutions.html from launch_ros.actions import Node from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, ExecuteProcess, TimerAction from launch.conditions import IfCondition from launch.substitutions import LaunchConfiguration, PythonExpression def generate_launch_description(): turtlesim_ns = LaunchConfiguration('turtlesim_ns') use_provided_red = LaunchConfiguration('use_provided_red') new_background_r = LaunchConfiguration('new_background_r') turtlesim_ns_launch_arg = DeclareLaunchArgument( 'turtlesim_ns', default_value='turtlesim1' ) use_provided_red_launch_arg = DeclareLaunchArgument( 'use_provided_red', default_value='False' ) new_background_r_launch_arg = DeclareLaunchArgument( 'new_background_r', default_value='200' ) File truncated at 100 lines [see the full file](https://github.com/dfki-ric/better_launch/tree/main/./README.md)
CHANGELOG

Changelog for package better_launch

1.0.1 (2025-07-31)

  • Minor changes and adjustments for the first official release
  • All examples are working, performance is good, documentation is complete, cats are happy
  • Contributors: Nikolas Dahn, Prithvi Sanghamreddy, Sebastian Kasperski, Tom Creutz

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged better_launch at Robotics Stack Exchange