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 →
dev-trunk. Learn more on our Untagged Plugins page.
Package naming
| Type | Convention | Example |
|---|---|---|
| Plugin | wp-plugin/plugin-name | wp-plugin/woocommerce |
| Theme | wp-theme/theme-name | wp-theme/twentytwentyfive |
Example 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"]
}
}
}
Bedrock comes with both WordPress core as a Composer package and WP Packages support out of the box.
WordPress core Composer packages
Roots also provides WordPress core as Composer packages:
| roots/wordpress | Meta-package for installing WordPress core via Composer |
| roots/wordpress-full | Full WordPress build (core + default themes + plugins + betas) |
| roots/wordpress-no-content | Minimal 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
Remove WPackagist packages:
composer remove wpackagist-plugin/woocommerce
Remove the WPackagist repository and add WP Packages:
composer config --unset repositories.wpackagist && composer config repositories.wp-packages composer https://repo.wp-packages.org
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
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.
{
"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
[
{ "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.