# skypjack/entt

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/skypjack-entt).**

12,294 stars · 1,055 forks · C++ · mit

## Links

- GitHub: https://github.com/skypjack/entt
- Homepage: https://github.com/skypjack/entt/wiki
- awesome-repositories: https://awesome-repositories.com/repository/skypjack-entt.md

## Topics

`architectural-patterns` `cpp` `cpp17` `cpp20` `data-oriented` `data-oriented-design` `ecs` `ecs-framework` `entity-component-system` `entt` `game-dev` `game-development` `game-engine` `game-programming` `gamedev` `header-only` `modern-cpp` `no-dependencies` `production-ready` `reflection`

## Description

EnTT is a C++ library designed for data-oriented design and entity component system architecture. It provides a framework for managing game objects and simulation states by separating entity data from logic, allowing for the efficient organization and manipulation of large collections of related data objects.

The library utilizes sparse sets to store entities and components in contiguous memory, which facilitates cache-friendly iteration and constant-time lookups. It employs template metaprogramming for compile-time type reflection and type-erasure techniques to provide a unified interface for heterogeneous component types. Developers can further customize memory layout and allocation through policy-based component management.

The system includes reactive observers that monitor component lifecycles to trigger callbacks automatically during creation, update, or destruction events. These capabilities support high-frequency simulation updates by enabling parallel iteration over component pools, which minimizes branching and maximizes CPU cache efficiency.

## Tags

### Game Development

- [Data-Oriented Design Libraries](https://awesome-repositories.com/f/game-development/data-oriented-design-libraries.md) — Provides a C++ library for building complex simulations using data-oriented design principles.
- [Entity Component Systems](https://awesome-repositories.com/f/game-development/engine-architecture/entity-component-systems.md) — Provides a high-performance system for storing, retrieving, and manipulating entity states in simulations. ([source](https://github.com/skypjack/entt/wiki))
- [Data Access Optimizations](https://awesome-repositories.com/f/game-development/simulation-engines/entity-simulation-engines/data-access-optimizations.md) — Optimizes access to large collections of game entities to maintain high frame rates.

### Programming Languages & Runtimes

- [Sparse Data Structures](https://awesome-repositories.com/f/programming-languages-runtimes/programming-utilities/data-structure-type-helpers/data-structures/specialized-memory-formats/sparse-data-structures.md) — Utilizes sparse sets to store entities and components in contiguous memory for cache-friendly access.
- [Compile-Time Introspection](https://awesome-repositories.com/f/programming-languages-runtimes/language-features-paradigms/type-system-tools/type-definitions/variable-type-declarations/compile-time-type-inference/compile-time-introspection.md) — Provides compile-time type introspection to manipulate component metadata without runtime overhead.

### User Interface & Experience

- [Game Object Architectures](https://awesome-repositories.com/f/user-interface-experience/component-architectures/game-object-architectures.md) — Provides a modular system for organizing game entities and properties to optimize real-time performance.

### Data & Databases

- [Parallel Data Iterators](https://awesome-repositories.com/f/data-databases/collection-iterators/sequential-iterators/parallel-data-iterators.md) — Implements parallel iterators to traverse component pools efficiently for high-frequency simulation updates.
- [Memory-Optimized Processing](https://awesome-repositories.com/f/data-databases/high-performance-data-infrastructures/memory-optimized-processing.md) — Optimizes CPU cache usage and system throughput for large sets of related data objects.

### Software Engineering & Architecture

- [Observer Patterns](https://awesome-repositories.com/f/software-engineering-architecture/architectural-design-patterns/state-management/reactive-subscription-systems/observer-patterns.md) — Monitors component lifecycle changes to trigger automatic callbacks via an observer pattern.
- [Type-Erased Registries](https://awesome-repositories.com/f/software-engineering-architecture/component-registries/type-erased-registries.md) — Provides a unified interface for managing diverse component types through type-erasure.
