{"id":247,"date":"2026-03-16T00:00:00","date_gmt":"2026-03-15T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/da\/wp-composer-alternativ-til-wpackagist\/"},"modified":"2026-03-16T00:00:00","modified_gmt":"2026-03-15T23:00:00","slug":"wp-composer-alternativ-til-wpackagist","status":"publish","type":"post","link":"https:\/\/helloblog.io\/da\/wp-composer-alternativ-til-wpackagist\/","title":{"rendered":"WP Composer: et community-finansieret alternativ til WPackagist i din Composer-baserede WordPress-stack"},"content":{"rendered":"\n<p>I rigtig mange moderne WordPress-projekter (is\u00e6r dem der k\u00f8rer Composer-first) er plugin- og tema-dependencies lige s\u00e5 vigtige som PHP-pakkerne i resten af applikationen. I over et \u00e5rti har WPackagist v\u00e6ret den de facto l\u00f8sning til at tr\u00e6kke gratis plugins og temaer fra WordPress.org ind i <code>composer.json<\/code>.<\/p>\n\n\n\n<p>Men n\u00e5r kritisk infrastruktur for hele WordPress\u2019 Composer-workflow lander under kontrol af \u00e9n virksomhed, opst\u00e5r der nogle ret naturlige bekymringer: hvem bestemmer retning, tilg\u00e6ngelighed, eventuel priss\u00e6tning og drift \u2013 og hvor gennemsigtigt foreg\u00e5r det?<\/p>\n\n\n\n<p>Derfor er WP Composer kommet p\u00e5 banen: et uafh\u00e6ngigt, community-finansieret og fuldt open source Composer repository for WordPress-plugins og -temaer, bygget og vedligeholdt af Roots. Tanken er enkel: samme nyttev\u00e6rdi som WPackagist har leveret, men med mere gennemsigtighed, moderne Composer-protokoller og et governance-\/funding-setup, der ikke er l\u00e5st til \u00e9n enkelt virksomhed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hvorfor det her overhovedet betyder noget<\/h2>\n\n\n\n<p>WPackagist blev oprindeligt lavet af Outlandish og var i mange \u00e5r en solid brik i v\u00e6rkt\u00f8jskassen. Senere har projektet dog v\u00e6ret pr\u00e6get af begr\u00e6nset vedligeholdelse: langsommere opdateringer, mindre aktiv drift og uden reelt community-input.<\/p>\n\n\n\n<p>I marts 2026 blev WPackagist opk\u00f8bt af WP Engine (et private equity-backet hosting-selskab). N\u00e5r en s\u00e5 central dependency-kilde bliver ejet af en enkelt akt\u00f8r, rykker beslutningerne nemt fra \u00e5bne processer over i lukkede m\u00f8delokaler. Samtidig er det uklart, hvor \u201copen source\u201d WPackagist i praksis er i dag, fordi deres GitHub-repository ikke l\u00e6ngere afspejler den live service: https:\/\/github.com\/outlandishideas\/wpackagist<\/p>\n\n\n\n<p>WP Composer positionerer sig som et alternativ, der er transparent, community-finansieret og bygget af folk, der har arbejdet med Composer-baseret WordPress i mange \u00e5r. Der ligger ogs\u00e5 en detaljeret sammenligning mellem WP Composer og WPackagist (performance, metadata og forskelle i praksis) her: https:\/\/wp-composer.com\/wp-composer-vs-wpackagist<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hvad WP Composer leverer i praksis<\/h2>\n\n\n\n<p>WP Composer indekserer alle gratis plugins og temaer fra WordPress.org directory, s\u00e5 de kan installeres via Composer \u2013 men med et mere rent navngivningsskema:<\/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>Konventionen er konsekvent:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Plugins bruger <code>wp-plugin\/*<\/code>.<\/li>\n\n\n<li>Temaer bruger <code>wp-theme\/*<\/code>.<\/li>\n\n\n<li>Dermed slipper du for <code>wpackagist-plugin<\/code> og <code>wpackagist-theme<\/code> som pr\u00e6fikser.<\/li>\n\n<\/ul>\n\n\n\n<p>WP Composer er samtidig det anbefalede repository, hvis du bruger Roots\u2019 WordPress core-pakker: <code>roots\/wordpress<\/code>, <code>roots\/wordpress-full<\/code> og <code>roots\/wordpress-no-content<\/code> (oversigt: https:\/\/wp-composer.com\/roots-wordpress). I et klassisk Bedrock-setup (https:\/\/roots.io\/bedrock\/) betyder det typisk <code>roots\/wordpress<\/code> til core og WP Composer til plugins og temaer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Migrering fra WPackagist (trin-for-trin)<\/h2>\n\n\n\n<p>Hvis du allerede har et projekt, der kr\u00e6ver plugins\/temaer via WPackagist, er skiftet ret ligetil og kan klares med f\u00e5 kommandoer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Fjern dine WPackagist-pakker<\/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) Skift repository-konfigurationen<\/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) Kr\u00e6v pakkerne igen med de nye navne<\/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<p>Vil du automatisere \u00e6ndringerne i <code>composer.json<\/code>, findes der et migreringsscript, som opdaterer filen for dig. Scriptet ligger her: https:\/\/github.com\/roots\/wp-composer\/blob\/main\/scripts\/migrate-from-wpackagist.sh og kan k\u00f8res s\u00e5dan:<\/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>Hvis du bruger Roots\u2019 GitHub Action til at tracke plugin-opdateringer, er den ogs\u00e5 flyttet med: \u201cWPackagist Changelog Action\u201d er omd\u00f8bt til \u201cWP Composer Changelog Action\u201d og underst\u00f8tter fuldt ud <code>wp-plugin\/&lt;em&gt;<\/code> og <code>wp-theme\/&lt;\/em&gt;<\/code>-formatet: https:\/\/github.com\/roots\/wp-composer-changelog-action<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Performance: hvorfor resolves pludselig bliver meget hurtigere<\/h2>\n\n\n\n<p>Den store tekniske forskel ligger i, hvordan metadata leveres til Composer. WP Composer underst\u00f8tter Composer v2\u2019s <code>metadata-url<\/code>-protokol, hvor Composer kun henter metadata for de pakker, den faktisk har brug for.<\/p>\n\n\n\n<p>WPackagist bruger stadig den \u00e6ldre <code>provider-includes<\/code>-model, som tvinger Composer til at downloade store index-filer med metadata for tusindvis af pakker, f\u00f8r dine dependencies kan resolves. Det kan v\u00e6re markant langsommere \u2013 is\u00e6r ved \u201ccold resolve\u201d, hvor du ikke har cache lokalt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Composer resolve-tider (cold resolve, ingen cache \u2013 lavere er bedre)<\/h3>\n\n\n\n<p>Her er et konkret benchmark for cold resolves:<\/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>&lt;table&gt;\n  &lt;thead&gt;\n    &lt;tr&gt;\n      &lt;th&gt;Plugins&lt;\/th&gt;\n      &lt;th&gt;WP Composer&lt;\/th&gt;\n      &lt;th&gt;WPackagist&lt;\/th&gt;\n      &lt;th&gt;Speedup&lt;\/th&gt;\n    &lt;\/tr&gt;\n  &lt;\/thead&gt;\n  &lt;tbody&gt;\n    &lt;tr&gt;\n      &lt;td&gt;10 plugins&lt;\/td&gt;\n      &lt;td&gt;&lt;strong&gt;0.7s&lt;\/strong&gt;&lt;\/td&gt;\n      &lt;td&gt;12.3s&lt;\/td&gt;\n      &lt;td&gt;17x faster&lt;\/td&gt;\n    &lt;\/tr&gt;\n    &lt;tr&gt;\n      &lt;td&gt;20 plugins&lt;\/td&gt;\n      &lt;td&gt;&lt;strong&gt;1.1s&lt;\/strong&gt;&lt;\/td&gt;\n      &lt;td&gt;19.0s&lt;\/td&gt;\n      &lt;td&gt;17x faster&lt;\/td&gt;\n    &lt;\/tr&gt;\n  &lt;\/tbody&gt;\n&lt;\/table&gt;\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\">&#x3C;<\/span><span style=\"color:#85E89D\">table<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  &#x3C;<\/span><span style=\"color:#85E89D\">thead<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">>Plugins&#x3C;\/<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">>WP Composer&#x3C;\/<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">>WPackagist&#x3C;\/<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">>Speedup&#x3C;\/<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;\/<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  &#x3C;\/<\/span><span style=\"color:#85E89D\">thead<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  &#x3C;<\/span><span style=\"color:#85E89D\">tbody<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>10 plugins&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>&#x3C;<\/span><span style=\"color:#85E89D\">strong<\/span><span style=\"color:#E1E4E8\">>0.7s&#x3C;\/<\/span><span style=\"color:#85E89D\">strong<\/span><span style=\"color:#E1E4E8\">>&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>12.3s&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>17x faster&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;\/<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>20 plugins&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>&#x3C;<\/span><span style=\"color:#85E89D\">strong<\/span><span style=\"color:#E1E4E8\">>1.1s&#x3C;\/<\/span><span style=\"color:#85E89D\">strong<\/span><span style=\"color:#E1E4E8\">>&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>19.0s&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>17x faster&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;\/<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  &#x3C;\/<\/span><span style=\"color:#85E89D\">tbody<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">&#x3C;\/<\/span><span style=\"color:#85E89D\">table<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Metadata og caching (hvad der g\u00f8r forskellen)<\/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>&lt;table&gt;\n  &lt;thead&gt;\n    &lt;tr&gt;\n      &lt;th&gt;&lt;\/th&gt;\n      &lt;th&gt;WP Composer&lt;\/th&gt;\n      &lt;th&gt;WPackagist&lt;\/th&gt;\n    &lt;\/tr&gt;\n  &lt;\/thead&gt;\n  &lt;tbody&gt;\n    &lt;tr&gt;\n      &lt;td&gt;Composer v2 metadata-url&lt;\/td&gt;\n      &lt;td&gt;&lt;strong&gt;Yes&lt;\/strong&gt;&lt;\/td&gt;\n      &lt;td&gt;No&lt;\/td&gt;\n    &lt;\/tr&gt;\n    &lt;tr&gt;\n      &lt;td&gt;CDN caching&lt;\/td&gt;\n      &lt;td&gt;&lt;code&gt;public, max-age=300&lt;\/code&gt;&lt;\/td&gt;\n      &lt;td&gt;&lt;code&gt;no-cache, private&lt;\/code&gt;&lt;\/td&gt;\n    &lt;\/tr&gt;\n    &lt;tr&gt;\n      &lt;td&gt;Per-package files&lt;\/td&gt;\n      &lt;td&gt;Immutable, content-addressed, cached indefinitely&lt;\/td&gt;\n      &lt;td&gt;Not content-addressed&lt;\/td&gt;\n    &lt;\/tr&gt;\n  &lt;\/tbody&gt;\n&lt;\/table&gt;\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\">&#x3C;<\/span><span style=\"color:#85E89D\">table<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  &#x3C;<\/span><span style=\"color:#85E89D\">thead<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">>&#x3C;\/<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">>WP Composer&#x3C;\/<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">>WPackagist&#x3C;\/<\/span><span style=\"color:#85E89D\">th<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;\/<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  &#x3C;\/<\/span><span style=\"color:#85E89D\">thead<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  &#x3C;<\/span><span style=\"color:#85E89D\">tbody<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>Composer v2 metadata-url&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>&#x3C;<\/span><span style=\"color:#85E89D\">strong<\/span><span style=\"color:#E1E4E8\">>Yes&#x3C;\/<\/span><span style=\"color:#85E89D\">strong<\/span><span style=\"color:#E1E4E8\">>&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>No&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;\/<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>CDN caching&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>&#x3C;<\/span><span style=\"color:#85E89D\">code<\/span><span style=\"color:#E1E4E8\">>public, max-age=300&#x3C;\/<\/span><span style=\"color:#85E89D\">code<\/span><span style=\"color:#E1E4E8\">>&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>&#x3C;<\/span><span style=\"color:#85E89D\">code<\/span><span style=\"color:#E1E4E8\">>no-cache, private&#x3C;\/<\/span><span style=\"color:#85E89D\">code<\/span><span style=\"color:#E1E4E8\">>&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;\/<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>Per-package files&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>Immutable, content-addressed, cached indefinitely&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      &#x3C;<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">>Not content-addressed&#x3C;\/<\/span><span style=\"color:#85E89D\">td<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    &#x3C;\/<\/span><span style=\"color:#85E89D\">tr<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  &#x3C;\/<\/span><span style=\"color:#85E89D\">tbody<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">&#x3C;\/<\/span><span style=\"color:#85E89D\">table<\/span><span style=\"color:#E1E4E8\">><\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Benchmarks er k\u00f8rt fra \u00e9n lokation med Composer 2.7+; resultater kan variere afh\u00e6ngigt af region og netv\u00e6rksforhold. Benchmark-scripts er open source her: https:\/\/github.com\/roots\/wp-composer\/tree\/main\/benchmarks<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fuld open source: k\u00f8r det selv, hvis du vil<\/h2>\n\n\n\n<p>WP Composer er ikke bare et \u201cgratis endpoint\u201d. Hele applikationskoden, dokumentationen og deployment-konfigurationen er open source p\u00e5 GitHub: https:\/\/github.com\/roots\/wp-composer. Det betyder i praksis, at alle kan inspicere, bidrage \u2013 og i sidste ende forke og drive deres egen instance, hvis de har behov for det.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Community-finansiering via GitHub Sponsors<\/h2>\n\n\n\n<p>Driften er finansieret af community\u2019et gennem GitHub Sponsors: https:\/\/github.com\/sponsors\/roots. Sponsorship g\u00e5r direkte til infrastruktur, udvikling og vedligehold af WP Composer samt det bredere Roots-\u00f8kosystem.<\/p>\n\n\n\n<p>Der findes ogs\u00e5 en direkte sponsorl\u00f8sning her: https:\/\/github.com\/sponsors\/roots<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kort opsummeret<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>WP Composer er et uafh\u00e6ngigt Composer repository til gratis WordPress.org plugins og temaer, med p\u00e6nere pakkenavne (<code>wp-plugin\/&lt;em&gt;<\/code> og <code>wp-theme\/&lt;\/em&gt;<\/code>).<\/li>\n\n\n<li>Migrering fra WPackagist kan klares med f\u00e5 Composer-kommandoer \u2013 eller via et script, der omskriver <code>composer.json<\/code>.<\/li>\n\n\n<li><code>metadata-url<\/code> i Composer v2 giver markant hurtigere resolves end den \u00e6ldre <code>provider-includes<\/code>-model.<\/li>\n\n\n<li>Hele projektet er open source, og driften er community-finansieret via GitHub Sponsors.<\/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\">Links samlet<\/h4>\n\n\n<p>WP Composer: https:\/\/wp-composer.com\nRepository endpoint: https:\/\/repo.wp-composer.com\nSammenligning: https:\/\/wp-composer.com\/wp-composer-vs-wpackagist\nRoots core-pakker: https:\/\/wp-composer.com\/roots-wordpress\nGitHub (WP Composer): https:\/\/github.com\/roots\/wp-composer\nMigreringsscript: https:\/\/github.com\/roots\/wp-composer\/blob\/main\/scripts\/migrate-from-wpackagist.sh\nBenchmarks: https:\/\/github.com\/roots\/wp-composer\/tree\/main\/benchmarks\nWP Composer Changelog Action: https:\/\/github.com\/roots\/wp-composer-changelog-action\nGitHub Sponsors: https:\/\/github.com\/sponsors\/roots\nBedrock: https:\/\/roots.io\/bedrock\/\nDiskussion: https:\/\/discourse.roots.io\/t\/-\/30235<\/p>\n\n<\/div>\n\n\n<div class=\"references-section\">\n                <h2>Referencer \/ Kilder<\/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\/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:\/\/roots.io\/bedrock\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bedrock<\/a><\/li><li><a href=\"https:\/\/discourse.roots.io\/t\/-\/30235\" target=\"_blank\" rel=\"noopener noreferrer\">Discuss this post on Roots Discourse<\/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>Hvis du installerer WordPress-plugins og -temaer via Composer, har WPackagist i \u00e5revis v\u00e6ret standardvalget. Nu findes der et open source, community-finansieret alternativ med markant hurtigere dependency-resolves og mere ryddelige pakkenavne: WP Composer.<\/p>\n","protected":false},"author":64,"featured_media":246,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[67,8,12,4,10],"class_list":["post-247","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-okosystem","tag-bedrock","tag-composer","tag-plugins","tag-roots","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/posts\/247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/comments?post=247"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/posts\/247\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/media\/246"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/media?parent=247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/categories?post=247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/tags?post=247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}