MetaHuman Engine contributor guide.
Keep the repository small, truthful, and maintainable. Prefer deleting stale code, tooling, and docs over adding new abstraction.
| Layer | Technology |
|---|---|
| UI | React 19 + TypeScript 5 |
| Build | Vite 6 |
| 3D | Three.js + React Three Fiber + Drei |
| State | Zustand 5 |
| Style | Tailwind CSS 4 |
| Test | Vitest + Testing Library |
src/
├── pages/ Route-level pages
├── components/ UI and landing page components
├── hooks/ UI-side orchestration hooks
├── core/ Runtime services, no React imports
├── store/ Zustand stores
└── lib/ Shared helpers
- Use
@/*path aliases. core/must not import React.- Services read and write Zustand through
useXStore.getState(). - Every external integration needs an explicit fallback path.
- When simplifying, prefer removal and consolidation over new wrappers.
- Record project history only in the root
CHANGELOG.md.
| File | Responsibility |
|---|---|
src/core/avatar/DigitalHumanEngine.ts |
Avatar control facade |
src/core/dialogue/dialogueService.ts |
HTTP dialogue client with fallback |
src/core/dialogue/chatTransport.ts |
HTTP / SSE / WebSocket transport selection |
src/core/dialogue/dialogueOrchestrator.ts |
Turn ownership and request lifecycle |
src/core/audio/audioService.ts |
TTS / ASR services |
src/store/digitalHumanStore.ts |
Avatar runtime state |
src/components/viewer/DigitalHumanViewer.tsx |
Main 3D viewport |
npm run dev
npm run typecheck
npm run lint
npm run test:run
npm run build
npm run build:pages- Do not create new branches for routine work; stay on
master. - Do not add runtime dependencies without discussion.
- Do not reintroduce workflow-driving AI framework files or generated skill systems.
- Do not document Docker, Render, CLI scaffolds, or templates unless the repository actually ships them.
- Keep GitHub Pages focused on product and docs, not changelog browsing.