Building software by describing it and not reading the result. Where the practice genuinely works, the four costs when it does not, and the line past which no framing makes it acceptable.
- It is not "using AI to code." Most developers do that and read every line.
- Published rates for security flaws in AI-generated code run 25% to 62% depending on model, language and method.
"Vibe coding" means building software by describing what you want and accepting what the AI produces — without reading the code.
It works. That is why it spread. The question is what you have actually shipped when you cannot say what it does.
What the term actually describes
It is not "using AI to code." Most developers do that and read every line. Vibe coding is the specific practice of not reading it — you describe, it builds, you check whether it appears to work, you ship.
The distinction matters because the risks belong entirely to the second version.
Where it genuinely works
- Throwaway tooling. A script you run once. If it is wrong you notice immediately and the cost is a re-run.
- Prototypes nobody will ship. Proving a shape before committing to build it properly.
- Personal projects with no users and no data. The blast radius is you.
- Anything with a test that fails loudly. The test is doing the reading you are not.
Every case where it works has the same property: failure is visible and cheap.
What it costs when those conditions do not hold
Vulnerabilities you cannot see
Published rates for security flaws in AI-generated code run 25% to 62% depending on model, language and method. Snyk's 2026 material puts it at nearly half; the widely quoted 40% traces to a 2022 Copilot study.2026 Snyk Developer Security Report · Pearce, Ahmad, Tan, Dolan-Gavitt & Karri, "Asleep at the Keyboard?", 2022 — see the full correction
Code nobody read is code nobody checked. That is not a probabilistic statement — it is a description.
Dependencies you did not choose
Generated code imports things. Some of those packages do not exist and get invented; some exist and are abandoned; some exist because someone registered the name a model tends to hallucinate.
You inherit every one of them without deciding to.
You cannot debug what you cannot read
The moment it breaks in a way the model cannot fix, you are reading it anyway — under pressure, without the context you would have built by writing it.
The reading was not avoided. It was deferred to the worst possible moment.
It gets worse with each pass
Asking a model to fix code it wrote, repeatedly, is a loop with no outside information in it. The patch is generated from the same picture that produced the bug. See loops that improve and loops that degrade.
The honest position
Vibe coding is a legitimate technique with a narrow correct application, being applied broadly because it feels like leverage.
- If nobody's data touches it, vibe away. The practice is fine.
- If it handles anyone else's data, read it — or have someone who can.
- If it touches money, auth or personal records, it is not a vibe-coding task. No framing changes that.
- If you are selling it, you have a disclosure obligation — see what you owe a client.
The practical middle is generate freely, then read before it matters. The security checklist is what "read" means in practice.