Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>HappyDEVNew to Visual Studio Code? Get it now.
HappyDEV

HappyDEV

mimone

|
5 installs
| (1) | Free
Five tiny coding-themed arcade games inside VS Code, with 3 difficulty levels and an optional online leaderboard. They can open automatically while Claude Code or Codex works on your prompt.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

HappyDEV

Five tiny arcade games with a coding theme that run inside VS Code, each with 3 difficulty levels and an optional online leaderboard. HappyDEV can also open by itself while Claude Code or Codex works on your prompt and close when the agent is done.

Game Inspired by In short
🐤 Flappy Code Flappy Bird Fly the debugging rubber duck between { } code blocks
▶ Deploy Dash Geometry Dash The terminal cube >_ runs a CI pipeline full of bugs, race conditions, npm i, debug orbs and sudo portals
∿ Sine Glide Tiny Wings A tiny bit slides over sine-wave hills: build up speed and fly before the deadline
☰ Stack Overflow Stack Stack lines of code: whatever hangs over gets cut off
🐍 snake_case Snake A snake made of the letters snake_case eats bugs and coffee
  • Lightweight: a few JavaScript files, no dependencies and no image assets. Everything is drawn in code.
  • Opens in an editor tab, next to your code.
  • High scores are saved per game and per level, and survive restarts.
  • Optional world leaderboard with a public nickname, and a live count of who's playing right now.

1. Install

From the Marketplace: open the Extensions view (Ctrl+Shift+X), search for HappyDEV and click Install.

From a .vsix file: in the Extensions view click ··· → Install from VSIX... and choose happydev-2.0.0.vsix. From a terminal:

code --install-extension happydev-2.0.0.vsix

When it's installed, 🎮 HappyDEV appears in the status bar (bottom right).

Upgrading from the old Flappy Code build? Uninstall it first (Extensions view → Flappy Code → ⚙ → Uninstall). HappyDEV replaces it.


2. Start playing

How What to do
🖱️ Status bar Click 🎮 HappyDEV (bottom right)
⌨️ Shortcut Ctrl+Alt+F (Cmd+Alt+F on macOS)
🔎 Command Palette Ctrl+Shift+P → HappyDEV: Play

The games open in a tab beside your code and show the menu:

  • ↑ ↓ pick a game, Space (or Enter) starts it. You can also click a game or press 1–5.
  • ← → pick the level (it applies to every game):
Level What it's like
🟢 Junior slower, with more room for mistakes: good for learning
🟡 Senior the standard challenge
🔴 10x Dev fast, tight, with extra obstacles
  • Press M during a game to go back to the menu.
  • The menu remembers the last game and level you played.

3. 🤖 Play while your AI agent works

HappyDEV can open by itself when you send a prompt to Claude Code or Codex and close by itself when the agent is done.

Codex

Nothing to set up. HappyDEV notices when a Codex turn starts and ends (CLI or IDE extension) and opens/closes the games. It works the same way as with Claude Code (see How it works below), and it also closes when you interrupt Codex.

How: Codex logs every session to ~/.codex/sessions/. HappyDEV only reads the turn start/end events of new sessions in those files, never the content of your conversations. Turn it off with the happydev.codex setting.

Claude Code: connect (once)

  1. The first time HappyDEV starts, a notification asks: "Open the games automatically while Claude Code works on your prompt?" → click Yes, connect. Missed it? Ctrl+Shift+P → HappyDEV: Connect to Claude Code.
  2. Close and reopen the Claude Code chat (or reload the window: Ctrl+Shift+P → Developer: Reload Window). Claude Code only picks up the new setting in a new session.

