WP Composer is now WP Packages! Read the announcement.

Documentation

Add the WP Packages repository to your project:

$ composer config repositories.wp-packages composer https://repo.wp-packages.org

Every active plugin and theme from the WordPress.org directory is available as a Composer package. Search all packages →

Some WordPress plugins have a latest version on WordPress.org that isn't tagged in SVN. These can be installed via dev-trunk. Learn more on our Untagged Plugins page.

Package naming

TypeConventionExample
Pluginwp-plugin/plugin-namewp-plugin/woocommerce
Themewp-theme/theme-namewp-theme/twentytwentyfive

Example composer.json

composer.json
{
  "repositories": [
    {
      "name": "wp-packages",
      "type": "composer",
      "url": "https://repo.wp-packages.org"
    }
  ],
  "require": {
    "composer/installers": "^2.2",
    "wp-plugin/woocommerce": "^10.0",
    "wp-theme/twentytwentyfive": "^1.0"
  },
  "extra": {
    "installer-paths": {
      "wp-content/plugins/{$name}/": ["type:wordpress-plugin"],
      "wp-content/mu-plugins/{$name}/": ["type:wordpress-muplugin"],
      "wp-content/themes/{$name}/": ["type:wordpress-theme"]
    }
  }
}

WordPress core Composer packages

Roots also provides WordPress core as Composer packages:

roots/wordpressMeta-package for installing WordPress core via Composer
roots/wordpress-fullFull WordPress build (core + default themes + plugins + betas)
roots/wordpress-no-contentMinimal WordPress build (core only)

Learn more about the WordPress core Composer packages →

Migrating from WPackagist

See how WP Packages compares to WPackagist →

Switching from WPackagist takes one command. Use the migration script to automatically update your composer.json:

$ curl -sO https://raw.githubusercontent.com/roots/wp-packages/main/scripts/migrate-from-wpackagist.sh && bash migrate-from-wpackagist.sh

Manually migrate

1

Remove WPackagist packages:

$ composer remove wpackagist-plugin/woocommerce
2

Remove the WPackagist repository and add WP Packages:

$ composer config --unset repositories.wpackagist && composer config repositories.wp-packages composer https://repo.wp-packages.org
3

Require packages with the new naming:

$ composer require wp-plugin/woocommerce

Changelog action

roots/wp-packages-changelog-action is a GitHub Action that automatically comments on pull requests with a changelog summary for any WP Packages dependencies that changed.

When a PR updates your composer.lock, the action compares the before and after versions and posts a comment with the relevant changelog entries from WordPress.org. It also warns when an installed version doesn’t match the current WordPress.org stable tag, helping you catch outdated or mismatched dependencies before merging.

Usage

.github/workflows/changelog.yml
name: Changelog
on:
  pull_request:
    paths:
      - composer.lock

jobs:
  changelog:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: roots/wp-packages-changelog-action@v3
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

API

WP Packages provides a public JSON API for install statistics.

GET /api/stats

Returns overall install statistics.

Response
{
  "total_installs": 123456,
  "installs_30d": 7890,
  "active_plugins": 500,
  "active_themes": 200,
  "total_packages": 700
}

GET /api/stats/packages/{type}/{name}

Returns monthly install history for a specific package (up to 36 months). The type can be wp-plugin or wp-theme.

$ curl https://wp-packages.org/api/stats/packages/wp-plugin/akismet
Response
[
  { "month": "2026-01", "installs": 142 },
  { "month": "2026-02", "installs": 88 }
]

Responses are cached for 5 minutes. Returns 404 for inactive or unknown packages, and 429 when rate limited.

WP Packages is community-funded open source. Support our work by sponsoring us on GitHub.

Sponsors

Carrot WordPress.com Itineris Kinsta

Request SVN tagging

Copy the message below and post it on the plugin's WordPress.org support forum:

Open support forum