A declarative game engine for Vue, built on top of the TresJS ecosystem — named after Alexandre Dumas, author of The Three Musketeers. The name nods to the three TresJS libraries at its core: Tres, Cientos, and TresLeches.
Deployment is currently broken. The engine depends on
@tresjs/rapier, which has not yet had a stable release. The demo site will be restored once that package ships.
Dumas wraps TresJS, Rapier physics, and bitECS into a component and composable API that feels at home in a Vue SFC. The goal is to let you write game logic the same way you write any other Vue application — declarative templates for scene structure, composables for behaviour, and reactive state as the bridge between the two.
Current feature set:
<Game>/<Scene>— root components that mount a TresJS canvas and manage named scenes with transition state- Scene switching —
loadScene()transitions between named scenes, automatically routing persistent entities to registered spawn points - ECS —
useEcsComponentattaches bitECS components to Vue entities;useSystemanduseQuerydrive per-frame logic over sets of entities - Object pooling —
usePool+<ObjectPool>pre-allocate a fixed set of entities and recycle them with zero mount/unmount overhead - Input —
useInputmaps keyboard keys and gamepad buttons to named actions, withheld,pressed, andreleasededge states per action - Physics — rigid bodies and colliders via
@tresjs/rapier(Rapier under the hood); dynamic objects, fixed ground planes, and automatic collider generation
@dumas/core— the engine: ECS, input, pooling, scene management, and physics bindings, all exposed as Vue composables and components
website— interactive guide and demo site covering each feature with live examples and annotated source
# Check formatting, lint, and types
vp check
# Run tests
vp test
# Start the dev server
vp run dev
# Build everything
vp run build -r