{"id":254,"date":"2026-03-16T00:00:00","date_gmt":"2026-03-15T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/es\/wp-composer-reemplazo-wpackagist-composer-wordpress\/"},"modified":"2026-03-16T00:00:00","modified_gmt":"2026-03-15T23:00:00","slug":"wp-composer-reemplazo-wpackagist-composer-wordpress","status":"publish","type":"post","link":"https:\/\/helloblog.io\/es\/wp-composer-reemplazo-wpackagist-composer-wordpress\/","title":{"rendered":"WP Composer: el reemplazo abierto e independiente de WPackagist para gestionar plugins y temas con Composer"},"content":{"rendered":"\n<p>Durante m\u00e1s de una d\u00e9cada, <strong>WPackagist<\/strong> fue el camino \u201cpor defecto\u201d para instalar plugins y temas de WordPress mediante <strong>Composer<\/strong> (el gestor de dependencias de PHP). Era pr\u00e1ctico: tratabas plugins y themes como paquetes versionados y repetibles, y los integrabas en tu <code>composer.json<\/code> como cualquier otra dependencia.<\/p>\n\n\n\n<p>El problema es que, cuando una pieza tan central del flujo de trabajo pasa a estar <strong>controlada por una \u00fanica corporaci\u00f3n<\/strong>, la comunidad pierde margen de maniobra: disponibilidad, condiciones, prioridades de mantenimiento y direcci\u00f3n del proyecto pueden dejar de decidirse de forma abierta.<\/p>\n\n\n\n<p>En marzo de 2026, WPackagist fue adquirido por <strong>WP Engine<\/strong>. A partir de ah\u00ed, el debate dej\u00f3 de ser puramente t\u00e9cnico: \u00bfdeber\u00eda una infraestructura tan cr\u00edtica para el ecosistema WordPress + Composer depender de una sola compa\u00f1\u00eda? En respuesta a esa preocupaci\u00f3n, Roots ha creado <strong>WP Composer<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 es WP Composer y por qu\u00e9 es relevante<\/h2>\n\n\n\n<p><strong><a href=\"https:\/\/wp-composer.com\">WP Composer<\/a><\/strong> es un repositorio de Composer para WordPress, <strong>independiente, financiado por la comunidad y completamente open source<\/strong>, construido y mantenido por Roots. Su objetivo es cubrir el mismo caso de uso principal: permitirte instalar <strong>plugins y temas gratuitos del directorio de WordPress.org<\/strong> usando Composer, pero con un enfoque m\u00e1s transparente, m\u00e1s moderno y con mejor rendimiento.<\/p>\n\n\n\n<p>La relevancia pr\u00e1ctica para desarrolladores es clara: el repositorio que uses impacta directamente en tu DX (Developer Experience), en la reproducibilidad de despliegues, y en tiempos de resoluci\u00f3n de dependencias cuando tu proyecto crece.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 problemas hab\u00eda alrededor de WPackagist<\/h2>\n\n\n\n<p>WPackagist fue creado originalmente por Outlandish y se mantuvo durante a\u00f1os. Con el tiempo, el proyecto arrastr\u00f3 se\u00f1ales t\u00edpicas de abandono: <strong>actualizaciones lentas<\/strong>, <strong>mantenimiento limitado<\/strong> y <strong>poca o nula participaci\u00f3n significativa de la comunidad<\/strong> en su evoluci\u00f3n.<\/p>\n\n\n\n<p>La adquisici\u00f3n por WP Engine intensific\u00f3 esas inquietudes, especialmente por el componente de gobernanza: cuando una herramienta base queda en manos de una sola empresa, las decisiones clave pueden moverse de un contexto abierto a uno corporativo. Adem\u00e1s, existe incertidumbre sobre si WPackagist sigue siendo realmente open source en la pr\u00e1ctica: su repositorio p\u00fablico en GitHub (<a href=\"https:\/\/github.com\/outlandishideas\/wpackagist\">https:\/\/github.com\/outlandishideas\/wpackagist<\/a>) <strong>ya no refleja el sitio en producci\u00f3n<\/strong>.<\/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\">Comparativa directa<\/h4>\n\n\n<p>Roots mantiene una comparaci\u00f3n detallada entre ambos repositorios (rendimiento, metadatos y diferencias de funcionamiento): <a href=\"https:\/\/wp-composer.com\/wp-composer-vs-wpackagist\">https:\/\/wp-composer.com\/wp-composer-vs-wpackagist<\/a>.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 ofrece WP Composer (y c\u00f3mo se usa)<\/h2>\n\n\n\n<p>WP Composer publica <strong>cada plugin y tema gratuito<\/strong> del directorio de WordPress.org como paquetes instalables con Composer, con un esquema de nombres m\u00e1s limpio y consistente:<\/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 convenci\u00f3n es simple:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Los plugins usan el prefijo <code>wp-plugin\/*<\/code>.<\/li>\n\n\n<li>Los temas usan el prefijo <code>wp-theme\/*<\/code>.<\/li>\n\n\n<li>Se eliminan los prefijos hist\u00f3ricos <code>wpackagist-plugin<\/code> y <code>wpackagist-theme<\/code>.<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Encaje con los paquetes de WordPress core en Composer<\/h3>\n\n\n\n<p>WP Composer tambi\u00e9n es el repositorio recomendado para combinar con los paquetes de WordPress core mantenidos por Roots:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/wp-composer.com\/roots-wordpress\"><code>roots\/wordpress<\/code><\/a><\/li>\n\n\n<li><code>roots\/wordpress-full<\/code><\/li>\n\n\n<li><code>roots\/wordpress-no-content<\/code><\/li>\n\n<\/ul>\n\n\n\n<p>En un proyecto t\u00edpico con <strong><a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a><\/strong>, el patr\u00f3n habitual es: <strong><code>roots\/wordpress<\/code> para el core<\/strong> y <strong>WP Composer para plugins y temas<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Migrar desde WPackagist: pasos y comandos<\/h2>\n\n\n\n<p>Si ya vienes de WPackagist, el cambio es directo. La idea es: eliminar paquetes con el naming antiguo, sustituir el repositorio y volver a requerirlos con el naming nuevo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Elimina los paquetes de 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) Sustituye el repositorio configurado en 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) Requiere de nuevo los paquetes con el naming de WP 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 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\">Opci\u00f3n: script de migraci\u00f3n autom\u00e1tica<\/h3>\n\n\n\n<p>Si prefieres automatizar el ajuste del <code>composer.json<\/code>, existe un script oficial que realiza la migraci\u00f3n de forma autom\u00e1tica:<\/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<h3 class=\"wp-block-heading\">Si usas GitHub Actions para changelogs de plugins<\/h3>\n\n\n\n<p>En entornos donde se automatiza el seguimiento de actualizaciones (por ejemplo, generando changelogs), Roots tambi\u00e9n renombr\u00f3 su acci\u00f3n: <strong>WPackagist Changelog Action<\/strong> pasa a ser <strong><a href=\"https:\/\/github.com\/roots\/wp-composer-changelog-action\">WP Composer Changelog Action<\/a><\/strong>, con soporte completo para el formato <code>wp-plugin\/&lt;em&gt;<\/code> y <code>wp-theme\/&lt;\/em&gt;<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rendimiento: por qu\u00e9 WP Composer es mucho m\u00e1s r\u00e1pido<\/h2>\n\n\n\n<p>Adem\u00e1s de la independencia y la transparencia, WP Composer pone mucho foco en rendimiento. La clave t\u00e9cnica es que soporta el protocolo <strong><code>metadata-url<\/code> de Composer v2<\/strong>, que permite descargar metadatos solo de los paquetes necesarios para resolver tus dependencias.<\/p>\n\n\n\n<p>En cambio, WPackagist se basa en el enfoque m\u00e1s antiguo <strong><code>provider-includes<\/code><\/strong>, que obliga a Composer a descargar \u00edndices grandes con metadatos de miles de paquetes antes de poder resolver lo que realmente necesitas. En proyectos con muchas dependencias, esto se nota (y bastante).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tiempos de resoluci\u00f3n (Composer resolve)<\/h3>\n\n\n\n<p>Medici\u00f3n de <em>cold resolve<\/em> (sin cach\u00e9): cuanto m\u00e1s bajo, mejor.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>10 plugins: <strong>WP Composer 0.7s<\/strong> vs WPackagist 12.3s (<strong>17x faster<\/strong>)<\/li>\n\n\n<li>20 plugins: <strong>WP Composer 1.1s<\/strong> vs WPackagist 19.0s (<strong>17x faster<\/strong>)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Metadatos y cach\u00e9<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Compatibilidad con <code>metadata-url<\/code> de Composer v2: <strong>WP Composer s\u00ed<\/strong>, WPackagist no.<\/li>\n\n\n<li>CDN caching: WP Composer usa <code>public, max-age=300<\/code>; WPackagist usa <code>no-cache, private<\/code>.<\/li>\n\n\n<li>Ficheros por paquete: WP Composer utiliza ficheros inmutables, <em>content-addressed<\/em> y cacheados indefinidamente; WPackagist no es <em>content-addressed<\/em>.<\/li>\n\n<\/ul>\n\n\n\n<div class=\"wp-block-group callout callout-warning is-style-warning 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\">Sobre los benchmarks<\/h4>\n\n\n<p>Los benchmarks se ejecutaron desde una \u00fanica localizaci\u00f3n con Composer 2.7+; los resultados pueden variar seg\u00fan regi\u00f3n y condiciones de red. Los scripts de benchmark son open source: https:\/\/github.com\/roots\/wp-composer\/tree\/main\/benchmarks.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Open source de verdad: c\u00f3digo, documentaci\u00f3n y despliegue<\/h2>\n\n\n\n<p>WP Composer publica <strong>todo<\/strong> el proyecto como open source: c\u00f3digo de la aplicaci\u00f3n, documentaci\u00f3n y configuraci\u00f3n de despliegue. El repositorio est\u00e1 en GitHub: <a href=\"https:\/\/github.com\/roots\/wp-composer\">https:\/\/github.com\/roots\/wp-composer<\/a>.<\/p>\n\n\n\n<p>Esto no es solo un detalle filos\u00f3fico: significa que cualquiera puede auditarlo, contribuir, hacer un fork y levantar su propia instancia si lo necesita.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Financiaci\u00f3n por la comunidad (sin dependencias corporativas)<\/h2>\n\n\n\n<p>WP Composer se financia <strong>\u00edntegramente por la comunidad<\/strong> a trav\u00e9s de <strong>GitHub Sponsors<\/strong>: <a href=\"https:\/\/github.com\/sponsors\/roots\">https:\/\/github.com\/sponsors\/roots<\/a>. Ese soporte se destina a infraestructura, desarrollo y mantenimiento de WP Composer y del ecosistema Roots en general.<\/p>\n\n\n\n<p>Si tu stack de WordPress depende de Composer (especialmente en setups tipo Bedrock), este modelo de financiaci\u00f3n es lo que mantiene la herramienta <strong>independiente<\/strong> y <strong>disponible de forma libre<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resumen: qu\u00e9 cambia para tu d\u00eda a d\u00eda<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Un repositorio de Composer para WordPress <strong>independiente<\/strong> y con gobernanza m\u00e1s abierta.<\/li>\n\n\n<li>Naming limpio y coherente: <code>wp-plugin\/&lt;em&gt;<\/code> y <code>wp-theme\/&lt;\/em&gt;<\/code>.<\/li>\n\n\n<li>Mejores tiempos de resoluci\u00f3n gracias a <code>metadata-url<\/code> (Composer v2).<\/li>\n\n\n<li>Migraci\u00f3n sencilla con comandos o script autom\u00e1tico.<\/li>\n\n\n<li>C\u00f3digo y despliegue completamente open source en GitHub.<\/li>\n\n\n<li>Financiaci\u00f3n comunitaria v\u00eda GitHub Sponsors, reduciendo dependencia de una sola empresa.<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>Referencias \/ Fuentes<\/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<\/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 repository<\/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:\/\/wp-composer.com\/roots-wordpress\" target=\"_blank\" rel=\"noopener noreferrer\">roots\/wordpress (WP Composer docs)<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Si tu flujo de trabajo en WordPress depende de Composer, el repositorio que uses no es un detalle menor. WP Composer nace como alternativa abierta, transparente y m\u00e1s r\u00e1pida para instalar plugins y temas desde WordPress.org sin depender de una sola empresa.<\/p>\n","protected":false},"author":15,"featured_media":253,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36],"tags":[66,8,12,3],"class_list":["post-254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecosistema-wordpress","tag-bedrock","tag-composer","tag-plugins","tag-roots"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts\/254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/comments?post=254"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts\/254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/media\/253"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/media?parent=254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/categories?post=254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/tags?post=254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}