需要支持 C++20 的编译器;编译测试和生成文档需 CMake 3.28+ 与 Doxygen 1.18+;仅用 ECS 时可只包含 entt/entity/registry.hpp 以减少依赖
entt
skypjackMIT活跃维护现代 C++ 写的轻量级实体组件系统(ECS),用数据导向设计帮游戏和实时应用把对象逻辑解耦,跑得快又稳定。
Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more
#include <entt/entt.hpp>README 未说明,纯软件库,无 GPU 或显存要求
现代 C++ 的 header-only ECS 库,用于游戏开发中高效组织实体与组件
现代 C++ 写的轻量级实体组件系统(ECS),用数据导向设计帮游戏和实时应用把对象逻辑解耦,跑得快又稳定。
核心能力
- 提供基于 registry 和 view 的实体组件系统
- 支持无约束组件类型与可选指针稳定性
- 内置类标准 RTTI 与无宏运行时反射系统
- 附带执行图构建器用于最优调度
- 提供稀疏集哈希表等自研容器与资源管理工具
容易踩的坑
- v4.0.0EnTT v4.0.0最新正式版2026-07-23 · 2026-07-23 12:22 UTC
Changelog
-
config:ENTT_CONSTEXPRis no longer availableENTT_NOEXCEPTIONrenamed intoENTT_NO_EXCEPTION- Add
ENTT_USE_STL(mainly for testing purposes) - Support injecting configuration via optional
<entt/ext/config.h>header 👈✍️
-
core:entt::identityis no longer availableentt::popcountis no longer availableentt::has_single_bitis no longer availableentt::next_power_of_twois no longer availableentt::type_identityis no longer availableentt::to_addressis no longer available- Added concept
enum_bitmask - Added concept
cvref_unqualified - Refine
type_infodefinition to favor concepts over sfinae - Invoking
as_refon an emptyanyreturns and emptyany - Update
type_iddefinitions for the best member_classisconditional_tfriendly
-
entity- View-to-view conversion support for all view types
- Added concept
entt_like - Refine
component_traitsdefinition to favor concepts over sfinae - Perf improvements on storage destruction for trivially destructible types
- Perf improvements on component destruction for trivially destructible types
- Perf improvements when shrinking storage types
- Reintroduce storage support to arguments for empty types
-
meta:namereturns anstd::string_viewfor all meta objects- Added the new
meta_baseobject base()returnsmeta_baseobjects in all cases- Added concept
meta_policy - Support name clashing between meta data/functions and types
- Refine
is_meta_pointer_likedefinition to favor concepts over sfinae - Copying a
meta_anythat wraps a non-copyable type returns an invalidmeta_any - Added a non-const overload of
meta_any::operator* - Pointers are no longer pointer-like types
meta_anysupports all dereferenceable types, i.e. optionals (constness is also guaranteed)- Meta containers are automatically detected, meta container traits are used to opt-out
- Multi meta type support for the same C++ type 👈😲
meta_types can be injected intometa_anys to rebind overloaded types as neededmeta_data::arityreplaced withmeta_data::set_arityandmeta_data::get_aritymeta_data::argreplaced withmeta_data::set_argandmeta_data::get_argmeta_ctx_arg_tandmeta_ctx_argare exported viafwd.hpptoometa_type::idrenamed tometa_type::aliasmeta_data::setsupports additional arguments upon invocation (useful for custom setters)meta_data::getsupports additional arguments upon invocation (useful for custom getters)
-
signal:- Support enqueueing the same event type in a dispatcher from listeners
- Update dispatcher
triggerfunction to only accept already constructed events
-
stl:- A brand new submodule, mainly designed for internal purposes
- Custom STL injection support 👈🥳
-
tools:- Make
daveyvisit meta base types - Conditionally include
<imgui>indavey.hpp - Improve a little the testbed for
davey, but it's still a work in progress
- Make
Build system
- C++20 is now required to use
EnTT - Minimum cmake version updated to 3.28
- Minimum doxygen version updated to 1.14
Natvis support
All natvis files have been updated where necessary.
Breaking changes
-
config:ENTT_CONSTEXPRis no longer available, useconstexprinsteadENTT_NOEXCEPTIONrenamed intoENTT_NO_EXCEPTION
-
core:entt::identityis no longer available, usestd::identityinsteadentt::popcountis no longer available, usestd::popcountinsteadentt::has_single_bitis no longer available, usestd::has_single_bitinsteadentt::next_power_of_twois no longer available, usestd::bit_ceilinstead- `entt::type
-
- v3.16.0EnTT v3.16.02025-11-20 · 2025-11-20 09:14 UTC
查看更新说明
Changelog
-
config:core/attribute.hwas merged withconfig.h
-
core:- ⚠️ Huge performance improvements of the
entt::anyclass due to large internal changes with no impact on the API - Deprecate
basic_any<...>::type()in favor ofbasic_any<...>::info() - Make
stripped_type_namereturn empty views if name is not available - Add a
full_type_namefunction to type info API - Break the dependency between
basic_hashed_stringandstring_view - Make
const char *conversion operator explicit forbasic_hashed_string - Add typed
dataoverloads tobasic_any<...> - Add
has_valueoverloads tobasic_any<...> - Make
basic_anysupport self-assignment smoothly attribute.his no longer a thing, as it was merged withconfig/config.h
- ⚠️ Huge performance improvements of the
-
container:- Transparent lookup for
dense_map<...>::at - Slightly improved perf of all functions based on
dense_map::constrained_find - Slightly improved perf of all functions based on
dense_set::constrained_find
- Transparent lookup for
-
entity:- Deprecate
basic_sparse_set<...>::type()in favor ofbasic_sparse_set<...>::info() - Full support to swap-only policies for runtime views
- A const registry is no longer a sync point for the
basic_organizerclass - Make it possible to
clear()the registry context as needed - Support swapping entity storage objects
- Quit accepting (and silently discarding) arguments for empty types when invoking
::emplaceon a storage - Quit accepting (and silently discarding) arguments for empty types when invoking
::inserton a storage
- Deprecate
-
graph:- Make the
graphmethod of the organizer classconstas it should be
- Make the
-
meta:- ⚠️ Huge performance improvements overall due to large internal changes with no impact on the API
- Introduce
meta_dynamic_extentfor meta sequence containers - Deprecate
basic_meta_sequence_container_traits::fixed_sizein favor ofbasic_meta_sequence_container_traits::extent - Expose the element type in the factory API
- Built-in name support for meta types, data and functions
- Forward declared
meta_factoryandmeta_ctxas it should be - Drop meta destructors support for perf reasons
- Break safe-mode when uninitialized for meta data and meta func
- Remove
operator==andoperator!=formeta_handle - Strip context-only and context-aware copy constructors from
meta_handle - Make
meta_anysupport self-assignment smoothly - Make
as_is_tpolicy match the constness of the returned type, if any - Introduce
as_value_tpolicy to force a copy of the returned value (default) - Allow top-level only searches for meta data and meta functions
- Deprecate const
meta_handle::operator-> - Allow unsetting flags from a meta factory
-
poly:- Deprecate
basic_poly<...>::type()in favor ofbasic_poly<...>::info()
- Deprecate
-
process:- ⚠️ Complete redesign of the module
-
signal- Make
delegatetests work in release mode (disable comdat folding)
- Make
-
tools:- Introduce
davey, an ImGUI based viewer for entities and components (work in progress)
- Introduce
Build system
- Updated IWYU version
- Prepared workflow and build system for
testbedtarget - Renamed
tools.ymltoanalyzer.yml - Natvis files are now part of the source tree
- Install natvis files along with source files if requested
Any other business
- Removed all previously deprecated methods
Natvis support
All natvis files have been updated where necessary.
Breaking changes
-
core:- Deprecated
basic_any<...>::type(), usebasic_any<...>::info()instea0d const char *conversion operator is now explicit forbasic_hashed_string
- Deprecated
-
entity:- Deprecated
basic_sparse_set<...>::type(), usebasic_sparse_set<...>::info()instead - Arguments are no longer accepted when invoking
::emplaceon a storage for empty types - Arguments are no lo
- Deprecated
-
- v3.15.0EnTT v3.15.02025-03-19 · 2025-03-19 14:24 UTC
查看更新说明
Changelog
-
core- Skip most of vtable calls in
anyfor references and dynamically allocated objects - Review
any_policyvalues to better capture the nature of the elements stored withany - Added
any::owner()becauseany_policy::owneris no longer available - Embedded-as-dynamic support for
any(useful to transfer ownership of externally allocated objects) is_iteratorandis_equality_comparablereview to refine them further- Self-moving an
anyputs it in a safe but unspecified state now - Introduce
ENTT_CONSTEVALconfig parameter - Apply
constevalon appropriate hashed string related functions
- Skip most of vtable calls in
-
entity:deletion_policy::unspecifiedis now available and equal toswap_and_pop- Skip tombstone checks in more cases and improve performance of view iterators
- Auto-disconnection support for
reactive_mixin - Refined storage fallback mechanism for views to make it work across boundaries
- Support joining views with storage objects directly
- Introduce
generatefunctions in the storage entity to replaceemplace - Add
generatefunctions to the sigh mixin to fully support storage entity as_viewandas_groupare now copyable- Improved
shrink_to_fitto also cleanup the sparse array of a sparse set - Extended
basic_registry<...>::storage<T>const-correctness - Allow customizing
component_traitsbased on the entity type - Default group template parameters for
GetandExcludelists - Make
basic_organizersupport groups too - Fix a bug on view packs when combining views with uninitialized filters
- Make built-in storage mixins support custom private/protected registries
- Support to reserved entities (see
start_fromon the entity storage) - Make
to_entitywork properly with stable types
-
meta:meta_sequence_container::rebindis no longer availablemeta_associative_container::rebindis no longer availablemeta_any::base()to return a const reference to the underlyingany- Deprecated
meta_any_policy,meta_any::policy()andmeta_any::data() - Self-contained
meta_factory<T>to avoid having to go throughmeta<T> - Support taking ownership of passed in pointers on construction for
meta_any meta_type::from_voidallows transferring ownership of elements too- Standalone
meta_dataandmeta_funcimplementations - Make empty
meta_data,meta_funcandmeta_typesafe to use no matter what - Self-moving a
meta_anyputs it in a safe bug unspecified state now - Allow attaching const values of non-
Typetype to meta types - Make
as_refreturn valid objects when the underlying type isvoid meta_any::context()returns the underling meta context- Deprecated multi-setters meta data support
- Deprecated context-aware
meta_getterutilities - Get the context from the instance in the remaining
meta_getterutilities - Deprecated context-aware
meta_invokeutilities - Get the context from the instance in the remaining
meta_invokeutilities - Support deducing meta pointers like types directly
- Early exit for typed
allow_cast
-
signal:- Make it possible to create uninitialized
sinkobjects - Updated definition for
emitter::publish(no forwarding references) - Slightly review
sinkAPI (these changes should be backward compatible)
- Make it possible to create uninitialized
Build system
- Updated
IWYUversion - Updated lcov configuration to make gtest work with lcov2
ENTT_INSTALLto enable/disable installation steps as needed
Any other business
- Removed all previously deprecated methods
Natvis support
All natvis files have been updated where necessary.
Breaking changes
-
core:- Reviewed
any_policyvalues with breaking changes in names to avoid subtle errors on user side
- Reviewed
-
entity:- Deprecated
emplacein the storage entity, usegenerateinstead - `com
- Deprecated
-
- v3.14.0EnTT v3.14.02024-10-23 · 2024-10-23 12:57 UTC
查看更新说明
Changelog
-
config:ENTT_NO_MIXINto disable the sigh mixin by default- Print assertion messages upon failure
-
core:- Avoid uninitialized
lengthin all (corner) cases - Export more types as forward declarations (see
fwd.hpp) - Lambda support for
nth_argument - Class level new/delete support for
any - Class level new/delete support for
uninitialized_construct_using_allocator - Make the
monostatereturn*thisfromoperator= - Enable
enable_borrowed_range/enable_viewfor a few types - Make
popcountpublic (waiting for C++20) - Rename
is_power_of_twotohas_single_bit(waiting for C++20) - Introduce
bit.hppand move a few functions there (iehas_single_bit) - Self assignment support for
basic_any<...>
- Avoid uninitialized
-
entity:- Avoid unchecked refresh loops on single type views
- Refine empty registry check in the snapshot loader constructor
- Stop groups from swapping observed types in their pools
- Make sparse set
sort_asfunction return an iterator past the last shared element - Update registry
destroyfunction to use sparse setsort_asinternally - Add
operator boolto runtime views - Assert when emplacing invalid entities through a registry
- Improved registry
validfunction - Decouple
sizeand next identifier in the storage entity - Faster and memory-friendly storage entity
create-with-hint function - Update the tombstone class to support zero-sized versions
- Update entity traits the fully support zero-sized versions
- Return the correct value from sparse set
pushfunctions - Drop sparse set scoped iterators (ie
begin(N)/end(N)) - Add
element_typeto the storage class as opposed tovalue_type - Make registry
traits_typetype member private - Make sparse set
traits_typetype member private - Make storage
traits_typetype member private - Avoid using weak ranges twice in the
sigh_mixinclass - Support comparisons between
basic_handle<...>andnull_t - Reliable
validfunction for emptybasic_handle<...>s - Add pointer stable types support to the snapshot loader class
- Branch-less sparse set
sortandsort_asfunctions - Branch-less centralized swap-only mode check for views
- Refine storage log messages to avoid ambiguity
- Introduce the new
basic_tableandtableclasses - In/Out edges support for
basic_organizer - Single type view
::operator->to get access to the underlying storage - All registry now assert on custom user defined entity storage
- Add
storage_policyconstexpr member to all storage classes - Enable
enable_borrowed_range/enable_viewfor a few types - Decouple all types except
basic_storagefromcomponent_traits - Drop the
Maskparameter of thebasic_observerclass - View specialization and improvements for swap-only storage
- View specialization and improvements for swap-and-pop storage
- View specialization and improvements for in-place storage
- Avoid checking for filter validity when iterating views
- Allow resetting a storage in the registry via the
resetfunction sigh_mixinautomatic signal registration support for components- Generic
bindfunction in thebasic_sparse_setclass - Reactive mixin and storage (designed to replace the
observerclass) operator boolandregistryfunctions forsigh_mixinsigh_mixintransparent support to derived registries
-
graph:- Add an
emptymethod to theflowclass - Add an
emptymethod to theadjacency_matrixclass
- Add an
-
meta:- Add
is_pointermeta traits - Updated meta type
is_pointerfunction to make it faster and more reliable - User defined traits for meta objects
- Self assignment support for
meta_any - User defined arbitrary data support for meta types, meta data and meta functions
- Guaranteed execution/iteration order on ove
- Add
-
- v3.13.2EnTT v3.13.22024-04-10 · 2024-04-10 06:57 UTC
查看更新说明
Changelog
- Fix an issue on the range-
insertin thesigh_mixinclass - Add full support to empty types in the snapshot classes
- Suppress an annoying warning by clang in the snapshot classes
Any other business
The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.
- Fix an issue on the range-
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。

