← Back to Whittl
WHITTL v2.2.0 RELEASE NOTES
April 2026
When you ask the AI to change existing code, it now modifies only the specific lines that need to change — instead of rewriting the whole file. This is the single biggest change in v2.2.0 and it touches every other improvement in this release.
What you'll notice
- Modifications run dramatically faster. A theme color change that used to take 83 seconds now finishes in 10-15 seconds.
- Your API bill drops. 40-75% fewer tokens per change, up to 97% on large files.
- All 5 AI backends got the upgrade. Claude, OpenRouter, DeepSeek, Gemini, and Ollama.
- Structural refactors still work the way they did. "Split into modules" or "convert to Flet" skip the fast path and use full generation, which handles big restructuring better.
When your generated app crashes, the AI now takes up to 10 rounds to fix it: read the error, edit the line, run it again, see the new error, edit again — until the code works. Same workflow as before, but the per-fix cost dropped so far that iterating is finally affordable.
- Runs in the background. The UI no longer freezes while autofix is working.
- Smarter loop guard. Whittl tracks whether each fix made progress. If the error keeps changing, the AI keeps going. If the same error comes back 4 times in a row, it stops and tells you instead of grinding forever.
- Cost comparison. A one-line fix on a 500-line file: about a penny with the new approach versus about 45 cents with the old full-regeneration path on Claude.
Long chat sessions used to re-send the same code context and tool definitions to the AI on every message, wasting tokens. v2.2.0 caches that context so subsequent rounds only pay for the new parts.
- Claude sessions: about 87% cheaper per multi-round conversation.
- Works whether you use Claude directly or through OpenRouter.
- Gemini default switched to 2.5-flash for automatic caching on long conversations (75% discount built into the pricing).
- DeepSeek auto-caches identical prefixes — now visible in the token log so you can see the savings.
The previous version had a long list of keyword rules trying to guess what you wanted. Most worked, but a stubborn tail of edge cases produced recurring bugs — "use QPainter for icons" got read as a request to regenerate sprites, "restyle the app" got read as artwork redo, and so on. Every fix added more keywords until the whole thing was unmaintainable.
v2.2.0 replaces most of that with a cheap AI classifier. The net effect:
- Polite questions like "can you add dark theme?" now correctly trigger a code change, not just an explanation.
- Mentions of drawing APIs (Cairo, Skia, Pillow, ImageDraw, Pygame.draw, etc.) no longer confuse the planner into thinking you want new assets.
- The entire class of "Whittl picked the wrong kind of change" bugs is gone.
When the AI hits a problem during a fix — like a typo in a filename, or a search pattern that doesn't match anything — it now gets specific hints back instead of a generic failure.
- File typos get suggestions. "File not found: playlist_manger.py. Did you mean: managers/playlist_manager.py?"
- Near-misses get context. If the AI's search text doesn't match a line exactly, it sees the three closest lines with similarity percentages and self-corrects for whitespace or quote differences in one round.
- Done-phrase shortcut. When the AI says "I've made all the fixes," Whittl recognizes that and skips the confirmation round. Saves about a round per session.
If you used Whittl on Windows to generate a CustomTkinter app, it crashed at launch with a "No module named tkinter" error. The bundled Windows Python was a minimal distribution that didn't include tkinter or the supporting runtime files.
v2.2.0 swaps that for the full bundled Python used on every other platform — tkinter included. Generated CustomTkinter apps now run on first try.
Existing users: the upgrade happens automatically on your next launch. You'll see a one-time "Upgrading bundled Python" message and a roughly 30MB download.
- OpenRouter API keys encrypted at rest. Previously stored as plaintext in settings — now encrypted like the other backends. Existing keys migrate automatically.
- Sandboxed file operations. AI-generated code can no longer read or write files outside your project folder, even if the model is targeted with malicious prompts in a shared document or web page.
- The test window now shows "TESTING" in the title bar so you know it's a test launch rather than a production build.
- Qt apps no longer flash a visible window during the quick test — it all happens invisibly.
- Multi-file projects run from the actual entry point instead of just the currently-selected tab. Fewer "module not found" false alarms.
Whittl has an asset generation pipeline for game projects that need sprites, icons, and textures. For utility apps (calculators, music players, file tools) the pipeline wastes tokens and occasionally misclassifies things.
There's now a toggle in Settings to turn it off. It's off by default — if you're building games, flip it on and everything works like before. Attached images still work for vision input (screenshots, mockups, error pictures) either way.
- Infinite autofix loop on QShortcut imports. Fixed. Two different systems were fighting each other over where QShortcut lives.
- "import data" triggering pip install. Common folder names like "data" or "system" no longer get misidentified as external packages to install.
- Framework conversion glitches. "Convert to Flet" and similar structural refactors now route to the generator best suited for the job.
- UI freezing during autofix. Moved to a background thread — the app stays responsive while fixes run.
- Claude fallback chain stuck on a bad model after an outage. Fixed. After a provider outage cleared, Whittl used to keep trying the same dead model. Now it resets to the top of the chain.
- Hidden response truncation. When a model cut off a response mid-stream, Whittl used to silently treat it as "done." Now it surfaces a warning so you know to retry.
- SQLite bugs in generated code. The pre-flight autofix now catches a common tuple-missing-comma pattern across more code styles (multiline execute calls, separate params variables, triple-quoted SQL).