The one-line answer to how to make Pong in 2026 is: two rectangles, one square, a game loop that reads two keyboard inputs and reflects the square off the rectangles at an angle based on where it hits. That is the entire game, and it has been the entire game since Allan Alcorn built it as a training exercise at Atari in 1972. What has changed is the pipeline. In 2026, you do not solder a Hitachi television to a wooden cabinet like Alcorn did. You open a browser, prompt WizardGenie for a vanilla HTML5 Canvas Pong scaffold with the eight-segment paddle reflect and speed-up-on-return physics, generate a paddle-blip and an 8-bit chase loop in SFX Gen and Music Gen, and ship a 200-line browser build in an afternoon. Zero art credits required. The paddles are white rectangles; that is not a limitation, that is the correct look.
What "how to make Pong" actually means in 2026
The query "how to make Pong" hides three different requests. Some searchers want a faithful clone of Alcorn's 1972 arcade original with the exact eight-segment paddle reflect, the speed-up-on-return ball, the paddle that cannot reach the top of the screen (a defect Alcorn kept because it added difficulty), and the score-to-eleven win condition. Some want a modern two-player browser game they can share with a friend over a link. And some want to learn a game loop, keyboard input, and collision response on the smallest possible playing field before moving on to a bigger project. The honest default is the first: a faithful reproduction. Pong is small enough that the "faithful clone" and the "portfolio starter" are the same 200 lines of code. Section seven costs the whole project out at under 45 cents in Sorceress credits, which is worth reading before you commit.
A quick history anchor, verified against Wikipedia's Pong page on 2026-08-09: Pong is a 1972 sports video game developed and published by Atari, designed by Allan Alcorn as a training exercise Nolan Bushnell secretly assigned to him under the cover story of a General Electric contract. The prototype was installed at Andy Capp's Tavern in Sunnyvale in August 1972 and had to be serviced within days because the coin box overflowed with quarters. Atari announced the coin-op cabinet on 29 November 1972 and shipped over 8,000 units by the end of 1974. Home Pong reached Sears in October 1975 at USD 98.95 with a one-year warranty. Alcorn's decisions that made the game feel alive were the eight-segment paddle (the ball's return angle depends on where it hits), the speed-up-on-return physics (the ball accelerates the longer the rally lasts, resetting only on a miss), and the deliberately imperfect paddle top-bound (the paddle cannot reach the top of the screen so a two-skilled-player rally cannot go forever). Every one of those design choices is fair game to replicate. The name "Pong" and the Atari Fuji logo are not.
The Pong game loop in one minute (input paddle ball bounce score)
Five moving parts, one strict order per frame. First, read player input — W/S for the left paddle, Up/Down for the right paddle (or add an AI opponent flag that overrides one side). Second, advance both paddles by their input direction times their max speed, clamped to the top and bottom of the arena (or to the top-minus-a-little to honour Alcorn's deliberate top-bound defect). Third, advance the ball by its current velocity. Fourth, check collisions in this exact sub-order: top and bottom wall (reflect vertical velocity, no speed change), left and right paddle (reflect horizontal velocity, adjust vertical velocity by the eight-segment hit-position math, and increase overall speed by about 3%), and left and right edge of the arena (award a point to the opposite side and re-serve the ball toward the losing side at the base speed). Fifth, check win state — if either score reaches 11, freeze the arena, display a game-over overlay, and wait for a restart input.
That is the entire game. Five steps, executed once per frame at 60 frames per second, driven by requestAnimationFrame. Everything else — a scoreboard font, a serve-toward-loser rule, a countdown before serve, an AI opponent for solo play, a Pong Doubles four-paddle mode — is polish on top of this core loop. Keep the five-step order strict, resolve wall collisions before paddle collisions before edge collisions, and the game feels arcade the first time you play it. Reverse the collision order or skip the speed-up-on-return step and it feels like a homework assignment.
Pick your engine for how to make Pong: vanilla Canvas, Phaser 4, or WizardGenie
Three good browser targets in 2026, each with a different trade-off. Vanilla HTML5 Canvas 2D plus requestAnimationFrame is the honest default for Pong specifically. The entire game is two white fillRect() calls for paddles, one fillRect() for the ball, one fillText() for the scoreboard, a keydown/keyup pair for input, and about 150 lines of physics. Bundle size is under 5 KB minified, which loads instantly on a bad hotel wifi. This is the pick 80% of readers should take, and it is what Alcorn would build today if he were doing the training exercise in a browser.
Phaser 4 is the second pick if you intend to grow the project. Phaser 4.2.1 "Giedi" was released on 9 July 2026 (verified against phaser.io/download/stable on 2026-08-09) and ships arcade physics, scene management, and animated sprites — primitives you do not need for a bare Pong clone, but that pay off the moment you add a Pong Doubles four-paddle mode, an intro screen, a settings scene, or a Breakout follow-up (Atari's own 1976 Pong follow-up, which is Pong with the right paddle replaced by a wall of bricks). Bundle is roughly 900 KB minified, which is fine on modern connections. If the goal is "ship one Pong and stop", pick vanilla Canvas; if the goal is "ship one Pong, then one Pong Doubles, then one Breakout", pick Phaser 4 and grow the scaffold. Three.js is the wrong pick for this project because Pong is a two-dimensional table-tennis simulation with no camera perspective — the entire 3D scene graph is overhead you never use.
The third option: skip the engine choice and prompt WizardGenie for a scaffold in whichever framework you name. WizardGenie is the Sorceress game-native coding agent, shipping as both a Windows desktop installer (Early Access supporters and above) and a no-install web build at the same URL. Its coding-model lineup (verified 2026-08-09 in src/app/_home-v2/_data/tools.ts lines 734 to 742) covers Claude Opus 4.7, Claude Sonnet 4.6, GPT-5.5, Gemini 3.1 Pro, DeepSeek V4 Pro, Kimi K2.5, Grok 4.2, and MiniMax M2.7 — the current frontier plus the cheap-and-fast tier. For a Pong-scale project, the cheapest executor in the lineup (DeepSeek V4 Pro or Kimi K2.5) scaffolds the whole game on the first prompt and iterates for pennies in model-side API cost. This is one of the few cases where a Planner+Executor split is overkill: the whole project is 200 lines and one prompt.
Step 1 — render the arena, paddles, and ball, then wire keyboard input
Open a text editor, create a single index.html with an inline <canvas> element sized 800 by 500 pixels, and a <script> tag with the game code. Grab the 2D rendering context, define a black-background clear() function that fills the entire canvas each frame, and add three constants: paddle width (about 10 pixels), paddle height (about 80 pixels), and ball size (about 10 pixels). Give each paddle a state object with an x, a y, a speed (about 500 pixels per second), and an input flag; give the ball a state object with an x, a y, a velocity vector (vx and vy, starting at about 400 and 0 pixels per second), and a current-speed scalar you increment on each paddle hit.
Draw the arena in a single render pass: fill the whole canvas black, draw a thin dashed vertical white line down the center (a dozen short fillRect() calls in a loop, or a single setLineDash() and strokeStyle call), then render the two paddles as white fillRect(paddle.x, paddle.y, paddleW, paddleH), and finally the ball as fillRect(ball.x, ball.y, ballSize, ballSize). The score digits go at the top on either side of the center line using ctx.fillText(score, x, y) with a large monospace font like "64px Courier". This is the entire visual layer of the game. Do not add sprites; do not add gradient fills; do not add anti-aliasing tricks. The 1972 look is the correct look and it makes the game feel like a game.
Wire input as a keydown/keyup pair on window that flips input flags on the paddle state: W and S for the left paddle, Up and Down arrow keys for the right paddle. In each frame's update tick, translate input flags into paddle velocity (up flag = -paddle.speed, down flag = +paddle.speed, both = 0), then integrate paddle.y by paddle velocity times the frame delta, then clamp paddle.y to the arena top and bottom (with a small offset if you want to honour Alcorn's top-bound defect — give the top clamp a slight buffer so the paddle cannot quite reach the top corner). Test by opening the HTML file in a browser and pressing keys. If both paddles move smoothly, keyboard input is done. Total effort so far: about 40 minutes of typing.