Rocket League meets the ocean floor
A browser-based 3D soccer game built with Three.js and Blender. Drive crabs up walls, scuttle sideways at boost speed, dodge-flip into the ball, and score goals in an underwater arena. No download required โ just click and play.
โถ Play Latest (v8) โ All VersionsCrab Soccer started as a joke question: "What if Rocket League, but crabs?" Dylan and Craw (an AI agent running on OpenClaw) started building it in February 2026 from an RV in San Diego, powered by solar panels and Starlink.
The first version was one-shotted in a single session โ a basic Three.js scene with a box-shaped "crab" and a ball in a walled arena. It worked. It was terrible. It was fun.
From there, each version added something new: real crab anatomy, sideways scuttling physics, Blender-modeled arenas, split-screen multiplayer, surface-following raycasting (crabs can drive up walls and across ceilings), dodge-flipping, boost mechanics, and a settings GUI that lets you tune every parameter in real time.
The entire game runs in a single HTML file. No build tools, no bundler, no server required. Open the file, play the game. That constraint forced creative solutions and kept scope honest.
The Blender pipeline was one of the more interesting challenges. Dylan researched crab rigging by watching YouTube tutorials on crustacean animation, then used Google's Gemini to transcribe and summarize the key techniques. He took reference screenshots from FrontRidge 3D tutorials on arthropod rigging โ focusing on how to set up bone hierarchies for multi-jointed legs that move naturally.
The crab model started as FrontRidge mesh references, assembled in Blender via Python scripts
running headless on the server. The rig uses a bone hierarchy for 10 legs (5 per side) with
IK constraints so the legs plant naturally on surfaces. The final model (crab_v2.glb,
558KB) was exported for Three.js with team-colorable materials โ each crab's shell lerps 45%
toward its team color with a 15% emissive glow.
Reference tutorial that inspired our rigging approach:
Starting in v7, crabs use raycasting to follow surfaces โ meaning they can drive up ramps, along walls, and even across ceilings. The physics system casts rays downward (relative to the crab's orientation) to find the nearest surface, then aligns the crab to it. Combined with AABB safety bounds and a 2m/frame max step, this prevents the map-clipping that plagued earlier versions. The result: crabs feel like they have magnetic feet.
The arena was built in Blender as two variants: crab_arena_v1.glb (basic box with
goals) and crab_arena_v2.glb (beveled corners, ramps, protruding goalposts).
Dimensions: 52m ร 31.2m ร 15.6m with 3m beveled edges and goals at 6m wide ร 3.5m tall ร 4m deep.
The bevels are critical โ without them, crabs get stuck in 90ยฐ corners. With them, they smoothly
transition from floor to wall.
This project is a collaboration between Dylan (human, Lunaria Unlimited) and Craw (AI agent, running 24/7 on a Linux VM). Dylan handles game design, playtesting, Blender modeling, and creative direction. Craw handles code generation, physics tuning, browser automation, and version management. The entire development happens through conversation โ Dylan describes what he wants, Craw builds it, they iterate.
Every version of this game is playable below. You can see the progression from "box with a ball" to "crabs driving on ceilings" in real time.
Every version is playable. Click through to see how the game evolved.
The best of everything combined. v8 merges v4's camera system (5 modes including split-screen) with v7's GLB models and surface-following physics. Full 2-player local multiplayer with team colors, goal detection, scoreboard, timer, and a comprehensive settings GUI organized into Crab, Ball, Physics, Camera, Arena, and Game sections.
The Blender breakthrough. Replaced procedural geometry with proper GLB models exported from Blender. Introduced surface-following raycasting so crabs stick to any surface. The arena got beveled corners and protruding goalposts. Fixed the infamous "airborne deadlock" bug where crabs would get stuck in mid-air after a dodge.
Gave the crab a real body โ procedurally generated in Three.js with articulated legs, claws, eye stalks, and carapace. Added underwater particle effects (bubbles, caustics). The crab actually looks like a crab now instead of a colored box.
Focused on making movement feel right. Tuned acceleration curves, ball bounce physics, and wall interactions. The ball started behaving more predictably โ less "random bouncing," more "I meant to do that."
โถ Play v5The camera update. Added 5 camera modes including split-screen for 2-player. Built a full anatomical crab model (procedural). Added the underwater theme that defines the game's aesthetic โ deep blue arena with caustic lighting effects.
The movement breakthrough. Three distinct modes that change how the crab drives: Walk (wide turning, classic car feel), Scuttle (boost + forward, crab rotates sideways โ the signature move), and Strafe (boost + lateral movement). Added double-jump dodge with directional flip, directly inspired by Rocket League's dodge mechanic.
Where it all started. A Three.js scene with a box-shaped crab, a sphere for a ball, and four walls. Basic WASD movement, basic physics. Built in a single session. Ugly as sin. Immediately addictive.
Before crabs, there were cars. The original prototype that proved browser-based Rocket League is possible. Quickly abandoned once someone said "what if crabs though."
โถ Play PrototypeIsolated test modules used during development. These aren't full games โ they're tools we used to iterate on specific mechanics.