diff --git a/Connected.php b/Connected.php
deleted file mode 100644
index 259b650ab85cf586cf64376611c6de1645a893f7..0000000000000000000000000000000000000000
--- a/Connected.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- * Connected
- *
- * @license		GPL
- * @package		Connected
- * @link		https://gitlab.liris.cnrs.fr/mloiseau/mw_connected
- *
- **/
- $wgExtensionMessagesFiles['Connected'] = __DIR__ . '/Connected.i18n.magic.php';
-
- $wgHooks['ParserGetVariableValueSwitch'][] = 'wfConnectedAssignValue';
- function wfConnectedAssignValue( &$parser, &$cache, &$magicWordId, &$ret ) {
-	global $wgUser;
-	$result = false;
-	if($wgUser->isSafeToLoad()){
-		if ( !$wgUser->isLoggedIn() ) {
-			switch($magicWordId){
-				case 'connected' :
-					$ret = 0;
-					$result = true;
-					break;
-				case 'u_name':
-					$ret = $wgUser->getName();
-					$result = true;
-					break;
-			}
-		}
-		else{
-			switch($magicWordId){
-				case 'connected' :
-					$ret = 1;
-					$result = true;
-					break;
-				case 'u_name':
-					$ret = $wgUser->getName();
-					$result = true;
-					break;
-			}
-		}
-	}
-	return $result;
-}
-
-$wgExtensionCredits['variable'][] = [
- 	'name' => 'Connected',
- 	'author' => 'Mathieu Loiseau',
- 	'version' => '0',
- 	'description' => 'A small mediawiki extension to have a variable to know if the user is logged in or not.',
- 	'url' => 'https://gitlab.liris.cnrs.fr/mloiseau/mw_connected',
- ];
-
- $wgHooks['MagicWordwgVariableIDs'][] = 'connectedMyDeclareVarIds';
- function connectedMyDeclareVarIds( &$customVariableIds ) {
- 	// $customVariableIds is where MediaWiki wants to store its list of custom
- 	// variable IDs. We oblige by adding ours:
-	$customVariableIds[] = 'connected';
-	$customVariableIds[] = 'u_name';
- }
diff --git a/extension.json b/extension.json
new file mode 100644
index 0000000000000000000000000000000000000000..522a75b066e18e66d4ce23512db1707f64be494f
--- /dev/null
+++ b/extension.json
@@ -0,0 +1,19 @@
+{
+	"name": "Connected",
+	"author": "Mathieu Loiseau",
+	"version": "0.0",
+	"url": "https://gitlab.liris.cnrs.fr/mloiseau/mw_connected",
+	"descriptionmsg": "A small mediawiki extension to have a variable to know if the user is logged in or not.",
+	"license-name": "GPL-2.0-or-later",
+	"type": "parserhook",
+	"AutoloadClasses": {
+		"ExampleExtensionHooks": "src/Connected.php"
+	},
+	"ExtensionMessagesFiles": {
+		"ExampleExtensionMagic": "Connected.i18n.magic.php"
+	},
+	"Hooks": {
+		"ParserGetVariableValueSwitch": "ConnectedHooks::onParserFirstCallInit"
+	},
+	"manifest_version": 1
+}
diff --git a/src/Connected.php b/src/Connected.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a6cdaf2db137f85857487acdc5708ea30a03396
--- /dev/null
+++ b/src/Connected.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Connected
+ *
+ * @license		GPL
+ * @package		Connected
+ * @link		https://gitlab.liris.cnrs.fr/mloiseau/mw_connected
+ *
+ **/
+$wgExtensionMessagesFiles['Connected'] = __DIR__ . '/Connected.i18n.magic.php';
+
+$wgHooks['ParserGetVariableValueSwitch'][] = 'wfConnectedAssignValue';
+function wfConnectedAssignValue( &$parser, &$cache, &$magicWordId, &$ret ) {
+	global $wgUser;
+	$result = false;
+	if($wgUser->isSafeToLoad()){
+		if ( !$wgUser->isLoggedIn() ) {
+			switch($magicWordId){
+				case 'connected' :
+					$ret = 0;
+					$result = true;
+					break;
+				case 'u_name':
+					$ret = $wgUser->getName();
+					$result = true;
+					break;
+			}
+		}
+		else{
+			switch($magicWordId){
+				case 'connected' :
+					$ret = 1;
+					$result = true;
+					break;
+				case 'u_name':
+					$ret = $wgUser->getName();
+					$result = true;
+					break;
+			}
+		}
+	}
+	return $result;
+}
+
+$wgHooks['MagicWordwgVariableIDs'][] = 'connectedMyDeclareVarIds';
+function connectedMyDeclareVarIds( &$customVariableIds ) {
+	// $customVariableIds is where MediaWiki wants to store its list of custom
+	// variable IDs. We oblige by adding ours:
+	$customVariableIds[] = 'connected';
+	$customVariableIds[] = 'u_name';
+}