cnb
v1.2.4
Published
CLI tool for enforcing consistent Git branch naming conventions across teams and projects
Maintainers
Readme
🚀 Create New Branch
✨ cnb is a simple and customizable CLI tool that helps you create Git branches following naming conventions, and validates (lints) branch names to ensure they follow the configured conventions.
🎬 Demo

📦 Installation
Install the package as a dev dependency:
npm i -D cnb🛠️ Usage
Creating a New Branch
- Add the following alias to your
.gitconfig:
[alias]
cnb = "!npx cnb"- Add the following script to your
package.json:
"scripts": {
"prepare": "git config --local include.path ../.gitconfig",
}- Make sure the prepare script runs before trying the new git alias. You can do this by running (only once):
npm iOr explicitly run the script:
npm run prepare- Run the following command to create a new branch with naming conventions:
git cnbThis will prompt you with a set of options to choose from (e.g., feat, fix, chore, etc.). You'll also provide a short description that will be formatted into kebab-case.
Example:
- Selected type:
feat - Description:
configure notifications
The branch created will be: feat/configure-notifications.
If your configuration requires a ticket ID (based on your config file), the flow will prompt you to enter that first.
Linting a Branch Name
You can also use cnb to lint and validate if the current branch name follows your configured conventions.
- Add the following script to your
package.json:
"scripts": {
"cnb:check": "cnb --check"
}- Run the script to lint the current branch name:
npm run cnb:check📁 Configuration
You can customize the behavior of cnb by creating a configuration file in your project root called cnb.config.ts (for ES6 environments) or cnb.config.cjs (for CommonJS environments).
Configuration Options
| Option | Type | Description | Default |
| ---------------------- | ---------- | ----------------------------------------------------------------------------------------------- | ----------------------------------- |
| branchTypes | string[] | The types of branches you can select (e.g., feat, fix, chore, style) | ['feat', 'fix', 'chore', 'style'] |
| maxDescriptionLength | number | The maximum length allowed for the branch description. | 20 |
| skipTicketId | boolean | Whether to skip the ticket ID prompt. | false |
| ticketIdPrefix | string | The prefix to add to the ticket ID (e.g., JIRA-). | T- |
| separator | string | The character(s) used to separate the ticket ID, branch type, and branch name (e.g., /, _). | / |
Example cnb.config.ts (ES6)
import type { CnbConfig } from 'cnb';
const config: CnbConfig = {
branchTypes: ['feat', 'fix', 'chore', 'style'],
maxDescriptionLength: 20,
skipTicketId: false,
ticketIdPrefix: 'JIRA-',
};
export default config;Example cnb.config.cjs (CommonJS)
module.exports = {
branchTypes: ['feat', 'fix', 'chore', 'style'],
maxDescriptionLength: 20,
skipTicketId: false,
ticketIdPrefix: 'JIRA-',
};🛠️ Note for ES6 vs. CommonJS Users
- For ES6 users: Create your configuration file as
cnb.config.tsand useexport default. - For CommonJS users: Create your configuration file as
cnb.config.cjsand usemodule.exports.
