Growing up in Hong Kong, my friends and I were obsessed with ็ๆ้่บ โ Beyblade-style spinning tops. You'd build your top, rip the launcher, and scream while two hunks of plastic and metal smashed each other around a stadium.
Then I moved to Singaporeโฆ and couldn't find enough friends to battle with. ๐
So I built my own. Spin Clash is a browser game where you assemble a top, pick an arena, nail the ripcord launch, and watch a full 3D physics brawl play out โ complete with a roaring crowd, sweeping spotlights, sparks, lightning, and tops getting flung out of the ring.
Made for fun. Now I can battle anytime. XD
โถ๏ธ Play it here โ
(Works on desktop and mobile โ any WebGL2 browser (Chrome / Edge / Firefox / Safari). Tap once to enable sound. Plays great in portrait on phones. ๐ฑ)
| Title screen โ inside a packed stadium | Garage โ build your top, watch the radar |
![]() |
![]() |
| Launch โ stop the bar in the green zone | Battle โ 3D clash, your top is marked ๆๆน |
![]() |
![]() |
A three-minute, build-deep spinning-top battler. You don't pilot the top during the fight โ the drama comes from three layers of decisions before the whistle, then a deterministic physics sim plays out your choices:
- ๐ง Garage โ slot 4 parts (attack ring / driver / weight disc / core chip). Every swap re-shapes your six-stat radar and re-skins that part of the 3D top.
- ๐๏ธ Arena โ your opponent's style is revealed; pick a stadium that counters it.
- ๐ฏ Launch โ choose a technique, then stop the ripcord bar in the green Perfect zone for an opening boost.
- โ๏ธ Battle โ sit back and watch. The combat log explains why every hit landed, and your top is always tagged ๆๆน (green) so you never lose track of it.
Each top has six attributes. There's no "max everything" build โ every part is a trade-off (a top totals ~150 points).
| Stat | What it does | |
|---|---|---|
| ๆปๆ ATK | Attack | Base damage per collision |
| ้ฒ็ฆฆ DEF | Defense | Reduces incoming damage (diminishing โ never zero) |
| ้ๅบฆ SPD | Speed | More collisions + dodgingโฆ but burns stamina faster |
| ้้ WGT | Weight | Bigger stamina pool, resists knockback & ring-out, low drain |
| ็็ผ BST | Burst | Crit chance and crit damage |
| ่ป่ทก TRJ | Trajectory | Dodging and positioning |
When a top runs out of stamina (็บ่ช), it stops spinning โ that's a ๆๅ loss.
The counter triangle (็ธๅ) โ this is the heart of it. Each top has a dominant stat among Speed / Weight / Trajectory:
้ SPD โโbeatsโโโถ ่ป TRJ
โฒ โ
โ beats beats โ
โ โผ
้ WGT โโโbeatsโโ ่ป TRJ
้ๅ่ป (speed beats trajectory) ยท ่ปๅ้ (trajectory beats weight) ยท ้ๅ้ (weight beats speed)
Win the matchup and your hits do ร1.14; lose it and they do ร0.88. So a heavy tank shreds a glass-cannon speedster โ unless that speedster dodges enough to survive.
Other levers:
- ็ธ็ (Synergy) โ stack a pair of stats high on the same top and you get bonus stats. A balanced 25/25/25 top is the neutral baseline; specialists snowball.
- ๅฅ่ฃ (Sets) โ match 2 or 4 parts of a set for effects: ็็ฐ (attack/burn), ็ฃ็ณ (defense/counter), ็พ้ขจ (speed/dodge cyclone), ๆททๆฒ (burst/true-damage).
- Arenas โ ๆจๆบ (neutral) ยท ๆทฑ็ Abyss (forces attrition, almost no ring-outs) ยท ้ๅฐ Tempest (high friction + easy ring-outs โ great for flinging tanks out). A โ marks the recommended counter to your opponent.
- ๆฌๆฎบ็ท (Execution line) โ a top can only be ๅฝ้ฃ (rung out) or ่งฃ้ซ (burst apart) once it drops below 20% stamina (the white notch on the HP bar). Above the line it can only be ground down to a ๆๅ.
Four ways to win: ๆๅ (spin-out, 1pt) ยท ๅฝ้ฃ (ring-out, 2pt) ยท ่งฃ้ซ (burst, 2pt) ยท ๅคๅฎ (decision at the 60s timer, 1pt).
No server, no sign-up โ just a link. After any battle, hit ๅฅฝๅๅฐๆฐ ๐ on the results screen, type your name, and Spin Clash encodes your current top into a share URL. Send it to a friend: they open the link, see your top as the incoming challenger (ๆถๅฐๆๆฐ), and build their own to fight back. The whole challenge rides in the link, so it works on any device.
npm install
npm run dev # http://localhost:5188Build a static bundle: npm run build โ dist/ (deploys anywhere).
Pure Three.js (WebGL2) + vanilla JS + Vite โ no game engine. The tops, arenas, crowd, and all the VFX are procedural (generated in code), and the battle runs on a deterministic 60Hz physics sim that's decoupled from rendering. All sound effects are synthesized with the Web Audio API. Built by me, for fun. ๐
Background music by Kevin MacLeod (incompetech.com):
- Ryno's Theme (menus) ยท Crossing the Chasm (garage/arena) ยท Volatile Reaction (battle)
- Licensed under Creative Commons: By Attribution 4.0 โ http://creativecommons.org/licenses/by/4.0/
Inspired by Beyblade. Not affiliated with or endorsed by any spinning-top brand.



