English | 简体中文
WTF Commit ✨

Links: GitHub · VS Marketplace · Open VSX · Website
One shortcut. Your commit message is written, committed, and pushed — in seconds.
WTF Commit reads your git diff, writes a clear Conventional Commit (e.g. feat: add dark mode), fills the Source Control box, and commits in the same keystroke — push too, once you enable Auto Push. No pausing to phrase a message, no boilerplate.
Flow: git diff → ✨ shortcut → message → commit → (optional) push
|
|
| ⚡ ~1 min setup |
Paste your own API key once (DeepSeek by default) |
| 🎁 OpenCode Go (optional) |
Same Flash model — subscribe, then commits draw from your Go quota |
| 🔑 No lock-in |
DeepSeek / OpenAI / Gemini / OpenRouter, or any OpenAI-compatible endpoint (Ollama, proxies). No subscription required |
| 🚀 One-keystroke pipeline |
Auto Commit on by default; enable Auto Push for generate → commit → push in one shot |
| 🖥️ Works everywhere |
VS Code (Marketplace auto-update), Cursor, VSCodium, other Open VSX editors. MIT, free, actively maintained |
Already installed? Skip ahead: ① Configure AI (~1 min) → ② Daily use.
Install
| 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 Commit in your editor’s Extensions view (VS Code or Cursor).
- Set API Key — Command Palette →
WTF Commit: Set API Key, then:
- The first entry is your current provider (it shows whether a key is already stored); pick Choose another provider… to switch.
- First-time setup shows a small wizard: press Enter on Paste API Key now, or pick Open {provider} key page — the wizard stays open while the browser opens, so you can come back and paste once you have a key.
- Pasting is masked with live paste-error checks; on success the status bar echoes the masked key (e.g.
sk-ab••••wxyz) so you can verify what was stored.
- A key saved for another provider asks whether to Switch Provider.
- 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.
② Daily use (every commit)
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+G twice (or Ctrl+G twice 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 a zero-dialog generate → commit → push flow.
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.
🆕 Latest (v1.20.1)
- Cheaper OpenAI default: OpenAI now uses
gpt-6-luna with reasoning disabled for short commit messages.
- OpenCode Go model ID: Its default now uses the documented
deepseek-v4.1-flash ID.
See CHANGELOG for full history.
🚀 Features
- 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. double Cmd+G).
🛠️ Advanced Tutorial
1. Plugin Settings
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 it for a fully 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 live in settings.json only: wtfCommit.prompt, and when Commit Message Language is Custom, wtfCommit.customCommitMessageLanguage.
2. Custom Model & Endpoints
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).
3. Custom Commit Language
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"
}
ℹ️ Supported Providers & Models
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 |
Our picks for commit-message generation (see Choosing a model) — DeepSeek and OpenCode Go are both recommended; this is not the same as the extension default provider. |
Provider defaults — when Base URL and Model are left empty:
| Provider |
Default Model |
Default Base URL |
| DeepSeek |
deepseek-flash |
https://api.deepseek.com |
| OpenCode Go |
deepseek-v4.1-flash |
https://opencode.ai/zen/go/v1 |
| Gemini |
gemini-3.5-flash-lite |
https://generativelanguage.googleapis.com/v1beta |
| OpenAI |
gpt-6-luna |
https://api.openai.com/v1 |
| OpenRouter |
openrouter/free |
https://openrouter.ai/api/v1 |
| Custom |
- |
- |
Get API 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.
Choosing a model for commit messages
Generating a commit message is a lightweight task — you don't need a frontier model. Pick based on your use case, cost preference, and whether you already have an API key:
Recommended path:
- 🎯 Out-of-the-box / Pay-as-you-go (Recommended) 👉 DeepSeek (
deepseek-flash)
- Default Provider; leave Model empty.
- True pay-as-you-go with no subscription barrier. Fast, high quality, and thinking mode is disabled automatically for sub-second responses.
- 🎁 Existing Coding Sub / Global Access (Recommended) 👉 OpenCode Go (
deepseek-v4.1-flash)
- Recommended if you already have (or want) an OpenCode Go subscription: set Provider to OpenCode Go, paste the Go API key.
- Low-latency global endpoints; commits draw from your Go quota. DeepSeek V4.1 Flash currently has a limited-time 4× usage credit.
- 🆓 Zero Cost / Free Tier 👉 Gemini (
gemini-3.5-flash-lite)
- Google AI Studio provides a generous free tier (15 RPM / 1M tokens/day). Uses native Interactions API with
minimal thinking for instant responses.
- 🔑 OpenAI Key Holders 👉 OpenAI (
gpt-6-luna)
- Low-cost model for focused tasks, configured without reasoning for short commit messages.
- 🧪 Zero-Setup Trial / Self-Hosted 👉 OpenRouter (
openrouter/free trial) or Custom (local Ollama, MiMo, GLM, enterprise proxies).
DeepSeek vs OpenCode Go (same model): DeepSeek uses deepseek-flash; Go documents deepseek-v4.1-flash. Both select V4.1 Flash and list the same rates (off-peak: $0.15 input / $0.60 output; peak: $0.30 input / $1.20 output per 1M tokens). Go includes a $10/mo subscription quota. DeepSeek V4.1 Flash currently has a limited-time 4× usage credit on Go (see Go pricing; promo terms can change). For light use without an existing subscription, compare pay-as-you-go prices; if you already pay for Go, commits can use its quota.
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 |
| DeepSeek |
deepseek-flash |
$0.15 / $0.30* |
$0.60 / $1.20* |
~$0.0008 / ~$0.0017* |
Default — V4.1 Flash pay-as-you-go; 50% off during off-peak |
| OpenCode Go |
deepseek-v4.1-flash |
$0.15‡ / $0.30*‡ |
$0.60‡ / $1.20*‡ |
~$0.0008‡ / ~$0 in quota |
Recommended with Go sub — same list rates; V4.1 Flash currently 4× usage credit (limited time) |
| OpenAI |
gpt-6-luna |
$0.10 |
$0.50 |
~$0.0006 |
OpenAI provider default; reasoning disabled |
| Gemini |
gemini-3.5-flash-lite |
$0.30 |
$2.50 |
~$0.0019 |
Alternative; generous free tier |
- DeepSeek & OpenCode Go peak rates apply 01:00–04:00 and 06:00–10:00 UTC (Mon–Fri); all other times are off-peak (50% discount).
† Rough estimate for ~5K input + 150 output tokens (typical diff + commit message), no prompt cache. Actual cost depends on diff size, tokenization, and model output length.
‡ OpenCode Go publishes the same Flash list rates as DeepSeek to meter subscription quota (Go pricing). DeepSeek V4.1 Flash currently has a limited-time 4× usage credit; within the included credit, marginal cost for commits is effectively ~$0 until you hit Go limits.
Official pricing pages: DeepSeek · OpenCode Go · Gemini · OpenAI · OpenRouter
OpenRouter provider default is openrouter/free.
Gemini uses Google's native Interactions REST API (/v1beta/interactions), authenticates with the x-goog-api-key header, and uses the minimal thinking 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.
🕹️ Other entry points
- Source Control title bar ✨ · Command Palette
WTF Commit: Generate · rebindable shortcut (see Daily use).
- Rotate keys anytime with
WTF Commit: Set API Key.
💬 Feedback
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.
📄 License
MIT License.