Skip to content

Conventional Commits

Conventional Commits is a specification for writing commit messages that follow a consistent, machine-readable format. It builds on SemVer principles to communicate the intent of each change through the commit message itself.

The Format

Every conventional commit message follows this structure:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Examples

feat(auth): add login with GitHub OAuth

fix: prevent crash when repository path contains spaces

docs(readme): update installation instructions for Node 22

feat!: drop support for Node 16

BREAKING CHANGE: Minimum required Node.js version is now 20.

Commit Types

The most common types are:

TypePurposeSemVer Impact
featA new featureMinor bump
fixA bug fixPatch bump
docsDocumentation onlyNone
styleFormatting, whitespace, semicolons — no logic changeNone
refactorCode restructuring without changing behaviorNone
perfPerformance improvementNone
testAdding or updating testsNone
buildBuild system or dependency changesNone
ciCI/CD configuration changesNone
choreMaintenance tasks (release scripts, tooling)None

Breaking Changes

Breaking changes are signaled in two ways:

  1. Exclamation mark after the type/scope: feat!: new API
  2. Footer with BREAKING CHANGE: followed by a description.

Both indicate a major version bump under SemVer.

Why Use Conventional Commits?

Automated Changelogs

Tools can parse your commit history and generate changelogs grouped by type:

markdown
## v1.3.0 (2026-02-08)

### Features
- **auth:** add login with GitHub OAuth
- **topology:** add zoom-to-fit button

### Bug Fixes
- prevent crash when repository path contains spaces
- **staging:** fix file count badge overflow

Semantic Versioning

By scanning commit types since the last release, tools can automatically determine the next version number:

  • Any feat commit → bump minor version
  • Only fix commits → bump patch version
  • Any BREAKING CHANGE → bump major version

Clear History

A standardized format makes git log output scannable. You can instantly tell whether a commit added a feature, fixed a bug, or updated documentation.

Team Alignment

New contributors learn the convention quickly, and code reviews can focus on the change itself rather than debating message formats.

Scopes

Scopes are optional and describe the area of the codebase affected:

feat(staging): add drag-and-drop file staging
fix(topology): correct edge rendering for merge commits
refactor(store): simplify branch state management

Common scopes in a project might include: auth, api, ui, docs, ci, config.

Tips for Good Commit Messages

  1. Use the imperative mood — "add feature" not "added feature" or "adds feature".
  2. Keep the first line under 72 characters — it should fit in a git log --oneline.
  3. Separate subject from body with a blank line — the body explains why, the subject explains what.
  4. Reference issues in footers — Closes #42 or Refs #100.

Conventional Commits in FlowForge

FlowForge's commit panel provides a text area where you write your commit messages. While FlowForge does not enforce the Conventional Commits format, its structured workflow encourages clear, descriptive messages:

  • The summary line maps naturally to the <type>(scope): description format.
  • Amend mode lets you revise a message if you realize the type or scope was wrong.
  • The undo last commit action gives you a safety net to re-commit with a corrected message.

Pairing Conventional Commits with FlowForge's GitFlow workflow gives you a clean history where every branch merge and version tag tells a coherent story.

FlowForge is also building a dedicated Conventional Commit blade with a structured editor, live preview, and commit templates.