diff --git a/docs/yaml/interface.md b/docs/yaml/interface.md
index ec71433..5912121 100644
--- a/docs/yaml/interface.md
+++ b/docs/yaml/interface.md
@@ -104,7 +104,7 @@
 
 For integer types it is possible to express one of the special values:
 
-- `minint` - The mininum value the integer type can hold.
+- `minint` - The minimum value the integer type can hold.
 - `maxint` - The maximum value the integer type can hold.
 
 ### Container Types
diff --git a/include/sdbusplus/async/proxy.hpp b/include/sdbusplus/async/proxy.hpp
index 74e0907..d9f3e44 100644
--- a/include/sdbusplus/async/proxy.hpp
+++ b/include/sdbusplus/async/proxy.hpp
@@ -41,7 +41,7 @@
  *  ```
  *
  *  The proxy object can be filled as information is available and attempts
- *  to be as effecient as possible (supporting constexpr construction and
+ *  to be as efficient as possible (supporting constexpr construction and
  *  using std::string_view mostly).  In some cases it is necessary for the
  *  proxy to leave a scope where it would be no longer safe to use the
  *  previously-supplied string_views.  The `preserve` operation can be used
@@ -72,7 +72,7 @@
         requires(S || P || I)
     = delete;
 
-    // Construtor allowing all 3 to be passed in.
+    // Constructor allowing all 3 to be passed in.
     constexpr proxy(value_ref<S> s, value_ref<P> p, value_ref<I> i) :
         s(s), p(p), i(i){};
 
diff --git a/include/sdbusplus/async/server.hpp b/include/sdbusplus/async/server.hpp
index 2a3a960..68f6561 100644
--- a/include/sdbusplus/async/server.hpp
+++ b/include/sdbusplus/async/server.hpp
@@ -56,7 +56,7 @@
 concept has_get_property_nomsg =
     requires(const Instance& i) { i.get_property(Tag{}); };
 
-/* Determine if a type has a get property call that requries a msg. */
+/* Determine if a type has a get property call that requires a msg. */
 template <typename Tag, typename Instance>
 concept has_get_property_msg = requires(
     const Instance& i, sdbusplus::message_t& m) { i.get_property(Tag{}, m); };
@@ -81,7 +81,7 @@
 concept has_set_property_nomsg = requires(
     Instance& i, Arg&& a) { i.set_property(Tag{}, std::forward<Arg>(a)); };
 
-/* Determine if a type has a set property call that requries a msg. */
+/* Determine if a type has a set property call that requires a msg. */
 template <typename Tag, typename Instance, typename Arg>
 concept has_set_property_msg =
     requires(Instance& i, sdbusplus::message_t& m, Arg&& a) {
diff --git a/include/sdbusplus/async/stdexec/execution.hpp b/include/sdbusplus/async/stdexec/execution.hpp
index 8286020..31cfe3f 100644
--- a/include/sdbusplus/async/stdexec/execution.hpp
+++ b/include/sdbusplus/async/stdexec/execution.hpp
@@ -2185,7 +2185,7 @@
         }
     }
 
-    // Forward all receiever queries.
+    // Forward all receiver queries.
     friend auto tag_invoke(get_env_t, const __receiver& __self) noexcept
         -> env_of_t<_Receiver&>
     {
diff --git a/include/sdbusplus/async/stdexec/sequence_senders.hpp b/include/sdbusplus/async/stdexec/sequence_senders.hpp
index ee40ae4..b1bfaab 100644
--- a/include/sdbusplus/async/stdexec/sequence_senders.hpp
+++ b/include/sdbusplus/async/stdexec/sequence_senders.hpp
@@ -57,7 +57,7 @@
 // sender and it returns a next-sender. `set_next` is usually called in a
 // context where a sender will be connected to a receiver. Since calling
 // `set_next` usually involves constructing senders it is allowed to throw an
-// excpetion, which needs to be handled by a calling sequence-operation. The
+// exception, which needs to be handled by a calling sequence-operation. The
 // returned object is a sender that can complete with `set_value_t()` or
 // `set_stopped_t()`.
 struct set_next_t
diff --git a/include/sdbusplus/message/append.hpp b/include/sdbusplus/message/append.hpp
index c7657bc..1f34b94 100644
--- a/include/sdbusplus/message/append.hpp
+++ b/include/sdbusplus/message/append.hpp
@@ -143,7 +143,7 @@
      *  @tparam T - Type of element to append.
      *
      *  Template parameters T (function) and S (class) are different
-     *  to allow the function to be utilized for many varients of S:
+     *  to allow the function to be utilized for many variants of S:
      *  S&, S&&, const S&, volatile S&, etc. The type_id_downcast is used
      *  to ensure T and S are equivalent.  For 'char*', this also allows
      *  use for 'char[N]' types.
diff --git a/include/sdbusplus/message/read.hpp b/include/sdbusplus/message/read.hpp
index f18e21c..34a1879 100644
--- a/include/sdbusplus/message/read.hpp
+++ b/include/sdbusplus/message/read.hpp
@@ -121,7 +121,7 @@
      *  @tparam T - Type of element to read.
      *
      *  Template parameters T (function) and S (class) are different
-     *  to allow the function to be utilized for many varients of S:
+     *  to allow the function to be utilized for many variants of S:
      *  S&, S&&, const S&, volatile S&, etc. The type_id_downcast is used
      *  to ensure T and S are equivalent.  For 'char*', this also allows
      *  use for 'char[N]' types.
@@ -396,7 +396,7 @@
 
             t = std::move(*ret);
         }
-        else // otherise, read it out directly.
+        else // otherwise, read it out directly.
         {
             std::remove_reference_t<T1> t1;
             sdbusplus::message::read(intf, m, t1);
diff --git a/include/sdbusplus/server/README.md b/include/sdbusplus/server/README.md
index 234df71..ee2f607 100644
--- a/include/sdbusplus/server/README.md
+++ b/include/sdbusplus/server/README.md
@@ -5,7 +5,7 @@
 **What is _transaction id_** - A unique identifier created by hashing the bus
 name and message cookie from a dbus call. The bus name (unique to each
 application) and message cookie (unique within each bus peer) allows each dbus
-message to be uniquely identifed.
+message to be uniquely identified.
 
 **When is _transaction id_ generated** - When an error response message is
 created, and whenever the id is requested and has not been initialized yet.
diff --git a/include/sdbusplus/utility/dedup_variant.hpp b/include/sdbusplus/utility/dedup_variant.hpp
index 786f7ef..981c666 100644
--- a/include/sdbusplus/utility/dedup_variant.hpp
+++ b/include/sdbusplus/utility/dedup_variant.hpp
@@ -51,10 +51,10 @@
 
 } // namespace details
 
-/** This type is useful for generated code which may inadvertantly contain
+/** This type is useful for generated code which may inadvertently contain
  *  duplicate types if specified simply as `std::variant<A, B, C>`.  Some
  *  types, such as `uint32_t` and `size_t` are the same on some architectures
- *  and different on others.  `dedup_variant_t<uint32_t, size_t>` will evalute
+ *  and different on others.  `dedup_variant_t<uint32_t, size_t>` will evaluate
  *  to `std::variant<uint32_t>` on architectures where there is a collision.
  */
 template <typename T, typename... Types>
diff --git a/tools/sdbusplus/path.py b/tools/sdbusplus/path.py
index 0533b70..563e308 100644
--- a/tools/sdbusplus/path.py
+++ b/tools/sdbusplus/path.py
@@ -26,7 +26,7 @@
         if not segment and self.value[0] != "/":
             raise ValueError(f"Paths must start with /: {self.value}")
         if segment and self.value[0] == "/":
-            raise ValueError(f"Segments canot start with /: {self.value}")
+            raise ValueError(f"Segments cannot start with /: {self.value}")
         segments = self.value.split("/")
         if not segment:
             segments = segments[1:]
