diff --git a/sol/console_buffer.hpp b/sol/console_buffer.hpp
new file mode 100644
index 0000000..b874be5
--- /dev/null
+++ b/sol/console_buffer.hpp
@@ -0,0 +1,74 @@
+#pragma once
+
+#include <algorithm>
+#include <deque>
+#include <vector>
+
+namespace sol
+{
+
+using ConsoleBuffer = std::deque<uint8_t>;
+using Buffer = std::vector<uint8_t>;
+
+/** @class ConsoleData
+ *
+ *  The console data is the buffer that holds the data that comes from the host
+ *  console which is to be sent to the remote console. The buffer is needed due
+ *  to the latency with the IPMI remote client. The current support for the
+ *  buffer is to support one instance of the SOL payload.
+ */
+class ConsoleData
+{
+    public:
+        /** @brief Get the current size of the host console buffer.
+         *
+         *  @return size of the host console buffer.
+         */
+        auto size() const noexcept
+        {
+            return data.size();
+        }
+
+        /** @brief Read host console data.
+         *
+         *  This API would return the iterator to the read data from the
+         *  console data buffer.
+         *
+         *  @return iterator to read data from the buffer
+         */
+        auto read() const
+        {
+            return data.cbegin();
+        }
+
+        /** @brief Write host console data.
+         *
+         *  This API would append the input data to the host console buffer.
+         *
+         *  @param[in] input - data to be written to the console buffer.
+         */
+        void write(const Buffer& input)
+        {
+            data.insert(data.end(), input.begin(), input.end());
+        }
+
+        /** @brief Erase console buffer.
+         *
+         *  @param[in] size - the number of bytes to be erased from the console
+         *                    buffer.
+         *
+         *  @note If the console buffer has less bytes that that was requested,
+         *        then the available size is erased.
+         */
+        void erase(size_t size) noexcept
+        {
+            data.erase(data.begin(), data.begin() + std::min(data.size(),
+                       size));
+        }
+
+    private:
+        /** @brief Storage for host console data. */
+        ConsoleBuffer data;
+};
+
+} // namespace sol
