English | 简体中文
Links: GitHub · VS Marketplace · Open VSX · Website
One shortcut to generate your commit message. WTF Commit reads your git diff and fills the Source Control box with a clear Conventional Commit — with your own API key, not a locked-in vendor.
Works in VS Code (Microsoft Marketplace — search, install, auto-update), Cursor, VSCodium, and other Open VSX–compatible editors. Actively maintained (MIT, free).
| Default provider | DeepSeek (deepseek-v4-flash) — fast and cheap for commit messages |
| Setup once | Paste an API key for your provider (~1 minute) |
| Default flow | Generate → auto commit (no extra confirm). Auto Push stays off until you enable it |
| Power users | Turn on Auto Push (+ optionally turn off Confirm Before Push) for generate → commit → push in one shortcut |
Onboarding is intentionally two phases. You only configure AI once; after that it should feel like a muscle-memory shortcut.
| Editor | How to install | Updates |
|---|---|---|
| VS Code | Extensions → search WTF Commit → Install (Marketplace page) |
Auto-update from Microsoft Marketplace |
| Cursor / VSCodium | Extensions → search WTF Commit → Install (Open VSX) |
Auto-update from Open VSX |
VSIX (optional / offline): download from GitHub Releases or the marketplaces above, then Extensions → ⋯ → Install from VSIX…, or drag the .vsix onto the Installed list. Manual VSIX installs do not auto-update — prefer the marketplace install when you can.
Defaults are enough: Provider = DeepSeek. You only need a key.
- Install — search
WTF Commitin your editor’s Extensions view (VS Code or Cursor). - Set API Key — Command Palette →
WTF Commit: Set API Key→ accept the DeepSeek default → paste the key. - Need a key? DeepSeek API keys (linked from the extension too).
Want another provider later? In Set API Key choose Choose another provider…, or change Provider in Settings. Leave Model empty for built-in defaults.
What the shortcut does: prefers staged changes → if nothing is staged and Auto Commit is on, stages your working tree → generates a Conventional Commit → commits (default) → does not push (Auto Push off).
- Make your code changes (stage when you can).
- Press the generate shortcut — the message streams in, then commits by default.
- Push yourself when ready — Auto Push is off by default.
Default shortcut: Cmd+Alt+G (Mac) / Ctrl+Alt+G (Windows/Linux).
Make it yours — the binding is fully customizable. A popular Cursor-style habit is a double press of Cmd+G / Ctrl+G (chord):
- Open Keyboard Shortcuts (
Cmd+K Cmd+S/Ctrl+K Ctrl+S). - Search
WTF Commit: Generate. - Double-click the keybinding → press
Cmd+Gtwice (orCtrl+Gtwice on Windows/Linux) → Enter.
One-keystroke power flow (optional): Settings → enable Auto Push. Leave Confirm Before Push on until you trust it; turn that confirm off only when you want generate → commit → push with zero dialogs.
Other triggers: ✨ on the Source Control title bar, or Command Palette → WTF Commit: Generate.
Prefer review-only? Turn Auto Commit off — the message stays in Source Control for you to edit and commit manually.
- Five providers only: DeepSeek, Gemini, OpenAI, OpenRouter, Custom — former MiMo/GLM/Z.AI/NVIDIA NIM settings migrate to Custom automatically.
- DeepSeek-first setup: Set API Key defaults to DeepSeek with a Get API Key link; fewer choices on first run.
- Fewer interruptions: Mixed staged/unstaged is a status tip (not a modal); AI repair runs automatically; post-commit tip when unstaged files remain.
See CHANGELOG for full history.
- Conventional Commits —
feat/fix/docs/ … with optional local format fix + automatic AI repair. - Smart diffing — Prefers staged changes; with Auto Commit, stages the working tree when nothing is staged.
- Intent-aware — Text already in the SCM input is used as a generation hint (no extra prompt UI).
- Streaming preview — Watch the message appear live while the model runs.
- Auto Commit & Push — Optional one-keystroke pipeline with a push confirmation.
- Multi-language messages — English, 简体/繁体中文, Japanese, Classical Chinese, or Custom.
- Bring your own endpoint — Built-in providers plus Custom (Ollama, proxies, etc.).
- Keyboard shortcut — Default
Cmd+Alt+G/Ctrl+Alt+G; rebind freely (e.g. doubleCmd+G).
Open VS Code Settings (Cmd+,) and search for WTF Commit. Settings are split into WTF Commit (basics) and WTF Commit › Advanced.
Basics — what most people need:
| Setting | Description |
|---|---|
| Commit Message Language | Language for generated commit messages. |
| Provider | AI backend (default DeepSeek). |
| Auto Commit | Default on — commit after generate. Off = message only in Source Control. |
| Auto Push | Default off — enable for push after commit. Requires Auto Commit. |
| Confirm Before Push | Default on — ask before auto-push. Power users can disable for a full hands-off shortcut. |
Advanced — Custom Base URL/Model, Provider Overrides, ignore paths, status bar toggle.
Extension UI language follows VS Code (
vscode.env.language):zh*→ 中文, otherwise English. Power-user overrides insettings.jsononly:wtfCommit.prompt, and when Commit Message Language isCustom,wtfCommit.customCommitMessageLanguage.
You can use any OpenAI-compatible model (like local models via Ollama):
- In Settings, set Provider to
Custom. - Under WTF Commit › Advanced, enter the Base URL (e.g.,
http://localhost:11434/v1). - Enter the Model name (e.g.,
llama3).
To override a built-in provider's endpoint/model, use Provider Overrides (not the global Base URL / Model fields).
If you want the AI to use a specific language (e.g., French, Cantonese, or Emoji-only):
- Set Commit Message Language to
Custom. - In
settings.json, set the target language, for example:
{
"wtfCommit.commitMessageLanguage": "Custom",
"wtfCommit.customCommitMessageLanguage": "Emoji only"
}How defaults work (three separate concepts):
| Term | Meaning |
|---|---|
| Default Provider | DeepSeek — used on first install until you change Provider in settings. |
| Provider default | Each built-in provider has its own default Model and Base URL (table below). Applies when that provider is selected and no Provider Overrides (or Custom Base URL/Model) are set. |
| Our recommendation | Editorial picks for commit messages (see Choosing a model) — not the extension default provider. |
Provider defaults — when Base URL and Model are left empty:
| Provider | Default Model | Default Base URL |
|---|---|---|
| DeepSeek | deepseek-v4-flash |
https://api.deepseek.com |
| Gemini | gemini-3.5-flash-lite |
https://generativelanguage.googleapis.com/v1beta |
| OpenAI | gpt-5-nano |
https://api.openai.com/v1 |
| OpenRouter | openrouter/free |
https://openrouter.ai/api/v1 |
| Custom | - | - |
| Provider | Get API Key |
|---|---|
| DeepSeek | platform.deepseek.com/api_keys |
| Gemini | aistudio.google.com/api-keys |
| OpenAI | platform.openai.com/api-keys |
| OpenRouter | openrouter.ai/keys |
Other OpenAI-compatible APIs (MiMo, GLM, Z.AI, NVIDIA NIM, proxies): set Provider to Custom and fill Base URL + Model under Advanced — or route through OpenRouter.
Generating a commit message is a lightweight task — you don't need a frontier model. Pick based on cost, latency, and whether you already have an API key.
Stick with the default unless you already have another key:
- DeepSeek V4 Flash — Default Provider; leave Model empty →
deepseek-v4-flash. Fast, cheap, high quality. Thinking mode is disabled automatically. - Gemini 3.5 Flash Lite — optional alternative with a free tier; set Provider to Gemini.
- OpenAI / OpenRouter / Custom — use these if you already have keys or a proxy endpoint.
Pricing comparison (USD per 1M tokens, cache-miss input; sources linked below):
| Provider | Model | Input | Output | ~Cost / generation† | Notes |
|---|---|---|---|---|---|
| OpenRouter | openrouter/free |
$0 | $0 | ~$0 | Zero-cost trials; quality/latency vary |
| OpenAI | gpt-5-nano |
$0.05 | $0.40 | ~$0.0003 | OpenAI provider default |
| DeepSeek | deepseek-v4-flash |
$0.14 | $0.28 | ~$0.0007 | Default — use this |
| Gemini | gemini-3.5-flash-lite |
$0.30 | $2.50 | ~$0.0019 | Alternative; generous free tier |
† Rough estimate for ~5K input + 150 output tokens (typical diff + commit message), no prompt cache. Actual cost depends on diff size and model verbosity.
Official pricing pages: DeepSeek · Gemini · OpenAI · OpenRouter
OpenRouter provider default is
openrouter/free.
Gemini uses Google's native Interactions REST API (
/v1beta/interactions), authenticates with thex-goog-api-keyheader, and uses theminimalthinking level to reduce latency for commit-message generation.
Upgrading from an older build that used MiMo / GLM / Z.AI / NVIDIA NIM: the extension migrates that Provider setting to Custom and fills Base URL / Model automatically.
Important
Claude Support: Native Claude format is not supported yet. Please use a proxy service that provides an OpenAI-compatible endpoint.
- Source Control title bar ✨ · Command Palette
WTF Commit: Generate· rebindable shortcut (see Daily use). - Rotate keys anytime with
WTF Commit: Set API Key.
Using WTF Commit and finding it useful? A GitHub star, an Open VSX review, or a short issue (bugs or ideas) all help more people discover it — and help us keep improving.
MIT License.