loopress / php-attributes
PHP attribute classes referenced by Loopress api/ route files and hooks/ files, for editor autocomplete and static analysis. Declarations only, nothing executes.
Package info
Language:TypeScript
pkg:composer/loopress/php-attributes
Requires
- php: >=8.2
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- dev-changeset-release/main
- dev-security/lp-sec-09-login-flow
- dev-security/lp-sec-11-mcp-confirm-hash
- dev-security/lp-sec-10-cli-sentry-scrub
- dev-security/lp-sec-04-public-route-visibility
- dev-security/lp-sec-06-sync-sanitization
- dev-security/lp-sec-03-delete-endpoint
- dev-security/lp-sec-05-options-guards
- dev-security/lp-sec-02-content-size-cap
This package is auto-updated.
Last update: 2026-09-11 15:43:16 UTC
README
Make WordPress reproducible: sync ACF field groups, SEO settings, code snippets, Composer dependencies, pages, forms, and custom REST routes between WordPress and a Git repository, driven by a single CLI. Configuration as code, version control, reproducible environments, instead of clicking through wp-admin and hoping staging matches production.
loopress.dev · Documentation · Security policy
What's in this repo
This is the loopress/loopress pnpm workspace: the CLI, the companion WordPress plugin, the
marketing site, and the docs all live and version together here.
| Package | What it is |
|---|---|
cli/ |
@loopress/cli, the lps command. Talks to the WordPress plugin's REST API to pull/push everything. |
mcp/ |
@loopress/mcp, the lps-mcp MCP server. Exposes CLI operations as tool calls for AI agents. |
wordpress-plugin/ |
The WordPress plugin (loopress) the CLI talks to. Ships as two editions, Light (wordpress.org) and Full (loopress.dev only), from one codebase. |
website/ |
The loopress.dev marketing site (Astro + React). |
documentation/ |
The docs site (Astro + Starlight) at docs.loopress.dev. |
e2e/ |
Playwright tests running the real built CLI against a real, disposable WordPress instance. |
assets/ |
Shared brand assets (@loopress/assets: logo, icons) consumed by the plugin and the website. |
eslint-config/ |
Shared ESLint config (@loopress/eslint-config) for the JS/TS packages. |
Each package has its own README with the details, this one is just the map.
Requirements
- Node 24.x
- pnpm (version pinned in
package.json'spackageManager, run viacorepack enableor install it directly) - PHP + Composer for
wordpress-plugin/(see its own README)
Getting started
pnpm install # installs the whole workspace from the repo root
Then jump into whichever package you're working on:
cd cli && pnpm dev # CLI, watch mode cd wordpress-plugin && composer install && pnpm dev:full # plugin admin UI, watch mode cd website && pnpm dev # marketing site cd documentation && pnpm dev # docs site
Testing
- Unit tests: run inside each package (
pnpm testincli/,composer testinwordpress-plugin/). No network, no WordPress instance needed. - E2E tests (
e2e/): the real CLI against a real, disposable WordPress instance. Seee2e/README.mdfor how to point them at one, locally or via the same Docker stack CI uses.
Links
- CLI mutation report (Stryker)
- WordPress plugin mutation report (Infection)
Both are rebuilt on every push to main (see .github/workflows/mutation-report.yml) and
published to GitHub Pages. Report-only for now, not a merge gate, the plugin job runs with
continue-on-error: true (see wordpress-plugin/infection.json5).
Releasing
Versioning and changelogs are managed with Changesets.
Run pnpm changeset when a PR changes published package behavior, and describe it as a patch,
minor, or major bump for whichever package(s) it touches.