tiennm99 b8e8d3c845 build: move from pnpm to npm
Replace pnpm-lock.yaml with package-lock.json.

pnpm-workspace.yaml pinned npm only where cubejs depends on it
("cubejs>npm: ^11.14.1"). npm expresses that path scoping with a nested
override, so the pin stays scoped to cubejs instead of applying to every copy of
npm in the tree. Verified: cubejs is still the only overridden path.
2026-08-17 13:52:16 +07:00
2026-04-29 21:33:32 +07:00
2026-08-17 13:52:16 +07:00
2026-08-17 13:52:16 +07:00
2026-08-17 13:52:16 +07:00

Rubik's 3x3 — Web Simulator

Interactive 3D Rubik's cube in the browser. Three.js rendering, drag-to-rotate face gestures, keyboard notation, scramble + timer + undo.

Live: https://tiennm99.github.io/rubik/

Stack

  • Three.js (WebGL rendering)
  • Svelte 5 with runes (UI shell)
  • Tween.js (move animation)
  • Vite (build)

Dev

npm install
npm run dev       # http://localhost:8080
npm run dev:codeserver  # behind code-server proxy (set CODESERVER_HOST in .env.local)
npm run build     # → ../dist

Controls

Input Action
Drag a sticker Rotate that face
Drag empty space Orbit camera
R L U D F B M E S Quarter-turn moves
Shift + letter Inverse (prime)
x y z Cube rotations
Space Scramble
Z Undo
Esc Reset

Project Layout

src/
  main.js
  app.css
  views/             Svelte components (UI)
  lib/
    core/            Pure JS — cube state, moves, scramble, parser
    render/          Three.js scene + cubie meshes + animation
    controls/        Pointer gesture + keyboard
plans/               Implementation plans + research reports
docs/                Project documentation
vite/                Per-environment Vite configs

License

Apache-2.0

S
Description
Interactive 3x3 Rubik's cube in the browser — drag faces, scramble, timer, undo. Three.js + Svelte 5 + Vite.
Readme Apache-2.0
715 KiB
Languages
JavaScript 79.2%
Svelte 19.5%
CSS 0.7%
HTML 0.6%