The depths are alive, and they're coming for you. From the center of a shifting geometric arena, waves of enemies erupt outward, closing in with brutal speed. As the lone defender circling the rim, every second counts — track their movement, line up the shot, and cut them down before they break through. Survive one wave, and the arena reshapes itself, sharper and faster, daring you to keep up.
Arctron is a modern vector arcade shooter forged from the intensity and simplicity of classic coin-op games. Master the rhythm of movement and fire, carve out your score through precision under pressure, and hold the line against an assault that never stops climbing. Built with Tauri 2, React/TypeScript, and a high-performance Rust/WASM engine, Arctron delivers relentless arcade action to Android, Linux, Windows, macOS, and the Web.
- How to play
- Enemies
- Power-ups
- Scoring & tactics
- Game modes
- Achievements
- Building from source
- Downloads
- Project layout
- Documentation
Enemies climb out of the tube's center along its lanes. Shoot them before they reach the rim — let too many through and you lose a life. Clear a level's kill quota to advance to the next (reshaped) tube.
Keyboard
| Action | Key |
|---|---|
| Move | ◀ ▶ or A / D |
| Fire | Space |
| Zap (screen-clear bomb) | Shift |
| Pause | P or Esc |
Touch
| Action | Control |
|---|---|
| Move | Trace an arc around the jog wheel |
| Fire | Target-icon button |
| Zap | ZAP button |
Navigation
The start screen has three buttons: SETTINGS (difficulty, Daily Challenge, sound), ACHIEVEMENTS, and HELP. Tap or press fire anywhere else on the start screen to launch a run.
Pausing mid-run (P/Esc, or the header's pause icon) opens RESUME / MENU / QUIT, plus SETTINGS / ACHIEVEMENTS / HELP — reachable mid-run this way, not just from the start screen. MENU abandons the current run back to the start screen, QUIT closes the app (native builds only; a browser tab has no window for the app to close). On desktop, Settings and Help are also one click away directly from the header. On Android, the hardware/gesture back button follows the same hierarchy automatically: it closes whichever menu is open, then pauses an active run, then quits to the start screen, then exits the app.
Every level's tube is one of 12 shapes (circle, box, star, diamond, spike, triangle, hexagon, cross, gear, figure-eight, plus two extra-wide shapes reserved for landscape/desktop), cycling as you clear levels.
Rare drops from direct kills (not zap kills). Double Fire and Bonus Zap are the most common; Score Surge less so; Shield uncommon; Extra Life rarest of all.
- Combo multiplier — chaining kills within ~2.5 seconds builds a streak; every 3 kills steps the multiplier up, capping at x5. Taking damage resets it. Zap kills don't build or break a combo.
- Zap bank bonus — zap clears every enemy on screen instantly but is limited per level; any zaps left unused when you clear a level convert to bonus points instead of being discarded.
- Energy / Shield — landing direct-fire kills (zap kills don't count) fills an Energy meter; once full, you bank one shield charge that absorbs your next hit instead of costing a life. Energy survives idle periods, but resets if you take a hit with no charge banked.
- Difficulty changes enemy speed, spawn pacing, starting lives, and zap allotment (see below) — enemy composition itself doesn't change.
| Difficulty | Speed | Lives | Zaps/level |
|---|---|---|---|
| Casual | slower | 4 | 3 |
| Classic | standard | 3 | 2 |
| Insane | faster | 2 | 1 |
Daily Challenge seeds every player with the same run for the day (always at Classic tuning), so scores are directly comparable — pick it from Settings.
12 local, on-device milestones (no account or network needed) covering first kills, depth of run, combo mastery, clearing a level unscathed or without spending a zap, destroying Wardens, collecting power-ups, high score thresholds, Insane-difficulty survival, and Daily Challenge streaks. Open ACHIEVEMENTS from the start screen to see the full list — locked entries stay hidden until unlocked.
- Node.js 20+ and npm
- Rust (stable) via rustup, with the
wasm32-unknown-unknowntarget:rustup target add wasm32-unknown-unknown
wasm-pack:cargo install wasm-pack- Tauri prerequisites for your OS (system webview libraries on Linux, etc.)
- For an Android build specifically: Android Studio/SDK, an NDK, and
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
npm installRecommended IDE setup: VS Code + Tauri + rust-analyzer.
npm run tauri devnpm run tauri buildBundles land under src-tauri/target/release/bundle/.
npx tauri android init # first time only, sets up gen/android
npx tauri android build --target aarch64Produces an APK/AAB under src-tauri/gen/android/app/build/outputs/. Install a debug build to a
connected device with:
npx tauri android dev # live-reload build + install, or:
adb install -r src-tauri/gen/android/app/build/outputs/apk/universal/debug/app-universal-debug.apknpm run build # outputs to dist/
npm run preview # serve the production build locallydist/ is a self-contained, installable PWA — deploy it to any static host.
Web (PWA): chipcreates.github.io/arctron — no
install required, playable directly, and installable as a PWA from the browser's own install
prompt. Auto-deployed from main via
.github/workflows/pages.yml.
Native builds: Latest release —
Linux (.deb/.rpm/AppImage), Windows (NSIS .exe/MSI), macOS (universal .dmg), and Android
(.apk/.aab). Cut via .github/workflows/release.yml on
every v* tag push. The Android build is signed with the maintainer's release key; Windows/
macOS/Linux builds are unsigned, so expect an OS security prompt (SmartScreen, Gatekeeper, etc.)
on first launch.
CI also builds every push to main per-platform as a downloadable workflow artifact (not
attached to a Release) — see the Actions tab
for the latest in-progress build.
engine/— the Rust game engine (tube.rs/entities.rs/game.rs/rng.rsare plain, natively-testable Rust;lib.rsis the only wasm-bindgen boundary).cargo testfrom insideengine/runs the full unit-test suite.src/— the React/TypeScript frontend: canvas rendering, HUD/overlays, input, and the platform abstraction (storage/haptics/app-control) that splits Tauri-native vs. web behavior.src-tauri/— the Tauri shell (desktop + Android).vortex.html— the original single-file prototype this port is built from.PLAN.md/AGENTS.md— implementation plan and contributor/agent guidelines.documents/— the full architecture/stack/data-flow documentation system (see below).
In-depth architecture, software stack, and data-flow documentation lives in
documents/, organized with the Johnny Decimal system.
Start at
00.01 Start Here — it's the master
index linking to every document, including the system's high-level architecture diagram, the
Rust engine's state machine and entity model, the full runtime/persistence data flows, and
per-platform build notes.
MIT — see LICENSE.


