A lightweight reactive framework built on top of PixiJS for 2D web games.
pixora solves the architectural gaps of PixiJS when building full applications:
- menus, UI systems, and responsive layouts
- reactive state driving rendering
- scene-based navigation
- event-driven gameplay
- lightweight animation orchestration
pixora is not a game engine replacement and does not compete with Unity, Godot, or Phaser. It is a structured runtime layer on top of PixiJS.
Primary use case: powering Catfé Express, a cozy cat café time-management game.
Layer 1 — PixiJS Rendering (sprites, containers, text, rendering loop)
Layer 2 — pixora Core App bootstrap, scene lifecycle, reactive state, events
Layer 3 — pixora UI Declarative component model, flex layout, interaction
Layer 4 — Game Domain Entities, gameplay rules, services (your code)
- Signals/reactive state —
signal(),computed(),effect(),createStore() - Scene system —
init → mount → activate → update → resize → deactivate → destroy - Declarative UI —
pixora.component(),pixora.container(),pixora.button(), etc. - Flex layout — CSS-like flexbox for responsive menus and HUD
- Typed events — decoupled communication between systems
- Hybrid model — declarative API for UI, imperative API for complex game logic
import { api as pixora, pixora as createApp } from 'pixora';
const menu = pixora.component((ctx) => {
return pixora.container(
{
layout: {
type: 'flex',
direction: 'vertical',
justify: 'center',
align: 'center',
gap: 16,
},
},
pixora.text({ text: 'Welcome', color: '#ffffff', size: 32 }),
pixora.button({ label: 'Start', onPointerTap: () => ctx.scenes.goTo('game') }),
);
}, 'menu');
await createApp({
scenes: [pixora.scene(menu)],
});| Document | Description |
|---|---|
| summary.md | Full architecture overview and all phases summary |
| phases-context.md | Implementation context and technical details |
| prd.md | Product intent, goals, and MVP framing |
| roadmap/phases.md | Development phases and implementation order |
| glossary.md | Shared vocabulary |
| architecture/ | System shape, module boundaries, runtime lifecycle |
docs/glossary.mddocs/architecture/overview.mddocs/architecture/module-boundaries.mddocs/architecture/runtime-lifecycle.mddocs/architecture/public-api-surface.mddocs/architecture/packaging-and-build.md
docs/adr/0001-reactive-core.mddocs/adr/0002-scene-lifecycle.mddocs/adr/0003-component-model.mddocs/adr/0004-layout-engine.mddocs/adr/0005-event-bus.mddocs/adr/0006-entity-model.mddocs/adr/0007-animation-strategy.mddocs/adr/0008-asset-strategy.mddocs/adr/0009-declarative-runtime.mddocs/adr/0010-unified-pixora-api.mddocs/adr/0011-gameplay-subtree-boundaries.md
docs/specs/app-core.mddocs/specs/scene-manager.mddocs/specs/state.mddocs/specs/events.mddocs/specs/components.mddocs/specs/layout.mddocs/specs/input.mddocs/specs/animation.mddocs/specs/assets.mddocs/specs/services.mddocs/specs/entities.mddocs/specs/example-app.md
docs/roadmap/mvp-scope.mddocs/roadmap/phases.mddocs/roadmap/backlog.mddocs/roadmap/testing-strategy.mddocs/roadmap/release-strategy.md
docs/prd.mdcaptures product intent and should change only when scope or goals change.- ADRs record decisions. If a decision changes, create a follow-up ADR instead of silently rewriting history.
- Specs describe implementation contracts. They can evolve as long as they remain consistent with the latest ADRs.
- Roadmap docs can change as work progresses, but must keep dependencies and acceptance criteria explicit.