diff --git a/.gitignore b/.gitignore
index a8c0d1b6b074cc7439c215d42b3859fe2e617360..0920b95a7948ae10bbd5ef34065d47796f2b09fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
 
 tools/
+
+phpstan.neon
diff --git a/.phive/phars.xml b/.phive/phars.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f909b52075e43d32b8a361de9811b8ff1768b7c5
--- /dev/null
+++ b/.phive/phars.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phive xmlns="https://phar.io/phive">
+  <phar name="phpstan" version="1.11.1" installed="1.11.1" location="./tools/phpstan" copy="false"/>
+</phive>
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/phpstan.dist.neon b/phpstan.dist.neon
new file mode 100644
index 0000000000000000000000000000000000000000..e929f5ac1511df87f294eadedee07d562a160041
--- /dev/null
+++ b/phpstan.dist.neon
@@ -0,0 +1,9 @@
+includes:
+	- phpstan-baseline.neon
+
+parameters:
+    level: 8
+    paths:
+        - src
+        - ajax
+    tipsOfTheDay: false
diff --git a/tests/phpstan-bootstrap.php b/tests/phpstan-bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..b61ff4b8300a965e0f46025ba64745a22b118e74
--- /dev/null
+++ b/tests/phpstan-bootstrap.php
@@ -0,0 +1,13 @@
+<?php
+
+if (!defined('QUIQQER_SYSTEM')) {
+    define('QUIQQER_SYSTEM', true);
+}
+
+if (!defined('QUIQQER_AJAX')) {
+    define('QUIQQER_AJAX', true);
+}
+
+putenv("QUIQQER_OTHER_AUTOLOADERS=KEEP");
+
+require_once __DIR__ . '/../../../../bootstrap.php';