diff --git a/src/external/slam_tracker/slam_tracker.hpp b/src/external/slam_tracker/slam_tracker.hpp
index 4058ee11e..0b58d7c27 100644
--- a/src/external/slam_tracker/slam_tracker.hpp
+++ b/src/external/slam_tracker/slam_tracker.hpp
@@ -29,7 +29,7 @@ namespace xrt::auxiliary::tracking::slam {
 
 // For implementation: same as IMPLEMENTATION_VERSION_*
 // For user: expected IMPLEMENTATION_VERSION_*. Should be checked in runtime.
-constexpr int HEADER_VERSION_MAJOR = 4; //!< API Breakages
+constexpr int HEADER_VERSION_MAJOR = 5; //!< API Breakages
 constexpr int HEADER_VERSION_MINOR = 0; //!< Backwards compatible API changes
 constexpr int HEADER_VERSION_PATCH = 0; //!< Backw. comp. .h-implemented changes
 
@@ -87,6 +87,17 @@ struct img_sample {
       : timestamp(timestamp), img(img), is_left(is_left) {}
 };
 
+/*!
+ * @brief Parameters for creating the system pipeline.
+ */
+struct slam_config {
+  //! Path to a implementation-specific config file. If null, use defaults.
+  std::shared_ptr<std::string> config_file;
+
+  //! If supported, whether to open the system's UI.
+  bool show_ui;
+};
+
 /*!
  * @brief slam_tracker serves as an interface between Monado and external SLAM
  * systems.
@@ -95,15 +106,7 @@ struct img_sample {
  * should be provided by an external SLAM system.
  */
 struct slam_tracker {
-  /*!
-   * @brief Construct a new slam tracker object
-   *
-   * @param config_file SLAM systems parameters tend to be numerous and very
-   * specific, so they usually use a configuration file as the main way to set
-   * them up. Therefore, this constructor receives a path to a
-   * implementation-specific configuration file.
-   */
-  slam_tracker(const std::string &config_file);
+  slam_tracker(const slam_config &config);
   ~slam_tracker();
 
   slam_tracker(const slam_tracker &) = delete;
diff --git a/src/xrt/auxiliary/tracking/t_tracker_slam.cpp b/src/xrt/auxiliary/tracking/t_tracker_slam.cpp
index c62136215..123d03f0a 100644
--- a/src/xrt/auxiliary/tracking/t_tracker_slam.cpp
+++ b/src/xrt/auxiliary/tracking/t_tracker_slam.cpp
@@ -66,6 +66,7 @@
 //! @see t_slam_tracker_config
 DEBUG_GET_ONCE_LOG_OPTION(slam_log, "SLAM_LOG", U_LOGGING_INFO)
 DEBUG_GET_ONCE_OPTION(slam_config, "SLAM_CONFIG", nullptr)
+DEBUG_GET_ONCE_BOOL_OPTION(slam_ui, "SLAM_UI", false)
 DEBUG_GET_ONCE_BOOL_OPTION(slam_submit_from_start, "SLAM_SUBMIT_FROM_START", false)
 DEBUG_GET_ONCE_NUM_OPTION(slam_prediction_type, "SLAM_PREDICTION_TYPE", long(SLAM_PRED_SP_SO_IA_SL))
 DEBUG_GET_ONCE_BOOL_OPTION(slam_write_csvs, "SLAM_WRITE_CSVS", false)
@@ -1268,6 +1269,7 @@ t_slam_fill_default_config(struct t_slam_tracker_config *config)
 {
 	config->log_level = debug_get_log_option_slam_log();
 	config->slam_config = debug_get_option_slam_config();
+	config->slam_ui = debug_get_bool_option_slam_ui();
 	config->submit_from_start = debug_get_bool_option_slam_submit_from_start();
 	config->prediction = t_slam_prediction_type(debug_get_num_option_slam_prediction_type());
 	config->write_csvs = debug_get_bool_option_slam_write_csvs();
@@ -1321,8 +1323,10 @@ t_slam_create(struct xrt_frame_context *xfctx,
 
 	t.base.get_tracked_pose = t_slam_get_tracked_pose;
 
-	std::string config_file_string = std::string(config_file ? config_file : "DEFAULT");
-	t.slam = new slam_tracker{config_file_string};
+	slam_config system_config = {};
+	system_config.config_file = config_file ? make_shared<string>(config_file) : nullptr;
+	system_config.show_ui = config->slam_ui;
+	t.slam = new slam_tracker{system_config};
 
 	if (!config_file) {
 		SLAM_INFO("Using calibration from driver and default pipeline settings");
diff --git a/src/xrt/auxiliary/tracking/t_tracking.h b/src/xrt/auxiliary/tracking/t_tracking.h
index 88e574715..3700aeed8 100644
--- a/src/xrt/auxiliary/tracking/t_tracking.h
+++ b/src/xrt/auxiliary/tracking/t_tracking.h
@@ -465,6 +465,7 @@ struct t_slam_tracker_config
 {
 	enum u_logging_level log_level; //!< SLAM tracking logging level
 	const char *slam_config;        //!< Config file path, format is specific to the SLAM implementation in use
+	bool slam_ui;                   //!< Whether to open the external UI of the external SLAM system
 	bool submit_from_start;         //!< Whether to submit data to the SLAM tracker without user action
 	enum t_slam_prediction_type prediction; //!< Which level of prediction to use
 	bool write_csvs;                        //!< Whether to enable CSV writers from the start for later analysis