❯ Developer Tools · 3D · 2025
Skela
A reusable Three.js framework for composing objects and scenes through a small class hierarchy, with zero build tooling.
The problem
Three.js gives you a full API and no opinion about how a scene is structured, so every project re-invents its own setup, its own scene graph conventions, and its own animation plumbing, and none of it travels to the next project. Skela is an attempt to write that shared structure once: a framework for composing objects and scenes through a clean class hierarchy, with no build step between the source and the browser.
The approach
A BaseObject class with a lifecycle interface, build, update, render,
and dispose, plus a perform() action dispatcher that treats position,
rotation, scale, and visibility as first-class actions. A base.jinja scene
template uses Jinja block inheritance to generate the surrounding setup:
renderer, camera, lighting, and orbit controls. A reference Human subclass
shows how a skeletal hierarchy composes with a multi-channel animation and
action system.
Architecture
- BaseObject
- perform() Dispatcher
- Human Skeleton
- base.jinja Scene
- React Three Fiber Site
FLOWS
- BaseObjectfirst-class actionsperform() Dispatcher
- Human SkeletonextendsBaseObject
- Human Skeletonchannelsperform() Dispatcher
- base.jinja ScenescaffoldsReact Three Fiber Site
- React Three Fiber SitedrivesHuman Skeleton
The framework is plain JavaScript with zero build tooling, so a scene is a folder of files the browser can load directly. The template layer, in Jinja2 served by Flask, fills in the boilerplate that would otherwise be copy-pasted per scene. The reference human demonstrates the whole model at once, and a companion Next.js site built on React Three Fiber wraps the same object model in an interactive demo: walk, run, kick, jump, wave, punch, dance, nod, bow, and spin.
Key decisions
Lifecycle as an interface, not a convention
Objects that must run declare it; the framework does not guess.
Actions through a dispatcher
Position and rotation become uniform, scriptable operations instead of scattered property writes.
Jinja for scene boilerplate
Server-side templating keeps the browser code clean and the scenes reproducible.
No build step
Lowering the barrier to try it is the point of a framework for hobby scenes.
What I'd do differently
The dispatcher and the multi-channel action system were designed separately and the seams show. I would define the action channel format first and make the dispatcher just one consumer of it.