Core Framework uses a tag-driven release process for the WordPress and Figma plugins. A push to main never publishes a WordPress or Figma update. It does deploy the web app; see Web app.
- Keep
mainreleasable and make sure CI is green. - Run
bun run bump, date the release's section inCHANGELOG.md, and copy its user-facing notes into a matching= X.Y.Z =entry under== Changelog ==inpackages/wp/readme.txt. Include upgrade instructions and breaking changes so users can read them in WordPress's plugin details without visiting GitHub. - Commit the release changes to
main. - Create and push a semantic version tag such as
v2.0.0. - GitHub Actions verifies the repository and builds versioned WordPress and Figma release bundles.
- The
wordpress-orgenvironment deploys the WordPress bundle to WordPress.org. - GitHub Actions creates the GitHub Release and uploads both ZIPs.
The workflow never deletes or rewrites an existing WordPress.org tag.
From a clean main branch, run:
bun run releaseThe helper runs the web and PHP tests, builds both release ZIPs, and asks before creating and pushing the tag.
To trigger the workflow without the helper:
bun run release:wp -- 2.0.0
bun run release:figma -- 2.0.0
git tag -a v2.0.0 -m "Core Framework 2.0.0"
git push origin v2.0.0The tag version must exactly match the WordPress plugin header, package metadata (including packages/figma/package.json), Core Framework version constant, and WordPress.org stable tag. The release builders reject mismatches.
The WordPress builder also rejects a missing or empty changelog entry for that version in packages/wp/readme.txt. It copies that readme into the release ZIP and WordPress.org deployment. Verify the notes alongside the new stable tag after publishing.
The release builders also reject retired hosted-service URLs, remote placeholder images, the removed remote interface font, and stale Figma version copy. They generate a production dependency license inventory for each artifact.
The GitHub Release contains:
core-framework-X.Y.Z.zipfor WordPress and WordPress.org deployment.core-framework-figma-X.Y.Z.zipfor a self-contained local Figma installation.
The hosted editor at coreframework.com/app is not versioned by tags. The website (a separate, private repository) embeds it in an iframe from https://alpha.coreframework.com/, and that domain is served by the Vercel project core-framework in the core-bunch team.
- Source: the
CoreBunch/Core-Frameworkrepository, branchmain. - Root Directory:
packages/www. The build settings live inpackages/www/vercel.json: install withbun install --frozen-lockfile, build withbun run build(tsc && vite build), and servedist. Both commands run Bun 1.3.11 throughbunx, the version in the rootpackageManagerfield; change the two together. - Trigger: every merge to
maindeploys to production. Pull requests get preview deployments. With the project's Skip deployment setting on, Vercel skips commits that change nothingpackages/wwwdepends on (it reads the@core-framework/coreworkspace dependency).
The editor shows APP_VERSION from main, so between releases it runs merged, unreleased changes under the last released number. To check what is live, fetch the page, find the assets/index-*.js bundle it loads, and search that bundle for the version string.
The website and the editor talk through postMessage. The website sends cf-embed-load-preset, cf-embed-load-preset-default, cf-push-response and cf-read-clipboard. The editor sends cf-ready, cf-push, cf-copy-to-clipboard and cf-read-clipboard. Renaming any of them breaks the hosted editor until the website changes too, and a merge to main ships the rename immediately.
The tag workflow packages the Figma plugin but does not publish or update it in Figma Community. Community publishing is a separate maintainer action:
- Complete the tagged release and confirm that the Figma ZIP is attached to the GitHub Release.
- Build the same tag locally with
bun install --frozen-lockfileandbun run build:figma. - Import
packages/figma/manifest.jsonin Figma Desktop and verify the production build. - Use Figma Desktop's plugin publishing flow to publish or update the plugin associated with the manifest ID.
Users who install the GitHub ZIP through Plugins → Development → Import plugin from manifest must download and import newer archives manually. Figma Community installations receive updates through Figma's own distribution channel.
Create a protected environment named wordpress-org and add:
SVN_USERNAMESVN_PASSWORD
For a multi-maintainer repository, consider requiring approval for this environment before deployment. In the current single-maintainer setup, possession of repository tag-push access is the release gate. The workflow uses the repository GITHUB_TOKEN to create the GitHub Release; no separate GitHub token is needed.