The short version
A tidy, correctly-rules-implementing Sokoban with seven levels and full undo — genuinely playable on a phone, but only after a missing viewport tag in the shipped HTML was fixed here so the touch d-pad lands where it's drawn.
Biggest strengths
- Correct, faithful Sokoban rules - push only, no pull, full undo (Z/U) and instant restart (R), exactly as the in-game help screen describes
- Seven distinct hand-built levels of increasing complexity, not a random generator
- A genuine on-screen touch d-pad (8-way digital movement plus undo/restart face buttons) that works reliably once actually reachable - confirmed by watching the move/push counters increment after real touch presses in every direction
Biggest weaknesses
- The shipped build was missing <meta name=\"viewport\">, which on a real phone triggers Chromium's legacy desktop-simulation layout (980px assumed width): the whole game rendered as a tiny letterboxed strip and touch coordinates landed nowhere near the visible d-pad until this was added directly to the served file for this review
- The playfield is designed and sized for a 1920x1080 landscape canvas; on a tall phone screen even after the layout fix it renders as a small centered square with large black bars above and below
- No mobile-specific onboarding - the touch d-pad only appears after your first touch, and nothing on screen tells a new player where to look for it before then
Who it's for: Puzzle fans who want classic Sokoban rules done simply and correctly, with no gimmicks.
Our recommendation: play
7.4 / 10
Opening
This is Sokoban exactly as Sokoban should be: push crates onto marked targets, no pulling allowed, plan carefully or undo and try again. Seven levels, a proper help screen, and nothing more than that — which is exactly right for the genre. It's another entry in Frank Force's LittleJS Arcade collection, sharing that project's small-footprint, no-dependency, MIT-licensed house style.
A real bug, fixed for this review
The build as shipped in the repository has no <meta name="viewport"> tag anywhere in its <head>. On a real mobile browser, that omission triggers a fallback most developers never see: Chromium assumes a legacy desktop-style layout width (980px) and shrinks the entire page to fit the actual screen. The visible symptom was a game rendered as a thin, tiny letterboxed strip in the middle of the screen, with touch input landing in completely the wrong place relative to what's drawn — a coordinate-space mismatch that has broken several other reviewed games in exactly this way. The fix is one line, and it was added directly to the file served here for this review: <meta name="viewport" content="width=device-width, initial-scale=1"> immediately after the charset declaration. With that in place, the layout reports its real 390-pixel width and every subsequent test passed.
Controls, confirmed working after the fix
Sokoban uses LittleJS's built-in virtual gamepad system rather than a custom-built one: an 8-way digital d-pad plus two face buttons for undo and restart, all handled by the engine itself. It doesn't appear until you touch the screen once — a legitimate LittleJS mechanic, not a bug — but once it's on screen, every direction was tested individually against the actual game state rather than by eyeballing a screenshot: the move and push counters incremented correctly for each of up, down, left, and right, and a crate was successfully pushed onto a target during testing. Desktop is equally solid — mouse click through the menus, arrow keys or WASD to move, exactly matching the in-game help text.
Presentation and scope
It's deliberately plain: flat-coloured floor and wall tiles, a simple round-faced player sprite, orange crates, red target dots. No music, a couple of basic sound cues for moves and pushes. The playfield itself is built for a 1920x1080 landscape canvas, so on a tall phone screen it sits as a small centered square with a lot of black space above and below even after the layout fix — not broken, just not optimized for portrait mobile. Seven levels is a modest amount of content, but they're hand-designed rather than procedurally generated busywork, and undo makes iterating on a tricky level low-friction.
Final Verdict
A correct, well-behaved little Sokoban that needed one real fix — a missing viewport tag — before it was playable on a phone at all. With that fixed, movement, pushing, undo, and restart all work reliably by touch and by keyboard. It won't win points for ambition or presentation, but it does the one thing it sets out to do properly. Recommended for puzzle players who want the genre played straight.
Pros and cons
Pros
- Correct, faithful Sokoban rules - push only, no pull, full undo (Z/U) and instant restart (R), exactly as the in-game help screen describes
- Seven distinct hand-built levels of increasing complexity, not a random generator
- A genuine on-screen touch d-pad (8-way digital movement plus undo/restart face buttons) that works reliably once actually reachable - confirmed by watching the move/push counters increment after real touch presses in every direction
- Clean MIT licence, no analytics, no console or page errors
- Full undo makes experimentation safe, which matters a lot in a push-only puzzle genre where one wrong move can permanently block a level
Cons
- The shipped build was missing <meta name=\"viewport\">, which on a real phone triggers Chromium's legacy desktop-simulation layout (980px assumed width): the whole game rendered as a tiny letterboxed strip and touch coordinates landed nowhere near the visible d-pad until this was added directly to the served file for this review
- The playfield is designed and sized for a 1920x1080 landscape canvas; on a tall phone screen even after the layout fix it renders as a small centered square with large black bars above and below
- No mobile-specific onboarding - the touch d-pad only appears after your first touch, and nothing on screen tells a new player where to look for it before then
- Presentation is minimal: flat colour tiles, no music, only basic move/push sound cues