π Generate clear, concise, and structured commit messages effortlessly with Committy!
- Generate commit messages compatible with SemVer specification
- Support for various commit types (feat, fix, build, etc.)
- Option to indicate breaking changes
- Short and long commit message support
- Amend existing commits
- Easy-to-use CLI interface
Committy was born out of the need for a simple, efficient tool to generate structured commit messages. Whether you're working on a personal project or collaborating with a team, Committy helps you:
- Maintain a clean and consistent commit history
- Easily generate changelogs
- Adhere to commit message best practices
- Save time on writing detailed commit messages
Plus, it's a great way to learn and practice Rust programming!
curl -fsSL https://raw.githubusercontent.com/martient/committy/refs/heads/main/install.sh | bash
To generate a commit message:
committy- Full docs live in
docs/(Astro + Starlight):docs/src/content/docs/ - Key references:
- Group Commit:
docs/src/content/docs/reference/group-commit.mdx - AI Flags & Security:
docs/src/content/docs/reference/ai-flags.mdx
- Group Commit:
committy amendcommitty -s "change the api version"committy -s "change the api version" amend- Use
--output json|texton commands that support it. lint --output jsonprints{ ok, count, issues }.tag --output json(with--dry-run) prints{ ok, new_tag }.
-vor--verbose: increase log verbosity. Repeat for more details (-vv).-qor--quiet: only error logs.- Defaults to
infowhen neither is provided.
--non-interactivedisables prompts (ideal for CI).- Also enabled when
COMMITTY_NONINTERACTIVE=1orCI=1.
--fetch/--no-fetchcontrols whether tags are fetched from remote before calculation.- Default: fetch is enabled unless
--no-fetchis provided. - Example (no remote access):
committy --non-interactive tag --no-fetch --dry-run --not-publish --output json0= OK, no issues3= Lint issues found1= Error
Example:
committy --non-interactive lint --repo-path . --output json || {
code=$?; if [ $code -eq 3 ]; then echo "Lint issues"; else exit $code; fi
}Committy determines semantic version bumps using regex patterns loaded from config.toml.
- Default location:
~/.config/committy/config.toml - Override directory with
COMMITTY_CONFIG_DIR(the file must be namedconfig.toml). - Keys:
major_regexminor_regexpatch_regex
Example config.toml (use single quotes for literal regex):
minor_regex = '(?im)^fix(?:\s*\([^)]*\))?:'
patch_regex = '(?im)^docs(?:\s*\([^)]*\))?:'
major_regex = '(?im)^(breaking change:|feat(?:\s*\([^)]*\))?!:)'This example treats fix: commits as a minor bump (instead of patch) and moves docs: to patch.
Committy supports the following commit types:
- feat: New feature
- fix: Bug fix
- build: Changes that affect the build system or external dependencies
- chore: Other changes that don't modify src or test files
- ci: Changes to CI configuration files and scripts
- cd: Changes to CD configuration files and scripts
- docs: Documentation only changes
- perf: A code change that improves performance
- refactor: A code change that neither fixes a bug nor adds a feature
- revert: Revert a previous commit
- style: Changes that do not affect the meaning of the code
- test: Adding missing tests or correcting existing tests
When prompted, you can indicate if your commit includes breaking changes. This will add a ! at the end of the commit type, signaling a breaking change as per conventional commit standards.
A brief, concise summary of the changes (around 150 characters). Think of it as a TL;DR for your commit.
A more detailed explanation of the changes, which will be included in the changelog. Use this to provide context, reasoning, and any other relevant information about your changes.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create a new branch for your feature or bug fix
- Make your changes and commit them
- Push your changes to your forked repository
- Create a pull request to the 'develop' branch of the main repository
Please see the CONTRIBUTING file for more details.
This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
- Inspired by the need for consistent commit messages
- Built with love using Rust π¦

