Commits¶
Zendev creates commits interactively and checks messages against three profiles. Select a default in zendev.toml:
The equivalent [tool.zendev] configuration in pyproject.toml uses version = 1 and [tool.zendev.message]. Choose one source per directory. See configuration discovery.
| Profile | Contract |
|---|---|
zendev |
A Gitmoji intention followed by an allowed change type and Conventional Commits syntax. |
conventional |
Conventional Commits syntax, without the ZenDev type or emoji policy. |
gitmoji |
Gitmoji Unicode or shortcode intention, optional scope, subject and body. |
When --profile is omitted, the repository setting applies, falling back to zendev when no setting exists.
Type and intention¶
Types classify changes: feat, fix, docs, style, refactor, perf, test, build, ci, chore, deps, and revert. The emoji states a more specific intention. The pairing policy restricts which types each intention can accompany; an error lists that intention's allowed types.
✨ feat: add export
🐛 fix(parser): handle null token
:memo: docs: update README
⬆️ deps: upgrade dependencies
⬇️ deps: downgrade dependencies
📌 deps: pin a dependency
➕ deps: add a dependency
➖ deps: remove a dependency
💥 refactor!: replace the public API
deps is a category for every dependency operation. The old deps-up, deps-down, deps-pin, deps-add, and deps-remove types are removed. Generation always requires an explicit intention. 💥 requires ! or a BREAKING CHANGE footer; other intentions may also declare breaking changes. The complete policy is defined in ZFP-0006.
Create and check¶
Stage files, then run zendev commit. The prompts select a type and an allowed intention before collecting scope, summary, body, breaking status and footers. The assembled message is validated before invoking Git.
zendev message check --title --text "✨ feat: add export"
zendev message check --commit --profile conventional .git/COMMIT_EDITMSG
Only commit context removes Git comments/scissors and accepts Git-generated Merge, Revert, fixup!, squash!, amend!, and reword! prefixes. Titles are checked literally. The prek hook explicitly selects --commit, including for single-line generated messages.