diff --git a/composer.json b/composer.json
index d7a5ad2..ba86f15 100644
--- a/composer.json
+++ b/composer.json
@@ -1,68 +1,71 @@
 {
     "name": "keruald/keruald",
     "type": "library",
     "description": "Modular libraries to build frameworks and applications",
     "keywords": [
         "framework",
         "keruald"
     ],
     "license": "BSD-2-Clause",
     "homepage": "https://keruald.nasqueron.org",
     "authors": [
         {
             "name": "Sébastien Santoro",
             "email": "dereckson@espace-win.org"
         },
         {
             "name": "Keruald contributors"
         }
     ],
     "provide": {
         "psr/simple-cache-implementation": "1.0|2.0|3.0"
     },
     "require": {
         "psr/simple-cache": "^1.0|^2.0|^3.0",
         "ext-intl": "*"
     },
     "require-dev": {
         "ext-mbstring": "*",
         "ext-mysqli": "*",
         "ext-xmlwriter": "*",
         "nasqueron/codestyle": "^0.0.1",
         "phan/phan": "^5.3.1",
         "phpunit/phpunit": "^10.2",
         "symfony/yaml": "^6.0.3",
         "squizlabs/php_codesniffer": "^3.6"
     },
     "suggest": {
         "ext-memcached": "*",
         "ext-redis": "*"
     },
     "replace": {
         "keruald/cache": "0.1.0",
         "keruald/commands": "0.0.1",
         "keruald/database": "0.4.0",
+        "keruald/github": "0.2.1",
         "keruald/omnitools": "0.12.0",
         "keruald/report": "0.1.0"
     },
     "autoload": {
         "psr-4": {
             "Keruald\\Cache\\": "cache/src/",
             "Keruald\\Cache\\Tests\\": "cache/tests/",
             "Keruald\\Commands\\": "commands/src/",
             "Keruald\\Commands\\Tests\\": "commands/tests/",
             "Keruald\\Database\\": "database/src/",
             "Keruald\\Database\\Tests\\": "database/tests/",
+            "Keruald\\GitHub\\": "github/src/",
+            "Keruald\\GitHub\\Tests\\": "github/tests/",
             "Keruald\\OmniTools\\": "omnitools/src/",
             "Keruald\\OmniTools\\Tests\\": "omnitools/tests/",
             "Keruald\\Reporting\\": "report/src/",
             "Keruald\\Reporting\\Tests\\": "report/tests/"
         }
     },
     "scripts": {
         "lint-src": "find */src -type f -name '*.php' | xargs -n1 php -l",
         "lint-tests": "find */tests -type f -name '*.php' | xargs -n1 php -l",
         "test": "vendor/bin/phpunit"
     },
     "minimum-stability": "dev"
 }
diff --git a/metadata.yml b/metadata.yml
index fe382e1..96602b1 100644
--- a/metadata.yml
+++ b/metadata.yml
@@ -1,36 +1,38 @@
 #   -------------------------------------------------------------
 #   Metadata for Keruald packages
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 #   Project:        Keruald
 #   Description:    Configuration for utilities
 #   License:        Trivial work, not eligible to copyright.
 #
 #                   If eligible, this data is made available under
 #                   the Public Domain Dedication and License v1.0
 #                   whose full text can be found at:
 #                   http://opendatacommons.org/licenses/pddl/1.0/
 #   -------------------------------------------------------------
 
 #   -------------------------------------------------------------
 #   Packages
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 #   Each package matches the following artifacts:
 #
 #    — a subdirectory here
 #    — a main repository on DevCentral
 #    — a mirror repository on GitHub in keruald/ organization
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 packages:
     - cache
     - commands
     - database
+    - github
     - omnitools
     - report
 
 packages_namespaces:
     cache: Keruald\Cache
     commands: Keruald\Commands
     database: Keruald\Database
+    github: Keruald\GitHub
     omnitools: Keruald\OmniTools
     report: Keruald\Reporting
diff --git a/phpcs.xml b/phpcs.xml
index d14c444..d89230c 100644
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -1,55 +1,58 @@
 <?xml version="1.0"?>
 
 <!--
    =============================================================
    PHP_CodeSniffer configuration
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
    Project:        Keruald
    License:        Trivial work, not eligible to copyright
    Source file:    _templates/phpcs.xml.in
    =============================================================
 
    <auto-generated>
        This file is automatically generated from a template.
 
        Changes to this file may cause incorrect behavior
        and will be lost if the state is redeployed.
    </auto-generated>
 -->
 
 <ruleset name="Nasqueron">
     <rule ref="vendor/nasqueron/codestyle/CodeSniffer/ruleset.xml" />
 
     <!--
     OmniTools exception
     Allow dprint_r() and dieprint_r() legacy debug function names
     -->
     <rule ref="Generic.NamingConventions.CamelCapsFunctionName.NotCamelCaps">
         <exclude-pattern>*/_register_to_global_space.php</exclude-pattern>
     </rule>
 
     <!--
     Database exception
     Allow unused parameters
     -->
     <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter">
         <exclude-pattern>database/src/*</exclude-pattern>
     </rule>
 
     <file>cache/src</file>
     <file>cache/tests</file>
 
     <file>commands/src</file>
     <file>commands/tests</file>
 
     <file>database/src</file>
     <file>database/tests</file>
 
+    <file>github/src</file>
+    <file>github/tests</file>
+
     <file>omnitools/src</file>
     <file>omnitools/tests</file>
 
     <file>report/src</file>
     <file>report/tests</file>
 
 </ruleset>
diff --git a/phpunit.xml b/phpunit.xml
index 7860a2e..d89b546 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,57 +1,61 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
    =============================================================
    PHPUnit configuration
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
    Project:        Keruald
    License:        Trivial work, not eligible to copyright
    Source file:    _templates/phpunit.xml.in
    =============================================================
 
    <auto-generated>
        This file is automatically generated from a template.
 
        Changes to this file may cause incorrect behavior
        and will be lost if the state is redeployed.
    </auto-generated>
 -->
 
 <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.3/phpunit.xsd"
          bootstrap="vendor/autoload.php"
          cacheDirectory=".phpunit.cache"
          stopOnFailure="false">
     <php>
         <ini name="display_errors" value="On" />
         <ini name="display_startup_errors" value="On" />
         <ini name="error_reporting" value="On" />
     </php>
     <testsuites>
         <testsuite name="Unit tests for keruald/cache">
             <directory suffix="Test.php">./cache/tests</directory>
         </testsuite>
         <testsuite name="Unit tests for keruald/commands">
             <directory suffix="Test.php">./commands/tests</directory>
         </testsuite>
         <testsuite name="Unit tests for keruald/database">
             <directory suffix="Test.php">./database/tests</directory>
         </testsuite>
+        <testsuite name="Unit tests for keruald/github">
+            <directory suffix="Test.php">./github/tests</directory>
+        </testsuite>
         <testsuite name="Unit tests for keruald/omnitools">
             <directory suffix="Test.php">./omnitools/tests</directory>
         </testsuite>
         <testsuite name="Unit tests for keruald/report">
             <directory suffix="Test.php">./report/tests</directory>
         </testsuite>
     </testsuites>
     <source>
         <include>
             <directory suffix=".php">cache/src/</directory>
             <directory suffix=".php">commands/src/</directory>
             <directory suffix=".php">database/src/</directory>
+            <directory suffix=".php">github/src/</directory>
             <directory suffix=".php">omnitools/src/</directory>
             <directory suffix=".php">report/src/</directory>
         </include>
     </source>
 </phpunit>