CommitZero
AI-powered Git commit messages, generated in one click.
Powered by Google Gemini. Built for VS Code.

Overview
CommitZero connects directly to your VS Code Source Control panel, reads your staged and modified diffs, and uses Google Gemini to produce clean, conventional commit messages — without leaving your editor.
No copy-pasting. No context switching. Just commit.
Features
|
|
| One-click generation |
Trigger from the Source Control toolbar or Command Palette |
| Conventional commits |
Output follows the standard type(scope): description format |
| Staged + unstaged support |
Reads both index changes and working tree diffs |
| Configurable model |
Choose any Gemini model via settings |
| In-editor experience |
Message is injected directly into the commit input box |
Requirements
Getting Started
1. Install the extension
Search for CommitZero in the VS Code Extensions Marketplace and click Install.
2. Add your API key
Open Settings (Ctrl+, / Cmd+,), search for CommitZero, and paste your Gemini API key into CommitZero: Gemini Api Key.
3. Generate your first commit message
Stage your changes and either click the CommitZero button in the Source Control panel, or open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P) and run:
CommitZero: Generate Commit Message
Configuration
| Setting |
Description |
Default |
commitzero.geminiApiKey |
Your Google Gemini API key |
(required) |
commitzero.geminiModel |
Gemini model to use for generation |
models/gemini-2.5-flash |
Settings can be changed at any time via File → Preferences → Settings and searching CommitZero.
How It Works
Your staged diff
|
v
VS Code Git API --> Raw diff text
|
v
Gemini API --> Conventional commit message
|
v
Source Control input box
- CommitZero reads your diffs through the built-in VS Code Git API
- The diff is sent to Gemini with a prompt engineered for professional, production-grade commit messages
- The response is written directly into the Source Control commit input box
Project Structure
commitzero/
├── extension.js # Entry point — activate / deactivate
│
├── commands/
│ └── generateCommitCommand.js # Main command handler and error boundary
│
├── services/
│ ├── commitService.js # Orchestrates the full generation pipeline
│ ├── geminiService.js # Gemini API client
│ └── gitService.js # VS Code Git API wrapper
│
├── config/
│ └── settings.js # Reads API key and model from workspace config
│
├── ui/
│ ├── notification.js # Info, error, and warning notifications
│ └── scmButton.js # Source Control panel button registration
│
└── utils/
├── constants.js # Extension-wide constants and command IDs
└── logger.js # Timestamped console logger
Contributing
Contributions, issues, and feature requests are welcome.
# 1. Fork and clone the repository
git clone https://github.com/your-username/commitzero.git
# 2. Create a feature branch
git checkout -b feat/your-feature
# 3. Make your changes, then open a Pull Request
Please keep pull requests focused and include a clear description of what changed and why.
Author
Hardik Borse | LinkedIn | Email
License
This project is licensed under the Apache License 2.0.