diff --git a/garnet/packages/tests/BUILD.gn b/garnet/packages/tests/BUILD.gn
index 1b1d44d9248cdb95f1c6d08112e29f7367d9794b..a86339c8e9bbc31cc3bc79775b7e0486b04352d5 100644
--- a/garnet/packages/tests/BUILD.gn
+++ b/garnet/packages/tests/BUILD.gn
@@ -1067,6 +1067,7 @@ group("runtime") {
     "//src/sys/component_manager:component_manager_tests",
     "//src/sys/component_manager/tests:elf_runner_test",
     "//src/sys/component_manager/tests:routing_integration_test",
+    "//src/sys/component_manager/tests:no_pkg_resolver_test",
   ]
 }
 
diff --git a/src/sys/component_manager/BUILD.gn b/src/sys/component_manager/BUILD.gn
index c82352bf90b8f74f99737099a0526452eb15713c..7a25fce62ade31b5410dffb5c82225c63f7af9a0 100644
--- a/src/sys/component_manager/BUILD.gn
+++ b/src/sys/component_manager/BUILD.gn
@@ -56,10 +56,7 @@ rustc_binary("bin") {
 
   deps = [
     ":lib",
-    "//garnet/public/lib/fidl/rust/fidl",
     "//garnet/public/rust/fuchsia-async",
-    "//garnet/public/rust/fuchsia-component",
-    "//sdk/fidl/fuchsia.pkg:fuchsia.pkg-rustc",
     "//third_party/rust_crates:failure",
     "//third_party/rust_crates:futures-preview",
     "//third_party/rust_crates:log",
diff --git a/src/sys/component_manager/src/lib.rs b/src/sys/component_manager/src/lib.rs
index 4ff203cbabd15da4780241a45cf4a38d37bae9dd..9d50e896dd5f21c2a14d351191437dde047395c8 100644
--- a/src/sys/component_manager/src/lib.rs
+++ b/src/sys/component_manager/src/lib.rs
@@ -11,6 +11,7 @@ pub mod fuchsia_boot_resolver;
 pub mod fuchsia_pkg_resolver;
 pub mod klog;
 pub mod model;
+pub mod startup;
 
 mod directory_broker;
 mod ns_util;
diff --git a/src/sys/component_manager/src/main.rs b/src/sys/component_manager/src/main.rs
index 0b5db3c18c31dde524a334c2d750639f3e0ff523..c45c7300e6d4c74a35c425c50198ce49755a4700 100644
--- a/src/sys/component_manager/src/main.rs
+++ b/src/sys/component_manager/src/main.rs
@@ -7,15 +7,12 @@
 use {
     component_manager_lib::{
         elf_runner::ElfRunner,
-        fuchsia_boot_resolver::{self, FuchsiaBootResolver},
-        fuchsia_pkg_resolver::{self, FuchsiaPkgResolver},
         klog,
-        model::{AbsoluteMoniker, Model, ModelParams, ResolverRegistry},
+        model::{AbsoluteMoniker, Model, ModelParams},
+        startup,
     },
     failure::{self, Error, ResultExt},
-    fidl_fuchsia_pkg::PackageResolverMarker,
     fuchsia_async as fasync,
-    fuchsia_component::client::connect_to_service,
     futures::prelude::*,
     log::*,
     std::env,
@@ -46,16 +43,7 @@ fn main() -> Result<(), Error> {
 
     let mut executor = fasync::Executor::new().context("error creating executor")?;
 
-    let mut resolver_registry = ResolverRegistry::new();
-    resolver_registry
-        .register(fuchsia_boot_resolver::SCHEME.to_string(), Box::new(FuchsiaBootResolver::new()));
-    let pkg_resolver = connect_to_service::<PackageResolverMarker>()
-        .context("error connecting to package resolver")?;
-    resolver_registry.register(
-        fuchsia_pkg_resolver::SCHEME.to_string(),
-        Box::new(FuchsiaPkgResolver::new(pkg_resolver)),
-    );
-
+    let resolver_registry = startup::available_resolvers()?;
     let params = ModelParams {
         root_component_uri: opt.root_component_uri,
         root_resolver_registry: resolver_registry,
diff --git a/src/sys/component_manager/src/startup.rs b/src/sys/component_manager/src/startup.rs
new file mode 100644
index 0000000000000000000000000000000000000000..9f4b1932235a29598087d5631505c57cab1b8b57
--- /dev/null
+++ b/src/sys/component_manager/src/startup.rs
@@ -0,0 +1,45 @@
+// 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.
+
+use {
+    crate::{
+        fuchsia_boot_resolver::{self, FuchsiaBootResolver},
+        fuchsia_pkg_resolver::{self, FuchsiaPkgResolver},
+        model::ResolverRegistry,
+    },
+    failure::{Error, ResultExt},
+    fidl::endpoints::ServiceMarker,
+    fidl_fuchsia_pkg::{PackageResolverMarker, PackageResolverProxy},
+    fuchsia_component::client::connect_to_service,
+    std::path::PathBuf,
+};
+
+pub fn available_resolvers() -> Result<ResolverRegistry, Error> {
+    let mut resolver_registry = ResolverRegistry::new();
+    resolver_registry
+        .register(fuchsia_boot_resolver::SCHEME.to_string(), Box::new(FuchsiaBootResolver::new()));
+
+    // Add the fuchsia-pkg resolver to the registry if it's available.
+    if let Some(pkg_resolver) = connect_pkg_resolver()? {
+        resolver_registry.register(
+            fuchsia_pkg_resolver::SCHEME.to_string(),
+            Box::new(FuchsiaPkgResolver::new(pkg_resolver)),
+        );
+    }
+
+    Ok(resolver_registry)
+}
+
+/// Checks if a package resolver service is available through our namespace and connects to it if
+/// so. If not availble, returns Ok(None).
+fn connect_pkg_resolver() -> Result<Option<PackageResolverProxy>, Error> {
+    let service_path = PathBuf::from(format!("/svc/{}", PackageResolverMarker::NAME));
+    if !service_path.exists() {
+        return Ok(None);
+    }
+
+    let pkg_resolver = connect_to_service::<PackageResolverMarker>()
+        .context("error connecting to package resolver")?;
+    return Ok(Some(pkg_resolver));
+}
diff --git a/src/sys/component_manager/tests/BUILD.gn b/src/sys/component_manager/tests/BUILD.gn
index 43236a9828f148d5aeeee3d8d33390815ff52e7c..e0d709a4fd58e0c704944cd5d5856d7ad28728fe 100644
--- a/src/sys/component_manager/tests/BUILD.gn
+++ b/src/sys/component_manager/tests/BUILD.gn
@@ -127,3 +127,25 @@ test_package("elf_runner_test") {
     },
   ]
 }
+
+rustc_binary("no_pkg_resolver_test_bin") {
+  name = "no_pkg_resolver_test"
+  edition = "2018"
+  source_root = "no_pkg_resolver_test.rs"
+  deps = [
+    "//garnet/public/rust/fuchsia-async",
+    "//src/sys/component_manager:lib",
+  ]
+}
+
+test_package("no_pkg_resolver_test") {
+  deps = [
+    ":no_pkg_resolver_test_bin",
+  ]
+
+  tests = [
+    {
+      name = "no_pkg_resolver_test"
+    },
+  ]
+}
diff --git a/src/sys/component_manager/tests/meta/no_pkg_resolver_test.cmx b/src/sys/component_manager/tests/meta/no_pkg_resolver_test.cmx
new file mode 100644
index 0000000000000000000000000000000000000000..6aca1f0c4269b9a8a726a7d9540629e51a2ed450
--- /dev/null
+++ b/src/sys/component_manager/tests/meta/no_pkg_resolver_test.cmx
@@ -0,0 +1,5 @@
+{
+    "program": {
+        "binary": "test/no_pkg_resolver_test"
+    }
+}
diff --git a/src/sys/component_manager/tests/no_pkg_resolver_test.rs b/src/sys/component_manager/tests/no_pkg_resolver_test.rs
new file mode 100644
index 0000000000000000000000000000000000000000..ac88965a0f05e965081db1f83ddfd1453852fe4d
--- /dev/null
+++ b/src/sys/component_manager/tests/no_pkg_resolver_test.rs
@@ -0,0 +1,29 @@
+// 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.
+
+use {
+    component_manager_lib::{
+        model::{Resolver, ResolverError},
+        startup,
+    },
+    fuchsia_async as fasync,
+};
+
+
+fn main() {
+    run_test();
+}
+
+fn run_test() {
+    let mut executor = fasync::Executor::new().expect("Failed to create executor");
+
+    let resolver_registry = startup::available_resolvers().expect("Failed to get resolvers");
+    let result = executor.run_singlethreaded(resolver_registry.resolve("fuchsia-pkg://fuchsia.com/anything#meta/anything.cmx"));
+    match result {
+        Err(ResolverError::SchemeNotRegistered) => {},
+        _ => {
+            panic!("Test failed, unexpected result: {:?}", result);
+        }
+    }
+}