A keyboard-first, offline-first cube timer for serious speedcubers. Cleaner than CSTimer, focused on precision and flow.
Main Screen |
Inspection Time |
Solving Time |
Result |
Built by cubers, for cubers. No accounts, no cloud sync, no ads. Just timing.
- High-precision timing using
performance.now()for microsecond accuracy - CSTimer-style spacebar interaction: hold to ready, release to start, press to stop
- WCA inspection support: configurable 15-second countdown with +2/DNF penalties
- Visual state feedback: clear color changes for idle, inspection, running, and stopped states
- All WCA events supported: 2×2 through 7×7, Pyraminx, Skewb, Square-1, Clock, Megaminx
- Seeded random-state scrambles for reproducibility
- Extensible architecture for adding non-WCA puzzles
- Rolling averages: Mo3, Ao5, Ao12, Ao50, Ao100, Ao1000
- Best, worst, and session mean
- MoXAo5: Configurable mean-of-X average-of-5
- Personal best detection and highlighting
- Configurable split phases: define your own method phases
- Presets for popular methods: CFOP, Roux, ZZ, Petrus
- Real-time split marking during solves
- Post-solve breakdown with per-phase durations and percentages
- Offline-first: all data stored locally via IndexedDB or localStorage
- CSTimer import support (.txt exports only)
- Session-based solve organization
- No network calls, no cloud sync, no accounts
| Key | Action |
|---|---|
Space (hold) |
Ready timer |
Space (release) |
Start timer or inspection |
Space (during solve) |
Stop timer |
| Key | Action |
|---|---|
↑ / K |
Navigate up in solve list |
↓ / J |
Navigate down in solve list |
2 |
Toggle +2 penalty |
D |
Toggle DNF penalty |
0 |
Clear penalty |
Enter |
Select solve |
Del / Backspace |
Delete selected solve |
| Key | Action |
|---|---|
R |
Generate new scramble |
I |
Toggle inspection |
T |
Toggle training mode |
E |
Edit split phases (training mode) |
F |
Toggle fullscreen |
Esc |
Exit fullscreen or close modal |
- Node.js 18+
- npm or yarn
git clone https://github.com/yourusername/kubetimr.git
cd kubetimr
npm install
npm run devnpm run build
npm run previewsrc/
├── types.ts # Core domain types
├── rng.ts # Deterministic PRNG for scrambles
├── timingEngine.ts # High-res timing state machine
├── scrambleEngine.ts # Scramble generation for all events
├── statsEngine.ts # Statistics computation
├── splits.ts # Training split utilities
├── persistence.ts # IndexedDB/localStorage adapter
├── main.tsx # React entry point
└── ui/
├── App.tsx # Main application component
├── AppContext.tsx # Global state management
├── hooks/
│ └── useTimer.ts
└── components/
├── TimerDisplay.tsx
├── ScrambleDisplay.tsx
├── StatsPanel.tsx
├── SolveList.tsx
├── Settings.tsx
├── SplitEditor.tsx
├── SplitMarkers.tsx
└── SplitBreakdown.tsx
- Keyboard-first: Everything usable without a mouse.
- Zero friction: No modals, no onboarding, no interruptions.
- Instant feel: Optimized for low-end devices.
- Privacy by default: No accounts, no tracking, no network calls.
MIT License — see LICENSE for details.



