A bubbletea-powered text UI that functions as a smart, conventional-commit-aware editor for Git
- Interactive TUI for composing conventional commits
- Automatic detection and enforcement of project conventions
- Proper handling when re-using an existing commit message
- Real-time validation with helpful error messages
How you install committed depends on how you intend to use it.
-
Are you someone who commits across several repos, of any programming language, and you want something to make it easier to edit conventional commit messages? See the Global installation instructions.
-
Are you a Go developer, and you want easy access to
committedin your projects for you and for any contributors? See the Project installation instructions.
-
Find the binary appropriate to your platform Releases page, or install using Go:
go install github.com/jaredreisinger/committed@latest
[!NOTE]
No self-installing bash/powershell script yet, but I’m looking at what tools like Homebrew do, and might put something together to make the non-
go installcase a one-liner. -
Configure Git to use
committedas yourcore.editoreither globally or on a repo-by-repo basis:# use committed in all repos by default git config set --global core.editor committed # use committed in only the current repo git config set --local core.editor committed
When you git commit, Git will now invoke committed to edit your commit messages.
If you want to ensure committed is available to all contributors to your Go project, and you’re on Go 1.24 or newer, you can add committed as a tool:
go get -tool github.com/jaredreisinger/committed@latestThis adds committed as a tool to your project’s go.mod, and any go mod download or go mod tidy command will ensure that it is downloaded and available.
To use it, invoke go tool committed. You can configure your repo to always use committed for editing commit messages by setting core.editor:
git config set --local core.editor "go tool committed"Let your contributors know that they can also set core.editor the same way.
committed automatically detects conventional commit configuration from:
.commitlintrc.json.commitlintrc.{yaml,yml}package.json(commitizen field)
{
"rules": {
"type-enum": [
2,
"always",
[
"feat",
"fix",
"docs",
"style",
"refactor",
"perf",
"test",
"chore",
"revert"
]
],
"subject-max-length": [2, "always", 72]
}
}Warning
TBD / NYI — I’m planning to add CLI flags to allow for additional customization, like choosing to directly edit the “type” field vs. using the type picker. Those will get documented here once they’re implemented.
Read the contribution guidelines.
