{"id":267,"date":"2026-03-16T00:00:00","date_gmt":"2026-03-15T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/fr\/wp-composer-depot-composer-remplacer-wpackagist\/"},"modified":"2026-03-16T00:00:00","modified_gmt":"2026-03-15T23:00:00","slug":"wp-composer-depot-composer-remplacer-wpackagist","status":"publish","type":"post","link":"https:\/\/helloblog.io\/fr\/wp-composer-depot-composer-remplacer-wpackagist\/","title":{"rendered":"WP Composer : un d\u00e9p\u00f4t Composer ouvert et communautaire pour remplacer WPackagist"},"content":{"rendered":"\n<p>Pendant plus de dix ans, WPackagist a \u00e9t\u00e9 la pi\u00e8ce quasi incontournable pour g\u00e9rer des plugins et des th\u00e8mes WordPress avec Composer (le gestionnaire de d\u00e9pendances PHP). Si tu as d\u00e9j\u00e0 maintenu un projet WordPress \u201cmoderne\u201d (Bedrock, CI\/CD, d\u00e9ploiements reproductibles), tu as forc\u00e9ment crois\u00e9 les pr\u00e9fixes <code>wpackagist-plugin\/&lt;em&gt;<\/code> et <code>wpackagist-theme\/&lt;\/em&gt;<\/code> dans un <code>composer.json<\/code>.<\/p>\n\n\n\n<p>Sauf qu\u2019en mars 2026, WPackagist a \u00e9t\u00e9 rachet\u00e9 par WP Engine. Au-del\u00e0 du simple rachat, c\u2019est la question de la centralisation qui se pose : une brique aussi structurante du workflow WordPress + Composer ne devrait pas d\u00e9pendre d\u2019une seule entreprise. C\u2019est pr\u00e9cis\u00e9ment dans ce contexte qu\u2019un nouveau d\u00e9p\u00f4t appara\u00eet : <strong>WP Composer<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WP Composer, c\u2019est quoi exactement ?<\/h2>\n\n\n\n<p><a href=\"https:\/\/wp-composer.com\">WP Composer<\/a> est un d\u00e9p\u00f4t Composer d\u00e9di\u00e9 \u00e0 WordPress, <strong>ind\u00e9pendant<\/strong>, <strong>financ\u00e9 par la communaut\u00e9<\/strong> et <strong>enti\u00e8rement open source<\/strong>, construit et maintenu par l\u2019\u00e9quipe Roots. L\u2019objectif est clair : proposer une alternative durable et transparente \u00e0 WPackagist pour l\u2019installation des extensions et th\u00e8mes issus du r\u00e9pertoire WordPress.org.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi le remplacement de WPackagist est devenu un sujet ?<\/h2>\n\n\n\n<p>\u00c0 l\u2019origine, WPackagist a \u00e9t\u00e9 cr\u00e9\u00e9 par Outlandish et maintenu pendant des ann\u00e9es. Mais sur sa p\u00e9riode plus r\u00e9cente, le service a souffert d\u2019un manque d\u2019attention : mises \u00e0 jour plus lentes, maintenance limit\u00e9e, et tr\u00e8s peu de place pour des retours ou une gouvernance communautaire.<\/p>\n\n\n\n<p>Le rachat par WP Engine accentue ces inqui\u00e9tudes : quand l\u2019outillage de base est contr\u00f4l\u00e9 par une seule organisation, la communaut\u00e9 perd m\u00e9caniquement sa voix. Les d\u00e9cisions structurantes (disponibilit\u00e9, tarification potentielle, orientation) se prennent alors en interne plut\u00f4t qu\u2019au grand jour. Autre signal probl\u00e9matique : le d\u00e9p\u00f4t GitHub historique de WPackagist n\u2019est plus repr\u00e9sentatif de ce qui tourne r\u00e9ellement en production : https:\/\/github.com\/outlandishideas\/wpackagist.<\/p>\n\n\n\n<p>L\u2019id\u00e9e derri\u00e8re WP Composer est donc de remettre au centre une approche <strong>ouverte<\/strong>, <strong>auditable<\/strong> et <strong>financ\u00e9e par les utilisateurs<\/strong> plut\u00f4t que d\u00e9pendante d\u2019un acteur unique.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Comparatif d\u00e9taill\u00e9<\/h4>\n\n\n<p>WP Composer publie un comparatif complet (performances, m\u00e9tadonn\u00e9es, diff\u00e9rences de fonctionnement) : https:\/\/wp-composer.com\/wp-composer-vs-wpackagist<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Ce que WP Composer apporte concr\u00e8tement<\/h2>\n\n\n\n<p>WP Composer fournit <strong>chaque plugin et th\u00e8me gratuit<\/strong> du r\u00e9pertoire WordPress.org, installable via Composer, avec un nommage plus propre et plus direct :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  &quot;repositories&quot;: [\n    {\n      &quot;name&quot;: &quot;wp-composer&quot;,\n      &quot;type&quot;: &quot;composer&quot;,\n      &quot;url&quot;: &quot;https:\/\/repo.wp-composer.com&quot;,\n      &quot;only&quot;: [&quot;wp-plugin\/*&quot;, &quot;wp-theme\/*&quot;]\n    }\n  ],\n  &quot;require&quot;: {\n    &quot;wp-plugin\/woocommerce&quot;: &quot;^10.0&quot;,\n    &quot;wp-theme\/twentytwentyfive&quot;: &quot;^1.0&quot;\n  }\n}\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"repositories\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"name\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"wp-composer\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"type\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"composer\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"url\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"https:\/\/repo.wp-composer.com\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"only\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><span style=\"color:#9ECBFF\">\"wp-plugin\/*\"<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">\"wp-theme\/*\"<\/span><span style=\"color:#E1E4E8\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  ],<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"require\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"wp-plugin\/woocommerce\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"^10.0\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"wp-theme\/twentytwentyfive\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"^1.0\"<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>La convention est simple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Les plugins utilisent <code>wp-plugin\/*<\/code>.<\/li>\n\n\n<li>Les th\u00e8mes utilisent <code>wp-theme\/*<\/code>.<\/li>\n\n\n<li>Fin des pr\u00e9fixes <code>wpackagist-plugin<\/code> et <code>wpackagist-theme<\/code>.<\/li>\n\n<\/ul>\n\n\n\n<p>Autre point important si tu es dans l\u2019\u00e9cosyst\u00e8me Roots : WP Composer est le d\u00e9p\u00f4t recommand\u00e9 pour fonctionner avec les packages WordPress core de Roots, notamment <a href=\"https:\/\/wp-composer.com\/roots-wordpress\"><code>roots\/wordpress<\/code><\/a>, <code>roots\/wordpress-full<\/code>, et <code>roots\/wordpress-no-content<\/code>. Dans un projet <a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a>, le sch\u00e9ma typique consiste \u00e0 utiliser <code>roots\/wordpress<\/code> pour le c\u0153ur WordPress et WP Composer pour les plugins et th\u00e8mes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Migration depuis WPackagist : la proc\u00e9dure propre (et reproductible)<\/h2>\n\n\n\n<p>Le passage de WPackagist \u00e0 WP Composer se fait en quelques commandes. L\u2019id\u00e9e est de (1) retirer les anciens packages, (2) remplacer la configuration du d\u00e9p\u00f4t, puis (3) r\u00e9installer avec le nouveau nommage.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Supprimer les packages WPackagist<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer remove wpackagist-plugin\/woocommerce wpackagist-theme\/twentytwentyfive\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> remove<\/span><span style=\"color:#9ECBFF\"> wpackagist-plugin\/woocommerce<\/span><span style=\"color:#9ECBFF\"> wpackagist-theme\/twentytwentyfive<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2) Remplacer le d\u00e9p\u00f4t configur\u00e9 dans Composer<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer config --unset repositories.wpackagist &amp;&amp; composer config repositories.wp-composer composer https:\/\/repo.wp-composer.com\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> config<\/span><span style=\"color:#79B8FF\"> --unset<\/span><span style=\"color:#9ECBFF\"> repositories.wpackagist<\/span><span style=\"color:#E1E4E8\"> &#x26;&#x26; <\/span><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> config<\/span><span style=\"color:#9ECBFF\"> repositories.wp-composer<\/span><span style=\"color:#9ECBFF\"> composer<\/span><span style=\"color:#9ECBFF\"> https:\/\/repo.wp-composer.com<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) R\u00e9installer avec le nouveau nommage <code>wp-plugin\/&lt;em&gt;<\/code> et <code>wp-theme\/&lt;\/em&gt;<\/code><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer require wp-plugin\/woocommerce wp-theme\/twentytwentyfive\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> require<\/span><span style=\"color:#9ECBFF\"> wp-plugin\/woocommerce<\/span><span style=\"color:#9ECBFF\"> wp-theme\/twentytwentyfive<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Alternative : script de migration automatique<\/h3>\n\n\n\n<p>Si tu veux mettre \u00e0 jour ton <code>composer.json<\/code> sans le faire \u00e0 la main, un script est disponible ici : https:\/\/github.com\/roots\/wp-composer\/blob\/main\/scripts\/migrate-from-wpackagist.sh. Ex\u00e9cution en une ligne :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>curl -sO https:\/\/raw.githubusercontent.com\/roots\/wp-composer\/main\/scripts\/migrate-from-wpackagist.sh &amp;&amp; bash migrate-from-wpackagist.sh\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">curl<\/span><span style=\"color:#79B8FF\"> -sO<\/span><span style=\"color:#9ECBFF\"> https:\/\/raw.githubusercontent.com\/roots\/wp-composer\/main\/scripts\/migrate-from-wpackagist.sh<\/span><span style=\"color:#E1E4E8\"> &#x26;&#x26; <\/span><span style=\"color:#B392F0\">bash<\/span><span style=\"color:#9ECBFF\"> migrate-from-wpackagist.sh<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Enfin, si tu utilisais la GitHub Action de suivi des mises \u00e0 jour c\u00f4t\u00e9 WPackagist, elle a \u00e9t\u00e9 renomm\u00e9e en <strong>WP Composer Changelog Action<\/strong> et supporte pleinement le nouveau format <code>wp-plugin\/&lt;em&gt;<\/code> et <code>wp-theme\/&lt;\/em&gt;<\/code> : https:\/\/github.com\/roots\/wp-composer-changelog-action.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Performances : pourquoi WP Composer peut \u00eatre beaucoup plus rapide<\/h2>\n\n\n\n<p>Le point technique le plus int\u00e9ressant, c\u2019est l\u2019utilisation du protocole <strong><code>metadata-url<\/code> de Composer v2<\/strong>, qui permet \u00e0 Composer de r\u00e9cup\u00e9rer uniquement les m\u00e9tadonn\u00e9es des packages n\u00e9cessaires \u00e0 la r\u00e9solution. \u00c0 l\u2019inverse, WPackagist s\u2019appuie encore sur l\u2019approche <strong><code>provider-includes<\/code><\/strong>, qui pousse Composer \u00e0 t\u00e9l\u00e9charger de gros fichiers d\u2019index contenant les m\u00e9tadonn\u00e9es de milliers de packages avant de pouvoir r\u00e9soudre les d\u00e9pendances.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Temps de r\u00e9solution (cold resolve) &#8211; plus bas = mieux<\/h3>\n\n\n\n<p>Mesure sur une r\u00e9solution \u00e0 froid (sans cache) :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>10 plugins : WP Composer <strong>0,7 s<\/strong> vs WPackagist 12,3 s (\u2248 <strong>17\u00d7 plus rapide<\/strong>)<\/li>\n\n\n<li>20 plugins : WP Composer <strong>1,1 s<\/strong> vs WPackagist 19,0 s (\u2248 <strong>17\u00d7 plus rapide<\/strong>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">M\u00e9tadonn\u00e9es &#038; cache : les diff\u00e9rences qui comptent en CI\/CD<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Support du <code>metadata-url<\/code> (Composer v2) : WP Composer <strong>Oui<\/strong> ; WPackagist <strong>Non<\/strong>.<\/li>\n\n\n<li>Cache CDN : WP Composer renvoie <code>public, max-age=300<\/code> ; WPackagist renvoie <code>no-cache, private<\/code>.<\/li>\n\n\n<li>Fichiers par package : WP Composer utilise des fichiers immuables, adress\u00e9s par contenu (content-addressed) et mis en cache ind\u00e9finiment ; WPackagist n\u2019est pas content-addressed.<\/li>\n\n<\/ul>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">\u00c0 propos des benchmarks<\/h4>\n\n\n<p>Les mesures ont \u00e9t\u00e9 effectu\u00e9es depuis un seul emplacement avec Composer 2.7+. Les r\u00e9sultats peuvent varier selon la r\u00e9gion et le r\u00e9seau. Les scripts de benchmark sont disponibles en open source : https:\/\/github.com\/roots\/wp-composer\/tree\/main\/benchmarks<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Un projet enti\u00e8rement open source (et forkable)<\/h2>\n\n\n\n<p>WP Composer ne se limite pas \u00e0 publier un endpoint : <strong>l\u2019application, la documentation et la configuration de d\u00e9ploiement<\/strong> sont disponibles publiquement sur GitHub : https:\/\/github.com\/roots\/wp-composer. Les contributions sont ouvertes, et il est possible de forker le projet et d\u2019ex\u00e9cuter sa propre instance &#8211; un point cl\u00e9 quand on parle d\u2019infrastructure critique.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Financement communautaire : comment le service reste ind\u00e9pendant<\/h2>\n\n\n\n<p>Le financement de WP Composer repose enti\u00e8rement sur la communaut\u00e9 via GitHub Sponsors : https:\/\/github.com\/sponsors\/roots. Le sponsoring sert \u00e0 couvrir l\u2019infrastructure, le d\u00e9veloppement et la maintenance de WP Composer, ainsi que l\u2019\u00e9cosyst\u00e8me Roots plus largement.<\/p>\n\n\n\n<p>Pour le suivi et les \u00e9changes techniques autour de l\u2019annonce, une discussion est ouverte sur Discourse : https:\/\/discourse.roots.io\/t\/-\/30235.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9cap : ce que \u00e7a change pour nos projets WordPress g\u00e9r\u00e9s avec Composer<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Tu peux installer plugins et th\u00e8mes WordPress.org via un d\u00e9p\u00f4t Composer ind\u00e9pendant : <code>https:\/\/repo.wp-composer.com<\/code>.<\/li>\n\n\n<li>Le nommage devient plus clair : <code>wp-plugin\/&lt;em&gt;<\/code> et <code>wp-theme\/&lt;\/em&gt;<\/code>.<\/li>\n\n\n<li>La migration depuis WPackagist est simple (commandes) ou automatisable (script).<\/li>\n\n\n<li>Les performances de r\u00e9solution peuvent \u00eatre nettement meilleures gr\u00e2ce \u00e0 <code>metadata-url<\/code> (Composer v2) et une strat\u00e9gie de cache plus adapt\u00e9e.<\/li>\n\n\n<li>Le code est auditable et d\u00e9ployable ailleurs : le projet est enti\u00e8rement open source sur GitHub.<\/li>\n\n\n<li>Le mod\u00e8le \u00e9conomique annonc\u00e9 repose sur la communaut\u00e9 (GitHub Sponsors), pour \u00e9viter une d\u00e9pendance \u00e0 un acteur unique.<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>R\u00e9f\u00e9rences \/ Sources<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/roots.io\/introducing-wp-composer-as-a-wpackagist-replacement\/\" target=\"_blank\" rel=\"noopener noreferrer\">Introducing WP Composer as a WPackagist Replacement<\/a><\/li><li><a href=\"https:\/\/wp-composer.com\" target=\"_blank\" rel=\"noopener noreferrer\">WP Composer<\/a><\/li><li><a href=\"https:\/\/wp-composer.com\/wp-composer-vs-wpackagist\" target=\"_blank\" rel=\"noopener noreferrer\">WP Composer vs WPackagist<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/wp-composer\" target=\"_blank\" rel=\"noopener noreferrer\">roots\/wp-composer (GitHub)<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/wp-composer\/blob\/main\/scripts\/migrate-from-wpackagist.sh\" target=\"_blank\" rel=\"noopener noreferrer\">migrate-from-wpackagist.sh<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/wp-composer-changelog-action\" target=\"_blank\" rel=\"noopener noreferrer\">WP Composer Changelog Action<\/a><\/li><li><a href=\"https:\/\/github.com\/outlandishideas\/wpackagist\" target=\"_blank\" rel=\"noopener noreferrer\">WPackagist (GitHub)<\/a><\/li><li><a href=\"https:\/\/wp-composer.com\/roots-wordpress\" target=\"_blank\" rel=\"noopener noreferrer\">roots\/wordpress<\/a><\/li><li><a href=\"https:\/\/roots.io\/bedrock\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bedrock<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/wp-composer\/tree\/main\/benchmarks\" target=\"_blank\" rel=\"noopener noreferrer\">Benchmarks (wp-composer)<\/a><\/li><li><a href=\"https:\/\/github.com\/sponsors\/roots\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Sponsors (Roots)<\/a><\/li><li><a href=\"https:\/\/discourse.roots.io\/t\/-\/30235\" target=\"_blank\" rel=\"noopener noreferrer\">Roots Discourse discussion<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Installer plugins et th\u00e8mes WordPress via Composer \u00e9tait presque synonyme de WPackagist. En 2026, un changement de gouvernance relance le d\u00e9bat &#8211; et WP Composer arrive comme alternative ind\u00e9pendante, plus rapide et totalement open source.<\/p>\n","protected":false},"author":14,"featured_media":266,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63],"tags":[73,8,3,116],"class_list":["post-267","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecosysteme-wordpress","tag-bedrock","tag-composer","tag-roots","tag-supply-chain"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts\/267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/comments?post=267"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts\/267\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/media\/266"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/media?parent=267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/categories?post=267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/tags?post=267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}