{"id":44667086,"url":"https://github.com/jsvd/arcane","last_synced_at":"2026-03-02T01:06:14.897Z","repository":{"id":337322024,"uuid":"1153104977","full_name":"jsvd/arcane","owner":"jsvd","description":"A code-first, test-native, agent-native 2D game engine.","archived":false,"fork":false,"pushed_at":"2026-02-17T22:37:10.000Z","size":2642,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-18T04:34:57.726Z","etag":null,"topics":["2d-game-engine","ai-native","game-engine","gamedev","vibecoding"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsvd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-08T22:36:30.000Z","updated_at":"2026-02-17T22:37:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jsvd/arcane","commit_stats":null,"previous_names":["jsvd/arcane"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/jsvd/arcane","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsvd%2Farcane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsvd%2Farcane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsvd%2Farcane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsvd%2Farcane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsvd","download_url":"https://codeload.github.com/jsvd/arcane/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsvd%2Farcane/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29806149,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T22:43:48.403Z","status":"ssl_error","status_checked_at":"2026-02-24T22:43:18.536Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["2d-game-engine","ai-native","game-engine","gamedev","vibecoding"],"created_at":"2026-02-15T01:06:26.789Z","updated_at":"2026-03-02T01:06:14.881Z","avatar_url":"https://github.com/jsvd.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Arcane\n\n**A code-first, test-native, agent-native 2D game engine.**\n\nRust core for performance. TypeScript scripting for game logic — the layer AI agents write.\n\n## The Problem\n\nEvery major game engine — Godot, Unity, Unreal — was designed around one assumption: a human sitting in front of a visual editor. AI coding agents invert this. They are code-first, CLI-first, text-first. The mismatch is architectural, not just a tooling gap.\n\nArcane asks: *\"What would a game engine look like if it was built for an intelligence that thinks in text, operates at superhuman speed, but can't see?\"*\n\n## Core Principles\n\n**Code-is-the-scene.** No visual editor. No `.tscn` files. Scenes, worlds, and entities are defined in TypeScript. Code is the source of truth.\n\n**Game-is-a-database.** The entire game state is a queryable, observable, transactional data store. Not objects scattered across a scene tree.\n\n**Testing-first.** Game logic runs headless — pure TypeScript, no GPU, no window. Tests execute instantly. The engine provides performance, not correctness.\n\n**Agent-native.** A built-in protocol lets AI agents query game state, execute actions, \"see\" the game as text, and iterate at superhuman speed.\n\n## The Analogy\n\nRails for games. Rails didn't beat Java by being more powerful — it beat it by being opinionated and productive. Arcane doesn't beat Unity by being more capable. It beats Unity by being the engine an AI agent can actually use.\n\n## What It Looks Like\n\n```typescript\nimport { createGame, hud } from \"@arcane/runtime/game\";\nimport { drawSprite } from \"@arcane/runtime/rendering\";\nimport { rgb } from \"@arcane/runtime/ui\";\nimport { isActionDown, createInputMap, WASD_ARROWS } from \"@arcane/runtime/input\";\n\nconst game = createGame({ name: \"my-game\" });\nconst input = createInputMap(WASD_ARROWS);\nlet player = { x: 100, y: 100, score: 0 };\n\ngame.onFrame((ctx) =\u003e {\n  // Input — action map handles keyboard + gamepad\n  if (isActionDown(\"left\", input)) player.x -= 200 * ctx.dt;\n  if (isActionDown(\"right\", input)) player.x += 200 * ctx.dt;\n\n  // Render — sprites, shapes, text\n  drawSprite({ color: rgb(60, 180, 255), x: player.x, y: player.y, w: 32, h: 32 });\n  hud.text(`Score: ${player.score}`, 10, 10);\n});\n```\n\n```typescript\n// game.ts — pure logic, no rendering, 100% testable\nexport function takeDamage(state: GameState, amount: number): GameState {\n  return { ...state, hp: Math.max(0, state.hp - amount) };\n}\n\n// game.test.ts — runs headless, instant, no GPU\nimport { describe, it, assert } from \"@arcane/runtime/testing\";\ndescribe(\"combat\", () =\u003e {\n  it(\"damage reduces hp\", () =\u003e {\n    const result = takeDamage({ hp: 10 }, 3);\n    assert.equal(result.hp, 7);\n  });\n});\n```\n\n## Target Games\n\n2D games: RPGs, roguelikes, tactics, adventure, platformers. The sweet spot where agents can author everything except pixel art.\n\n## Target Audience\n\n- Solo devs building with AI agents\n- Game jam participants\n- Indie teams making 2D/2.5D games\n- Developers who code but aren't visual artists\n- Educational / hobbyist game dev\n\n## Quick Start\n\n```bash\ncargo install arcane-engine\narcane new my-game \u0026\u0026 cd my-game\narcane dev\n```\n\nEdit `src/visual.ts`, save, see changes in ~100ms. No restart needed.\n\n## Features\n\n**Rendering**: Sprites, shapes, tilemaps, parallax, MSDF text, post-processing (bloom, CRT), custom WGSL shaders, 2D global illumination\n\n**Animation**: Sprite sheets, state machines, transitions, blending, frame events\n\n**Physics**: Rigid bodies, circle/AABB collision, joints, raycasts, sleep system (Rust-native)\n\n**Audio**: Spatial audio, crossfade, bus mixing, pooling, pitch variation\n\n**UI**: Buttons, sliders, checkboxes, text input, focus management, nine-slice panels\n\n**Input**: Keyboard, mouse, gamepad, multi-touch, action mapping with buffering\n\n**Grids**: Cartesian, isometric, hexagonal coordinate systems with pathfinding\n\n**Procgen**: Wave Function Collapse with constraints (reachability, count, border)\n\n**Scenes**: Scene stack, transitions (fade, wipe, iris), lifecycle hooks, save/load\n\n**Testing**: Headless execution, snapshot replay, property-based testing, shrinking\n\n**Agent Protocol**: MCP server (10 tools), HTTP inspector, `describe`/`inspect` CLI\n\n## CLI Commands\n\n```bash\narcane new \u003cname\u003e        # Create project from template\narcane dev [entry.ts]    # Run with hot-reload + MCP server\narcane test              # Run all *.test.ts files\narcane check             # Type-check project\n```\n\n## 31 Demo Projects\n\nPlatformer, Roguelike, Breakout, Tower Defense, Card Battler, Sokoban, Asteroids, Physics Playground, Isometric Dungeon, Hex Strategy, and more.\n\n```bash\narcane dev demos/platformer/platformer-visual.ts\narcane dev demos/roguelike/roguelike-visual.ts\n```\n\n## For AI Agents\n\nArcane includes an MCP server that works with Claude Code, Cursor, and VS Code. Tools: `get_state`, `execute_action`, `step_frames`, `describe_game`, `run_tests`, and more.\n\nScaffolded projects include:\n- `AGENTS.md` — Full development guide with working code patterns\n- `types/*.d.ts` — Per-module API declarations with JSDoc\n\n## Status\n\n**v0.25.1** — Isometric game development improvements (camera rounding control, direction mapping), capture_frame auto-downscaling. 2380 TS (Node) + 2383 (V8) + 387 Rust tests passing.\n\n**Next:** See [roadmap](https://github.com/jsvd/arcane/blob/main/docs/roadmap.md) backlog.\n\n## Development\n\n```bash\n# Prerequisites: Rust 1.75+, Node.js 24+\n\ncargo build --release           # Build\n./scripts/run-tests.sh          # TS tests in Node\ncargo run -- test               # TS tests in V8\ncargo test --workspace          # Rust tests\ncargo check --no-default-features  # Verify headless\n```\n\n## Documentation\n\n- [Architecture](https://github.com/jsvd/arcane/blob/main/docs/architecture.md) — Two-layer design, Rust core, TypeScript runtime\n- [API Design](https://github.com/jsvd/arcane/blob/main/docs/api-design.md) — Naming conventions, error handling\n- [Glossary](https://github.com/jsvd/arcane/blob/main/docs/glossary.md) — Canonical definitions for all terms\n- [Roadmap](https://github.com/jsvd/arcane/blob/main/docs/roadmap.md) — Development plan and backlog\n- [Contributing](https://github.com/jsvd/arcane/blob/main/CONTRIBUTING.md) — How to contribute (humans and agents)\n\n## License\n\nApache 2.0 — build whatever you want, commercially or otherwise. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsvd%2Farcane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsvd%2Farcane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsvd%2Farcane/lists"}