diff --git a/peridot/bin/basemgr/BUILD.gn b/peridot/bin/basemgr/BUILD.gn
index feba129..d989a44 100644
--- a/peridot/bin/basemgr/BUILD.gn
+++ b/peridot/bin/basemgr/BUILD.gn
@@ -64,6 +64,7 @@
     "//sdk/fidl/fuchsia.modular",
     "//sdk/fidl/fuchsia.modular.auth",
     "//sdk/fidl/fuchsia.modular.internal",
+    "//sdk/fidl/fuchsia.modular.session",
     "//sdk/fidl/fuchsia.sys",
     "//sdk/fidl/fuchsia.ui.app",
     "//sdk/fidl/fuchsia.ui.policy",
@@ -77,7 +78,6 @@
 
   public_deps = [
     "//peridot/bin/basemgr/cobalt:basemgr_metrics_registry",
-    "//sdk/fidl/fuchsia.modular.internal",
   ]
 
   resources = [
@@ -139,6 +139,7 @@
     "//peridot/lib/fidl:json_xdr",
     "//peridot/lib/modular_config",
     "//peridot/public/lib/async/cpp:future",
+    "//sdk/fidl/fuchsia.modular.session",
     "//sdk/fidl/fuchsia.sys",
     "//sdk/fidl/fuchsia.ui.gfx",
     "//sdk/fidl/fuchsia.ui.input",
diff --git a/peridot/bin/basemgr/basemgr_impl.cc b/peridot/bin/basemgr/basemgr_impl.cc
index dff374b..d788972 100644
--- a/peridot/bin/basemgr/basemgr_impl.cc
+++ b/peridot/bin/basemgr/basemgr_impl.cc
@@ -22,15 +22,15 @@
 
 namespace fidl {
 template <>
-// fidl::TypeConverter specialization for fuchsia::modular::internal::AppConfig
+// fidl::TypeConverter specialization for fuchsia::modular::session::AppConfig
 // TODO(MF-277) Convert all usages of fuchsia::modular::AppConfig to
-// fuchsia::modular::internal::AppConfig and remove this converter.
+// fuchsia::modular::session::AppConfig and remove this converter.
 struct TypeConverter<fuchsia::modular::AppConfig,
-                     fuchsia::modular::internal::AppConfig> {
-  // Converts fuchsia::modular::internal::AppConfig to
+                     fuchsia::modular::session::AppConfig> {
+  // Converts fuchsia::modular::session::AppConfig to
   // fuchsia::modular::AppConfig
   static fuchsia::modular::AppConfig Convert(
-      const fuchsia::modular::internal::AppConfig& config) {
+      const fuchsia::modular::session::AppConfig& config) {
     fuchsia::modular::AppConfig app_config;
     app_config.url = config.url().c_str();
 
@@ -68,7 +68,7 @@
 }  // namespace
 
 BasemgrImpl::BasemgrImpl(
-    fuchsia::modular::internal::BasemgrConfig config,
+    fuchsia::modular::session::BasemgrConfig config,
     fuchsia::sys::Launcher* const launcher,
     fuchsia::ui::policy::PresenterPtr presenter,
     fuchsia::devicesettings::DeviceSettingsManagerPtr device_settings_manager,
@@ -383,7 +383,7 @@
       });
 }
 
-fuchsia::modular::internal::SessionShellConfig
+fuchsia::modular::session::SessionShellConfig
 BasemgrImpl::GetActiveSessionShellConfig() {
   return CloneStruct(config_.session_shell_map()
                          .at(active_session_shell_configs_index_)
diff --git a/peridot/bin/basemgr/basemgr_impl.h b/peridot/bin/basemgr/basemgr_impl.h
index bb7ae2e..ca48994 100644
--- a/peridot/bin/basemgr/basemgr_impl.h
+++ b/peridot/bin/basemgr/basemgr_impl.h
@@ -10,6 +10,7 @@
 #include <fuchsia/modular/auth/cpp/fidl.h>
 #include <fuchsia/modular/cpp/fidl.h>
 #include <fuchsia/modular/internal/cpp/fidl.h>
+#include <fuchsia/modular/session/cpp/fidl.h>
 #include <fuchsia/sys/cpp/fidl.h>
 #include <fuchsia/ui/policy/cpp/fidl.h>
 #include <fuchsia/wlan/service/cpp/fidl.h>
@@ -56,7 +57,7 @@
   // reset.
   // |on_shutdown| Callback invoked when this basemgr instance is shutdown.
   explicit BasemgrImpl(
-      fuchsia::modular::internal::BasemgrConfig config,
+      fuchsia::modular::session::BasemgrConfig config,
       fuchsia::sys::Launcher* const launcher,
       fuchsia::ui::policy::PresenterPtr presenter,
       fuchsia::devicesettings::DeviceSettingsManagerPtr device_settings_manager,
@@ -115,7 +116,7 @@
 
   // Returns the session shell config of the active session shell, or returns
   // the a default config if there is no active one.
-  fuchsia::modular::internal::SessionShellConfig GetActiveSessionShellConfig();
+  fuchsia::modular::session::SessionShellConfig GetActiveSessionShellConfig();
 
   // Updates the session shell app config to the active session shell. Done once
   // on initialization and every time the session shells are swapped.
@@ -134,14 +135,14 @@
   void GetPresentation(fidl::InterfaceRequest<fuchsia::ui::policy::Presentation>
                            request) override;
 
-  fuchsia::modular::internal::BasemgrConfig config_;
+  fuchsia::modular::session::BasemgrConfig config_;
 
   // Used to configure which session shell component to launch.
   fuchsia::modular::AppConfig session_shell_config_;
 
   // |active_session_shell_configs_index_| indicates which settings
   // in |config_.session_shell_map()| is currently active.
-  std::vector<fuchsia::modular::internal::SessionShellConfig>::size_type
+  std::vector<fuchsia::modular::session::SessionShellConfig>::size_type
       active_session_shell_configs_index_{};
 
   // Used to launch component instances, such as the base shell.
diff --git a/peridot/bin/basemgr/basemgr_settings.cc b/peridot/bin/basemgr/basemgr_settings.cc
index 86c9d95..fcc0e9c 100644
--- a/peridot/bin/basemgr/basemgr_settings.cc
+++ b/peridot/bin/basemgr/basemgr_settings.cc
@@ -83,9 +83,9 @@
 }
 
 // Temporary way to transform commandline args into FIDL table
-fuchsia::modular::internal::BasemgrConfig
+fuchsia::modular::session::BasemgrConfig
 BasemgrSettings::CreateBasemgrConfig() {
-  fuchsia::modular::internal::BasemgrConfig config;
+  fuchsia::modular::session::BasemgrConfig config;
 
   config.set_enable_cobalt(!disable_statistics);
   config.set_enable_presenter(enable_presenter);
@@ -99,7 +99,7 @@
   config.mutable_base_shell()->set_keep_alive_after_login(
       keep_base_shell_alive_after_login);
 
-  fuchsia::modular::internal::SessionShellMapEntry session_shell_entry;
+  fuchsia::modular::session::SessionShellMapEntry session_shell_entry;
   session_shell_entry.set_name(session_shell.url());
   session_shell_entry.mutable_config()->set_app_config(
       std::move(session_shell));
diff --git a/peridot/bin/basemgr/basemgr_settings.h b/peridot/bin/basemgr/basemgr_settings.h
index 284171c..ce095d3 100644
--- a/peridot/bin/basemgr/basemgr_settings.h
+++ b/peridot/bin/basemgr/basemgr_settings.h
@@ -9,6 +9,7 @@
 
 #include <fuchsia/modular/cpp/fidl.h>
 #include <fuchsia/modular/internal/cpp/fidl.h>
+#include <fuchsia/modular/session/cpp/fidl.h>
 #include <lib/fidl/cpp/string.h>
 #include <src/lib/fxl/command_line.h>
 #include <src/lib/fxl/macros.h>
@@ -25,12 +26,12 @@
 
   // Creates a fidl table of basemgr configurations from the parsed command line
   // arguments.
-  fuchsia::modular::internal::BasemgrConfig CreateBasemgrConfig();
+  fuchsia::modular::session::BasemgrConfig CreateBasemgrConfig();
 
-  fuchsia::modular::internal::AppConfig base_shell;
-  fuchsia::modular::internal::AppConfig story_shell;
-  fuchsia::modular::internal::AppConfig sessionmgr;
-  fuchsia::modular::internal::AppConfig session_shell;
+  fuchsia::modular::session::AppConfig base_shell;
+  fuchsia::modular::session::AppConfig story_shell;
+  fuchsia::modular::session::AppConfig sessionmgr;
+  fuchsia::modular::session::AppConfig session_shell;
 
   std::string test_name;
   bool use_session_shell_for_story_shell_factory;
diff --git a/peridot/bin/basemgr/main.cc b/peridot/bin/basemgr/main.cc
index 0f30e78..95fcddf 100644
--- a/peridot/bin/basemgr/main.cc
+++ b/peridot/bin/basemgr/main.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <fuchsia/modular/internal/cpp/fidl.h>
+#include <fuchsia/modular/session/cpp/fidl.h>
 #include <lib/async-loop/cpp/loop.h>
 #include <lib/component/cpp/startup_context.h>
 #include <lib/fit/defer.h>
@@ -39,7 +40,7 @@
   return modular::InitializeCobalt(dispatcher, context);
 };
 
-fuchsia::modular::internal::BasemgrConfig CreateBasemgrConfigFromCommandLine(
+fuchsia::modular::session::BasemgrConfig CreateBasemgrConfigFromCommandLine(
     fxl::CommandLine command_line) {
   modular::BasemgrSettings settings(command_line);
   auto config = settings.CreateBasemgrConfig();
@@ -58,14 +59,14 @@
     }
 
     for (auto setting : session_shell_settings) {
-      fuchsia::modular::internal::SessionShellConfig session_shell_config;
+      fuchsia::modular::session::SessionShellConfig session_shell_config;
       session_shell_config.set_display_usage(setting.display_usage);
       session_shell_config.set_screen_height(setting.screen_height);
       session_shell_config.set_screen_width(setting.screen_width);
       session_shell_config.mutable_app_config()->set_url(setting.name);
       session_shell_config.mutable_app_config()->set_args({});
 
-      fuchsia::modular::internal::SessionShellMapEntry entry;
+      fuchsia::modular::session::SessionShellMapEntry entry;
       entry.set_name(setting.name);
       entry.set_config(std::move(session_shell_config));
 
@@ -77,7 +78,7 @@
 }
 
 int main(int argc, const char** argv) {
-  fuchsia::modular::internal::BasemgrConfig config;
+  fuchsia::modular::session::BasemgrConfig config;
 
   if (argc == 1) {
     // Read configurations from file if no command line arguments are passed in.
@@ -102,7 +103,7 @@
   // When auto-login to guest is specified, we use dev_base_shell with user
   // specified such that a persistent guest user is created on first-time boot.
   if (kAutoLoginToGuest) {
-    fuchsia::modular::internal::AppConfig override_base_shell;
+    fuchsia::modular::session::AppConfig override_base_shell;
     override_base_shell.set_url(modular_config::kDefaultBaseShellUrl);
     override_base_shell.mutable_args()->push_back("--user=persistent_guest");
     config.mutable_base_shell()->set_app_config(std::move(override_base_shell));
diff --git a/peridot/bin/basemgr/presentation_container.cc b/peridot/bin/basemgr/presentation_container.cc
index cef6edf..75fa7ad 100644
--- a/peridot/bin/basemgr/presentation_container.cc
+++ b/peridot/bin/basemgr/presentation_container.cc
@@ -20,7 +20,7 @@
 PresentationContainer::PresentationContainer(
     fuchsia::ui::policy::Presenter* const presenter,
     fuchsia::ui::views::ViewHolderToken view_holder_token,
-    fuchsia::modular::internal::SessionShellConfig shell_config,
+    fuchsia::modular::session::SessionShellConfig shell_config,
     fit::function<void()> on_swap_session_shell)
     : presenter_(presenter),
       on_swap_session_shell_(std::move(on_swap_session_shell)) {
diff --git a/peridot/bin/basemgr/presentation_container.h b/peridot/bin/basemgr/presentation_container.h
index c7de93d..1a69cb6 100644
--- a/peridot/bin/basemgr/presentation_container.h
+++ b/peridot/bin/basemgr/presentation_container.h
@@ -5,7 +5,7 @@
 #ifndef PERIDOT_BIN_BASEMGR_PRESENTATION_CONTAINER_H_
 #define PERIDOT_BIN_BASEMGR_PRESENTATION_CONTAINER_H_
 
-#include <fuchsia/modular/internal/cpp/fidl.h>
+#include <fuchsia/modular/session/cpp/fidl.h>
 #include <fuchsia/ui/gfx/cpp/fidl.h>
 #include <fuchsia/ui/input/cpp/fidl.h>
 #include <fuchsia/ui/policy/cpp/fidl.h>
@@ -28,7 +28,7 @@
   explicit PresentationContainer(
       fuchsia::ui::policy::Presenter* const presenter,
       fuchsia::ui::views::ViewHolderToken view_holder_token,
-      fuchsia::modular::internal::SessionShellConfig shell_config,
+      fuchsia::modular::session::SessionShellConfig shell_config,
       fit::function<void()> on_swap_session_shell);
 
   ~PresentationContainer() override;
diff --git a/peridot/bin/modular_test_harness/modular_test_harness_test.cc b/peridot/bin/modular_test_harness/modular_test_harness_test.cc
index 646308b..f7bed5c 100644
--- a/peridot/bin/modular_test_harness/modular_test_harness_test.cc
+++ b/peridot/bin/modular_test_harness/modular_test_harness_test.cc
@@ -33,4 +33,4 @@
 
   ASSERT_TRUE(
       RunLoopWithTimeoutOrUntil([&] { return intercepted; }, zx::sec(5)));
-}
\ No newline at end of file
+}
diff --git a/peridot/bin/sessionmgr/BUILD.gn b/peridot/bin/sessionmgr/BUILD.gn
index b85be50..3de5b70 100644
--- a/peridot/bin/sessionmgr/BUILD.gn
+++ b/peridot/bin/sessionmgr/BUILD.gn
@@ -66,6 +66,7 @@
     "//sdk/fidl/fuchsia.modular",
     "//sdk/fidl/fuchsia.modular.auth",
     "//sdk/fidl/fuchsia.modular.internal",
+    "//sdk/fidl/fuchsia.modular.session",
     "//sdk/fidl/fuchsia.net.oldhttp",
     "//sdk/fidl/fuchsia.speech",
     "//sdk/fidl/fuchsia.sys",
@@ -196,6 +197,7 @@
     "//sdk/fidl/fuchsia.ledger",
     "//sdk/fidl/fuchsia.modular",
     "//sdk/fidl/fuchsia.modular.internal",
+    "//sdk/fidl/fuchsia.modular.session",
     "//sdk/lib/fidl/cpp",
     "//src/lib/fxl",
   ]
diff --git a/peridot/bin/sessionmgr/sessionmgr.cc b/peridot/bin/sessionmgr/sessionmgr.cc
index af31906..9a2191d 100644
--- a/peridot/bin/sessionmgr/sessionmgr.cc
+++ b/peridot/bin/sessionmgr/sessionmgr.cc
@@ -31,7 +31,7 @@
 
 void OverrideConfigFromCommandLine(
     fxl::CommandLine command_line,
-    fuchsia::modular::internal::SessionmgrConfig* config) {
+    fuchsia::modular::session::SessionmgrConfig* config) {
   if (command_line.HasOption(modular_config::kEnableCobalt)) {
     config->set_enable_cobalt(
         command_line.GetOptionValueWithDefault(modular_config::kEnableCobalt,
@@ -51,11 +51,11 @@
   }
 
   if (command_line.HasOption(modular_config::kNoCloudProviderForLedger)) {
-    config->set_cloud_provider(fuchsia::modular::internal::CloudProvider::NONE);
+    config->set_cloud_provider(fuchsia::modular::session::CloudProvider::NONE);
   } else if (command_line.HasOption(
                  modular_config::kUseCloudProviderFromEnvironment)) {
     config->set_cloud_provider(
-        fuchsia::modular::internal::CloudProvider::FROM_ENVIRONMENT);
+        fuchsia::modular::session::CloudProvider::FROM_ENVIRONMENT);
   }
 
   if (command_line.HasOption(modular_config::kStartupAgents)) {
@@ -79,7 +79,7 @@
   // Read configurations from file. This sets default values for any
   // configurations that aren't specified in the configuration.
   modular::ModularConfigReader config_reader;
-  fuchsia::modular::internal::SessionmgrConfig config =
+  fuchsia::modular::session::SessionmgrConfig config =
       config_reader.GetSessionmgrConfig();
 
   if (argc > 1) {
diff --git a/peridot/bin/sessionmgr/sessionmgr_impl.cc b/peridot/bin/sessionmgr/sessionmgr_impl.cc
index 2fb3669..9f0a8c3 100644
--- a/peridot/bin/sessionmgr/sessionmgr_impl.cc
+++ b/peridot/bin/sessionmgr/sessionmgr_impl.cc
@@ -167,7 +167,7 @@
 
 SessionmgrImpl::SessionmgrImpl(
     component::StartupContext* const startup_context,
-    fuchsia::modular::internal::SessionmgrConfig config)
+    fuchsia::modular::session::SessionmgrConfig config)
     : startup_context_(startup_context),
       config_(std::move(config)),
       story_provider_impl_("StoryProviderImpl"),
@@ -318,16 +318,16 @@
   fuchsia::ledger::cloud::CloudProviderPtr cloud_provider;
   std::string ledger_user_id;
   if (account_ && (config_.cloud_provider()) !=
-                      fuchsia::modular::internal::CloudProvider::NONE) {
+                      fuchsia::modular::session::CloudProvider::NONE) {
     // If not running in Guest mode, configure the cloud provider for Ledger to
     // use for syncing.
 
     if ((config_.cloud_provider()) ==
-        fuchsia::modular::internal::CloudProvider::FROM_ENVIRONMENT) {
+        fuchsia::modular::session::CloudProvider::FROM_ENVIRONMENT) {
       startup_context_->ConnectToEnvironmentService(
           cloud_provider.NewRequest());
     } else if (config_.cloud_provider() ==
-               fuchsia::modular::internal::CloudProvider::LET_LEDGER_DECIDE) {
+               fuchsia::modular::session::CloudProvider::LET_LEDGER_DECIDE) {
       cloud_provider = LaunchCloudProvider(account_->profile_id,
                                            std::move(ledger_token_manager));
     }
diff --git a/peridot/bin/sessionmgr/sessionmgr_impl.h b/peridot/bin/sessionmgr/sessionmgr_impl.h
index 92ebdbe..ed81dbc 100644
--- a/peridot/bin/sessionmgr/sessionmgr_impl.h
+++ b/peridot/bin/sessionmgr/sessionmgr_impl.h
@@ -11,6 +11,7 @@
 #include <fuchsia/modular/auth/cpp/fidl.h>
 #include <fuchsia/modular/cpp/fidl.h>
 #include <fuchsia/modular/internal/cpp/fidl.h>
+#include <fuchsia/modular/session/cpp/fidl.h>
 #include <fuchsia/speech/cpp/fidl.h>
 #include <fuchsia/ui/policy/cpp/fidl.h>
 #include <fuchsia/ui/views/cpp/fidl.h>
@@ -60,7 +61,7 @@
                        EntityProviderLauncher {
  public:
   SessionmgrImpl(component::StartupContext* startup_context,
-                 fuchsia::modular::internal::SessionmgrConfig config);
+                 fuchsia::modular::session::SessionmgrConfig config);
   ~SessionmgrImpl() override;
 
   // |AppDriver| calls this.
@@ -195,7 +196,7 @@
   std::string session_id_;
 
   component::StartupContext* const startup_context_;
-  fuchsia::modular::internal::SessionmgrConfig config_;
+  fuchsia::modular::session::SessionmgrConfig config_;
   std::unique_ptr<scoped_tmpfs::ScopedTmpFS> memfs_for_ledger_;
 
   fidl::BindingSet<fuchsia::modular::internal::Sessionmgr> bindings_;
diff --git a/peridot/lib/modular_config/BUILD.gn b/peridot/lib/modular_config/BUILD.gn
index d591411..bdde080 100644
--- a/peridot/lib/modular_config/BUILD.gn
+++ b/peridot/lib/modular_config/BUILD.gn
@@ -16,6 +16,7 @@
     "//garnet/public/lib/json",
     "//peridot/lib/fidl:json_xdr",
     "//sdk/fidl/fuchsia.modular",
+    "//sdk/fidl/fuchsia.modular.session",
     "//sdk/fidl/fuchsia.modular.internal",
   ]
 }
@@ -30,6 +31,7 @@
   deps = [
     "//peridot/lib/fidl:json_xdr",
     "//sdk/fidl/fuchsia.modular",
+    "//sdk/fidl/fuchsia.modular.session",
     "//sdk/fidl/fuchsia.modular.internal",
   ]
 }
@@ -45,6 +47,7 @@
     ":json_xdr",
     "//garnet/public/lib/fxl",
     "//peridot/lib/rapidjson",
+    "//sdk/fidl/fuchsia.modular.session",
     "//sdk/fidl/fuchsia.modular.internal",
     "//third_party/googletest:gtest",
     "//third_party/rapidjson",
diff --git a/peridot/lib/modular_config/modular_config.cc b/peridot/lib/modular_config/modular_config.cc
index 5564b12..d5c78c83 100644
--- a/peridot/lib/modular_config/modular_config.cc
+++ b/peridot/lib/modular_config/modular_config.cc
@@ -14,7 +14,7 @@
 ModularConfigReader::ModularConfigReader() {}
 ModularConfigReader::~ModularConfigReader() {}
 
-fuchsia::modular::internal::BasemgrConfig
+fuchsia::modular::session::BasemgrConfig
 ModularConfigReader::GetBasemgrConfig() {
   std::string config_path;
   if (files::IsFile(modular_config::kOverridenStartupConfigPath)) {
@@ -28,7 +28,7 @@
       GetConfigAsString(modular_config::kBasemgrConfigName, config_path);
 
   // Parse with xdr
-  fuchsia::modular::internal::BasemgrConfig basemgr_config;
+  fuchsia::modular::session::BasemgrConfig basemgr_config;
   if (!basemgr_config_str.empty() &&
       !XdrRead(basemgr_config_str, &basemgr_config, XdrBasemgrConfig)) {
     FXL_LOG(ERROR) << "Unable to parse startup.json";
@@ -37,7 +37,7 @@
   return basemgr_config;
 }
 
-fuchsia::modular::internal::SessionmgrConfig
+fuchsia::modular::session::SessionmgrConfig
 ModularConfigReader::GetSessionmgrConfig() {
   // Get sessionmgr config section from file
   auto sessionmgr_config_str =
@@ -45,7 +45,7 @@
                         modular_config::kOverridenStartupConfigPath);
 
   // Parse with xdr
-  fuchsia::modular::internal::SessionmgrConfig sessionmgr_config;
+  fuchsia::modular::session::SessionmgrConfig sessionmgr_config;
   if (!XdrRead(sessionmgr_config_str, &sessionmgr_config,
                XdrSessionmgrConfig)) {
     FXL_LOG(ERROR) << "Unable to parse startup.json";
@@ -54,9 +54,9 @@
   return sessionmgr_config;
 }
 
-fuchsia::modular::internal::SessionmgrConfig
+fuchsia::modular::session::SessionmgrConfig
 ModularConfigReader::GetDefaultSessionmgrConfig() {
-  fuchsia::modular::internal::SessionmgrConfig sessionmgr_config;
+  fuchsia::modular::session::SessionmgrConfig sessionmgr_config;
   XdrRead("\"\"", &sessionmgr_config, XdrSessionmgrConfig);
   return sessionmgr_config;
 }
diff --git a/peridot/lib/modular_config/modular_config.h b/peridot/lib/modular_config/modular_config.h
index aef8708..c8ae624 100644
--- a/peridot/lib/modular_config/modular_config.h
+++ b/peridot/lib/modular_config/modular_config.h
@@ -6,6 +6,7 @@
 #define PERIDOT_LIB_MODULAR_CONFIG_MODULAR_CONFIG_H_
 
 #include <fuchsia/modular/internal/cpp/fidl.h>
+#include <fuchsia/modular/session/cpp/fidl.h>
 #include <fuchsia/sys/cpp/fidl.h>
 
 namespace modular {
@@ -16,14 +17,14 @@
   ~ModularConfigReader();
 
   // Reads basemgr configs from startup.config and parses it into a fidl table
-  fuchsia::modular::internal::BasemgrConfig GetBasemgrConfig();
+  fuchsia::modular::session::BasemgrConfig GetBasemgrConfig();
 
   // Reads sessionmgr configs from startup.config and parses it into a fidl
   // table
-  fuchsia::modular::internal::SessionmgrConfig GetSessionmgrConfig();
+  fuchsia::modular::session::SessionmgrConfig GetSessionmgrConfig();
 
   // Returns a SessionmgrConfig with all default values
-  fuchsia::modular::internal::SessionmgrConfig GetDefaultSessionmgrConfig();
+  fuchsia::modular::session::SessionmgrConfig GetDefaultSessionmgrConfig();
 
  private:
   // Reads startup.config into a string if the file exists. Otherwise, returns
diff --git a/peridot/lib/modular_config/modular_config_xdr.cc b/peridot/lib/modular_config/modular_config_xdr.cc
index aa9ea30..128852e 100644
--- a/peridot/lib/modular_config/modular_config_xdr.cc
+++ b/peridot/lib/modular_config/modular_config_xdr.cc
@@ -11,7 +11,7 @@
 
 void XdrBaseShellConfig(
     XdrContext* const xdr,
-    fuchsia::modular::internal::BaseShellConfig* const data) {
+    fuchsia::modular::session::BaseShellConfig* const data) {
   bool has_url = false;
   if (data->has_app_config()) {
     has_url = data->app_config().has_url();
@@ -63,7 +63,7 @@
 
 void XdrSessionShellMapEntry(
     XdrContext* const xdr,
-    fuchsia::modular::internal::SessionShellMapEntry* const data) {
+    fuchsia::modular::session::SessionShellMapEntry* const data) {
   bool has_name = data->has_name();
   xdr->FieldWithDefault(modular_config::kUrl, data->mutable_name(), has_name,
                         std::string(modular_config::kDefaultSessionShellUrl));
@@ -109,7 +109,7 @@
 }
 
 void XdrComponentArgs(XdrContext* const xdr,
-                      fuchsia::modular::internal::AppConfig* const data) {
+                      fuchsia::modular::session::AppConfig* const data) {
   xdr->Field(modular_config::kUri, data->mutable_url());
 
   bool has_args = data->has_args();
@@ -118,28 +118,28 @@
                         default_args);
 }
 
-std::vector<fuchsia::modular::internal::SessionShellMapEntry>
+std::vector<fuchsia::modular::session::SessionShellMapEntry>
 GetDefaultSessionShellMap() {
-  fuchsia::modular::internal::SessionShellConfig config;
+  fuchsia::modular::session::SessionShellConfig config;
   config.mutable_app_config()->set_url(modular_config::kDefaultSessionShellUrl);
   config.mutable_app_config()->set_args(std::vector<std::string>());
   config.set_display_usage(fuchsia::ui::policy::DisplayUsage::kUnknown);
   config.set_screen_height(0);
   config.set_screen_width(0);
 
-  fuchsia::modular::internal::SessionShellMapEntry map_entry;
+  fuchsia::modular::session::SessionShellMapEntry map_entry;
   map_entry.set_name(modular_config::kDefaultSessionShellUrl);
   map_entry.set_config(std::move(config));
 
-  std::vector<fuchsia::modular::internal::SessionShellMapEntry>
+  std::vector<fuchsia::modular::session::SessionShellMapEntry>
       session_shell_map(1);
   session_shell_map.at(0) = std::move(map_entry);
 
   return session_shell_map;
 }
 
-fuchsia::modular::internal::BaseShellConfig GetDefaultBaseShellConfig() {
-  fuchsia::modular::internal::BaseShellConfig base_shell_config;
+fuchsia::modular::session::BaseShellConfig GetDefaultBaseShellConfig() {
+  fuchsia::modular::session::BaseShellConfig base_shell_config;
   base_shell_config.mutable_app_config()->set_url(
       modular_config::kDefaultBaseShellUrl);
   base_shell_config.mutable_app_config()->set_args(std::vector<std::string>());
@@ -148,34 +148,33 @@
   return base_shell_config;
 }
 
-fuchsia::modular::internal::CloudProvider GetCloudProviderFromString(
+fuchsia::modular::session::CloudProvider GetCloudProviderFromString(
     std::string provider) {
   if (provider == modular_config::kFromEnvironment) {
-    return fuchsia::modular::internal::CloudProvider::FROM_ENVIRONMENT;
+    return fuchsia::modular::session::CloudProvider::FROM_ENVIRONMENT;
   } else if (provider == modular_config::kNone) {
-    return fuchsia::modular::internal::CloudProvider::NONE;
+    return fuchsia::modular::session::CloudProvider::NONE;
   }
 
-  return fuchsia::modular::internal::CloudProvider::LET_LEDGER_DECIDE;
+  return fuchsia::modular::session::CloudProvider::LET_LEDGER_DECIDE;
 }
 
 std::string GetCloudProviderAsString(
-    fuchsia::modular::internal::CloudProvider provider) {
+    fuchsia::modular::session::CloudProvider provider) {
   switch (provider) {
-    case fuchsia::modular::internal::CloudProvider::LET_LEDGER_DECIDE:
+    case fuchsia::modular::session::CloudProvider::LET_LEDGER_DECIDE:
       return modular_config::kLetLedgerDecide;
-    case fuchsia::modular::internal::CloudProvider::FROM_ENVIRONMENT:
+    case fuchsia::modular::session::CloudProvider::FROM_ENVIRONMENT:
       return modular_config::kFromEnvironment;
-    case fuchsia::modular::internal::CloudProvider::NONE:
+    case fuchsia::modular::session::CloudProvider::NONE:
       return modular_config::kNone;
   }
 }
 
 }  // namespace
 
-void XdrBasemgrConfig_v1(
-    XdrContext* const xdr,
-    fuchsia::modular::internal::BasemgrConfig* const data) {
+void XdrBasemgrConfig_v1(XdrContext* const xdr,
+                         fuchsia::modular::session::BasemgrConfig* const data) {
   bool has_enable_cobalt = data->has_enable_cobalt();
   xdr->FieldWithDefault(modular_config::kEnableCobalt,
                         data->mutable_enable_cobalt(), has_enable_cobalt, true);
@@ -236,7 +235,7 @@
 
 void XdrSessionmgrConfig_v1(
     XdrContext* const xdr,
-    fuchsia::modular::internal::SessionmgrConfig* const data) {
+    fuchsia::modular::session::SessionmgrConfig* const data) {
   bool has_cloud_provider = data->has_cloud_provider();
 
   std::string cloud_provider_str = modular_config::kLetLedgerDecide;
@@ -283,7 +282,7 @@
                         data->mutable_session_agents(), has_session_agents,
                         default_agents);
 
-  std::vector<fuchsia::modular::internal::AppConfig> default_component_args;
+  std::vector<fuchsia::modular::session::AppConfig> default_component_args;
   bool has_component_args = data->has_component_args();
   xdr->FieldWithDefault(modular_config::kComponentArgs,
                         data->mutable_component_args(), XdrComponentArgs,
diff --git a/peridot/lib/modular_config/modular_config_xdr.h b/peridot/lib/modular_config/modular_config_xdr.h
index 46ffd76..d849f61 100644
--- a/peridot/lib/modular_config/modular_config_xdr.h
+++ b/peridot/lib/modular_config/modular_config_xdr.h
@@ -6,27 +6,28 @@
 #define PERIDOT_LIB_MODULAR_CONFIG_MODULAR_CONFIG_XDR_H_
 
 #include <fuchsia/modular/internal/cpp/fidl.h>
+#include <fuchsia/modular/session/cpp/fidl.h>
 
 #include "peridot/lib/fidl/json_xdr.h"
 
 namespace modular {
 
 // Serialization and deserialization of
-// fuchsia::modular::internal::BasemgrConfig to and from JSON
+// fuchsia::modular::session::BasemgrConfig to and from JSON
 void XdrBasemgrConfig_v1(XdrContext* const xdr,
-                         fuchsia::modular::internal::BasemgrConfig* const data);
+                         fuchsia::modular::session::BasemgrConfig* const data);
 
 void XdrSessionmgrConfig_v1(
     XdrContext* const xdr,
-    fuchsia::modular::internal::SessionmgrConfig* const data);
+    fuchsia::modular::session::SessionmgrConfig* const data);
 
-constexpr XdrFilterType<fuchsia::modular::internal::BasemgrConfig>
+constexpr XdrFilterType<fuchsia::modular::session::BasemgrConfig>
     XdrBasemgrConfig[] = {
         XdrBasemgrConfig_v1,
         nullptr,
 };
 
-constexpr XdrFilterType<fuchsia::modular::internal::SessionmgrConfig>
+constexpr XdrFilterType<fuchsia::modular::session::SessionmgrConfig>
     XdrSessionmgrConfig[] = {
         XdrSessionmgrConfig_v1,
         nullptr,
diff --git a/peridot/lib/modular_config/modular_config_xdr_unittest.cc b/peridot/lib/modular_config/modular_config_xdr_unittest.cc
index 5dc6608..55ee246 100644
--- a/peridot/lib/modular_config/modular_config_xdr_unittest.cc
+++ b/peridot/lib/modular_config/modular_config_xdr_unittest.cc
@@ -5,6 +5,7 @@
 #include "peridot/lib/modular_config/modular_config_xdr.h"
 
 #include <fuchsia/modular/internal/cpp/fidl.h>
+#include <fuchsia/modular/session/cpp/fidl.h>
 #include <fuchsia/sys/cpp/fidl.h>
 
 #include <algorithm>
@@ -20,7 +21,7 @@
 // contains no values.
 TEST(ModularConfigXdr, BasemgrDefaultValues) {
   std::string write_json;
-  fuchsia::modular::internal::BasemgrConfig write_config;
+  fuchsia::modular::session::BasemgrConfig write_config;
   XdrWrite(&write_json, &write_config, XdrBasemgrConfig);
 
   std::string expected_json = R"({
@@ -50,7 +51,7 @@
   EXPECT_EQ(expected_json, write_json);
 
   std::string read_json = "\"\"";
-  fuchsia::modular::internal::BasemgrConfig read_config;
+  fuchsia::modular::session::BasemgrConfig read_config;
   EXPECT_TRUE(XdrRead(read_json, &read_config, XdrBasemgrConfig));
 
   EXPECT_EQ(true, read_config.enable_cobalt());
@@ -85,7 +86,7 @@
 // contains no values.
 TEST(ModularConfigXdr, SessionmgrDefaultValues) {
   std::string write_json;
-  fuchsia::modular::internal::SessionmgrConfig write_config;
+  fuchsia::modular::session::SessionmgrConfig write_config;
   XdrWrite(&write_json, &write_config, XdrSessionmgrConfig);
 
   std::string expected_json = R"({
@@ -104,10 +105,10 @@
   EXPECT_EQ(expected_json, write_json);
 
   std::string read_json = "\"\"";
-  fuchsia::modular::internal::SessionmgrConfig read_config;
+  fuchsia::modular::session::SessionmgrConfig read_config;
   EXPECT_TRUE(XdrRead(read_json, &read_config, XdrSessionmgrConfig));
 
-  EXPECT_EQ(fuchsia::modular::internal::CloudProvider::LET_LEDGER_DECIDE,
+  EXPECT_EQ(fuchsia::modular::session::CloudProvider::LET_LEDGER_DECIDE,
             read_config.cloud_provider());
   EXPECT_TRUE(read_config.enable_cobalt());
   EXPECT_TRUE(read_config.enable_story_shell_preload());
diff --git a/peridot/public/lib/modular_test_harness/cpp/modular_testing_cpp.api b/peridot/public/lib/modular_test_harness/cpp/modular_testing_cpp.api
new file mode 100644
index 0000000..cb3d21e
--- /dev/null
+++ b/peridot/public/lib/modular_test_harness/cpp/modular_testing_cpp.api
@@ -0,0 +1,3 @@
+{
+  "pkg/modular_testing_cpp/include/lib/modular/testing/cpp/test_harness_fixture.h": "3f6b1138713ff23549f53cd2a0175470"
+}
\ No newline at end of file
diff --git a/peridot/public/lib/modular_test_harness/cpp/test_harness_impl.cc b/peridot/public/lib/modular_test_harness/cpp/test_harness_impl.cc
index 4cd1f2f..f050018 100644
--- a/peridot/public/lib/modular_test_harness/cpp/test_harness_impl.cc
+++ b/peridot/public/lib/modular_test_harness/cpp/test_harness_impl.cc
@@ -254,7 +254,7 @@
   // Empty intiialize sessionmgr config if it isn't set, so we can continue to
   // use it for default-initializing some fields below.
   if (!spec.has_sessionmgr_config()) {
-    spec.set_sessionmgr_config(fuchsia::modular::internal::SessionmgrConfig{});
+    spec.set_sessionmgr_config(fuchsia::modular::session::SessionmgrConfig{});
   }
 
   if (!spec.sessionmgr_config().has_use_memfs_for_ledger() ||
@@ -263,7 +263,7 @@
   }
   if (!spec.sessionmgr_config().has_cloud_provider() ||
       spec.sessionmgr_config().cloud_provider() ==
-          fuchsia::modular::internal::CloudProvider::NONE) {
+          fuchsia::modular::session::CloudProvider::NONE) {
     sessionmgr_args.push_back("--no_cloud_provider_for_ledger");
   }
   if (spec.sessionmgr_config().has_session_agents()) {
diff --git a/sdk/fidl/fuchsia.modular.internal/BUILD.gn b/sdk/fidl/fuchsia.modular.internal/BUILD.gn
index 3d2c879..22c23e8 100644
--- a/sdk/fidl/fuchsia.modular.internal/BUILD.gn
+++ b/sdk/fidl/fuchsia.modular.internal/BUILD.gn
@@ -7,7 +7,6 @@
 fidl("fuchsia.modular.internal") {
   sources = [
     "basemgr_debug.fidl",
-    "modular_config.fidl",
     "sessionmgr.fidl",
     "story_data.fidl",
   ]
diff --git a/sdk/fidl/fuchsia.modular.session/BUILD.gn b/sdk/fidl/fuchsia.modular.session/BUILD.gn
new file mode 100644
index 0000000..c884d35
--- /dev/null
+++ b/sdk/fidl/fuchsia.modular.session/BUILD.gn
@@ -0,0 +1,15 @@
+# Copyright 2019 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/fidl/fidl.gni")
+
+fidl("fuchsia.modular.session") {
+  sources = [
+    "modular_config.fidl",
+  ]
+  deps = [
+    "//sdk/fidl/fuchsia.ui.policy",
+    "//zircon/public/fidl/fuchsia-io",
+  ]
+}
diff --git a/sdk/fidl/fuchsia.modular.internal/modular_config.fidl b/sdk/fidl/fuchsia.modular.session/modular_config.fidl
similarity index 98%
rename from sdk/fidl/fuchsia.modular.internal/modular_config.fidl
rename to sdk/fidl/fuchsia.modular.session/modular_config.fidl
index 72b169a..2d47414 100644
--- a/sdk/fidl/fuchsia.modular.internal/modular_config.fidl
+++ b/sdk/fidl/fuchsia.modular.session/modular_config.fidl
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-library fuchsia.modular.internal;
+library fuchsia.modular.session;
 
 using fuchsia.io;
 using fuchsia.ui.policy;
diff --git a/sdk/fidl/fuchsia.modular.testing/BUILD.gn b/sdk/fidl/fuchsia.modular.testing/BUILD.gn
index db3ad86..30cefd3 100644
--- a/sdk/fidl/fuchsia.modular.testing/BUILD.gn
+++ b/sdk/fidl/fuchsia.modular.testing/BUILD.gn
@@ -11,7 +11,7 @@
 
   deps = [
     "//sdk/fidl/fuchsia.modular",
-    "//sdk/fidl/fuchsia.modular.internal",
+    "//sdk/fidl/fuchsia.modular.session",
     "//sdk/fidl/fuchsia.sys",
     "//zircon/public/fidl/fuchsia-io",
     "//zircon/public/fidl/fuchsia-mem",
diff --git a/sdk/fidl/fuchsia.modular.testing/test_harness.fidl b/sdk/fidl/fuchsia.modular.testing/test_harness.fidl
index 5dc73aa..caa9139 100644
--- a/sdk/fidl/fuchsia.modular.testing/test_harness.fidl
+++ b/sdk/fidl/fuchsia.modular.testing/test_harness.fidl
@@ -7,7 +7,7 @@
 using fuchsia.io;
 using fuchsia.mem;
 using fuchsia.modular;
-using fuchsia.modular.internal;
+using fuchsia.modular.session;
 using fuchsia.sys;
 
 /// The |TestHarness| service is used to run the modular runtime under a
@@ -143,7 +143,7 @@
     ///  * test (default = true)
     ///
     /// All other fields are ignored, and must not be set.
-    4: fuchsia.modular.internal.BasemgrConfig basemgr_config;
+    4: fuchsia.modular.session.BasemgrConfig basemgr_config;
 
     /// The test harness starts the modular runtime in a hermetic environment
     /// which does not allow accessing services outside of the environment,
@@ -161,7 +161,7 @@
     ///  * session_agents (default = empty)
     ///
     ///  All other fields are ignored, and must not be set.
-    6: fuchsia.modular.internal.SessionmgrConfig sessionmgr_config;
+    6: fuchsia.modular.session.SessionmgrConfig sessionmgr_config;
 
     /// List of component URLs (and additional .cmx contents) to intercept.
     7: vector<InterceptSpec> components_to_intercept;