[!CAUTION]
EnTThas been a dream so far, we haven't found a single bug to date and it's super easy to work with.-- Every EnTT User Ever
EnTT is a header-only, tiny and easy to use library for game programming and
much more written in modern C++.
Among others, it's used
in Minecraft by Mojang, the
ArcGIS Runtime SDKs by Esri
and the amazing Ragdoll.
If you don't see your project in the list, please open an issue, submit a PR or
add the #entt tag to your topics! :+1:
Do you want to keep up with changes or do you have a question that doesn't require you to open an issue? Join the gitter channel and the discord server, meet other users like you. The more we are, the better for everyone. Don't forget to check the FAQs and the wiki too. Your answers may already be there.
Do you want to support EnTT? Consider becoming a
sponsor or making a
donation via PayPal.
Many thanks to these people and
special thanks to:
[!WARNING] We apologize to our kind users for not posting updates every three days saying that we are faster than three days ago and better than everyone else, but consider it done. In the meantime, enjoy a library that just works without having to constantly remind ourselves.
Table of Contents
Introduction
The entity-component-system (also known as ECS) is an architectural pattern used mostly in game development. For further details:
This project started off as a pure entity-component system. Over time the codebase has grown as more and more classes and functionalities were added. Here is a brief, yet incomplete list of what it offers today:
- Support for user implementations of the Standard Template Library.
- Built-in RTTI system mostly similar to the standard one.
- Incredibly fast entity-component system with its own pay for what you use policy, unconstrained component types with optional pointer stability and hooks for storage customization.
- General purpose execution graph builder for optimal scheduling.
- A built-in, non-intrusive and macro-free runtime reflection system.
- Static polymorphism made simple and within everyone's reach.
- A few homemade containers, like a sparse set based hash map.
- All that is needed for resource management (cache, loaders, handles).
- Delegates, signal handlers and a tiny event dispatcher.
- And much more! Check out the wiki.
This list as well as the project are a work in progress. The whole API is fully documented for those who are brave enough to read it. Please, do note that all tools are also DLL-friendly now and run smoothly across boundaries.
[!NOTE] A lot of stuff was invented here, but we remain humble and let people copy it without giving us credit. The good and the bad of open source, but bragging is for others. Feel free to get inspired.
One thing known to most is that EnTT is also used in Minecraft.
Given that the game is available literally everywhere, I can confidently say
that the library has been sufficiently tested on every platform that can come to
mind.
Code Example
#include <entt/entt.hpp>
struct position {
float x;
float y;
};
struct velocity {
float dx;
float dy;
};
void update(entt::registry ®istry) {
auto view = registry.view<const position, velocity>();
// use a callback
view.each([](const auto &pos, auto &vel) { /* ... */ });
// use an extended callback
view.each([](const auto entity, const auto &pos, auto &vel) { /* ... */ });
// use a range-for
for(auto [entity, pos, vel]: view.each()) {
// ...
}
// use forward iterators and get only the components of interest
for(auto entity: view) {
auto &vel = view.get<velocity>(entity);
// ...
}
}
int main() {
entt::registry registry;
for(auto i = 0u; i < 10u; ++i) {
const auto entity = registry.create();
registry.emplace<position>(entity, i * 1.f, i * 1.f);
if(i % 2 == 0) { registry.emplace<velocity>(entity, i * .1f, i * .1f); }
}
update(registry);
}
Motivation
I started developing EnTT for the wrong reason: my goal was to design an
entity-component system to beat another well known open source library both in
terms of performance and possibly memory usage.
In the end, I did it, but it wasn't very satisfying. Actually it wasn't
satisfying at all. The fastest and nothing more, fairly little indeed. When I
realized it, I tried hard to keep intact the great performance of EnTT and to
add all the features I wanted to see in my own library at the same time.
Nowadays, EnTT is finally what I was looking for: still faster than its
competitors, lower memory usage in the average case, a really good API and an
amazing set of features. And even more, of course.
[!Note] If the
EnTTAPI looks familiar, it's probably because it's been copied a lot elsewhere (often without much ado). Credit where credit is due though, the initial design was heavily inspired byEntityX, another popular C++ library.
Benchmark
For what it's worth, you'll never see me trying to make other projects look bad or offer dubious comparisons just to make this library seem cooler. I leave this activity to others, if they enjoy it (and it seems that some people actually like it). I prefer to make better use of my time.
If you are interested, you can compile the benchmark test in release mode (to
enable compiler optimizations, otherwise it would make little sense) by setting
the ENTT_BUILD_BENCHMARK option of CMake to ON, then evaluate yourself
whether you're satisfied with the results or not.
There are also a lot of projects out there that use EnTT as a basis for
comparison (this should already tell you a lot). Many of these benchmarks are
completely wrong, many others are simply incomplete, good at omitting some
information and using the wrong function to compare a given feature. Certainly
there are also good ones but they age quickly if nobody updates them, especially
when the library they are dealing with is actively developed.
Out of all of them, this seems like
the most up-to-date project and also covers a certain number of libraries. I
can't say exactly whether EnTT is used correctly or not. However, even if used
poorly, it should still give the reader an idea of where it's going to operate.
Integration
EnTT is a header-only library. This means that including the entt.hpp header
is enough to include the library as a whole and use it. For those who are
interested only in the entity-component system, consider to include the sole
entity/registry.hpp header instead.
It's a matter of adding the following line to the top of a file:
#include <entt/entt.hpp>
Use the line below to include only the entity-component system instead:
#include <entt/entity/registry.hpp>
Then pass the proper -I argument to the compiler to add the src directory to
the include paths.
Requirements
To be able to use EnTT, users must provide a full-featured compiler that
supports at least C++20.
The requirements below are mandatory to compile the tests and to extract the
documentation:
CMakeversion 3.28 or later.Doxygenversion 1.18 or later.
Alternatively, Bazel is also supported as a build system
(credits to zaucy who offered to maintain it).
In the documentation below I'll still refer to CMake, this being the official
build system of the library.
CMake
To use EnTT from a CMake project, just link an existing target to the
EnTT::EnTT alias.
The library offers everything you need for locating (as in find_package),
embedding (as in add_subdirectory), fetching (as in FetchContent) or using
it in many of the ways that you can think of and that involve CMake.
Covering all possible cases would require a treatise and not a simple README
file, but I'm confident that anyone reading this section also knows what it's
about and can use EnTT from a CMake project without problems.
Note that all install calls are guarded by the ENTT_INSTALL option to allow
using EnTT as a submodule without conflicting with user logic.
It is therefore necessary to set the option to true to take advantage of the
installation logic provided by this library.
Natvis support
When using CMake, just enable the option ENTT_INCLUDE_NATVIS and enjoy
it.
Otherwise, most of the tools are covered via Natvis and all files can be found
in the natvis subdirectory, divided by module.
If you spot errors or have suggestions, any contribution is welcome!
Packaging Tools
EnTT is available for some of the most known packaging tools. In particular:
-
Conan, the C/C++ Package Manager for Developers. -
vcpkg, Microsoft VC++ Packaging Tool. You can download and installEnTTin just a few simple steps:$ git clone https://github.com/Microsoft/vcpkg.git $ cd vcpkg $ ./bootstrap-vcpkg.sh $ ./vcpkg integrate install $ vcpkg install enttOr you can use the
experimentalfeature to test the latest changes:vcpkg install entt[experimental] --headThe
EnTTport invcpkgis kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on thevcpkgrepository. -
Homebrew, the missing package manager for macOS. Available as a homebrew formula. Just type the following to install it:brew install skypjack/entt/entt -
build2, build toolchain for developing and packaging C and C++ code. In order to use theenttpackage in abuild2project, add the following line or a similar one to themanifestfile:depends: entt ^3.0.0Also check that the configuration refers to a valid repository, so that the package can be found by
build2:-
cppget.org, the open-source community central repository, accessible ashttps://pkg.cppget.org/1/stable. -
Package source repository: accessible as either
https://github.com/build2-packaging/entt.gitorssh://[email protected]/build2-packaging/entt.git. Feel free to report issues with this package.
Both can be used with
bpkg add-repoor added in a projectrepositories.manifest. See the official documentation for more details. -
-
bzlmod, Bazel's external dependency management system. To use theenttmodule in abazelproject, add the following to yourMODULE.bazelfile:bazel_dep(name = "entt", version = "3.16.0")EnTT will now be available as
@entt(short for@entt//:entt) to be used in yourcc_*ruledeps.
Consider this list a work in progress and help me to make it longer if you like.
pkg-config
EnTT also supports pkg-config (for some definition of supports at least).
A suitable file called entt.pc is generated and installed in a proper
directory when running CMake.
This should also make it easier to use with tools such as Meson or similar.
Documentation
The documentation is based on doxygen. To build it:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
The API reference is created in HTML format in the build/docs/html directory.
To navigate it with your favorite browser:
$ cd build
$ your_favorite_browser docs/html/index.html
The same version is also available online for the latest release, that is the last stable tag. Moreover, there exists a wiki dedicated to the project where users can find all related documentation pages.
Tests
To compile and run the tests, EnTT requires googletest.
cmake downloads and compiles the library before compiling anything else. In
order to build the tests, set the CMake option ENTT_BUILD_TESTING to ON.
To build the most basic set of tests:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make test
Note that benchmarks are not part of this set.
EnTT in Action
EnTT is widely used in private and commercial applications. I cannot even
mention most of them because of some signatures I put on some documents time
ago. Fortunately, there are also people who took the time to implement open
source projects based on EnTT and did not hold back when it came to
documenting them.
Here you can find an incomplete list of games, applications and articles that can be used as a reference.
If you know of other resources out there that are about EnTT, feel free to
open an issue or a PR and I'll be glad to add them to the list.
Extensions
Community-maintained extensions for EnTT:
- EnTTx - Adds hierarchies, prefabs, and observers for use cases such as networking and undo/redo.
If you know of other EnTT extensions, feel free to open an issue or a PR and
I'll be glad to add them to the list.
Contributors
Requests for features, PRs, suggestions and feedback are highly appreciated.
If you find you can help and want to contribute to the project with your experience or you do want to get part of the project for some other reason, feel free to contact me directly (you can find the mail in the profile). I can't promise that each and every contribution will be accepted, but I can assure that I'll do my best to take them all as soon as possible.
If you decide to participate, please see the guidelines for contributing before to create issues or pull requests. Take also a look at the contributors list to know who has participated so far.
License
Code and documentation Copyright (c) 2017-2026 Michele Caini. Colorful logo Copyright (c) 2018-2021 Richard Caseres.
Code released under the MIT license. Documentation released under CC BY 4.0. All logos released under CC BY-SA 4.0.


