I Vibecoded a GBA Emulator and Got Banned from GitHub
April 5, 2026
I Vibecoded a GBA Emulator and Got Banned from GitHub
I'm a full stack developer with eight years of experience. I spent six of those at CERN and I'm currently a backend team lead at another place. I have never written an emulator. I have never read a CPU datasheet. I could not tell you how the ARM7TDMI pipeline works, and honestly I still can't. But few days ago I had a working Game Boy Advance emulator running Pokemon Emerald, and now my GitHub account is banned.
The build
I'd wanted to build a GBA emulator for a long time but never had the time or patience to actually sit down and do it. So I decided to see if the current generation of AI could. I own the Pokemon cartridges — they're sitting in a drawer three meters from where I'm typing this. The GBA itself is long gone, but how hard can it be to just vibe an emulator into existence?
I decided for it to be written in Swift with Metal for rendering. On purpose. Most GBA emulators out there are written in C, C++, or Rust, so I figured a Swift/Metal implementation would be underrepresented in whatever training data was being used. I wanted to see how well vibecoding holds up when you pick a stack that the model probably hasn't seen a hundred reference implementations for. I also never fed it code from another emulator — it suggested looking at mGBA's source a few times and I shut that down every attempt. GBATEK (the canonical technical reference for GBA hardware) specs only. Turns out: it holds up fine.
Two days. That's how long it took. I prompted my way through a CPU interpreter, a PPU, DMA transfers, timer registers, and whatever the hell "mode 4 bitmap rendering" is. I fixed bugs by describing the visual glitches I was seeing on screen. "The sprites are mirrored and there are horizontal lines through the background" turned out to be a tile flipping issue in OBJ rendering. I didn't know that, still don't to be completely honest with you. I just described what my eyes were seeing and let the code get rewritten until Brendan was facing the right direction.
By the end of day two, Pokemon Emerald booted, ran, saved, and played through every battle I found myself in. Pokemon FireRed worked too. Graphics were solid. Sound was not.
The sound problem
Sound was by far the hardest part, and the only part where vibecoding hit a wall. The GBA has six audio channels that all need to be mixed together with precise timing. Graphics bugs are easy to describe — "the sprite is upside down" gives the AI something to work with. But "the music sounds kind of wrong" gets you nowhere.
The fix was building a feedback loop that didn't rely on my ears. I added a hotkey that would record the game's audio as separate WAV files per channel, then wrote Python scripts to analyze those captures — frequency analysis, distortion detection, timing anomaly checks. Instead of "the sound is weird," I could feed the AI a chart showing exactly where and how the audio was breaking. That was specific enough for it to actually fix the code.
The thing that made this whole project work wasn't the AI writing code. It was the tooling around it. I built AI skills — reusable instruction sets that the coding agent could invoke — for navigating the emulator's logs, running the audio analysis scripts, and analyzing screenshots of the rendering output. I also kept a memory file of every fix that had already been tried and failed, so the agent wouldn't waste time looping back to approaches that had already been ruled out. Without that scaffolding, the AI would have gone in circles for days.
I had no idea what I was building for most of this process. I was copy-pasting specs from GBATEK into prompts and watching code materialize that I could barely read. The emulator works and I genuinely do not fully understand how.
The ban
About a week later I was pushing changes to Scribe, a completely unrelated project on a separate organization. GitHub Actions wouldn't trigger. No error, no failure, just workflows that silently refused to run.
I tried re-pushing. I tried a different branch. I checked the Actions tab and it was empty. Then I opened an incognito window, typed in my profile URL, and got a 404. More than 10 years of repositories — all gone. No email warning. No banner on my account. No "you violated policy X" notice. No appeal link. I found out I was banned because a CI pipeline broke.
What I think happened
I pushed the emulator to a public repo. The repo contained no ROMs, no Nintendo assets, no copyrighted material of any kind. It was pure emulator code. Emulators are legal. This has been settled law since Sony v. Connectix in 2000.
But I suspect GitHub's automated moderation saw "GBA" and "emulator" in the same repo, maybe scanned for some pattern in the binary handling code, and decided I was distributing piracy tools. Or maybe it was something else entirely. I genuinely don't know, because nobody told me anything.
I've submitted a support ticket. I've heard nothing back. My account is still banned as of today.
The part that actually matters
I don't care that much about the emulator repo. The code was a vibecoded mess that I barely understood. I'm not even going to use it — I played enough Pokemon growing up and I don't have the time to replay them now. It was a project I started one day before my bachelor's party. What I care about is that I'm the sole developer of a completely free and open source tool for managing AI skills called Scribe (no paid features, no premium tier), and its CI pipeline went dark because of this. Keeping it under a separate organization limited the damage. If I had hosted Scribe on my personal account, the whole project would have disappeared with it.
There's no phone number to call. There's no live chat. There's a support form that goes into a void and a community forum where other banned users post increasingly desperate messages.
What this means for emulation
I'm not publishing the emulator's source code — I've learned that lesson the hard way. But the point stands without it: a functional GBA emulator is a non-trivial piece of software — CPU instruction decoding, pixel rendering, audio mixing, memory-mapped I/O, DMA, timers. That used to be months of work for someone who already knew what they were doing. I did it in two days knowing nothing.
The SNES, the N64, the DS — the technical references for all of them exist publicly. The barrier was always the engineering effort, and that barrier is mostly gone now. This is going to make life very difficult for companies that rely on controlling emulation through legal intimidation. You can send a DMCA takedown to a GitHub repo. You cannot send a DMCA takedown to every person who can generate their own emulator locally and never upload it anywhere. The code doesn't need to be shared to exist.
Game preservation has always depended on a small number of dedicated emulator developers willing to spend years on accuracy and completeness. That work is still valuable and still matters. But the "good enough" baseline just got mass-produced, and most people haven't noticed yet.
What this means for work
The emulator is the toy version of a much bigger story. I used a model plus a pile of scaffolding to brute-force my way into a domain I knew nothing about and come out the other side with working software. If the best versions of that capability end up owned by two companies, then a huge chunk of skilled work starts flowing through two private toll booths.
GitHub already gave me a preview of that dependency. One opaque moderation decision on one platform and a completely unrelated open source project lost its CI. Attach that same kind of dependency to the systems people use to write code, review documents, answer customers, analyze contracts, or do research, and a ban stops being an inconvenience. It becomes a threat to your ability to work.
And once a handful of companies sit in the middle of that work, their policy starts acting like law. They decide which kinds of work are too risky to help with, which topics get blocked, which projects trigger a review, and which accounts disappear. History is not exactly reassuring here. Labor unions were once prosecuted as criminal conspiracies before cases like Commonwealth v. Hunt changed the ground. Reverse engineering for compatibility spent years in the legal danger zone before cases like Sony v. Connectix made clearer room for it. Publishing strong cryptography on the internet used to drag you into export-control fights; today the Bureau of Industry and Security explicitly says publicly available encryption source code can be outside the EAR once the notice rules are met. Freezing today's corporate risk policy into tomorrow's permission system seems like a terrible idea.
That is the part that feels real to me after this project. If access to a lot of work ends up running through a few AI platforms, more people are going to learn this lesson the same way: locked out first, explanation later, maybe. I do not want basic access to my work filtered through automated risk systems and support forms that never answer.
