CRX vs XPI : le paquet d'extension de Chrome et de Firefox
Chrome et Firefox empaquettent leurs extensions dans deux formats distincts, CRX et XPI, tous deux bâtis sur une archive ZIP mais avec des règles de signature et d'installation manuelle différentes.
Le CRX de Chrome et le XPI de Firefox jouent le même rôle (empaqueter le code, les ressources et le manifeste d’une extension de navigateur) avec une base technique proche mais des mécanismes de signature et de blocage à l’installation manuelle propres à chaque navigateur.
| CRX (Chrome) | XPI (Firefox) | |
|---|---|---|
| Base structurelle | Archive ZIP + en-tête binaire "Cr24" | Archive ZIP standard |
| Signature obligatoire | Oui, bloc Protocol Buffer (CRX3, depuis Chrome 75) | Oui, signature des serveurs Mozilla (par défaut depuis Firefox 43, sans contournement en version stable depuis Firefox 48) |
| Installation manuelle hors magasin | Bloquée depuis Chrome 33 (Windows) / 44 (macOS) | Bloquée sur les versions grand public |
| Manifeste | manifest.json (WebExtensions) | manifest.json (WebExtensions, depuis Firefox 57) |
Le CRX est structurellement une archive ZIP précédée d’un en-tête binaire signé : la signature “Cr24” ouvre cet en-tête, suivie depuis la version CRX3 (obligatoire à partir de Chrome 75) d’un bloc Protocol Buffer qui porte la clé publique du développeur et la signature cryptographique de l’ensemble du paquet. Chrome n’autorise plus l’installation directe d’un fichier .crx téléchargé et ouvert manuellement en dehors du Chrome Web Store (un blocage en place depuis Chrome 33 sous Windows et Chrome 44 sous macOS), mais le format continue de servir en coulisses à la distribution et à la mise à jour de toute extension installée via le Web Store.
Le XPI (Cross-Platform Install, prononcé « zippy ») est lui aussi une archive ZIP ordinaire, historiquement associée à un script install.js et un manifeste install.rdf du temps de l’architecture XPCOM de Mozilla. Depuis l’introduction des WebExtensions avec Firefox 57 en 2017, son manifeste suit un format manifest.json largement compatible avec celui de Chrome. Depuis Firefox 43 (2015), Mozilla exige par défaut que toute extension soit signée par ses propres serveurs ; la préférence xpinstall.signatures.required permettait encore de lever cette exigence jusqu’à Firefox 48, qui l’a supprimée sur les versions stable et bêta. Ce mécanisme, comparable dans son principe au blocage imposé par Chrome sur les CRX hors Web Store, peut encore être désactivé sur les versions Developer Edition, Nightly, ESR ou non marquées.
Dans les deux cas, une extension installée obtient les permissions qu’elle déclare explicitement dans son manifeste (accès au contenu des pages visitées, aux onglets ouverts, voire à l’historique de navigation selon les cas), un périmètre à vérifier avant installation, y compris pour une extension distribuée par le canal officiel, la revue de sécurité de chaque magasin n’étant pas infaillible.
CRX et XPI sont donc deux archives ZIP signées, techniquement proches depuis la convergence vers les WebExtensions en 2017, mais non interchangeables : chaque navigateur impose sa propre chaîne de signature et bloque par défaut l’installation manuelle d’un paquet non distribué par son magasin officiel (Chrome Web Store ou addons.mozilla.org).
Voir les fiches techniques complètes →
Formats concernés
Catégories concernées
Voir aussi
Questions fréquentes
Comment tester une extension Chrome qui n'est pas publiée sur le Chrome Web Store ?
Il faut partir du dossier décompressé, pas du .crx : sur la page chrome://extensions, activer le Mode développeur puis cliquer sur « Charger l'extension non empaquetée » et sélectionner le dossier de l'extension.
Comment charger un XPI non signé dans Firefox pour le tester ?
Sur la page about:debugging, section « Ce Firefox », le bouton « Charger un module complémentaire temporaire » accepte un fichier du dossier de l'extension ou une archive empaquetée. L'extension reste installée jusqu'à sa suppression ou au prochain redémarrage de Firefox.
Sources
- Chrome for Developers : Use alternative installation methods
- Chromium : spécification du format CRX (crx.html)
- Chromium-discuss : All extensions must be packaged with CRX3 format by Chrome 75
- Mozilla Wiki : Add-ons/Extension Signing
- Wikipedia : XPInstall
- Chrome for Developers : Hello World extension (chargement d'une extension non empaquetée)
- Firefox Extension Workshop : Temporary installation in Firefox
Dernière mise à jour :