Keep a Changelog Format
This skill provides guidelines for writing and formatting changelogs following the Keep a Changelog specification.
Core Principles
- Changelogs are for humans - Write for users, not machines
- Every version gets a section - Including
[Unreleased]for upcoming changes - Changes are grouped by type - Consistent categorization
- Versions are linkable - Each version header links to comparison
- Latest version comes first - Reverse chronological order
- Release dates are shown - ISO format: YYYY-MM-DD
Change Categories
Use these categories in this order:
| Category | Description | When to Use | |----------|-------------|-------------| | Added | New features | New functionality users can now do | | Changed | Changes in existing functionality | Behavior modifications, improvements | | Deprecated | Soon-to-be removed features | Features marked for future removal | | Removed | Removed features | Features that no longer exist | | Fixed | Bug fixes | Corrections to existing functionality | | Security | Security vulnerability fixes | Security-related changes |
Category Guidelines
Added
- New user-facing features
- New API endpoints
- New configuration options
- New integrations
Changed
- Performance improvements
- UX/UI changes
- Default value changes
- Behavior modifications
Deprecated
- Features planned for removal
- APIs being replaced
- Include migration path when possible
Removed
- Breaking changes (removed functionality)
- Deleted APIs or features
- Always note what replaced it (if applicable)
Fixed
- Bug corrections
- Error handling improvements
- Edge case fixes
Security
- Vulnerability patches
- Security-related fixes
- Always include CVE if available
Entry Writing Guidelines
Use Imperative Mood
Start entries with imperative verbs:
| Do | Don't | |----|-------| | Add support for... | Added support for... | | Fix crash when... | Fixed a crash that occurred when... | | Remove deprecated... | Removed the deprecated... | | Change default to... | Changed the default to... |
Focus on User Impact
Write from the user's perspective:
| Good (User-focused) | Bad (Implementation-focused) | |---------------------|------------------------------| | Add dark mode toggle | Implement ThemeProvider context | | Fix login failing silently | Add try-catch to auth handler | | Speed up page load by 40% | Optimize database queries |
Be Specific and Concise
| Good (Specific) | Bad (Vague) | |-----------------|-------------| | Fix crash when uploading files over 10MB | Fix upload bug | | Add CSV export for transaction history | Add export feature | | Change session timeout from 30 to 60 minutes | Update session settings |
Include Context When Helpful
Use parenthetical context for clarity:
- Add OAuth2 support (Google, GitHub)
- Fix timezone handling (UTC offset calculation)
- Change rate limit (100 → 500 requests/minute)
Changelog Structure
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).
## [Unreleased]
### Added
- New entries go here
## [1.0.0] - 2024-01-15
### Added
- Initial public release
- Feature A with description
- Feature B with description
### Changed
- Improvement to existing feature
### Fixed
- Bug fix description
## [0.9.0] - 2024-01-01
### Added
- Beta release features
[Unreleased]: https://github.com/owner/repo/compare/v1.0.0...HEAD
[1.0.0]: https://github.com/owner/repo/compare/v0.9.0...v1.0.0
[0.9.0]: https://github.com/owner/repo/releases/tag/v0.9.0
Semantic Versioning Connection
Changelog categories map to version bumps:
| Category | Version Impact | |----------|----------------| | Removed (after v1.0) | MAJOR bump | | Removed (before v1.0) | MINOR bump | | Added, Changed | MINOR bump | | Deprecated, Fixed, Security | PATCH bump |
What NOT to Include
- Internal refactoring (unless it affects users)
- Dependency updates (unless they affect functionality)
- Test changes
- CI/CD changes
- Documentation-only changes (unless user-facing docs)
- Code style/formatting changes
Changelog Entry Examples
This section provides examples of well-written and poorly-written changelog entries to guide entry creation.
Added Category
Good Examples
- Add user authentication with email/password and OAuth (Google, GitHub)
- Add bulk export of transactions to CSV and Excel formats
- Add keyboard shortcuts for common actions (Ctrl+S to save, Ctrl+Z to undo)
- Add dark mode with automatic system preference detection
- Add webhook support for order status changes
- Add rate limiting (100 requests/minute per API key)
Poor Examples (with corrections)
| Poor Entry | Why It's Poor | Better Version | |------------|---------------|----------------| | Added new feature | Too vague, no information | Add invoice PDF generation | | Implemented AuthService class | Implementation detail, not user-facing | Add user authentication | | Added support for thing | Unclear what "thing" is | Add support for WebP image uploads | | New button | No context, incomplete | Add "Export All" button to dashboard |
Changed Category
Good Examples
- Improve search performance (3x faster for large datasets)
- Change default session timeout from 30 minutes to 2 hours
- Update password requirements: minimum 12 characters, 1 number required
- Redesign settings page with tabbed navigation
- Move API documentation to /docs endpoint
- Increase file upload limit from 5MB to 25MB
Poor Examples (with corrections)
| Poor Entry | Why It's Poor | Better Version | |------------|---------------|----------------| | Refactored code | Internal detail, no user impact | (Omit, or) Improve page load speed by 40% | | Updated dependencies | Internal maintenance | (Omit unless user-facing change) | | Changed stuff | Completely uninformative | Change notification preferences to opt-in | | Made improvements | Too vague | Improve error messages with specific guidance |
Fixed Category
Good Examples
- Fix crash when uploading files larger than 10MB
- Fix incorrect tax calculation for international orders
- Fix login button not responding on mobile Safari
- Fix timezone display showing UTC instead of local time
- Fix memory leak causing slowdown after extended use
- Fix email notifications not sending for new comments
Poor Examples (with corrections)
| Poor Entry | Why It's Poor | Better Version | |------------|---------------|----------------| | Fixed bug | No description of what was fixed | Fix duplicate orders created on retry | | Bug fix | Even less information | Fix search returning stale results | | Fixed issue #123 | Requires looking up issue | Fix CSV export missing header row (#123) | | Fixed null pointer exception in UserService.java:42 | Too technical | Fix crash when viewing deleted user profile |
Removed Category
Good Examples
- Remove deprecated /api/v1 endpoints (use /api/v2 instead)
- Remove support for Internet Explorer 11
- Remove "Classic" theme (migrate to "Modern" theme in settings)
- Remove automatic social media sharing (use manual share buttons)
- Remove legacy import format (use CSV import instead)
Poor Examples (with corrections)
| Poor Entry | Why It's Poor | Better Version | |------------|---------------|----------------| | Removed old code | What capability was lost? | Remove legacy report generator | | Deleted files | Meaningless to users | (Omit if internal) | | Removed feature | Which feature? | Remove email digest option |
Deprecated Category
Good Examples