Upgrading
Where to find official Core changelists and how to validate an upgrade safely.
VelvetCMS does not duplicate full changelogs on this docs site: every tagged release ships its own notes on GitHub Releases, and breaking migrations are spelled out in the repository UPGRADE.md.
This page routes you there and collects a minimal upgrade checklist. Use it together with Composer's from → to version range, not instead of upstream sources.
Routing: where to read #
| Need | Where |
|---|---|
What landed in vX.Y.Z |
Open VelvetCMS/core releases, choose the tag (for example v2.3.0), and read that release page. |
| What changed across a range | Compare tags on GitHub (from the release page compare links when GitHub shows them, or the compare UI between two tags). |
| Breaking steps for key jumps | Read every relevant heading in UPGRADE.md for versions you crossed (2.2, 2.1, 2.0, or older sections if you migrate from 1.x). |
Suggested order:
- Note
velvetcms/coreincomposer.lock(from) and target (to). - For each semver step you bump through (every tag you skipped), skim the release page for that tag.
- Open
UPGRADE.mdand follow every subsection that corresponds to releases you skipped (especially2.xheading blocks).
Crossing multiple minors is additive: combine all release notes and UPGRADE.md sections along the path.
Before you upgrade #
- Back up production data and
user/. - Tag or commit Git before editing
composer.json/composer.lock. - List enabled modules or custom providers; upgrades often touch config shape, tenancy, queues, or HTTP client usage.
- If you automate deploys (queue workers, cron, WebCron): read
UPGRADE.mdand releases for CLI or env-flag changes affecting those paths before you deploy.
During the bump #
First-party setups fall into two shapes (both are covered under installation). Use the subsection that fits your deployment.
A. Project that declares Core via Composer (velvetcms/core dependency) #
- Bump the semver constraint only if your policy pins ranges; edit
composer.jsonwhenUPGRADE.mdor upstream tells you to, then runcomposer update velvetcms/core(or regenerate the lock through your workflow).
B. Whole Core checkout ( VelvetCMS/core repo: velvet, composer.json, src/ alongside each other ) #
- Update sources with
git fetch/git checkoutto the target tag or branch, or unpack a release tarball per your playbook. - Run
composer install(typicallycomposer install --no-devon production).
After deploy #
- Do whatever
UPGRADE.mdasks for along your from → to path plus any one-off chores in GitHub releases you skimmed. That pairing is intentionally the authoritative run list: upstream only tells you extra work when a release merits it. - Run
./velvet diagnosefor a quick smoke pass: cache round-trip, writablestorage/paths, database connectivity, content driver health, module manager boot. It does not audit everyuser/configkey against defaults.
Smoke-test whichever surfaces you touched (routes, tenancy, queues, cron); skip extra ceremony when upstream did not ask for it.
At this point your tree should match the Core revision you targeted; keep an eye on GitHub Releases for follow-up patches on that line.