diff --git a/.cmake-format b/.cmake-format
new file mode 100644
index 0000000000000000000000000000000000000000..9efd8b9ac62578c454263da0582cb2d16353fdbf
--- /dev/null
+++ b/.cmake-format
@@ -0,0 +1,66 @@
+line_width: 120
+tab_size: 2
+max_subgroups_hwrap: 2
+max_pargs_hwrap: 6
+separate_ctrl_name_with_space: false
+separate_fn_name_with_space: false
+dangle_parens: true
+dangle_align: prefix
+min_prefix_chars: 4
+max_prefix_chars: 10
+max_lines_hwrap: 2
+line_ending: unix
+command_case: canonical
+keyword_case: upper
+additional_commands:
+  configure_package_config_file:
+    flags:
+      - NO_SET_AND_CHECK_MACRO
+      - NO_CHECK_REQUIRED_COMPONENTS_MACRO
+    kwargs:
+      INSTALL_DESTINATION: "*"
+      PATH_VARS: "*"
+      INSTALL_PREFIX: "*"
+  find_dependency:
+    flags:
+      - CONFIG
+      - QUIET
+      - REQUIRED
+    kwargs:
+      COMPONENTS: "*"
+  gtest_discover_tests:
+    flags:
+      - NO_PRETTY_TYPES
+      - NO_PRETTY_VALUES
+    kwargs:
+      EXTRA_ARGS: "*"
+      WORKING_DIRECTORY: "*"
+      TEST_PREFIX: "*"
+      TEST_SUFFIX: "*"
+      PROPERTIES: "*"
+      TEST_LIST: "*"
+      DISCOVERY_TIMEOUT: "*"
+  setup_target_for_coverage_gcovr_html:
+    kwargs:
+      BASE_DIRECTORY: "*"
+      EXCLUDE: "*"
+      EXECUTABLE: "*"
+      EXECUTABLE_ARGS: "*"
+      DEPENDENCIES: "*"
+always_wrap: ["add_library", "find_package", "find_dependency", "target_include_directories"]
+enable_sort: true
+autosort: false
+hashruler_min_length: 10
+per_command: {}
+layout_passes: {}
+bullet_char: "*"
+enum_char: .
+enable_markup: true
+first_comment_is_literal: true
+literal_comment_pattern: null
+fence_pattern: ^\s*([`~]{3}[`~]*)(.*)$
+ruler_pattern: ^\s*[^\w\s]{3}.*[^\w\s]{3}$
+canonicalize_hashrulers: true
+emit_byteorder_mark: false
+input_encoding: utf-8
+output_encoding: utf-8
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6e38afb73f469cd17a60e4a4899b0e909a3f39dd..e66075d1bb844bb672e82e39545c8e357afc40e4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,7 +8,7 @@
 # SPDX-License-Identifier: EPL-2.0
 ################################################################################
 
-cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR)
 
 # Add the custom CMake modules to CMake's module path
 list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
@@ -17,7 +17,8 @@ project(
   ScenarioAPI
   VERSION 0.1.0
   DESCRIPTION "Scenario API, an abstraction layer for environmental simulators"
-  LANGUAGES CXX)
+  LANGUAGES CXX
+)
 
 # Project setup only if this is the main project
 if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
@@ -30,8 +31,7 @@ endif()
 add_subdirectory(MantleAPI)
 
 # Should we build documentation for the project?
-if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_DOCUMENTATION)
-   OR ScenarioAPI_BUILD_DOCUMENTATION)
+if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_DOCUMENTATION) OR ScenarioAPI_BUILD_DOCUMENTATION)
   add_subdirectory(doc)
 endif()
 
diff --git a/MantleAPI/include/CMakeLists.txt b/MantleAPI/include/CMakeLists.txt
index 70654a03b3484c8ae140d7bab97672e80c0d260e..9cf7e8d35e292b56a5c68d62a3d7ecab79dcdaa9 100644
--- a/MantleAPI/include/CMakeLists.txt
+++ b/MantleAPI/include/CMakeLists.txt
@@ -8,15 +8,22 @@
 # SPDX-License-Identifier: EPL-2.0
 ################################################################################
 
-find_package(units CONFIG REQUIRED)
+find_package(
+  units CONFIG REQUIRED
+)
 
 file(
   GLOB_RECURSE HEADERS
   RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
-  CONFIGURE_DEPENDS "*.h")
+  CONFIGURE_DEPENDS "*.h"
+)
 
-add_library(ScenarioAPI INTERFACE)
-add_library(ScenarioAPI::ScenarioAPI ALIAS ScenarioAPI)
+add_library(
+  ScenarioAPI INTERFACE
+)
+add_library(
+  ScenarioAPI::ScenarioAPI ALIAS ScenarioAPI
+)
 
 target_link_libraries(ScenarioAPI INTERFACE units)
 
@@ -24,21 +31,24 @@ include(GNUInstallDirs)
 set(INSTALL_CONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/ScenarioAPI")
 
 target_include_directories(
-  ScenarioAPI INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+  ScenarioAPI
+  INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+)
 
 target_compile_features(ScenarioAPI INTERFACE cxx_std_17)
 
 include(CMakePackageConfigHelpers)
 configure_package_config_file(
-  "${PROJECT_SOURCE_DIR}/cmake/ScenarioAPIConfig.cmake.in"
-  "${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfig.cmake"
+  "${PROJECT_SOURCE_DIR}/cmake/ScenarioAPIConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfig.cmake"
   INSTALL_DESTINATION ${INSTALL_CONFIG_DIR}
-  PATH_VARS CMAKE_INSTALL_INCLUDEDIR)
+  PATH_VARS CMAKE_INSTALL_INCLUDEDIR
+)
 
 write_basic_package_version_file(
   "${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfigVersion.cmake"
   VERSION ${PROJECT_VERSION}
-  COMPATIBILITY SameMajorVersion)
+  COMPATIBILITY SameMajorVersion
+)
 
 install(DIRECTORY MantleAPI TYPE INCLUDE)
 install(TARGETS ScenarioAPI EXPORT ScenarioAPITargets)
@@ -46,10 +56,12 @@ install(TARGETS ScenarioAPI EXPORT ScenarioAPITargets)
 install(
   EXPORT ScenarioAPITargets
   DESTINATION ${INSTALL_CONFIG_DIR}
-  NAMESPACE ScenarioAPI::)
+  NAMESPACE ScenarioAPI::
+)
 
 install(
   FILES "${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfig.cmake"
         "${CMAKE_CURRENT_BINARY_DIR}/ScenarioAPIConfigVersion.cmake"
   DESTINATION ${INSTALL_CONFIG_DIR}
-  COMPONENT dev)
+  COMPONENT dev
+)