diff --git a/src/estoraged.cpp b/src/estoraged.cpp
new file mode 100644
index 0000000..ae29bdd
--- /dev/null
+++ b/src/estoraged.cpp
@@ -0,0 +1,35 @@
+
+#include "estoraged.hpp"
+
+#include <iostream>
+#include <vector>
+
+namespace estoraged
+{
+
+void eStoraged::format(std::vector<uint8_t>)
+{
+    std::cerr << "Formatting encrypted eMMC" << std::endl;
+}
+
+void eStoraged::erase(std::vector<uint8_t>, EraseMethod)
+{
+    std::cerr << "Erasing encrypted eMMC" << std::endl;
+}
+
+void eStoraged::lock(std::vector<uint8_t>)
+{
+    std::cerr << "Locking encrypted eMMC" << std::endl;
+}
+
+void eStoraged::unlock(std::vector<uint8_t>)
+{
+    std::cerr << "Unlocking encrypted eMMC" << std::endl;
+}
+
+void eStoraged::changePassword(std::vector<uint8_t>, std::vector<uint8_t>)
+{
+    std::cerr << "Changing password for encrypted eMMC" << std::endl;
+}
+
+} // namespace estoraged
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..9fa9c7d
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,82 @@
+
+#include "estoraged.hpp"
+
+#include <unistd.h>
+
+#include <sdbusplus/bus.hpp>
+
+#include <filesystem>
+#include <iostream>
+#include <string>
+
+static void usage(std::string_view name)
+{
+    std::cerr
+        << "Usage: " << name
+        << "eStorageD service on the BMC\n\n"
+           "  -b <blockDevice>          The phyical encrypted device\n"
+           "                            If omitted, default is /dev/mmcblk0.\n"
+           "  -c <containerName>        The LUKS container name to be created\n"
+           "                            If omitted, default is luks-<devName>";
+}
+
+int main(int argc, char** argv)
+{
+
+    std::string physicalBlockDev = "/dev/mmcblk0";
+    std::string containerBlockDev;
+    int opt;
+    while ((opt = getopt(argc, argv, "b:c:")) != -1)
+    {
+        switch (opt)
+        {
+            case 'b':
+                physicalBlockDev = optarg;
+                break;
+            case 'c':
+                containerBlockDev = optarg;
+                break;
+            default:
+                usage(argv[0]);
+                exit(EXIT_FAILURE);
+        }
+    }
+
+    /* Get the filename of the device (without "/dev/"). */
+    auto deviceName =
+        std::filesystem::path(physicalBlockDev).filename().string();
+
+    /* If containerName arg wasn't provided, create one based on deviceName. */
+    if (containerBlockDev.empty())
+    {
+        containerBlockDev = "luks-" + deviceName;
+    }
+
+    /* DBus path location to place the object. */
+    std::string path = "/xyz/openbmc_project/storage/" + deviceName;
+
+    /*
+     * Create a new bus and affix an object manager for the subtree path we
+     * intend to place objects at.
+     */
+    auto b = sdbusplus::bus::new_default();
+    sdbusplus::server::manager_t m{b, path.c_str()};
+
+    /* Reserve the dbus service name. */
+    std::string busName = "xyz.openbmc_project.eStoraged." + deviceName;
+    b.request_name(busName.c_str());
+
+    /* Create an eStoraged object. */
+    estoraged::eStoraged esObject{b, path.c_str(), physicalBlockDev,
+                                  containerBlockDev};
+
+    std::cerr << "eStoraged has started" << std::endl;
+
+    while (true)
+    {
+        b.wait();
+        b.process_discard();
+    }
+
+    return 1;
+}
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..046ae47
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,27 @@
+
+libeStoraged_deps = [
+  dependency('sdbusplus'),
+  eStoraged_dbus,
+]
+
+libeStoraged_lib = static_library(
+  'eStoraged-lib',
+  'estoraged.cpp',
+  include_directories : eStoraged_headers,
+  implicit_include_directories: false,
+  dependencies: libeStoraged_deps,
+)
+
+libeStoraged = declare_dependency(
+  dependencies: libeStoraged_deps,
+  include_directories: eStoraged_headers,
+  link_with: libeStoraged_lib)
+
+executable(
+  'eStoraged',
+  'main.cpp',
+  implicit_include_directories: false,
+  dependencies: libeStoraged,
+  install: true,
+  install_dir: get_option('bindir')
+)
