diff --git a/.gitignore b/.gitignore
index 2afd78a6ba06dad23ebdeca19f2d50a3a3bac9bb..654c0790e28135fe299890ec0723ffb7aae67fc9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
+/vendor/
+/composer.phar
+/composer.lock
+/phpcs.xml
+
 **/.DS_Store
 **/.htaccess
 /.buildpath
@@ -20,4 +25,4 @@ local/*
 /squelettes-dist
 /tests
 /themes
-tmp/*
\ No newline at end of file
+tmp/*
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..5f5e53d22ae023a526b3ebb0c7fa486e43549fb3
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,21 @@
+{
+    "require-dev": {
+        "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1",
+        "spip/coding-standards": "^1.2"
+    },
+    "archive": {
+        "exclude": [
+            "composer.json",
+            "phpcs.xml.dist",
+            "!plugins-dist",
+            "!squelettes-dist",
+            "!config/ecran_securite.php",
+            "!config/remove.txt",
+            "!IMG/remove.txt",
+            "!local/remove.txt",
+            "!local/CACHEDIR.TAG",
+            "!tmp/remove.txt",
+            "!tmp/CACHEDIR.TAG"
+        ]
+    }
+}
diff --git a/phpcs.xml.dist b/phpcs.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..328e179edb97f701753d068e92c109e59394bfd1
--- /dev/null
+++ b/phpcs.xml.dist
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<ruleset>
+    <file>./ecrire</file>
+    <file>./prive</file>
+    <exclude-pattern>ecrire/lang/*</exclude-pattern>
+    <exclude-pattern>ecrire/inc/idna_convert.class.php</exclude-pattern>
+
+    <rule ref="SPIP41"/>
+
+    <config name="ignore_warnings_on_exit" value="1"/>
+    <arg name="cache" value="tmp/php_cs.cache"/>
+    <arg name="report-full" value="tmp/php_cs.txt"/>
+    <arg name="report-summary"/>
+    <arg value="s"/>
+</ruleset>