How it works

  1. Type a prompt in Claude Code or Codex and send it.
  2. 🎮 HappyDEV opens in a separate tab, in a column beside the current one, so your code and the agent's chat stay visible.
  3. Play! (Click the game if the keys don't respond.)
  4. ✅ When the agent finishes answering, the game tab closes by itself and the status bar shows "Claude is done: back to work!" (or "Codex is done").

Good to know:

  • If the agent asks for a permission (e.g. "can I run this command?"), the question shows up in its chat: answer it there, then go back to the game.
  • If you interrupt Claude with Esc, the game stays open: close it with the tab's ✕. (With Codex it closes by itself.)
  • With several agent chats, the game closes when all of them are done.
  • With several VS Code windows, the game only opens in the window of the project the agent is working on.

Turn it off

  • For a while: Settings (Ctrl+,) → search HappyDEV → untick Auto Start.
  • Only for Codex: untick Codex in the same settings.
  • Claude Code hooks: Ctrl+Shift+P → HappyDEV: Disconnect from Claude Code.

What "connect" does: it adds three hooks (UserPromptSubmit, Stop, SessionEnd) to ~/.claude/settings.json. Each hook writes a tiny event file into ~/.claude/happydev/, which the extension watches. Your other hooks are left untouched. Event files are deleted after a minute. The hook is a POSIX shell command, so on Windows it needs Git Bash (Claude Code already requires it there).


4. 🌍 Online leaderboard

The menu shows how many developers are online and how many are playing each game, plus the world #1 of every game. Press L in the menu to open the world top 10 of the selected game and level (↑↓ game, ←→ level).

The leaderboard is opt-in. To join:

  1. Press L in the menu, then J, or run Ctrl+Shift+P → HappyDEV: Join Online Leaderboard.
  2. Pick a public nickname (2–16 characters).
  3. Your existing high scores are uploaded, and from now on every new high score is sent. The game-over card shows your world rank.

Privacy: you are identified by a random id created by the extension. Only your nickname and your high scores are public. While the games tab is visible and you have joined, the extension sends a heartbeat once a minute so you count as online. If you haven't joined, HappyDEV only downloads the public leaderboard and never sends anything about you. HappyDEV: Leave Online Leaderboard stops all sending and deletes your scores from the server.


5. How to play

Most games use one button: Space (or ↑, W, or a mouse click). snake_case uses the arrow keys.

Key Action (same in every game)
Space / ↑ / W / click The game's action (see below)
P or Esc Pause / resume
R Restart
M Back to the menu

🐤 Flappy Code

  1. Every press makes the duck flap and rise a bit. Then it falls again.
  2. Fly through the gap between a } block at the top and a { block at the bottom: +1 point.
  3. Touch a block or the floor and it's "Uncaught Bug!".
Junior Senior 10x Dev
wide gaps, slow normal; after 10 points the blocks move up and down narrow gaps, fast, blocks always moving

💡 Small, regular taps. Don't mash.

▶ Deploy Dash

The cube runs by itself through a CI/CD pipeline: lint › test › build › deploy. Then it starts over as v2, v3… and gets faster every time. Progress is shown at the top, like a deploy.yml file. Press Space to jump. Hold it to jump again as soon as you land.

Element What it does From stage
🔺 bug (red spike) touching it = crash lint
⬛ code block you can land and run on top of it; hitting its side (or its bottom) = crash lint
⚙ race condition (saw) touching it = crash test
🟡 npm i (yellow pad) launches you with a super jump over tall walls test
◎ debug (yellow ring) press while you're inside it to jump in mid-air build
▯ low corridor you can't jump under it: time your way in and out build
🟣 sudo (portal) flips gravity: you run on the ceiling! The green portal brings you back down deploy

When you crash you get "Build Failed!" with a random error message. ATTEMPT counts your tries.

Junior Senior 10x Dev
slower, more space between obstacles, long stages normal very fast, obstacles close together, short stages (you reach sudo sooner)

💡 Jump just before an obstacle. Hold the button while passing through a ◎ debug ring. Every track is random, but it's always possible to beat: an automated solver checks the track generator.

∿ Sine Glide

  1. The bit slides over the hills by itself. Hold to get heavy and dive, let go to get light again.
  2. That's the trick: hold on the way down to build up speed and let go on the way up to take off from the top of the hill.
  3. Land along a downslope and you get "Perfect!" plus extra seconds. Land against an uphill ("Ouch!") and you slow down.
  4. The deadline bar at the top runs down while the sky gets dark. At zero it's "Deadline!".
Junior Senior 10x Dev
55 s, +3 s per perfect landing 40 s, +2 s 32 s, +1.5 s, steeper hills, stricter landings and ▲ bugs on hilltops (-3 s)

💡 While flying, hold as soon as you start to come down: you land sooner and more in line with the slope.

☰ Stack Overflow

  1. A line of code slides back and forth above the stack: press Space to drop it.
  2. Whatever hangs over is cut off and falls, so the stack gets narrower and narrower.
  3. Drop it perfectly aligned and you lose nothing. 3 perfect drops in a row make the row wider again.
  4. Miss completely and it's "Stack Overflow!". Your score is the number of rows.
Junior Senior 10x Dev
slow, rows always come from the left, easy "perfect" rows come from both sides very fast, "perfect" only to the pixel

💡 Watch the dashed outline: it shows where the row should go.

🐍 snake_case

  1. Steer with the arrow keys (or WASD). You can also click the board: the snake turns towards that point.
  2. Eat bugs 🐞 (+1) to grow. Coffee ☕ is worth +5, but it disappears after a few seconds.
  3. Don't bite your own tail ("Infinite recursion"). The more you eat, the faster you go.
Junior Senior 10x Dev
slow, the edges wrap around the edges are deadly very fast, deadly edges and // legacy code blocks appearing every 4 bugs

💡 Keep your tail along the edges and leave the middle free.

If the keys don't respond, click the game once: the tab needs keyboard focus. If you switch tabs during a game, it pauses by itself.


6. Commands and settings

Command What it does
HappyDEV: Play Opens the games
HappyDEV: Connect to Claude Code / Disconnect from Claude Code Turns automatic opening on or off (see section 3)
HappyDEV: Join Online Leaderboard / Leave Online Leaderboard Joins with a nickname / stops sending and deletes your online scores
HappyDEV: Reset High Scores Resets the local high scores of every game and level
Setting Default What it does
happydev.autoStart true Open/close the games together with Claude Code and Codex
happydev.codex true Also react to Codex
happydev.online.enabled / happydev.online.nickname off / empty Online leaderboard (set them with the Join command)
happydev.online.server HappyDEV server Leaderboard server URL, if you host your own (see server/README.md)
happydev.game menu What to show when HappyDEV opens: menu, last (last game played) or a specific game (flappy, dash, wings, stack, snake)

To change the shortcut: Ctrl+K Ctrl+S, search "HappyDEV".


7. Uninstall

If you connected it, run Ctrl+Shift+P → HappyDEV: Disconnect from Claude Code first. Then: Extensions view (Ctrl+Shift+X) → HappyDEV → ⚙ → Uninstall.


For developers

happydev/
├── package.json          # manifest: commands, shortcut, settings
├── extension.js          # opens/closes the games, Claude Code hooks, high scores
├── images/icon.png       # extension icon
├── media/core.js         # shared core: canvas, input, pause, menu, levels, high scores
├── media/games/flappy.js # Flappy Code
├── media/games/dash.js   # Deploy Dash
├── media/games/wings.js  # Sine Glide
├── media/games/stack.js  # Stack Overflow
├── media/games/snake.js  # snake_case
├── server/               # leaderboard server: Cloudflare Worker + D1 (see server/README.md)
└── build-vsix.py         # builds the .vsix without Node.js (only Python 3 needed)
  • Try it without installing: open this folder in VS Code and press F5. A second window opens with the extension running.
  • Build the package: npx @vscode/vsce package, or python3 build-vsix.py if you don't have Node.js.
  • Tweak it: each file in media/games/ starts with a LEVELS table holding the parameters of the three levels (speeds, gaps, timers...). PALETTE in media/core.js sets the colors. Inside a game, HD.pick([junior, senior, tenx]) returns the value for the selected level.
  • Add a game: create media/games/name.js calling HD.register({ id, name, tagline, color, W, H, reset, update, draw, press, release, playing, icon }). Optional: key(code) for custom keys and pointer(x, y) for clicks. Use dash.js as an example, then add the file to SCRIPTS in extension.js.

License

MIT

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft