Skip to content

CLI ​

The package installs one command under two names: jazzer and commit-jazzer.

jazzer [options] [-- <git commit arguments>] ​

Asks the questions, shows the message and runs git commit. Exits with git's exit code.

Answers ​

Each flag answers its question, which is then not asked. An empty value (--breaking "") answers with nothing. A flag for a question that is not in availablePromptQuestions still goes into the message.

OptionAnswers
-t, --type <type>Commit type, e.g. feat.
-s, --scope <scope>Scope (the component).
-m, --title <title>Title.
-b, --body <text>Description; | starts a new line.
--breaking <text>Breaking change; adds ! to the header.
-i, --issues <ids>Related issues, e.g. "12, 34".
--comment <text>Extra body paragraph.

Flags are validated like typed answers: an unknown type, a scope outside scopes with allowCustomScopes: false, a title over the limit, a line break in a header field or parentheses in the scope is an error. So is an answer the template never writes (--breaking with a template without ), and --retry with answers or an alias.

Options ​

OptionDescription
-y, --yesNo confirmation; only required questions without a flag are asked.
-n, --dry-runPrint the message to stdout instead of committing. Does not need staged changes.
-r, --retryCommit the last message again, without questions.
-c, --config <path>Use this config file instead of searching. Also $JAZZER_CONFIG.
--banner, --no-bannerShow or hide the banner for this run.
-a, --allgit commit --all.
--amendgit commit --amend.
--no-verifygit commit --no-verify.
-h, --helpShow the help.
-v, --versionShow the version.

Everything after -- goes to git commit unchanged, files included. It works for the commit only: init, hook and lint refuse it, and refuse the commit's options written before them (jazzer -c x.json lint); give their own options after the command (jazzer lint -c x.json).

sh
jazzer -- -S --author "Jane <jane@example.com>"
jazzer -- src/parser.ts

Without a terminal (CI, scripts, pipes) nothing is asked and nothing is guessed from the branch: optional answers without a flag stay empty, and a missing required one is an error naming its flag.

jazzer :<alias> ​

Commits the answers of an alias from the config, without questions or confirmation. Answer flags override the alias: jazzer :deps -i 31. --alias <name> is the same, with or without the colon.

jazzer init ​

Creates jazzer.config.json in the root of the repository (the current directory outside one). With a config present it exits with 1, unless --force replaces jazzer.config.json/.ts; with --hook or --lint it keeps the config and only installs the hooks. A config in .jazzerrc or package.json is never replaced.

OptionDescription
--tsWrite jazzer.config.ts instead.
--hookAlso install the prepare-commit-msg hook that asks the questions on git commit.
--lintAlso install the commit-msg hook that runs jazzer lint on every message.
--remove-hookRemove the hooks init installed; hooks written by someone else stay.
-f, --forceReplace jazzer.config.json or jazzer.config.ts (leaving one of them). Other configs and other hooks are never replaced.

Hooks go to .husky/ when husky runs the hooks, and to git's hooks directory otherwise (core.hooksPath and worktrees are respected). They run the project's commit-jazzer, then a global one, and do nothing when neither is installed.

jazzer lint [file] ​

Checks a commit message against the config: the type(scope): subject header, the type, a closed scope list, a non-empty subject, headerMaxLength, the blank line after the header and bodyLineLength for body lines. Reads .git/COMMIT_EDITMSG without a file. git's comment lines (core.commentChar) and the diff of git commit -v are ignored; merges, reverts, reapplies and fixup! commits pass. Exits with 1 when something is wrong or the file does not exist.

OptionDescription
-c, --config <path>Use this config file.

jazzer hook <file> [source] ​

Fills the message file from a prepare-commit-msg hook; file and source are the hook's $1 and $2. Commits that already have a message (message, template, merge, squash, commit sources) and commits without a terminal are left alone.

OptionDescription
-c, --config <path>Use this config file.

Exit codes ​

CodeMeaning
0Committed, printed with --dry-run, init or lint succeeded, or hook left a commit alone.
1Invalid arguments, config or answers; blocked words; nothing staged; a cancelled confirmation; a message lint rejects.
otherA failed git commit: its own exit code.
130Interrupted with Ctrl+C.

Released under the MIT License.