{"id":267,"date":"2026-03-16T00:00:00","date_gmt":"2026-03-15T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/pt\/wp-composer-repositorio-composer-independente-substituir-wpackagist\/"},"modified":"2026-03-16T00:00:00","modified_gmt":"2026-03-15T23:00:00","slug":"wp-composer-repositorio-composer-independente-substituir-wpackagist","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pt\/wp-composer-repositorio-composer-independente-substituir-wpackagist\/","title":{"rendered":"WP Composer: um reposit\u00f3rio Composer independente para substituir o WPackagist no teu workflow WordPress"},"content":{"rendered":"\n<p>Durante mais de uma d\u00e9cada, o WPackagist foi praticamente o caminho padr\u00e3o para instalar plugins e temas do WordPress via Composer. Funcionava, era familiar, e encaixava bem em projetos com deployments reprodut\u00edveis.<\/p>\n\n\n\n<p>O problema \u00e9 que este tipo de servi\u00e7o n\u00e3o \u00e9 \u201cs\u00f3 mais uma depend\u00eancia\u201d: \u00e9 uma pe\u00e7a central do workflow moderno de WordPress com Composer. E quando a infraestrutura passa a ser controlada por uma \u00fanica empresa, a comunidade perde margem de manobra sobre disponibilidade, dire\u00e7\u00e3o do projeto e at\u00e9 decis\u00f5es que podem acabar por ser tomadas fora do espa\u00e7o p\u00fablico.<\/p>\n\n\n\n<p>Em mar\u00e7o de 2026, o WPackagist foi adquirido pela WP Engine (empresa de alojamento com apoio de private equity). Esse contexto acelerou a necessidade de uma alternativa independente. A resposta foi o <strong>WP Composer<\/strong>, um reposit\u00f3rio Composer para plugins e temas WordPress, totalmente open source e financiado pela comunidade, constru\u00eddo e mantido pela Roots.<\/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\">O que \u00e9 um \u201cComposer repository\u201d?<\/h4>\n\n\n<p>\u00c9 a fonte (endpoint) onde o Composer vai buscar metadados e distribui\u00e7\u00f5es de pacotes. No caso do WordPress, \u00e9 o que permite tratar plugins\/temas como depend\u00eancias, com vers\u00f5es, lockfile e installs consistentes.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Porque isto \u00e9 relevante para quem desenvolve WordPress<\/h2>\n\n\n\n<p>O WPackagist come\u00e7ou por ser desenvolvido pela Outlandish e foi mantido durante anos. Com o tempo, ganhou sinais de pouca manuten\u00e7\u00e3o: atualiza\u00e7\u00f5es mais lentas, suporte limitado e pouca ou nenhuma participa\u00e7\u00e3o significativa da comunidade no rumo do projeto.<\/p>\n\n\n\n<p>Com a aquisi\u00e7\u00e3o, as preocupa\u00e7\u00f5es aumentaram: quando tooling fundamental passa a depender de uma \u00fanica organiza\u00e7\u00e3o, decis\u00f5es sobre disponibilidade, eventual monetiza\u00e7\u00e3o e prioridades podem migrar para \u201csalas de reuni\u00f5es\u201d, em vez de acontecerem de forma aberta.<\/p>\n\n\n\n<p>H\u00e1 tamb\u00e9m um ponto pr\u00e1tico sobre transpar\u00eancia: o reposit\u00f3rio GitHub hist\u00f3rico do WPackagist (https:\/\/github.com\/outlandishideas\/wpackagist) j\u00e1 n\u00e3o reflete necessariamente o que est\u00e1 a correr no site em produ\u00e7\u00e3o, o que torna mais dif\u00edcil auditar e confiar no comportamento real do servi\u00e7o.<\/p>\n\n\n\n<p>A proposta do WP Composer \u00e9 clara: um servi\u00e7o <strong>transparente<\/strong>, <strong>financiado pela comunidade<\/strong> e <strong>constru\u00eddo por pessoas que vivem este workflow h\u00e1 muito tempo<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que o WP Composer disponibiliza (e como se usa no composer.json)<\/h2>\n\n\n\n<p>O WP Composer disponibiliza <strong>todos os plugins e temas gratuitos<\/strong> do diret\u00f3rio WordPress.org, instal\u00e1veis via Composer e com um naming scheme mais limpo e previs\u00edvel.<\/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<\/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><\/code><\/pre><\/div>\n\n\n\n<p>Aqui h\u00e1 duas decis\u00f5es importantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Plugins usam o prefixo <code>wp-plugin\/*<\/code>.<\/li>\n\n\n<li>Temas usam o prefixo <code>wp-theme\/*<\/code>.<\/li>\n\n<\/ul>\n\n\n\n<p>Isto elimina os prefixos <code>wpackagist-plugin<\/code> e <code>wpackagist-theme<\/code>, tornando a lista de depend\u00eancias mais leg\u00edvel e alinhada com o que efetivamente est\u00e1s a instalar.<\/p>\n\n\n\n<p>O WP Composer \u00e9 tamb\u00e9m o reposit\u00f3rio recomendado para trabalhar em conjunto com pacotes de core mantidos pela Roots: <a href=\"https:\/\/wp-composer.com\/roots-wordpress\"><code>roots\/wordpress<\/code><\/a>, <code>roots\/wordpress-full<\/code> e <code>roots\/wordpress-no-content<\/code>. Num projeto t\u00edpico com <a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a>, \u00e9 comum usar <code>roots\/wordpress<\/code> para o core e o WP Composer para plugins e temas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Migra\u00e7\u00e3o a partir do WPackagist (passo a passo)<\/h2>\n\n\n\n<p>A troca \u00e9 direta e, na pr\u00e1tica, resume-se a remover pacotes antigos, apontar o Composer para o novo reposit\u00f3rio e voltar a requerer as depend\u00eancias com o naming atualizado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Remover os pacotes do 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<\/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><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2) Trocar o reposit\u00f3rio configurado no 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<\/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><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) Voltar a requerer os pacotes com a nova conven\u00e7\u00e3o <code>wp-plugin\/&lt;em&gt;<\/code> e <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<\/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><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Alternativa: script de migra\u00e7\u00e3o autom\u00e1tico<\/h3>\n\n\n\n<p>Se preferires automatizar a atualiza\u00e7\u00e3o do <code>composer.json<\/code>, existe um script de migra\u00e7\u00e3o que faz o trabalho por ti (inclui troca de naming e ajustes necess\u00e1rios):<\/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<\/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><\/code><\/pre><\/div>\n\n\n\n<p>Para quem usa GitHub Actions para acompanhar updates de plugins, a action anteriormente conhecida como <strong>WPackagist Changelog Action<\/strong> foi renomeada para <strong><a href=\"https:\/\/github.com\/roots\/wp-composer-changelog-action\">WP Composer Changelog Action<\/a><\/strong> e suporta totalmente o novo formato <code>wp-plugin\/&lt;em&gt;<\/code> e <code>wp-theme\/&lt;\/em&gt;<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Performance: porque o WP Composer tende a resolver depend\u00eancias muito mais depressa<\/h2>\n\n\n\n<p>A grande diferen\u00e7a t\u00e9cnica aqui \u00e9 o suporte ao protocolo <strong>Composer v2 <code>metadata-url<\/code><\/strong>. Em termos pr\u00e1ticos, isto permite ao Composer descarregar metadados apenas dos pacotes necess\u00e1rios para resolver as tuas depend\u00eancias.<\/p>\n\n\n\n<p>O WPackagist, por outro lado, usa a abordagem mais antiga <code>provider-includes<\/code>, que obriga o Composer a descarregar ficheiros de \u00edndice grandes com metadados de milhares de pacotes antes sequer de conseguir fazer o resolution de depend\u00eancias. O resultado t\u00edpico \u00e9 mais tempo \u201ca puxar \u00edndices\u201d e menos tempo a fazer o que realmente interessa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tempos de resolu\u00e7\u00e3o (Composer resolve times)<\/h3>\n\n\n\n<p>Medi\u00e7\u00e3o: <em>cold resolve<\/em> (sem cache). Quanto mais baixo, melhor.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>10 plugins: WP Composer <strong>0.7s<\/strong> vs WPackagist 12.3s (\u2248 <strong>17x<\/strong> mais r\u00e1pido)<\/li>\n\n\n<li>20 plugins: WP Composer <strong>1.1s<\/strong> vs WPackagist 19.0s (\u2248 <strong>17x<\/strong> mais r\u00e1pido)<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Metadados e caching<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Composer v2 metadata-url: WP Composer <strong>Yes<\/strong>; WPackagist <strong>No<\/strong><\/li>\n\n\n<li>CDN caching: WP Composer <code>public, max-age=300<\/code>; WPackagist <code>no-cache, private<\/code><\/li>\n\n\n<li>Ficheiros por pacote: WP Composer usa ficheiros imut\u00e1veis, endere\u00e7ados por conte\u00fado (content-addressed) e com cache indefinida; WPackagist n\u00e3o \u00e9 content-addressed<\/li>\n\n<\/ul>\n\n\n\n<p>Os benchmarks foram corridos a partir de uma \u00fanica localiza\u00e7\u00e3o usando Composer 2.7+. Naturalmente, os resultados podem variar consoante a regi\u00e3o e as condi\u00e7\u00f5es de rede. Os scripts de benchmark est\u00e3o dispon\u00edveis em open source: https:\/\/github.com\/roots\/wp-composer\/tree\/main\/benchmarks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Open source a s\u00e9rio: c\u00f3digo, docs e deploy<\/h2>\n\n\n\n<p>O WP Composer \u00e9 <strong>totalmente open source<\/strong>: c\u00f3digo da aplica\u00e7\u00e3o, documenta\u00e7\u00e3o e configura\u00e7\u00e3o de deployment est\u00e3o no GitHub, em https:\/\/github.com\/roots\/wp-composer. Isto inclui a possibilidade de contribui\u00e7\u00f5es e tamb\u00e9m a op\u00e7\u00e3o de qualquer pessoa fazer fork e correr a sua pr\u00f3pria inst\u00e2ncia, se precisar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Financiamento pela comunidade (e independ\u00eancia do tooling)<\/h2>\n\n\n\n<p>A sustentabilidade do WP Composer \u00e9 feita atrav\u00e9s da comunidade, via GitHub Sponsors: https:\/\/github.com\/sponsors\/roots. O objetivo \u00e9 manter a infraestrutura, o desenvolvimento e a manuten\u00e7\u00e3o do reposit\u00f3rio sem depender de uma \u00fanica entidade com controlo total sobre o servi\u00e7o.<\/p>\n\n\n\n<p>Para quem depende de Composer no dia a dia em projetos WordPress (especialmente em stacks como Bedrock), ter um reposit\u00f3rio independente, audit\u00e1vel e com um modelo de financiamento comunit\u00e1rio reduz risco operacional e melhora previsibilidade a m\u00e9dio\/longo prazo.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-success is-style-success 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\">Resumo pr\u00e1tico<\/h4>\n\n\n<p>WP Composer \u00e9 um reposit\u00f3rio Composer independente para plugins e temas do WordPress.org, com naming <code>wp-plugin\/&lt;em&gt;<\/code> e <code>wp-theme\/&lt;\/em&gt;<\/code>, suporte a <code>metadata-url<\/code> do Composer v2 (resolves muito mais r\u00e1pidos), c\u00f3digo totalmente open source e financiamento via GitHub Sponsors.<\/p>\n\n<\/div>\n\n\n<div class=\"references-section\">\n                <h2>Refer\u00eancias \/ Fontes<\/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\">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\/roots\/wp-composer\/tree\/main\/benchmarks\" target=\"_blank\" rel=\"noopener noreferrer\">Benchmarks (wp-composer)<\/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\/sponsors\/roots\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Sponsors (Roots)<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Se usas Composer para gerir plugins e temas em WordPress, o reposit\u00f3rio de onde v\u00eam esses pacotes \u00e9 infraestrutura cr\u00edtica. O WP Composer surge como alternativa aberta, comunit\u00e1ria e mais r\u00e1pida ao WPackagist.<\/p>\n","protected":false},"author":27,"featured_media":266,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[62,8,66,3,10],"class_list":["post-267","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecossistema-wordpress","tag-bedrock","tag-composer","tag-devops","tag-roots","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/comments?post=267"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/267\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/media\/266"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/media?parent=267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/categories?post=267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/tags?post=267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}