Sokoban is the original box-pushing puzzle, and one of the purest logic games ever designed. You play a warehouse worker who has to manoeuvre every crate in the room onto a marked goal square, one push at a time, across a set of ten hand-built levels of rising difficulty. There's no timer and no reflexes involved — nothing chases you and nothing punishes you for taking your time — just you, a fixed grid, and the geometry of getting every crate to where it needs to be.
Move with the arrow keys or WASD, swipe in the direction you want to go, tap any square directly next to you, or use the on-screen directional pad. Walking into a crate pushes it one square in that direction, provided the space beyond it is clear — you can't push a crate into a wall, another crate, or off the edge of the level. A level is complete the moment every crate is sitting on a goal ring at the same time; the game tracks both how many steps you've taken and how many of those steps were actual pushes, separately.
U or Ctrl+Z undoes your last move, R restarts the level from scratch, and there's a Skip button in the toolbar if you want to jump ahead to a later level rather than get stuck on one. Your progress through the ten levels is saved on your device automatically, so you can close the tab and pick up later exactly where you left off, and the fewest moves you've ever needed to clear each level is recorded and shown once you complete it again.
Crates can only ever be pushed, never pulled. That single rule is the entire game. A crate shoved into a corner can never come out again, because freeing it would require pulling it from one side while standing on the other — which the rules simply don't allow. A crate pushed flat against a wall can only ever slide along that wall afterward, so from that point on it can only reach a goal that also sits on that same wall. Most levels aren't lost the moment you notice something's wrong; they're lost several moves earlier, at the exact push that sealed the crate's fate without looking like a mistake at the time. That's exactly why unlimited undo isn't a convenience here, it's part of the design — the puzzle expects you to backtrack and try a different order.
All ten levels were verified with an exhaustive breadth-first search over the complete state space — every reachable combination of your position and every crate's position — before being included in the game. An unsolvable level is the worst possible bug in this genre, because from the player's side it is indistinguishable from simply being stuck: you'd have no way to tell whether you just hadn't found the solution yet, or whether no solution existed at all, and you could burn a lot of time chasing an answer that was never there. That situation can't happen in this version — every level that ships has a confirmed path to completion, even if finding it takes you a while.
The heads-up display during play shows your current level number out of ten, your total move count, and how many crates are still off their goals. When you clear a level, the results screen breaks that down further into total moves and total pushes — pushes being the subset of your moves that actually displaced a crate, as opposed to steps you took just to reposition yourself. Comparing the two after a clear is a quick way to see how efficient your solution was: a level cleared in twenty moves with twelve pushes means eight of your steps were pure repositioning, which is often unavoidable but worth noticing if you're chasing a lower personal best. Beating your saved fewest-moves record on a level you've already solved is entirely optional, since simply reaching the goal state clears the level regardless of how many moves it took.
Work out which goal each crate is going to before you push anything. Ask where you would need to stand to make each remaining push, and whether you can actually get there afterwards — it's very common to push a crate correctly and then discover you've sealed yourself out of the space you need to reach the next one, forcing an undo anyway.
Deal with crates near walls and corners first, since they have the fewest legal destinations and the least room for error — a crate in open floor space can usually be rerouted, but one already against a wall has already committed to whichever goals sit along it. When a level has a narrow corridor, remember you can only push a crate along it, never across, so a crate that enters the wrong corridor is usually a restart rather than something you can correct later. And don't hesitate to use undo liberally while you're still reading a level — it costs nothing, and testing a push you're unsure about is almost always cheaper than committing to it and being wrong.