The vibe coding meme is funnier when you know the file the joke is about.
Andrej Karpathy named it on February 2, 2025. By March, the programmer-humor accounts had a six-format genre. The funny part is not that AI wrote bad code. The funny part is that every popular punchline is a specific, fixable bug. Here is the meme catalogue, and the line number in mk0r's open-source rulebook that answers each one.
Direct answer (verified 2026-04-30)
The vibe coding meme is a 2025 internet joke about AI-reliant programming, coined by Andrej Karpathy on February 2, 2025, who described "a new kind of coding" where you "fully give in to the vibes, embrace exponentials, and forget that the code even exists." The post passed 27,000 likes; within five weeks the term was the headline of a Know Your Meme entry and a recurring tag on programmerhumor.io. The most-shared variants joke about specific bugs: localhost confusion, no version control, AI-slop UI, vibe debugging hell, and leaked API keys.
The origin tweet, in its own words
The post that started everything was three sentences and an admission. Karpathy described talking to Cursor Composer through SuperWhisper and accepting whatever it produced, sometimes without reading. He called it "a new kind of coding I call vibe coding." He framed it as ambient and surrendered. The internet read it as a confession. Both were true.
The post was not technically a self-own. It was a label, applied honestly to a practice that already existed and that more people were doing than wanted to admit. The label gave the joke somewhere to land.
“There's a new kind of coding I call vibe coding, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.”
The five memes that actually broke out
Skim Know Your Meme's entry, scroll programmerhumor.io's vibe-coding tag, and the same handful of formats keep turning up. None of them is dunking on machine learning. Each one is laughing at a specific moment where the human stopped paying attention and the failure was upstream of the model. The list:
- World's Smartest Vibe Coder. A student emails their professor a localhost:3000 link to "review the project." The joke is that localhost only exists on their machine.
- Vibe debugging is the hard part. Posted by @catalinmpit on March 3, 2025, in the Desert Dilemma format. Past 5,000 likes. The setup writes itself: the model made the code, now go figure out why it does not work.
- Never heard of git. The vibe coder shipping into production with no version control, described by programmerhumor.io as "security through nonexistence."
- Karpathy kickstarted a new wave of grifting. The Oppenheimer template, posted on March 15, 2025, 5,000+ likes. Aimed less at the man and more at the gold-rush of vibe-coding influencers that followed the original tweet by about ten days.
- Cursor agent and the 30-file pile. Quoted on February 13, 2025 by @dejavucoder and others: a non-technical user lets the agent generate 30+ Python files, wakes up to a project that is "super disorganized," cannot ship.
Each meme is a real bug. Here is what fixes it.
The file is src/core/vm-claude-md.ts. It is a 2,354-line TypeScript module that gets copied into the sandbox VM before the agent reads its first prompt. The specific lines below are not paraphrased; they are the rules the agent loads at boot. Each one shuts down a specific punchline.
World's Smartest Vibe Coder
A student finishes their final project, copies the address bar, sends the professor a link to http://localhost:3000. The professor opens it on their own laptop and gets a connection refused. The student does not understand why their app is "down."
- Confuses localhost with a public URL
- Default Next.js port (3000) leaks into the joke
- The student never tested from another machine
Never heard of git
A vibe coder ships an "app" with no version control. No git init. No remote. No commits. The screenshot is a folder full of project1, project1_final, project1_final_FINAL, project1_FINAL_v2_use_this. Programmerhumor.io captioned this one "security through nonexistence."
- No git history
- No way to roll back a bad change
- No record of who or what wrote each line
Vibe debugging is the hard part
catalinmpit, March 3, 2025: "Vibe coding is easy. Vibe debugging is the hard part." The joke is that the model produced 800 lines, half of them work, the user has no idea which half, and asking the model to fix the bug introduces three new ones.
- Generated code the human cannot read
- Bug reports become it does not work
- Each fix attempt risks regressing what worked
The grifter Oppenheimer
March 15, 2025, 5,000+ likes. Oppenheimer template: "Karpathy kickstarted a new wave of grifting." The reference is to the explosion of $97 vibe-coding courses, AI-coding cohorts, and "I built 47 SaaS apps in 30 days" threads that arrived in the ten days after the original tweet.
- Sells the practice without showing the file
- Promises ship-able products in 30 minutes
- Conflates a working hello world with a startup
Cursor agent and the 30-file pile
@dejavucoder, February 13, 2025, quoting a Reddit complaint: "non technical people are vibe coding with cursor agent and ending up with 30+ python files, all super disorganized." The shape is always the same. Working code, no architecture, no readable structure, no path forward when the user wants change number 31.
- Files multiply faster than the human can name them
- No clear separation of concerns
- User does not know which file to open to change a button
One more punchline the file pre-empts: leaked keys
This one is barely a meme yet, but it is on its way. Multiple recent write-ups (the Trend Micro 1.5-million-key incident, the Wits University CVE round-up) point at vibe-coded apps committing secrets directly into a public repo because the agent inlined them from an .env edit.
The rulebook addresses this twice. First on line 69, the agent is told to check /app/.env for pre-provisioned services (PostHog, Neon, Resend, GitHub) before asking the user for a key, so most apps never need user-supplied credentials. Second, the Common Pitfall: Trailing Newlines in Environment Variables section starts on line 292 and tells the agent to .trim() every value before writing it to .env. That second one is from personal experience: a trailing \n on a Stripe webhook secret on a different project of mine ate 337 production webhook events in April 2026. The rule exists because someone learned it the bad way.
How a meme becomes a rulebook line
What the memes get right that the defenders do not
People who build vibe-coding tools (me included) sometimes argue with the memes by pointing at successes. That is bad rhetoric. The memes are right about a real failure mode. They are right that the cold-prompt version of vibe coding produces unreadable piles. They are right that "forget that the code even exists" is a bad mindset for a long-lived product. The honest move is not to argue with the joke; it is to fix the bug the joke is about.
The defenders also lose ground when they pretend the failure mode is impossible. It is not. The same model that builds a working app will leak an API key if nothing tells it not to. The model does what the surrounding wrapper allows. The argument is over the wrapper, not the model.
“I think it's a fine tool to learn things, but I think it's a horrible idea to use it as a basis for stuff that you actually need to maintain.”
What the memes will probably look like next
The first wave of vibe coding memes punched at the practice. The second wave will probably punch at the people selling courses on it (the Oppenheimer template was the first taste). The third wave will be the most useful: memes that name a specific countermeasure and laugh at tools that do not have one. "Your AI app builder does not auto-commit" is funnier than "your AI app builder is bad," because the first one is fixable in an afternoon and the second one is not.
That is the test the memes are accidentally running on every vibe-coding tool: does the punchline name something that is in your file, or not? If yes, your tool is funnier than it is broken. If no, you have homework.
Want a tour of the rulebook?
I will share screen, open vm-claude-md.ts, and walk you through which line each meme maps to. 20 minutes.
Frequently asked questions
What is the vibe coding meme?
It started on February 2, 2025, when Andrej Karpathy posted that there is 'a new kind of coding I call vibe coding, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.' The post went past 27,000 likes, the term escaped Twitter, and within six weeks it was a punchline on Hacker News, Reddit, and every programmer-humor account. The meme is not really about Karpathy. It is the code equivalent of cooking a frozen pizza and posting a cookbook on launch day.
Which vibe coding memes broke out the most?
Five recurring punchlines, each a real bug. 'World's Smartest Vibe Coder' (the student sending a professor a localhost link). 'Vibe debugging is the hard part' (catalinmpit, March 3, 2025, 5,000+ likes). 'Never heard of git' (programmerhumor.io, security through nonexistence). The Oppenheimer 'kickstarted a new wave of grifting' edit (March 15, 2025, 5,000+ likes). And the dejavucoder posts about non-technical people whose 30+ Python files turned 'super disorganized' on Reddit.
Where did 'vibe coding' come from before Karpathy named it?
The aesthetic existed before the label. Cursor Composer with Sonnet, talking to the agent via SuperWhisper instead of typing, accepting whatever the diff produced and running the app cold. Karpathy's framing made it shareable: he gave the practice a name people could agree on so they could agree to mock it.
Is the meme an attack on AI coding tools?
Less than people think. Read the punchlines back to back and they are not about LLMs. They are about the human in the loop: the dev who skipped git, the one who shipped to a localhost link, the one who could not debug what got generated. The model wrote the code. The bug is upstream of that. A tool that loads a written contract before the prompt fixes most of the bugs without making the practice less vibe-y.
How does mk0r answer the memes specifically?
There is a single TypeScript file at src/core/vm-claude-md.ts. It is 2,354 lines. The 'localhost:3000' joke is answered on line 75 (the dev server is on 5173 and the agent is told to navigate there). The git joke is answered on line 318 (git is preinstalled, every turn is a commit). The AI slop joke is answered on line 168 (an explicit 'Anti-Patterns: Never Do These' list including purple gradients on white backgrounds). The leaked-key joke is answered on line 292 ('Common Pitfall: Trailing Newlines in Environment Variables'). The agent loads all of it before your first prompt.
Is vibe coding still a meme in 2026?
Less of a fresh dunk and more of a vocabulary item. The shape of the joke moved on; the word stayed. People say 'I vibe-coded it' the way they say 'I duct-taped it,' as a confession that lands somewhere between sheepish and proud. The memes that aged best are the ones that named a specific failure mode rather than the practice itself.
Can I vibe-code something real without becoming the meme?
Yes, with two unromantic conditions. First, use a tool that loads a rulebook before the prompt does, so the named foot-guns (env, git, slop) cannot land. Second, read the diff. The Linus Torvalds objection is correct: vibe coding is fine for learning, horrible for maintenance. If you accept every change without reading it, you are commissioning code, not writing it. That is a legitimate way to ship a prototype. It is not a way to own one.