Skip to content
FerrFlow

Reference / Conventional Commits

Conventional Commits

FerrFlow follows the Conventional Commits specification to determine how much to bump the version.

Commit typeVersion bumpExample
feat:minorfeat: add wallet subscriptions
fix:patchfix: correct pagination offset
perf:patchperf: cache user queries
refactor:patchrefactor: extract auth middleware
feat!: or BREAKING CHANGEmajorfeat!: remove deprecated endpoint
chore:nonechore: update dependencies
docs:nonedocs: update README
ci:noneci: add linting step
style:nonestyle: format code
test:nonetest: add unit tests

A breaking change can be indicated in two ways:

Exclamation mark suffix:

feat!: remove the /v1/users endpoint
fix!: change authentication header format

BREAKING CHANGE footer:

feat: redesign the API
BREAKING CHANGE: The /v1/users endpoint has been removed. Use /v2/users instead.

Both produce a major version bump.

Scopes are optional and ignored for bump calculation. They’re useful for readability:

feat(auth): add OAuth2 support → minor bump
fix(db): correct index on user table → patch bump

Commits with types chore, docs, ci, style, or test do not trigger a release. If all commits since the last tag are of these types, FerrFlow exits without creating a new version.

When multiple commits are present since the last tag, FerrFlow takes the highest bump across all of them:

fix: correct typo → patch
feat: add export button → minor ← wins
chore: lint → none

Result: minor bump.