Light by default. Loaded when you need it.
Meep ships as ~6,000 fine-grained ES modules. Import a lerp function and pay for a lerp function. Import the renderer, the particle system, the navmesh, the path tracer, and the AI toolkit and you'll still ship a smaller engine than most of the alternatives - because every module tree-shakes to exactly what you reference.
What follows is a catalog of 184+ named features spanning rendering, ECS, AI, procgen, UI, persistence, networking, and the engine services that come along for the ride. Use the index on the left to jump.
ECS & Scene Architecture
10 featuresA strict, data-oriented foundation. One component per type per entity. Predictable memory, O(1) cached queries, hierarchy and scene-graph composition without giving up flat-array speed.
- Pure ECS coreEntityManager + EntityComponentDataset with strict one-component-per-type discipline, observers, and lifecycle signals.
- High-level Entity builderChainable Entity.add().build(dataset) construction that hides low-level dataset calls when you don't need them.
- Entity hierarchyParent/child links that propagate transforms and cleanup down trees, on top of the flat ECS storage.
- System schedulingAutomatic execution order derived from each system's declared component dependencies and access kinds.
- Component queriesCached, incremental queries by component shape - querying a million matches costs the same per-iteration as a hundred.
- Bone attachment socketsType-aware attachment points for connecting props, weapons, and accessories to skeletal rigs at runtime.
- Dynamic rule engineAuthor conditional rules with cooldowns, predicates, and blackboard state that fire entity actions.
- Entity fitness evaluationPoint-based fitness functions over entity configurations for procedural placement and optimization.
- Multi-scene architectureIndependent scenes with isolated entity datasets, transitions, and full serialization.
- Entity reference safetyStable entity references that survive generation rollover, save/load, and scene transitions.
Rendering Pipeline
17 featuresShade: a GPU-driven, visibility-buffer deferred renderer on WebGPU, built into the engine. Meshlet-clustered geometry, GPU culling, froxel-binned deferred lights, temporal resolve and upscaling - and a declared extension point where your own passes go.
- GPU-driven renderingGeometry is clustered into meshlets ahead of time and lives GPU-resident in one buffer; culling runs on the GPU and draws are indirect. What is drawn, and in what order, is the renderer's decision rather than a draw call you issue.
- Visibility-buffer deferred shadingThe rasterizer writes a visibility buffer and a G-buffer instead of shading as it draws, so shading cost follows pixels on screen rather than triangles submitted.
- Clustered (froxel) lightingThousands of point and spot lights binned into view froxels on the GPU each frame and applied deferred. Nothing to size or register - the clustering is internal.
- ReSTIR direct lightingReservoir spatiotemporal importance resampling for many-light scenes, replacing the froxel loop in the deferred pass when it is enabled.
- ShadowsCascaded shadow maps for the sun and an atlas for local lights, with a resolution policy that spends the atlas where it shows.
- Order-independent transparencyTransparent surfaces composite without a per-frame CPU sort, on top of the deferred opaque pass.
- Virtual geometryStream .vgeo meshlet hierarchies with GPU detail selection, RAM/VRAM page budgets and renderer integration; explicit runtime and feedback setup.
- Virtual texturingStreamed page tables per material via GPU feedback; albedo, normal and ORM come from streamed pages instead of whole textures.
- GPU-driven decalsFrustum-culled and cluster-assigned on the GPU, composited against the G-buffer out of a shared atlas. Capacity grows with the record buffer rather than sitting behind a fixed cap.
- Outline & highlight renderingPer-object outlines resolved as a neighbourhood test on the visibility buffer, with configurable thickness.
- GPU animation & skinningSkins and clips registered once and evaluated on the GPU, with the CPU keeping the clock so gameplay reads the pose that is on screen.
- Render extensionsYour own passes declare a frame phase and an ordering against other extensions, and exchange typed records with the frame - no patching of the pipeline, and work nothing consumes is elided by the frame graph.
- Dynamic meshesA separate path for content whose vertices change every frame - trails, ribbons, debug lines - drawn without paying for a meshlet build.
- Async batched pickingPicking queries are batched and answered off the GPU-driven scene index. There is no synchronous pick, by design.
- Render to textureThe canvas is one target among others: render a frame into a texture you own, for thumbnails, previews and image-based tests.
- Camera shakeTrauma-based procedural camera shake driven by impact events.
- Distance field generationSigned and unsigned distance fields baked from geometry, for UI, effects, and procgen.
Frame Quality & Post-processing
10 featuresThe image half of the renderer: temporal resolve, upscaling, and a post chain that is part of the frame rather than a stack you assemble.
- TAAVariance-clip temporal anti-aliasing in YCoCg with a Blackman-Harris resolve, doubling as the upscale stage.
- Neural super samplingA kernel-prediction network upscaler shipped with trained weights, selectable in place of TAA.
- Dynamic resolution scalingInternal resolution driven from measured frame time, with warmup, probing and hysteresis rather than a hard switch.
- Ground-truth ambient occlusionGTAO with bent normals and optional diffuse indirect, denoised and reprojected. On by default.
- Screen-space reflectionsTrace, prefilter, reproject, denoise and combine, for surfaces the environment probe cannot describe.
- Depth of fieldTwo implementations - a ray-marched aperture model and a gather-based cinematic one - sharing autofocus, aperture shape and presets.
- Motion blurTile-max and neighbour-max reconstruction from the per-object velocity buffer.
- Bloom & automatic exposureA Karis-average bloom chain that also feeds histogram-based auto-exposure with temporal adaptation.
- Contrast-adaptive sharpeningRCAS sharpening after the upscale, so an upscaled frame does not read soft.
- GPU path tracingAn accumulating path tracer inside the renderer for reference images, alongside the pure-JS CPU tracer that runs off the engine's own BVH.
Global Illumination & Sky
7 featuresIndirect light on the web, on commodity hardware: an image-based default, a baked volumetric lightmap for scenes that want bounce, and a propagation volume that updates every frame.
- Image-based indirect lightingThe environment map is both the background and the ambient term, sampled for diffuse and specular indirect. A scene without one renders unlit, so one is installed by default.
- Brick4 volumetric lightmapA sparse volumetric lightmap baked from the scene and carried at runtime by a component, for bounce light that survives moving cameras and dynamic objects.
- Light propagation volumesProgressive per-frame GPU probe propagation for coarse dynamic bounce.
- Volumetric fog & participating mediaFog, smoke, dust and cloud volumes posed as entities and composited with the lit frame, parameterised by scattering rather than by a colour and a density slider.
- Hosek physically-based skyHosek-Wilkie analytic sky rendered on the CPU into an environment map you assign to the scene.
- Environment loadingCube folders and equirectangular sources converted to the octahedral projection the renderer samples, with no separate prefilter step.
- Pure-JS path tracerMonte-Carlo path tracer with Russian-roulette termination, material sampling, and BVH acceleration - runs entirely in JS for offline reference renders.
Particles & VFX
8 featuresGPU particle simulations authored as node graphs, carried by ParticleEffect components and composited through Shade, plus decals, outlines and trails.
- Particle graph authoringExplicit particle state with INIT and UPDATE graphs for spawning, movement, lifetime, colour and size curves. Graphs compile to reusable simulation bytecode.
- GPU particlesParticleEffect ECS components drive GPU spawning and simulation, with serialization, prewarming, measured bounds, shared texture atlases and order-independent transparency.
- Particle forcesCompose acceleration, drag, noise and custom state in simulation graphs for organic motion.
- Soft particlesDepth-aware particle blending that avoids hard intersections with scene geometry.
- Automatic atlassingParticle textures packed into atlases automatically to keep batches tight.
- TrailsTube trails extruded behind moving entities, rewritten every frame, with age, width, spawn mode and colour driven from the component.
- Highlight outlinesPer-object outline rendering with configurable colour and thickness, resolved against the visibility buffer.
- Decal projectionProjected surface overrides for persistent detail - battle damage, footprints, environmental marks - with separate albedo, normal, ORM and emissive channels.
Animation, Rigging & IK
9 featuresState-machine animation graphs with N-D blend spaces, humanoid skeletons, and multiple IK solvers - FABRIK for arbitrary chains, two-bone for limbs, surface alignment for foot placement on terrain.
- Animation state machinesMulti-state animation controllers with transition conditions, layering, and per-bone masking.
- Blend spacesN-dimensional parameter interpolation for smooth motion blending - locomotion, aim poses, mood.
- Animation clip eventsFrame-synced event firing from animation clips for foot plants, sound triggers, gameplay hooks.
- Humanoid skeleton mappingStandard humanoid bone taxonomy for retargeting and IK-ready rig setup.
- FABRIK inverse kinematicsIterative IK solver for arbitrary chain lengths - bipeds, quadrupeds, tentacles, tails.
- Two-bone IKClosed-form solver for arm and leg chains with pole-target control.
- Surface-alignment IKOne-bone surface-snap solver for foot placement and contact alignment on uneven terrain.
- GPU skinningSkins and animation clips registered with the renderer and evaluated on the GPU, with per-entity instances of one loaded model.
- Clip optimizationRedundant keyframes removed from a loaded clip before it is registered, so a long animation costs what it needs to.
Terrain, Water & Sky
5 featuresA complete world layer - tile-based heightfield terrain with worker-thread LOD, splat-mapped materials, water with shore transitions, and procedurally-driven cloud shadows.
- Tile-based terrainChunked heightfield terrain with auto-culling, worker-thread LOD generation, and seamless tile transitions.
- Multi-layer splat mappingSplatmap-driven material blending across many terrain layers - bounded by the device's texture-array depth rather than by an engine constant.
- Terrain overlaysDynamic overlay rendering for fog of war, area markers, build placement previews.
- Cling-to-terrainComponent that snaps and aligns objects to the heightfield automatically.
- Water renderingWave simulation, depth-based fog, shore transitions, and light scattering through the water column.
Graphics Tooling
5 featuresWhat you reach for when the picture is wrong or the frame is slow: a GPU capture format, a software device that runs shaders' validation without a GPU, and an editor that attaches to a running game.
- GPU profile captureHand the renderer a profile session and it writes a self-framed capture of pass timings, frame-graph structure, dispatch and draw counts. The writer and the reader both ship, and the container is specified.
- Software WebGPU deviceA validating software device and a WGSL interpreter, so your own pipelines and bindings can be exercised in tests on a machine with no GPU.
- In-app editorOpt-in editor that attaches to a running engine and detaches again: entity inspection, gizmo tools, particle authoring, docked panels and layout persistence.
- Model thumbnailsRender a loaded model to an off-screen target with a fixed framing and light rig, for inventory icons and asset browsers.
- Debug drawingGizmo primitives drawn through the renderer for physics shapes, paths, bounds and one-off diagnostics.
AI & Decision Making
9 featuresIndustry-standard AI primitives rare in JS engines - behavior trees with full composite/decorator/event toolkit, blackboards, MCTS, and a resource-allocation solver for strategic planning.
- Behavior treesComposite, decorator, selector, and primitive nodes with the full toolkit for hierarchical agent AI.
- BlackboardsShared context storage with signal dispatchers for inter-node and inter-agent communication.
- Monte-Carlo Tree SearchAlphaGo-family planner for turn-based decisions and game-theoretic optimization.
- Resource allocation solverStrategic multi-bid solver that distributes limited resources (ammo, health, currency, time) optimally across competing demands.
- State graphs / FSMDeclarative finite-state machines with signal-driven transitions, suitable for actor controllers.
- Weighted random selectorsProbabilistic behavior selection with weighted choice for non-deterministic agent variety.
- Event-driven behaviorsSend/wait/kill event behaviors for cross-agent communication within behavior trees.
- Promise-based behaviorsAsync task wrappers for long-running AI operations - loading, network calls, animated sequences.
- Behavior serializationFull save/load adapters for in-flight behavior trees, including pending states and timers.
Procedural Generation
9 featuresA composable marker-and-rule procedural pipeline for grid-based worlds, with 25+ cell filters and a theme system that bundles biomes end-to-end.
- Marker-based generationRule-and-marker composable pipeline - emit markers, match patterns, transform the grid.
- Cellular automataNeighbor-sum rules for cave generation, smoothing, and emergent terrain patterns.
- Multi-layer grid generationStack-of-layers generator with per-layer rules and cross-layer matchers.
- Theme systemBundled biome definitions - terrain layers, marker rules, transformation rules - applied as one unit.
- Cell filters25+ filters: dilate, erode, blur, gradients, Sobel edges, step/lerp/saturate, Gaussian, lookup tables.
- Distance fieldsUnsigned distance fields over grid cells for obstacle-aware placement and falloff.
- Pattern matchersLocal neighborhood pattern detection with arbitrary mask shapes and rotational variants.
- Predicate combinatorsAND/OR/NOT/any/none predicates over markers and cell data for expressive rules.
- Weighted random placementProbability-driven action selection over candidate cells with weight functions.
Math, Geometry & Spatial Queries
14 featuresThe foundations every engine needs done right - a memory-tight BVH, robust geometric predicates, splines, noise, and a color toolkit that includes modern perceptually-uniform spaces.
- Bounding Volume HierarchyMemory-optimized BVH at 40 bytes/node with SAH layout for ray, AABB, sphere, and frustum queries.
- Incremental BVH updatesDynamic-scene BVH maintenance via Morton-code reordering without full rebuild.
- Ray intersection suiteRay-triangle, ray-sphere, ray-AABB intersection with barycentric output for bulk queries.
- Frustum classificationInside/intersect/outside frustum-AABB tests for LOD culling and streaming decisions.
- Catmull-Rom splinesUniform and non-uniform splines with derivative computation for camera paths and smooth motion.
- Simplex & curl noise2D and 3D simplex noise plus 3D+time curl noise for organic motion and procedural detail.
- Robust geometric predicatesOrient3D, in-sphere, barycentric tests with adaptive precision for reliable mesh operations.
- Delaunay tetrahedralizationCavity-based 3D point-cloud triangulation for volumetric meshing.
- Winged-edge topologyManifold mesh data structure for editing, traversal, and validation.
- Vector / matrix / quaternionComplete linear algebra with in-place math operations to avoid allocations in hot loops.
- Eigenvalue decompositionSpectral analysis for mesh quality assessment and graph partitioning.
- Graph algorithmsGreedy/MCS coloring, Laplacian/adjacency matrices, K-means, METIS partitioning, multigraph coarsening.
- Hemioct normal encodingOctahedron-mapped unit-vector compression to 2 bytes for tight G-buffers and vertex streams.
- RGBE9995 HDRCompact high-dynamic-range colour encoding for linear-space rendering.
Color Management
6 featuresA scientific-grade color toolkit - perceptually-uniform spaces, gamut mapping, color temperature, CMFs - that takes color seriously where most engines wave their hands.
- OKLab / OkhsvPerceptually-uniform color spaces for accurate gradients and color blending - handles hue/lightness without the kinks of HSL.
- Gamut mappingMax-saturation computation and gamut intersection for safe color transitions in OKLab and Okhsv.
- Color temperaturePlanckian-radiance Kelvin conversion with D65 spectral power distribution.
- Color matching functionsTabulated CIE colour-matching functions for spectral-to-tristimulus conversions.
- sRGB / linear conversionsStandards-compliant gamma conversions with both fast and high-precision paths.
- YCbCr encodingCompact color storage for compression pipelines.
Audio
7 featuresAn event-driven audio engine over Web Audio - authorable sound events, a mixer bus tree with effects, live parameters, snapshots, and spatial 3D that scales to ~100k registered emitters - driven through ECS with one component and one system.
- Event-driven playbackSound events are plain, serializable engine data: a clip graph plus routing, 3D, and voice configuration - owned by an AudioEmitter component, no global sound bank.
- Clip containersSequence, weighted-random (with avoid-repeat), parameter-driven switch, and parameter-blended layering - composed into trees, resolved at trigger time.
- Mixer bus tree with effects & sendsHierarchical buses with EQ, compressor, and procedural-IR reverb inserts, plus post-fader aux sends for shared reverbs.
- Live parametersNamed runtime values drive clip selection and bus-volume automation through curves - surface-aware footsteps, tension-driven music.
- Snapshots & duckingNamed mix states applied as click-safe ramps, and play-state ducking rules - dialogue over music, impacts over ambience.
- Spatial 3D at scaleHRTF or equal-power panning with curve-driven attenuation and voice virtualization; a live/dormant budget lets a scene register ~100,000 positional emitters while only the audible few cost anything.
- Deterministic playbackRandom selection and per-trigger randomization run on seeded RNG - networked clients resolve identical audio under lockstep.
Input & Controls
6 featuresA unified input abstraction across mouse, touch, pointer, and keyboard, with event-driven and query-based APIs and stateful controller contexts - up to a complete first-person character controller.
- First-person character controllerA kinematic-capsule mover with procedural camera feel - gait-driven head bob, exertion-scaled breathing, jump anticipation, landing recovery, coyote time, variable jump height - and an opt-in parkour ability set (slide, mantle, wall-run, wall-jump, ledge-grab) over a shared sensor layer. Driven by an input-agnostic intent surface; publishes read-only state, signals, and pose channels for HUDs, audio, and rigs.
- Unified input devicesSingle API across mouse, touch, pointer, keyboard and gamepad, with device-switch detection.
- Input maps & bindingsActions bound to keys, buttons, chords, sequences and holds, arranged in layers within a map and arbitrated between maps by order and occlusion.
- Control context state machinesStateful controllers that own input state and orchestrate transitions cleanly.
- Locational interactionPer-event position and hit-test context for UI and worldspace interactions.
- Cursor type controlProgrammatic cursor changes driven by interaction state.
UI Toolkit
13 featuresA complete in-house UI system - zero-garbage, GPU-friendly - covering everything from tooltips and currency displays to radial menus and virtual lists. Optional: swap in React, Vue, or your own if you prefer.
- Radial menuDonut-ring contextual menus with weighted item layout and focus highlighting.
- Tooltip GML parserGame Markup Language for rich-text tooltips with style tokens, references, and embedded values.
- Currency display systemMulti-denomination coin/currency rendering with sorted value hierarchies and animated transitions.
- Segmented resource barsMulti-segment progress bars for stacked resources like health pips or ammo clips.
- Radial progressCircular progress indicators with smooth animations.
- GUI controlsAdaptive input controls - numeric, vector, vector3, dropdown, checkbox, color picker - bound to game state.
- Drag and dropDrag-and-drop with target/source abstractions and visual feedback.
- Virtual list viewViewport-recycling scrolling for large data sets without DOM bloat.
- Modal dialogsBuilt-in modals with confirmation patterns and accessible dismissal.
- Toast notificationsTransient notification queue with achievement-style pop-ups and log views.
- Tab navigationViewStack for hierarchical view management and breadcrumbed navigation.
- MinimapCanvas2D minimap composited from data the CPU already owns - terrain image cache, markers, camera frustum and the renderer's own fog-of-war mask.
- Model & canvas preview widgetsOff-screen model thumbnails and canvas previews for inventory icons and inspectors.
Persistence
5 featuresProduction-grade save/load - binary serialization with versioned migration, IndexedDB or in-memory backends, transient marking, and entity refs that survive transitions.
- Binary serializationCompact, fast binary save format for entities and components.
- Versioned format migrationPer-component upgrader chains automatically migrate save files across engine versions.
- Storage backendsIndexedDB, in-memory, and pluggable backends for browser and embedded scenarios.
- Transient entity markingFlag entities and components to skip serialization - for runtime-only effects, debug spawns, or session state.
- Entity referencesReferences that remain valid across save/load and scene transitions.
Networking
6 featuresDeterministic action replication for true client-side prediction. Server-authoritative or peer-to-peer. Built for multi-client games without bolting a netcode library on top.
- Action replicationForward action logs between peers with scope filtering; receivers re-execute actions locally for client-side prediction.
- Server-authoritative modeServer-driven sessions with role-based state management and authoritative simulation.
- Peer-to-peer modeSymmetric peer-to-peer sessions for cooperative play without a central server.
- Entity scope filteringReplicate only entities relevant to each peer based on ownership or spatial proximity.
- Interpolation & time-syncAdaptive render delay and time dilation to smooth network latency and jitter.
- Network identity & ownershipPer-entity ownership and network identifiers for multi-peer synchronization.
Engine Services
15 featuresThe supporting cast every shipping game needs - asset pipeline, plugins, options, achievements, localization, metrics, and a live performance dashboard.
- Priority-based asset loadingAsync asset pipeline with configurable concurrency and priority queueing.
- Asset transformersExtensible loader pipeline for custom formats and preprocessing.
- Cross-origin asset configPer-asset CORS and credential controls for hosted content.
- In-engine image codecsPNG at every bit depth, JPEG, and a from-scratch AVIF encoder and decoder in pure JavaScript - no WebAssembly - behind a decoder that prefers the browser's own where there is one.
- Off-thread image decodingWorkers spawned lazily for image decode and encode, self-terminating when idle, and falling back inline where no worker can be had.
- In-engine image codecsPNG at every bit depth, JPEG, and a from-scratch AVIF encoder and decoder in pure JavaScript - no WebAssembly - behind a decoder that prefers the browser's own where there is one.
- Off-thread image decodingWorkers spawned lazily for image decode and encode, self-terminating when idle, and falling back inline where no worker can be had.
- Plugin architectureEngine plugins that hook startup, frame updates, and shutdown without forking the core.
- Options frameworkHierarchical settings with reactive UI bindings - generate options panels from definitions.
- Achievement systemAchievement tracking, persistence, and notification-driven unlock animations.
- Localizationi18n keys with formatter support across UI, tooltips, and notifications.
- Performance dashboardRing-buffer metrics with a live in-browser overlay for profiling during play.
- Pluggable loggingConsole, void, and Elasticsearch backends - route logs without touching call sites.
- Metrics & analyticsCategorized event tracking with Google Analytics integration and pluggable backends.
- Notification systemEngine-wide notification queue for UI, achievements, and system messages.
Developer Experience
10 featuresDefaults reward correctness in development, get out of the way in production, and never lock you into a black box.
- 6,000+ runtime assertionsAsserts at the source of every invariant - caught instantly in dev, stripped entirely from production builds.
- Strip plugin integration@rollup/plugin-strip removes every assertion in production for native-speed runtime.
- 15,000+ handwritten testsCritical algorithms, edge cases, determinism, adversarial cases and shader emulation, in the engine's own suites.
- Source-availableFull engine source ships in the npm package - no binary blobs, no obfuscation, no closed precompiled modules.
- JSDoc-typed JavaScriptAuthored in JavaScript with JSDoc; TypeScript declarations generated by the build for TS users.
- Fine-grained ES modules~6,000 modules that tree-shake to only what you reference - the engine boots fast and starts streaming assets sooner.
- Two dependenciesopentype.js and robust-predicates. The renderer is part of the engine, not a peer you install alongside it.
- No editor requiredCode-first by design: no proprietary scene format and no opaque project files. An in-app editor is there when you want to inspect a running game, and nothing depends on it.
- WebGPU targetOne backend, no fallback path and no degradation tiers. Hardware below the device floor gets a clear failure message instead of a quietly worse frame.
- Headless testingA validating software WebGPU device lets engine-facing tests run in CI without a GPU.
Don't see what you need?
The full source ships in the npm package - read it. If you're evaluating Meep for a specific subsystem and want a pointer at the right files, email us.