diff --git a/.gitignore b/.gitignore
index f5e46b698cdb99eb18c7bac8e226c7692325cbd7..2df735637f2c21743cd290bccc49bee78a57da95 100644
--- a/.gitignore
+++ b/.gitignore
@@ -144,3 +144,9 @@ flycheck_*.el
 
 # Python/Sphinx
 env/
+
+# Conan
+conan.lock
+conanbuildinfo*
+conaninfo.txt
+graph_info.json
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..a1e463721011de1db6145c4c2fcb96342b01c2d6
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,49 @@
+# ** header v3.0
+# This file is a part of the CaosDB Project.
+#
+# Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+# Copyright (C) 2021 Daniel Hornung <d.hornung@indiscale.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# ** end header
+
+# This Makefile is a wrapper for several other scripts.
+
+
+CLANG-FORMAT = clang-format-11
+CLANG-TIDY = clang-tidy-11
+
+CLANG_TIDY_CHECKS = "--checks=*,-fuchsia-*,-llvmlibc-*,-cert-err58-cpp,-cppcoreguidelines-avoid-non-const-global-variables,-cppcoreguidelines-owning-memory,-modernize-use-trailing-return-type,-google-readability-avoid-underscore-in-googletest-name,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-cppcoreguidelines-avoid-goto,-hicpp-avoid-goto,-readability-function-cognitive-complexity,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-non-private-member-variables-in-classes,-misc-non-private-member-variables-in-classes,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-no-array-decay"
+CLANG_TIDY_CMD = $(CLANG-TIDY) \
+  --header-filter=caosdb/.*[^\(\.pb\.h\)]$ \
+  --fix \
+  $(CLANG_TIDY_CHECKS)
+
+
+.PHONY: help
+help:
+	@echo "Targets:"
+	@echo "    conan-install - Install locally with Conan."
+	@echo "    style - auto-format the source files."
+
+conan-install:
+	conan install . -s "compiler.libcxx=libstdc++11"
+.PHONY: conan-install
+
+format: conan-install
+	$(CLANG-FORMAT) -i --verbose \
+	 $$(find test/ -type f -iname "*.cpp" -o -iname "*.h" -o -iname "*.h.in")
+	$(CLANG_TIDY_CMD) $$(find test/ -type f -iname "*.cpp" -o -iname "*.h" -o -iname "*.h.in")
+.PHONY: format
diff --git a/README.md b/README.md
index 9d2b880004b551f8e32eb0254e47377744584e69..a1e449184088f9eb762c8cbbae16d0360c7ef71f 100644
--- a/README.md
+++ b/README.md
@@ -26,3 +26,7 @@ Create a local conan package from the caosdb-cpplib repository
 	- CAOSDB_SERVER_GRPC_PORT_HTTPS
 	- CAOSDB_SERVER_CERT
 6. Run with `ctest` in the build directory.
+
+## Formatting, style, linting ##
+
+`make format`
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index bfc0e7b2d41e4095bbe892fa2dc838b2952180f1..ec9d39041bf87350c1b018615f96203475ae01a9 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -81,7 +81,6 @@ if(LINTING)
         message(STATUS "clang-tidy: ${clang_tidy}")
         set(_CMAKE_CXX_CLANG_TIDY "${clang_tidy}"
             "--header-filter=caosdb/.*[^\(\.pb\.h\)]$"
-            "--warnings-as-errors=*"
             "--fix")
         set(_CMAKE_CXX_CLANG_TIDY_CHECKS
           "--checks=*,-fuchsia-*,-llvmlibc-*,-cert-err58-cpp,-cppcoreguidelines-avoid-non-const-global-variables,-cppcoreguidelines-owning-memory,-modernize-use-trailing-return-type,-google-readability-avoid-underscore-in-googletest-name,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-cppcoreguidelines-avoid-goto,-hicpp-avoid-goto,-readability-function-cognitive-complexity,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-non-private-member-variables-in-classes,-misc-non-private-member-variables-in-classes,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-no-array-decay")
diff --git a/test/caosdb_test_utility.h b/test/caosdb_test_utility.h
index cd1b47ce8f61a8d8d66ae2a7d76ffce46c2a3739..4cde3dc5059acf60a04b071154b44a59b67e9833 100644
--- a/test/caosdb_test_utility.h
+++ b/test/caosdb_test_utility.h
@@ -32,15 +32,17 @@
  * @date 2021-07-07
  */
 #define EXPECT_THROW_MESSAGE(statement, exeption_type, message)                \
-  EXPECT_THROW(try { statement; } catch (const exeption_type &e) {             \
-    EXPECT_EQ(std::string(e.what()), message);                                 \
-    throw;                                                                     \
-  },                                                                           \
-               exeption_type)
+  EXPECT_THROW(                                                                \
+      try { statement; } catch (const exeption_type &e) {                      \
+        EXPECT_EQ(std::string(e.what()), message);                             \
+        throw;                                                                 \
+      },                                                                       \
+      exeption_type)
 #define ASSERT_THROW_MESSAGE(statement, exeption_type, message)                \
-  ASSERT_THROW(try { statement; } catch (const exeption_type &e) {             \
-    ASSERT_EQ(std::string(e.what()), message);                                 \
-    throw;                                                                     \
-  },                                                                           \
-               exeption_type)
+  ASSERT_THROW(                                                                \
+      try { statement; } catch (const exeption_type &e) {                      \
+        ASSERT_EQ(std::string(e.what()), message);                             \
+        throw;                                                                 \
+      },                                                                       \
+      exeption_type)
 #endif