From managing changelogs to automating GitHub Releases, learn the release management practices needed for long-term Laravel package maintenance.
If you want to maintain a Laravel package for years, define your changelog and release process first. A repeatable process prevents missed breaking-change communication and keeps releases independent from one maintainer.
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.
Add compare links at the bottom so users can inspect diffs
Keep upcoming work in ## [Unreleased]
# CHANGELOGAll notable changes to this project will be documented in this file.The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).## [Unreleased]### Added- Add `Package::warmCache()` for preloading metadata.## [2.1.0] - 2026-05-10### Added- Add Laravel 13 support.### Changed- Improve default cache key generation for tagged cache stores.### Deprecated- Deprecate `Package::legacyHandle()` and schedule removal in v3.0.### Fixed- Fix null handling in `Package::resolveTenant()`.## [2.0.0] - 2026-03-01### Removed- Drop Laravel 11 support.### Security- Harden signed URL validation against malformed host headers.[Unreleased]: https://github.com/vendor/package/compare/v2.1.0...HEAD[2.1.0]: https://github.com/vendor/package/compare/v2.0.0...v2.1.0[2.0.0]: https://github.com/vendor/package/releases/tag/v2.0.0
Reuse the same changelog text in your GitHub Release notes. Keeping one source of truth prevents drift between README, release notes, and social announcements.
For Laravel 13 support, classification depends on your actual compatibility policy.
Change
Recommended bump
Keep Laravel 12 support and add ^13.0
MINOR
Drop Laravel 11/12 support and require only ^13.0
MAJOR
Fix a Laravel-13-specific bug
PATCH
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.
Raising the minimum PHP version or removing public APIs is a breaking change from the user’s point of view. Treat it as a MAJOR release even when it happens during Laravel major support work.
Use the push: tags: trigger to publish releases from tags. With softprops/action-gh-release, you can automate GitHub Release creation after tests pass.
<?phpnamespace Vendor\Package;class Client{ /** * @deprecated Use handle() instead. Will be removed in v3.0. */ public function legacyHandle(array $payload): array { trigger_error( 'Client::legacyHandle() is deprecated. Use Client::handle().', E_USER_DEPRECATED ); return $this->handle($payload); } public function handle(array $payload): array { return $payload; }}