diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..79a474d
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,116 @@
+---
+Language:        Cpp
+# BasedOnStyle:  LLVM
+AccessModifierOffset: -2
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlines: Right
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: None
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: Yes
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:
+  AfterCaseLabel:  true
+  AfterClass:      true
+  AfterControlStatement: true
+  AfterEnum:       true
+  AfterFunction:   true
+  AfterNamespace:  true
+  AfterObjCDeclaration: true
+  AfterStruct:     true
+  AfterUnion:      true
+  AfterExternBlock: true
+  BeforeCatch:     true
+  BeforeElse:      true
+  IndentBraces:    false
+  SplitEmptyFunction:   false
+  SplitEmptyRecord:     false
+  SplitEmptyNamespace:  false
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Custom
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializers: AfterColon
+BreakInheritanceList: AfterColon
+BreakStringLiterals: false
+ColumnLimit:     80
+CommentPragmas:  '^ IWYU pragma:'
+CompactNamespaces: false
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DeriveLineEnding: false
+DerivePointerAlignment: false
+PointerAlignment: Left
+DisableFormat:   false
+ExperimentalAutoDetectBinPacking: false
+FixNamespaceComments: true
+ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IncludeBlocks: Regroup
+IncludeCategories:
+  - Regex:           '^[<"](gtest|gmock)'
+    Priority:        7
+  - Regex:           '^"config.h"'
+    Priority:        -1
+  - Regex:           '^".*\.h"'
+    Priority:        1
+  - Regex:           '^".*\.hpp"'
+    Priority:        2
+  - Regex:           '^<.*\.h>'
+    Priority:        3
+  - Regex:           '^<.*\.hpp>'
+    Priority:        4
+  - Regex:           '^<.*'
+    Priority:        5
+  - Regex:           '.*'
+    Priority:        6
+IndentCaseLabels: true
+IndentWidth:     4
+IndentWrappedFunctionNames: true
+KeepEmptyLinesAtTheStartOfBlocks: false
+MacroBlockBegin: ''
+MacroBlockEnd:   ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+ReflowComments:  true
+SortIncludes:    true
+SortUsingDeclarations: true
+SpaceAfterCStyleCast: false
+SpaceAfterTemplateKeyword: true
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeCpp11BracedList: false
+SpaceBeforeCtorInitializerColon: true
+SpaceBeforeInheritanceColon: true
+SpaceBeforeParens: ControlStatements
+SpaceBeforeRangeBasedForLoopColon: true
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles:  false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard:        Latest
+TabWidth:        4
+UseCRLF: false
+UseTab:          Never
+...
diff --git a/ikvm_args.cpp b/ikvm_args.cpp
index 19642af..f9401ac 100644
--- a/ikvm_args.cpp
+++ b/ikvm_args.cpp
@@ -8,19 +8,16 @@
 namespace ikvm
 {
 
-Args::Args(int argc, char* argv[]) : frameRate(30), subsampling(0), calcFrameCRC{false},
-                                     commandLine(argc, argv)
+Args::Args(int argc, char* argv[]) :
+    frameRate(30), subsampling(0), calcFrameCRC{false}, commandLine(argc, argv)
 {
     int option;
     const char* opts = "f:s:h:k:p:v:c";
-    struct option lopts[] = {{"frameRate", 1, 0, 'f'},
-                             {"subsampling", 1, 0, 's'},
-                             {"help", 0, 0, 'h'},
-                             {"keyboard", 1, 0, 'k'},
-                             {"mouse", 1, 0, 'p'},
-                             {"videoDevice", 1, 0, 'v'},
-                             {"calcCRC", 0, 0, 'c'},
-                             {0, 0, 0, 0}};
+    struct option lopts[] = {
+        {"frameRate", 1, 0, 'f'}, {"subsampling", 1, 0, 's'},
+        {"help", 0, 0, 'h'},      {"keyboard", 1, 0, 'k'},
+        {"mouse", 1, 0, 'p'},     {"videoDevice", 1, 0, 'v'},
+        {"calcCRC", 0, 0, 'c'},   {0, 0, 0, 0}};
 
     while ((option = getopt_long(argc, argv, opts, lopts, NULL)) != -1)
     {
@@ -66,7 +63,9 @@
     fprintf(stderr, "-k device              HID keyboard gadget device\n");
     fprintf(stderr, "-p device              HID mouse gadget device\n");
     fprintf(stderr, "-v device              V4L2 device\n");
-    fprintf(stderr, "-c, --calcCRC          Calculate CRC for each frame to save bandwidth\n");
+    fprintf(
+        stderr,
+        "-c, --calcCRC          Calculate CRC for each frame to save bandwidth\n");
     rfbUsage();
 }
 
diff --git a/ikvm_args.hpp b/ikvm_args.hpp
index bfd5507..565d9c0 100644
--- a/ikvm_args.hpp
+++ b/ikvm_args.hpp
@@ -25,8 +25,7 @@
          * @param[in] v - Array of arguments
          */
         CommandLine(int c, char** v) : argc(c), argv(v)
-        {
-        }
+        {}
         ~CommandLine() = default;
         CommandLine(const CommandLine&) = default;
         CommandLine& operator=(const CommandLine&) = default;
diff --git a/ikvm_input.cpp b/ikvm_input.cpp
index cbbfdc4..e9bd151 100644
--- a/ikvm_input.cpp
+++ b/ikvm_input.cpp
@@ -1,6 +1,7 @@
 #include "ikvm_input.hpp"
 
 #include "ikvm_server.hpp"
+#include "scancodes.hpp"
 
 #include <err.h>
 #include <errno.h>
@@ -14,8 +15,6 @@
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/Common/File/error.hpp>
 
-#include "scancodes.hpp"
-
 namespace fs = std::filesystem;
 
 namespace ikvm
@@ -78,8 +77,8 @@
 
     if (!keyboardPath.empty())
     {
-        keyboardFd = open(keyboardPath.c_str(),
-                          O_RDWR | O_CLOEXEC | O_NONBLOCK);
+        keyboardFd =
+            open(keyboardPath.c_str(), O_RDWR | O_CLOEXEC | O_NONBLOCK);
         if (keyboardFd < 0)
         {
             log<level::ERR>("Failed to open input device",
@@ -228,7 +227,8 @@
     else
     {
         input->pointerReport[0] = ((buttonMask & 0x4) >> 1) |
-                                  ((buttonMask & 0x2) << 1) | (buttonMask & 0x1);
+                                  ((buttonMask & 0x2) << 1) |
+                                  (buttonMask & 0x1);
         input->pointerReport[5] = 0;
     }
 
@@ -502,7 +502,7 @@
     return scancode;
 }
 
-bool Input::writeKeyboard(const uint8_t *report)
+bool Input::writeKeyboard(const uint8_t* report)
 {
     std::unique_lock<std::mutex> lk(keyMutex);
     uint retryCount = HID_REPORT_RETRY_MAX;
@@ -534,7 +534,7 @@
     return false;
 }
 
-void Input::writePointer(const uint8_t *report)
+void Input::writePointer(const uint8_t* report)
 {
     std::unique_lock<std::mutex> lk(ptrMutex);
     uint retryCount = HID_REPORT_RETRY_MAX;
diff --git a/ikvm_input.hpp b/ikvm_input.hpp
index ac54220..295fb12 100644
--- a/ikvm_input.hpp
+++ b/ikvm_input.hpp
@@ -98,8 +98,8 @@
      */
     static uint8_t keyToScancode(rfbKeySym key);
 
-    bool writeKeyboard(const uint8_t *report);
-    void writePointer(const uint8_t *report);
+    bool writeKeyboard(const uint8_t* report);
+    void writePointer(const uint8_t* report);
 
     /* @brief File descriptor for the USB keyboard device */
     int keyboardFd;
diff --git a/ikvm_manager.cpp b/ikvm_manager.cpp
index 33e7b17..11afcb7 100644
--- a/ikvm_manager.cpp
+++ b/ikvm_manager.cpp
@@ -8,10 +8,10 @@
 Manager::Manager(const Args& args) :
     continueExecuting(true), serverDone(false), videoDone(true),
     input(args.getKeyboardPath(), args.getPointerPath()),
-    video(args.getVideoPath(), input, args.getFrameRate(), args.getSubsampling()),
+    video(args.getVideoPath(), input, args.getFrameRate(),
+          args.getSubsampling()),
     server(args, input, video)
-{
-}
+{}
 
 void Manager::run()
 {
diff --git a/ikvm_server.cpp b/ikvm_server.cpp
index 804eb39..141f6c6 100644
--- a/ikvm_server.cpp
+++ b/ikvm_server.cpp
@@ -2,13 +2,12 @@
 
 #include <rfb/rfbproto.h>
 
+#include <boost/crc.hpp>
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
 
-#include <boost/crc.hpp>
-
 namespace ikvm
 {
 
@@ -133,9 +132,9 @@
             {
                 /* JFIF header contains some varying data so skip it for
                  * checksum calculation */
-                frame_crc = boost::crc<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF,
-                                       true, true>(data + 0x30,
-                                                   video.getFrameSize() - 0x30);
+                frame_crc =
+                    boost::crc<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true,
+                               true>(data + 0x30, video.getFrameSize() - 0x30);
             }
 
             if (cd->last_crc == frame_crc)
@@ -179,9 +178,9 @@
 }
 
 void Server::clientFramebufferUpdateRequest(
-    rfbClientPtr cl, rfbFramebufferUpdateRequestMsg *furMsg)
+    rfbClientPtr cl, rfbFramebufferUpdateRequestMsg* furMsg)
 {
-    ClientData *cd = (ClientData *)cl->clientData;
+    ClientData* cd = (ClientData*)cl->clientData;
 
     if (!cd)
         return;
diff --git a/ikvm_server.hpp b/ikvm_server.hpp
index bfeb73b..dcb984a 100644
--- a/ikvm_server.hpp
+++ b/ikvm_server.hpp
@@ -94,8 +94,8 @@
      * @param[in] furMsg - Pointer of the FUR message
      */
     static void
-    clientFramebufferUpdateRequest(rfbClientPtr cl,
-                                   rfbFramebufferUpdateRequestMsg *furMsg);
+        clientFramebufferUpdateRequest(rfbClientPtr cl,
+                                       rfbFramebufferUpdateRequestMsg* furMsg);
     /*
      * @brief Handler for a client disconnecting
      *
diff --git a/ikvm_video.cpp b/ikvm_video.cpp
index 5159b25..734294e 100644
--- a/ikvm_video.cpp
+++ b/ikvm_video.cpp
@@ -32,10 +32,9 @@
 
 Video::Video(const std::string& p, Input& input, int fr, int sub) :
     resizeAfterOpen(false), timingsError(false), fd(-1), frameRate(fr),
-    lastFrameIndex(-1), height(600), width(800), subSampling(sub),
-	input(input), path(p)
-{
-}
+    lastFrameIndex(-1), height(600), width(800), subSampling(sub), input(input),
+    path(p)
+{}
 
 Video::~Video()
 {
@@ -447,8 +446,8 @@
     }
 
     ctrl.id = V4L2_CID_JPEG_CHROMA_SUBSAMPLING;
-    ctrl.value = subSampling
-	       ? V4L2_JPEG_CHROMA_SUBSAMPLING_420 : V4L2_JPEG_CHROMA_SUBSAMPLING_444;
+    ctrl.value = subSampling ? V4L2_JPEG_CHROMA_SUBSAMPLING_420
+                             : V4L2_JPEG_CHROMA_SUBSAMPLING_444;
     rc = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
     if (rc < 0)
     {
diff --git a/ikvm_video.hpp b/ikvm_video.hpp
index 23c58a7..17477df 100644
--- a/ikvm_video.hpp
+++ b/ikvm_video.hpp
@@ -128,8 +128,7 @@
     struct Buffer
     {
         Buffer() : data(nullptr), queued(false), payload(0), size(0)
-        {
-        }
+        {}
         ~Buffer() = default;
         Buffer(const Buffer&) = default;
         Buffer& operator=(const Buffer&) = default;
