This page is a companion to Laravel Package Development. For Laravel/PHP compatibility strategy, read Package Version Compatibility Management.
How to write CHANGELOG.md
Your changelog is the primary source users read to understand what changed in each release. Use Keep a Changelog so your categories stay consistent across versions.
Baseline rules
- Use
## [x.y.z] - YYYY-MM-DDfor version headers - Use
Added / Changed / Deprecated / Removed / Fixed / Security - Add compare links at the bottom so users can inspect diffs
- Keep upcoming work in
## [Unreleased]
Semantic Versioning (SemVer)
Semantic Versioning usesMAJOR.MINOR.PATCH:
- MAJOR: backward-incompatible changes
- MINOR: backward-compatible feature additions
- PATCH: backward-compatible bug fixes
Laravel package examples
For Laravel 13 support, classification depends on your actual compatibility policy.
Always check the official Laravel 13 upgrade guide. You can confirm current release status on laravel/framework releases. If your package depends on APIs with breaking changes, you need to redesign compatibility policy before release.
Git tags and GitHub Releases
Start by creating and pushing a version tag.v2.1.0, and publish. Copy the ## [2.1.0] section from CHANGELOG.md as release notes.
1
Merge release-ready changes into main
Merge only after your test suite passes.
2
Create and push a version tag
Use the
vX.Y.Z format and push the tag to origin.3
Publish a GitHub Release
Use the tag as title and paste the corresponding changelog section.
Automate releases with GitHub Actions
Use thepush: tags: trigger to publish releases from tags. With softprops/action-gh-release, you can automate GitHub Release creation after tests pass.
Keep
needs: test on the release job so failed tests block publication. This gate is critical in both manual and automated release flows.Handling breaking changes
Ship breaking changes in phases. Deprecate first, remove in the next MAJOR version, and provide migration instructions.1. Mark deprecated APIs in code
2. Document migration guidance
Document actionable steps inUPGRADE.md or a dedicated migration page.
3. Keep major-to-major migration notes
When you cut a MAJOR release, cross-link changelogRemoved entries and migration docs. Users can quickly see both what changed and how to update.
Related pages
Laravel Package Development
Review implementation fundamentals centered on service providers.
Package Version Compatibility Management
Organize your compatibility decisions for Laravel/PHP and SemVer.
Testing Laravel packages with Orchestra Testbench
Learn the test strategy you should run before every release.