Game review
Four in a Row
7.5 / 10
- Developer
- Kenrick (kenrick95)
- Publisher
- Kenrick (open source)
- Released
- 1 January 2019
- Platforms
- Web browser (desktop and mobile)
- Genre
- Board / Strategy
- Monetisation
- Free, open source, no ads and no in-game purchases
- Players
- Local pass-and-play only on this build
The short version
This is a faithful, well-built implementation of the drop-a-piece board game everyone already knows, made by a developer who's kept it running for over a decade, and it does the one thing that matters for this shelf about as simply as a game can: every action is a single tap anywhere in a column, confirmed by testing to drop a piece and get an AI response back on both a phone and a desktop mouse, with nothing to aim beyond "which of the seven columns." The original build had real problems getting here — it loaded its script, stylesheet, and logo from the author's own live GitHub Pages site rather than shipping them, and its "online multiplayer" option quietly connects to the author's own production server rather than failing cleanly, which isn't something to route this shelf's traffic through without asking first. Both are fixed on this copy. What's left is a plain, well-executed classic with a competent AI opponent and nothing new to say about a game that doesn't need anything new said about it.
Biggest strengths
- The entire control scheme is a single tap anywhere within a column, and testing confirmed it end to end on a simulated touch phone — dropping a piece, watching the AI respond automatically, and dropping a second piece, all without a single missed input
- A native `<dialog>` element handles the settings screen and responds correctly to touch out of the box, and the board itself reflows to a full-width, comfortably tappable layout on a 390px viewport with no horizontal scroll
- 281 GitHub stars and commits as recent as this week — this has been actively maintained for over a decade, which shows in how little went wrong once the two structural issues below were fixed
Biggest weaknesses
- As committed to its `gh-pages` branch, the build's HTML pointed its script tag, its stylesheet, and its logo at `https://kenrick95.github.io/c4/...` rather than shipping them as relative paths — it would have loaded here, but every visitor would have been silently pulling assets from the author's personal site indefinitely, an unannounced dependency rewritten to relative paths before installing
- The build's "Online: Human player vs human player" mode connects to the author's own live production WebSocket server rather than failing when no backend is present — not something to point this shelf's traffic at without the author's knowledge, so that mode has been removed from this copy; only the two offline modes and the AI-vs-AI spectator mode remain
- Visually as plain as the genre gets: flat white and grey circles on a light-grey board, no animation beyond the piece drop, and no sound
Who it's for: Anyone who wants a quick, well-made two-player or vs-AI round of a game everyone already knows the rules to
Our recommendation: Worth playing when you want something familiar and fast, not a reason to make time specifically
7.5 / 10
There isn't much mystery to what this is: drop coloured pieces into a seven-column grid, try to line up four before your opponent does. The design has been public domain in every meaningful sense for decades, and this implementation — maintained by one developer, on and off, since 2013 — doesn't try to add anything to it. What earns it a place here isn't invention, it's execution: a genuinely well-built, actively-maintained take on a game everyone already knows, that happens to need almost nothing from a touchscreen beyond a single tap.
Two real problems, both fixable, neither the game's fault
Worth stating plainly before anything else, because both would have mattered if left alone. The built gh-pages output, as committed, points its module script, its stylesheet, and its logo image at https://kenrick95.github.io/c4/... — absolute URLs back to the author's own live site — rather than the relative paths that would let it stand on its own. It would have technically loaded here, but every visitor would have been quietly fetching assets from a third-party site indefinitely, an unannounced and unnecessary dependency for something that already has its own built files sitting right next to that broken reference. Rewriting those to relative paths was a small, mechanical fix.
The second issue needed a judgement call rather than a find-and-replace. The settings screen originally offered "Online: Human player vs human player," and reading game-online-2p.ts shows exactly what that does: it opens a WebSocket to wss://c4-server.fly.dev, the author's own production matchmaking server, in any build served outside local development. That's not a broken feature failing safely — it's a live backend that would start receiving real traffic and real player names from this shelf without its operator ever agreeing to that. Nothing about hosting an open-source client should quietly volunteer someone's personal server for a load it never opted into, so that mode has been removed from this copy. The two offline modes and the AI-vs-AI spectator mode are entirely self-contained in the client bundle and don't share that problem.
One tap, any height, works every time
The actual touch design barely needs describing because there's so little of it, and that's the point. main.js's bundled game logic reads column selection from wherever a click event lands inside the canvas — no drag, no precise vertical targeting, no separate button per column — and a tap anywhere within a column's width does exactly what a click does. Testing this on a simulated 390×844 touch phone confirmed the whole loop working: a tap dropped a red piece into the tapped column, the AI opponent responded automatically with a blue piece a moment later, and a second tap in a different column repeated the exchange cleanly, with the board's percentage- of-width layout keeping every column comfortably within thumb reach. The settings dialog beneath it — a native <dialog> element with radio buttons and a text input — needed nothing special to work with touch either, which is the advantage of building on standard HTML controls instead of custom-drawn ones.
Plain, and fine with being plain
Visually, this doesn't reach for much: flat white and light-grey circles, a pale grey board, red and blue pieces, no sound, no animation beyond the drop itself. That's a legitimate choice for a game whose entire appeal is the rules everyone already knows, and it doesn't get in the way of anything — but it does mean the recommendation here rests entirely on "does this work well," not "is this worth seeing." It does work well: the AI opponent responds sensibly rather than randomly, the win detection covers all four directions correctly in testing, and thirteen years of on-and-off maintenance (last commit this week) shows in how little broke once the hosting issues above were sorted out.
Where that leaves it
A 7.5 fits a game that does exactly what it sets out to do, with controls about as frictionless as this shelf sees, let down only by presentation that never tries to be more than functional and a design that isn't asking to be judged on originality. Good for a fast round when you want something familiar; not a game to specifically make time for.
Pros and cons
Pros
- The entire control scheme is a single tap anywhere within a column, and testing confirmed it end to end on a simulated touch phone — dropping a piece, watching the AI respond automatically, and dropping a second piece, all without a single missed input
- A native `<dialog>` element handles the settings screen and responds correctly to touch out of the box, and the board itself reflows to a full-width, comfortably tappable layout on a 390px viewport with no horizontal scroll
- 281 GitHub stars and commits as recent as this week — this has been actively maintained for over a decade, which shows in how little went wrong once the two structural issues below were fixed
- Includes a genuine AI opponent (and an AI-vs-AI spectator mode) rather than shipping local pass-and-play as the only option, confirmed responding sensibly to moves during testing
- Small and fast: a 60KB install, instant load, and zero console errors, page errors, or failed requests across two full test passes
Cons
- As committed to its `gh-pages` branch, the build's HTML pointed its script tag, its stylesheet, and its logo at `https://kenrick95.github.io/c4/...` rather than shipping them as relative paths — it would have loaded here, but every visitor would have been silently pulling assets from the author's personal site indefinitely, an unannounced dependency rewritten to relative paths before installing
- The build's "Online: Human player vs human player" mode connects to the author's own live production WebSocket server rather than failing when no backend is present — not something to point this shelf's traffic at without the author's knowledge, so that mode has been removed from this copy; only the two offline modes and the AI-vs-AI spectator mode remain
- Visually as plain as the genre gets: flat white and grey circles on a light-grey board, no animation beyond the piece drop, and no sound
- It's an unmodified implementation of a public-domain game design with no twist or added mechanic — faithful rather than original
- Worth noting for transparency: this shelf hosts it as "Four in a Row" rather than the trademarked name it's commonly known by, matching how this section has handled other direct clones of branded game designs