diff --git a/.gitignore b/.gitignore
index 30ae886..210bc0f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,6 @@
 build*/
 subprojects/*
 !subprojects/acpi-power-state-daemon/
-!subprojects/kcsbridge/
 !subprojects/metrics-ipmi-blobs/
 !subprojects/ncsid/
 !subprojects/nemora-postd/
diff --git a/kcsbridge b/kcsbridge
deleted file mode 120000
index bf7dcf7..0000000
--- a/kcsbridge
+++ /dev/null
@@ -1 +0,0 @@
-subprojects/kcsbridge
\ No newline at end of file
diff --git a/meson.build b/meson.build
index 534d61f..76719a2 100644
--- a/meson.build
+++ b/meson.build
@@ -35,7 +35,6 @@
 endif
 
 subproject('acpi-power-state-daemon')
-subproject('kcsbridge')
 subproject('ncsid', default_options: 'tests=' + tests_str)
 subproject('metrics-ipmi-blobs', default_options: 'tests=' + tests_str)
 subproject('nemora-postd')
diff --git a/subprojects/kcsbridge/meson.build b/subprojects/kcsbridge/meson.build
deleted file mode 100644
index 3d14785..0000000
--- a/subprojects/kcsbridge/meson.build
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-project(
-  'kcsbridge',
-  ['cpp', 'c'],
-  version: '0.1',
-  meson_version: '>=0.53.2',
-  default_options: [
-    'warning_level=3',
-    'werror=true',
-    'cpp_std=c++17',
-  ])
-
-subdir('src')
diff --git a/subprojects/kcsbridge/src/args.cpp b/subprojects/kcsbridge/src/args.cpp
deleted file mode 100644
index c96ac4b..0000000
--- a/subprojects/kcsbridge/src/args.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "args.hpp"
-
-#include <fmt/format.h>
-#include <getopt.h>
-
-#include <stdexcept>
-
-namespace kcsbridge
-{
-
-Args::Args(int argc, char* argv[])
-{
-    static const char opts[] = ":c:";
-    static const struct option longopts[] = {
-        {"channel", required_argument, nullptr, 'c'},
-        {nullptr, 0, nullptr, 0},
-    };
-    int c;
-    optind = 0;
-    while ((c = getopt_long(argc, argv, opts, longopts, nullptr)) > 0)
-    {
-        switch (c)
-        {
-            case 'c':
-                channel = optarg;
-                break;
-            case ':':
-                throw std::runtime_error(
-                    fmt::format("Missing argument for `{}`", argv[optind - 1]));
-                break;
-            default:
-                throw std::runtime_error(fmt::format(
-                    "Invalid command line argument `{}`", argv[optind - 1]));
-        }
-    }
-    if (optind != argc)
-    {
-        throw std::invalid_argument("Requires no additional arguments");
-    }
-    if (channel == nullptr)
-    {
-        throw std::invalid_argument("Missing KCS channel");
-    }
-}
-
-} // namespace kcsbridge
diff --git a/subprojects/kcsbridge/src/args.hpp b/subprojects/kcsbridge/src/args.hpp
deleted file mode 100644
index 39b28c1..0000000
--- a/subprojects/kcsbridge/src/args.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-#include <cstddef>
-
-namespace kcsbridge
-{
-
-struct Args
-{
-    const char* channel = nullptr;
-
-    Args(int argc, char* argv[]);
-};
-
-} // namespace kcsbridge
diff --git a/subprojects/kcsbridge/src/dbus.hpp b/subprojects/kcsbridge/src/dbus.hpp
deleted file mode 100644
index 7a92d2d..0000000
--- a/subprojects/kcsbridge/src/dbus.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-#include <fmt/format.h>
-#include <systemd/sd-bus.h>
-
-#include <sdbusplus/message.hpp>
-#include <stdplus/handle/managed.hpp>
-#include <stdplus/util/cexec.hpp>
-
-#include <limits>
-#include <stdexcept>
-#include <type_traits>
-#include <utility>
-
-namespace kcsbridge
-{
-
-struct SdBusSlotDrop
-{
-    void operator()(sd_bus_slot* slot) noexcept
-    {
-        sd_bus_slot_unref(slot);
-    }
-};
-using ManagedSdBusSlot = stdplus::Managed<sd_bus_slot*>::HandleF<SdBusSlotDrop>;
-
-template <typename CbT>
-int busCallAsyncCb(sd_bus_message* m, void* userdata, sd_bus_error*) noexcept
-{
-    try
-    {
-        (*reinterpret_cast<CbT*>(userdata))(sdbusplus::message::message(m));
-    }
-    catch (const std::exception& e)
-    {
-        fmt::print(stderr, "Callback failed: {}\n", e.what());
-    }
-    return 1;
-}
-
-template <typename CbT>
-void busCallAsyncDest(void* userdata) noexcept
-{
-    delete reinterpret_cast<CbT*>(userdata);
-}
-
-template <typename Cb>
-auto busCallAsync(sdbusplus::message::message&& m, Cb&& cb)
-{
-    sd_bus_slot* slot;
-    using CbT = std::remove_cv_t<std::remove_reference_t<Cb>>;
-    CHECK_RET(sd_bus_call_async(nullptr, &slot, m.get(), busCallAsyncCb<CbT>,
-                                nullptr, std::numeric_limits<uint64_t>::max()),
-              "sd_bus_call_async");
-    ManagedSdBusSlot ret(std::move(slot));
-    CHECK_RET(sd_bus_slot_set_destroy_callback(*ret, busCallAsyncDest<CbT>),
-              "sd_bus_slot_set_destroy_callback");
-    sd_bus_slot_set_userdata(*ret, new CbT(std::forward<Cb>(cb)));
-    return ret;
-}
-
-template <auto func, typename Data>
-int methodRsp(sd_bus_message* mptr, void* dataptr, sd_bus_error* error) noexcept
-{
-    sdbusplus::message::message m(mptr);
-    try
-    {
-        func(m, *reinterpret_cast<Data*>(dataptr));
-    }
-    catch (const std::exception& e)
-    {
-        fmt::print(stderr, "Method response failed: {}\n", e.what());
-        sd_bus_error_set(error,
-                         "xyz.openbmc_project.Common.Error.InternalFailure",
-                         "The operation failed internally.");
-    }
-    return 1;
-}
-
-} // namespace kcsbridge
diff --git a/subprojects/kcsbridge/src/kcsbridge@.service.in b/subprojects/kcsbridge/src/kcsbridge@.service.in
deleted file mode 100644
index ef62d5f..0000000
--- a/subprojects/kcsbridge/src/kcsbridge@.service.in
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=Google IPMI KCS Bridge
-After=phosphor-ipmi-host.service
-
-[Service]
-Restart=on-failure
-Type=notify
-ExecStart=@BIN@ -c '%I'
-
-[Install]
-WantedBy=multi-user.target
diff --git a/subprojects/kcsbridge/src/main.cpp b/subprojects/kcsbridge/src/main.cpp
deleted file mode 100644
index 8a7114b..0000000
--- a/subprojects/kcsbridge/src/main.cpp
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "args.hpp"
-#include "dbus.hpp"
-
-#include <fmt/format.h>
-#include <linux/ipmi_bmc.h>
-#include <systemd/sd-daemon.h>
-
-#include <sdbusplus/bus.hpp>
-#include <sdbusplus/exception.hpp>
-#include <sdbusplus/server/interface.hpp>
-#include <sdbusplus/vtable.hpp>
-#include <sdeventplus/event.hpp>
-#include <sdeventplus/source/io.hpp>
-#include <sdeventplus/source/signal.hpp>
-#include <stdplus/fd/create.hpp>
-#include <stdplus/fd/ops.hpp>
-#include <stdplus/signal.hpp>
-
-#include <array>
-#include <map>
-#include <stdexcept>
-#include <tuple>
-#include <utility>
-#include <variant>
-
-namespace kcsbridge
-{
-
-using sdbusplus::bus::bus;
-using sdbusplus::message::message;
-using sdeventplus::source::IO;
-using sdeventplus::source::Signal;
-using stdplus::fd::OpenAccess;
-using stdplus::fd::OpenFlag;
-using stdplus::fd::OpenFlags;
-
-void setAttention(message& m, stdplus::Fd& kcs)
-{
-    stdplus::fd::ioctl(kcs, IPMI_BMC_IOCTL_SET_SMS_ATN, nullptr);
-    m.new_method_return().method_return();
-}
-
-void clearAttention(message& m, stdplus::Fd& kcs)
-{
-    stdplus::fd::ioctl(kcs, IPMI_BMC_IOCTL_CLEAR_SMS_ATN, nullptr);
-    m.new_method_return().method_return();
-}
-
-void forceAbort(message& m, stdplus::Fd& kcs)
-{
-    stdplus::fd::ioctl(kcs, IPMI_BMC_IOCTL_FORCE_ABORT, nullptr);
-    m.new_method_return().method_return();
-}
-
-template <typename Data>
-constexpr sdbusplus::vtable::vtable_t dbusMethods[] = {
-    sdbusplus::vtable::start(),
-    sdbusplus::vtable::method("setAttention", "", "",
-                              methodRsp<setAttention, Data>),
-    sdbusplus::vtable::method("clearAttention", "", "",
-                              methodRsp<clearAttention, Data>),
-    sdbusplus::vtable::method("forceAbort", "", "",
-                              methodRsp<forceAbort, Data>),
-    sdbusplus::vtable::end(),
-};
-
-void write(stdplus::Fd& kcs, message&& m)
-{
-    std::array<uint8_t, 1024> buffer;
-    stdplus::span<uint8_t> out(buffer.begin(), 3);
-    try
-    {
-        if (m.is_method_error())
-        {
-            // Extra copy to workaround lack of `const sd_bus_error` constructor
-            auto error = *m.get_error();
-            throw sdbusplus::exception::SdBusError(&error, "ipmid response");
-        }
-        std::tuple<uint8_t, uint8_t, uint8_t, uint8_t, std::vector<uint8_t>>
-            ret;
-        m.read(ret);
-        const auto& [netfn, lun, cmd, cc, data] = ret;
-        // Based on the IPMI KCS spec Figure 9-2
-        // netfn needs to be changed to odd in KCS responses
-        buffer[0] = (netfn | 1) << 2;
-        buffer[0] |= lun;
-        buffer[1] = cmd;
-        buffer[2] = cc;
-        memcpy(&buffer[3], data.data(), data.size());
-        out = stdplus::span<uint8_t>(buffer.begin(), data.size() + 3);
-    }
-    catch (const std::exception& e)
-    {
-        fmt::print(stderr, "IPMI response failure: {}\n", e.what());
-        buffer[0] |= 1 << 2;
-        buffer[2] = 0xff;
-    }
-    stdplus::fd::writeExact(kcs, out);
-}
-
-void read(stdplus::Fd& kcs, bus& bus, ManagedSdBusSlot& slot)
-{
-    std::array<uint8_t, 1024> buffer;
-    auto in = stdplus::fd::read(kcs, buffer);
-    if (in.empty())
-    {
-        return;
-    }
-    if (slot)
-    {
-        fmt::print(stderr, "Canceling outstanding request\n");
-        slot.reset();
-    }
-    if (in.size() < 2)
-    {
-        fmt::print(stderr, "Read too small, ignoring\n");
-        return;
-    }
-    auto m = bus.new_method_call("xyz.openbmc_project.Ipmi.Host",
-                                 "/xyz/openbmc_project/Ipmi",
-                                 "xyz.openbmc_project.Ipmi.Server", "execute");
-    std::map<std::string, std::variant<int>> options;
-    // Based on the IPMI KCS spec Figure 9-1
-    uint8_t netfn = in[0] >> 2, lun = in[0] & 3, cmd = in[1];
-    m.append(netfn, lun, cmd, in.subspan(2), options);
-    slot = busCallAsync(std::move(m), [&](message&& m) {
-        slot.reset();
-        write(kcs, std::move(m));
-    });
-}
-
-int execute(const char* channel)
-{
-    // Set up our DBus and event loop
-    auto event = sdeventplus::Event::get_default();
-    auto bus = sdbusplus::bus::new_default();
-    bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
-
-    // Configure basic signal handling
-    auto exit_handler = [&](Signal&, const struct signalfd_siginfo*) {
-        fmt::print(stderr, "Interrupted, Exiting\n");
-        event.exit(0);
-    };
-    stdplus::signal::block(SIGINT);
-    Signal sig_int(event, SIGINT, exit_handler);
-    stdplus::signal::block(SIGTERM);
-    Signal sig_term(event, SIGTERM, exit_handler);
-
-    // Open an FD for the KCS channel
-    stdplus::ManagedFd kcs = stdplus::fd::open(
-        fmt::format("/dev/{}", channel),
-        OpenFlags(OpenAccess::ReadWrite).set(OpenFlag::NonBlock));
-    ManagedSdBusSlot slot(std::nullopt);
-
-    // Add a reader to the bus for handling inbound IPMI
-    IO ioSource(event, kcs.get(), EPOLLIN | EPOLLET,
-                [&](IO&, int, uint32_t) { read(kcs, bus, slot); });
-
-    // Allow processes to affect the state machine
-    std::optional<sdbusplus::server::interface::interface> intf;
-    {
-        std::string dbusChannel = channel;
-        std::replace(dbusChannel.begin(), dbusChannel.end(), '-', '_');
-        auto obj = "/xyz/openbmc_project/Ipmi/Channel/" + dbusChannel;
-        auto srv = "com.google.gbmc." + dbusChannel;
-        intf.emplace(bus, obj.c_str(), "xyz.openbmc_project.Ipmi.Channel.SMS",
-                     dbusMethods<stdplus::Fd>,
-                     reinterpret_cast<stdplus::Fd*>(&kcs));
-        bus.request_name(srv.c_str());
-    }
-
-    sd_notify(0, "READY=1");
-    return event.loop();
-}
-
-} // namespace kcsbridge
-
-int main(int argc, char* argv[])
-{
-    try
-    {
-        kcsbridge::Args args(argc, argv);
-        return kcsbridge::execute(args.channel);
-    }
-    catch (const std::exception& e)
-    {
-        fmt::print(stderr, "FAILED: {}\n", e.what());
-        return 1;
-    }
-}
diff --git a/subprojects/kcsbridge/src/meson.build b/subprojects/kcsbridge/src/meson.build
deleted file mode 100644
index f463d92..0000000
--- a/subprojects/kcsbridge/src/meson.build
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright 2021 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-headers = include_directories('.')
-
-fmt_dep = dependency('fmt', required: false)
-if not fmt_dep.found()
-  fmt_proj = import('cmake').subproject(
-    'fmt',
-    cmake_options: [
-      '-DCMAKE_POSITION_INDEPENDENT_CODE=ON',
-      '-DMASTER_PROJECT=OFF'
-    ],
-    required: false)
-  assert(fmt_proj.found(), 'fmtlib is required')
-  fmt_dep = fmt_proj.dependency('fmt')
-endif
-
-deps = [
-  fmt_dep,
-  dependency('stdplus', fallback: ['stdplus', 'stdplus']),
-  dependency('sdbusplus', fallback: ['sdbusplus', 'sdbusplus_dep']),
-  dependency('sdeventplus', fallback: ['sdeventplus', 'sdeventplus']),
-  dependency('libsystemd'),
-]
-
-lib = static_library(
-  'kcsbridged',
-  'args.cpp',
-  include_directories: headers,
-  implicit_include_directories: false,
-  dependencies: deps)
-
-dep = declare_dependency(
-  dependencies: deps,
-  include_directories: headers,
-  link_with: lib)
-
-libexecdir = get_option('prefix') / get_option('libexecdir')
-
-executable(
-  'kcsbridged',
-  'main.cpp',
-  implicit_include_directories: false,
-  dependencies: dep,
-  install: true,
-  install_dir: libexecdir)
-
-systemd = dependency('systemd', required: false)
-if systemd.found()
-  configure_file(
-    configuration: {'BIN': libexecdir / 'kcsbridged'},
-    input: 'kcsbridge@.service.in',
-    output: 'kcsbridge@.service',
-    install_mode: 'rw-r--r--',
-    install_dir: systemd.get_pkgconfig_variable('systemdsystemunitdir'))
-endif
diff --git a/subprojects/kcsbridge/subprojects b/subprojects/kcsbridge/subprojects
deleted file mode 120000
index a96aa0e..0000000
--- a/subprojects/kcsbridge/subprojects
+++ /dev/null
@@ -1 +0,0 @@
-..
\ No newline at end of file
diff --git a/subprojects/sdeventplus.wrap b/subprojects/sdeventplus.wrap
deleted file mode 100644
index 7503664..0000000
--- a/subprojects/sdeventplus.wrap
+++ /dev/null
@@ -1,3 +0,0 @@
-[wrap-git]
-url = https://github.com/openbmc/sdeventplus
-revision = HEAD
