- Go 72.2%
- HTML 21.1%
- Shell 3.5%
- JavaScript 1.6%
- Jinja 1%
- Other 0.6%
Replace Go's html/template with CloudyKit/jet/v6 for server-rendered templates. Jet provides first-class parameterized blocks, template inheritance via extends/yield, and C-like expressions — eliminating the dict helper workarounds that html/template required for reusable components. Add components.html with four reusable Jet blocks: - shell(command, variant, class) — copyable command boxes (replaces ~16 duplicated instances across 6 templates) - notice(variant, class) with yield content — alert boxes with variant-based styling and content slots - input(icon, name, ...) — form inputs with icon and keyboard hint - pagination(pager, class) — pagination controls driven by pre-computed buildPagination() data Key changes: - templates.go: embed.FS loader for Jet, function registration via AddGlobal, buildPagination() helper, render() using VarMap - handlers.go: simplified render calls (no more template combinations) - router.go: *jet.Set replaces *templateSet - All 13 templates converted to Jet syntax (extends/block/yield) - Tailwind scanning unaffected (templates remain .html files) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| benchmarks | ||
| cmd/wppackages | ||
| deploy/ansible | ||
| docs | ||
| internal | ||
| migrations | ||
| scripts | ||
| test | ||
| .air.toml | ||
| .gitignore | ||
| .golangci.yml | ||
| CLAUDE.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE.md | ||
| litestream.yml | ||
| Makefile | ||
| migrations.go | ||
| README.md | ||
| seeds.yaml | ||
WP Packages
Manage your WordPress plugins and themes with Composer.
Support us
Roots is an independent open source org, supported only by developers like you. Your sponsorship funds WP Packages and the entire Roots ecosystem, and keeps them independent. Support us by purchasing Radicle or sponsoring us on GitHub — sponsors get access to our private Discord.
Sponsors
WP Packages vs WPackagist
| WP Packages | WPackagist | |
|---|---|---|
| Package naming | wp-plugin/* wp-theme/* |
wpackagist-plugin/* wpackagist-theme/* |
| Package metadata | Includes authors, description, homepage, and support links | Missing — requested since 2020 |
| Update frequency | Every 5 minutes | ~1.5 hours (estimated) |
Composer v2 metadata-url |
✅ | ❌ |
Composer v2 metadata-changes-url |
✅ | ❌ |
| Install statistics | ✅ | ❌ |
| Public status page | ✅ See status page | ❌ |
| Untagged plugin installs | Immutable — pinned to SVN revision | Mutable, resulting in unexpected plugin updates |
Composer resolve times
Cold resolve (no cache) — lower is better:
| Plugins | WP Packages | WPackagist | Speedup |
|---|---|---|---|
| 10 plugins | 0.7s | 12.3s | 17x faster |
| 20 plugins | 1.1s | 19.0s | 17x faster |
Documentation
See the documentation for usage instructions, example composer.json configurations, and more.
Roots WordPress Packages
Roots provides WordPress core as Composer packages — roots/wordpress, roots/wordpress-full, and roots/wordpress-no-content. Learn more.
Migrating from WPackagist
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
Community
- Join us on Discord by sponsoring us on GitHub
- Join us on Roots Discourse
- Follow @rootswp on Twitter
- Follow the Roots Blog
- Subscribe to the Roots Newsletter