A fast entity component system (ECS) for C & C++
MIT License
Bot releases are hidden (Show)
This is another early preview of the upcoming v4 release! 🎉
You can use this release to familiarize and play around with the new APIs and features before v4 comes out. The biggest difference between v3 and v4 is a new query engine that unifies filters, queries and rules in a single API.
it.field(0)
instead of it.field(1)
)This version does not work with the explorer because of a breaking change in the query DSL. To use the explorer with the alpha, use this URL: https://www.flecs.dev/explorer/v4?remote=true.
The release should be stable enough for experimentation.
// New: a cleaner syntax allows for more natural type descriptions
struct Position {
x = f32
y = f32
}
assembly CheckBox {
prop checked = bool: false
// New: conditional logic!
if $checked {
Image("checked.png") // New: improved anonymous entity notation
} else {
Image("unchecked.png")
}
}
// New: new syntax that improves ergonomics of working with assemblies
CheckBox my_checkbox(checked: true) {
Position: {x: 400, y: 300} // New: a more consistent way to specify components
// Streamlined syntax for creating child entities
Label my_lbl("Hello world") {
Position: {x: 100, y: 0}
}
}
// Old
Item, Player($this:self|up(ContainedBy))
// New
Item, Player($this|self|up ContainedBy)
The updated goal is to release around the end of May, with a beta release coming out in around two weeks.
Post v4 feedback in this discussion post: https://github.com/SanderMertens/flecs/discussions/1181 or on the Flecs discord server, whichever you prefer!
Published by SanderMertens 7 months ago
This is an early preview of the upcoming v4 release! 🎉
You can use this release to familiarize and play around with the new APIs and features before v4 comes out. The biggest difference between v3 and v4 is a new query engine that unifies filters, queries and rules in a single API.
// A system with query variables
world.system<Position>("SpaceshipsDockedToPlanet")
.with<SpaceShip>()
.with<DockedTo>("$obj")
.with<Planet>().src("$obj")
.each([](flecs::entity spaceship, Position& p) {
// ...
});
// By default queries are uncached. This is similar to a v3 filter/rule
world.query_builder<Position>()
.with(flecs::ChildOf, "$parent")
.each([](Position& p) {
// ...
});
// Adding .cached() enables caching, which is similar to a v3 query.
// Only the terms that are cacheable will be cached. This allows
// for queries that are partially cached, which is not possible in v3.
auto q = world.query_builder<Position>()
.with(flecs::ChildOf, "$parent")
.cached()
.build();
q.each([](Position& p) {
// ...
});
// Queries can be named. This associates the query with an entity
// with the same name. Queries that are associated with an entity
// are cached. This means that by default all system queries enable
// caching, just like in v3.
auto q = world.query_builder<Position>("Children")
.with(flecs::ChildOf, "$parent")
.build();
q.each([](Position& p) {
// ...
});
// Queries that are associated with an entity need to be explicitly
// destructed. This is the same behavior as `flecs::entity`.
// Queries that are not associated with an entity are cleaned up
// when they go out of scope. This is the same behavior as
// `flecs::world` (RAII).
q.destruct();
flecs::world world_a;
{
// World objects can now be copied. This just creates a handle to
// the existing world, it doesn't create/copy a new world.
flecs::world world_b = world_a;
}
void Move(ecs_iter_t *it) {
Position *p = ecs_field(it, Position, 0); // Field indices now start from 0!
Velocity *v = ecs_field(it, Velocity, 1);
for (int i = 0; i < it->count; i ++) {
p[i].x += v[i].x;
p[i].y += v[i].y;
}
}
The release should be stable enough for experimentation.
There is still a lot that needs to happen before the release. The goal is to release around the end of April, with a higher probability of it being later than earlier.
Post v4 feedback in this discussion post: https://github.com/SanderMertens/flecs/discussions/1181 or on the Flecs discord server, whichever you prefer!
Published by SanderMertens 9 months ago
This version includes the following bugfixes:
R(_, _)
and _(_, T)
queries_
) sourceecs_ref_t
could point to invalid component after table recyclingThis version includes the following improvements:
[cpp]
Add missing overloads for delete_with
and remove_all
(thanks @Charlie-83!)[cpp]
Add FLECS_CPP_NO_AUTO_REGISTRATION
flag to disable automatic component registration[cpp]
Add flecs::string::contains
[cpp]
Add support for associating a timer/tick source with a type (thanks @ZeroErrors!)[cpp]
Add missing const
to entity_view
methods (thanks @waywardmonkeys!)[cpp]
Add missing flecs::doc::get/set_color()
functions (thanks @waywardmonkeys!)[cpp]
Mark explicit move ctors/operator= as noexcept
(thanks @waywardmonkeys!)[cpp]
Remove redundant void arg of log function (thanks @waywardmonkeys!)[query-dsl]
Add support for R(A, B || C)
syntax to DSL[query]
Fill out ecs_iter_t.system
when using filters, queries and rules (thanks @BeanCheeseBurrito!)[query]
Improve string conversion of queries with equality operators[rule]
Skip empty ids for R(_, *)
and *(_, T)
queries[json]
Implement serializer for user-friendly JSON format[json]
Add option for serializing query field metadata[rest]
Fix issue where cached REST request would always return code 200[rest]
Add try
parameter that prevents throwing HTTP error when trying out queries[snapshot]
Reduce copies when duplicating tables with non-POD components for snapshots (thanks @ZeroErrors!)[strbuf]
Simplify implementation of ecs_strbuf_t
, improve performance[http]
Improve performance of ecs_http_server_request
[http]
Enable caching of HTTP requests made from C API[log]
Don't mix writing to stderr/stdout in logging output[log]
Make output file used by logging functions configurable[doc]
Fix copy-paste issues with type names (thanks @waywardmonkeys!)[doc]
Fix relationship example by specifying inout (thanks @garrett-is-a-swann!)[doc]
Update Doxygen to v1.10.0 (thanks @ZeroErrors!)[doc]
Enable graphviz dot files in Doxygen (thanks @ZeroErrors!)[doc]
Change defgroup documents to use autobrief (thanks @ZeroErrors!)[doc]
Fix typos (thanks @waywardmonkeys!)[doc]
Fix typos and spelling errors (thanks @ZeroErrors!)[doc]
Fixed documentation link in quickstart addons section (thanks @DJLink!)[doc]
Remove spurious asterisk (thanks @waywardmonkeys!)[doc]
Use @code/@encode (thanks @waywardmonkeys!)[doc]
Fix grouping errors in C docs (thanks @waywardmonkeys!)[doc]
Link function names in doc comments (thanks @waywardmonkeys!)[doc]
Fix ecs_doc_get_name
code samples (thanks @waywardmonkeys!)[doc]
Add tab widget for code snippets (thanks @ZeroErrors!)[doc]
Add Extermination Shock to readme[doc]
Add Hytale to readme[doc]
Improve doc addon docs (thanks @waywardmonkeys!)[doc]
Fix doxygen warnings (thanks @waywardmonkeys!)[doc]
Add missing doc.brief descriptions to flecs entities[doc]
Add C# example snippets to Quickstart, RestApi, System manuals (thanks @BeanCheeseBurrito!)[ci]
Update pages workflow actions (thanks @waywardmonkeys!)[ci]
Add macOS-14 Apple Silicon jobs (thanks @waywardmonkeys!)Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/4681e8606aa9204b97f6316d3611e9f0d2572852
Known issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.10...v3.2.11
Published by SanderMertens 10 months ago
up
traversal!⚠️ The next release will merge the filter, rule and query implementations into a single query API, expect breaking changes! ⚠️
This version includes the following bugfixes:
set
commands for new componentson_set
hook was invoked without deferred mode & could be called twiceon_set
hook could get lost||
) expressionsAny
wildcards!
) operators in rulesRel(X, Y, Z)
syntaxThis version includes the following improvements:
[rules]
Implement up
traversal for rules[rules]
Simplify control flow instructions of rule engine[rules]
Add new rule instructions for trivial queries which batches evaluation of multiple terms[rules]
Implement automatic filtering of prefab/disabled entities[rules]
Implement rule instruction reordering to limit evaluation of instructions with only unknown variables[rules]
Improve performance of evaluating queries with exclusive wildcard pairs[rules]
Improve performance of setting data fields for trivial and mixed source queries[meta]
Add new id
primitive type for component ids/pairs[meta]
Use %f
in log statements for doubles instead of %d
[json]
Remove overzealous check on whether it.ptrs
is NULL in iterator serializer[stats]
Remove redundant REST statistics[stats]
Remove less than useful table statistics[stats]
Remove less than useful id statistics[rest]
Reduce log spam from invalid queries from REST API in release mode[meson]
Make compiling hello world example optional (thanks @apache-hb!)[docs]
Fix broken link in REST manual[docs]
Fix C++ module example in manual[docs]
Fix typos in source & documentation (thanks @waywardmonkeys!)[docs]
Doc improvements and formatting (thanks @waywardmonkeys!)[docs]
Remove redundant comment terminators (thanks @waywardmonkeys!)[ci]
Update GitHub actions to actions/checkount@v4
(thanks @waywardmonkeys!)[ci]
Fix new gcc warningsBenchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/ab33138f58c7a24cf05f662ac790d7cfbcfbe8e0
Known issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.9...v3.2.10
Published by SanderMertens 11 months ago
ChildOf($pilot, $cockpit), ChildOf($cockpit, $plane)
can now be rewritten as ChildOf($pilot, $cockpit, $plane)
Turret($this), Health($this.cannon)
window.emit<Resized>({800, 600})
window.enqueue<Resized>({800, 600})
This version includes the following bugfixes:
remove_all
/delete_with
functionsapp_run
OnSet
observer with uninitialized valuesint64_t
values (TODO: correctly handle large uint64_t
values)FLECS_DEBUG
and FLECS_SANITIZE
cursor
API with deserializing into top-level array typesflecs::Override
to C++ API (thanks @BeanCheeseBurrito!)This version includes the following improvements:
[cpp]
Default to InOutNone
when using .with()
in query builder API[cpp]
Enable optional pairs in the C++ query builder (thanks @Thinkofname!)[cpp]
Add array
method to flecs::component
for registering components as array type[cpp]
Add default constructor to flecs::ref
[cpp]
Add flecs::ref::try_ref
method[query-dsl]
Add feature that expands R(A, B, C)
into R(A, B), R(B, C)
[queries]
Add ability to use cascade
in descending order[rules]
Add support for by name lookups relative to query variables ($var.child_name
)[rules]
Don't throw error when comparing variable to *
or _
wildcards[observers]
Add support for entity events[observers]
Add support for enqueueing custom events into command queue[json]
Serialize large integers as strings in JSON serializer[log]
Improve assert performance (thanks @jbarthelmes!)[log]
Enable colors for logging in emcc builds[metrics]
Add ability to track member metrics on pair components[docs]
Fix broken link to meta_c in quickstart[docs]
Fix typo in quickstart[docs]
Fix crash in C++ hooks example[docs]
Fix issue with instancing code example in query manual[docs]
Add STACK_SIZE
parameter to list of emcc parameters in quickstart[docs]
Add game_mechanics/factory
example[docs]
Add more content to FAQ[internals]
Remove record_ptrs
member from table[internals]
Rename flecs::_::invoker*
to flecs::_::delegate*
[internals]
Rename command constants from EcsOp*
to EcsCmd*
[internals]
Reduce complexity of command batching code[ci]
Fix warnings when compiling with -std=gnu2x
[ci]
Fix missing field initializer warning on g++Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/466a28be07c4ecbc94fa8cccb9dc4a5ba4dabf96
Known issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.8...v3.2.9
Published by SanderMertens about 1 year ago
iterable::find
method that makes it easier to find entities using filters, rules and queries:flecs::query<Position> q = ecs.query<Position>();
flecs::entity result = q.find([](Position& p) {
return p.x == 20;
});
This version includes the following bugfixes:
ecs_pipeline_init
when passing invalid parameterINVALID_PARAMETER
assert in ecs_entity_init
when providing empty separatorflecs::iter::id
each_term
with
statementFLECS_MONITOR
and FLECS_REST
world::id
(thanks @Indra-db!)nullptr
as name to world::use
didn't work correctly (thanks @Indra-db!)world::from_json
NULL
as doc string would not remove doc componentecs_iter_str
This version includes the following improvements:
[cpp]
Add table::get
method for enum types (thanks @Indra-db!)[cpp]
Add iterable::find
method[cpp]
Add parameter to world::lookup
/entity::lookup
to disable/enable recursive searching[cpp]
Remove unnecessary return in entity::modified
(thanks @Indra-db!)[cpp]
Remove redundant component registration from entity::ref
methods (thanks @Indra-db!)[cpp]
Add entity_builder::set_json
[cpp]
Add back world::delta_time
method[meta]
Allow for creating reflection data in deferred, suspended deferred and readonly modes[script]
Add ability to self-reference assembly instance through $this
variable[metrics]
Add ability to create metrics for nested members[alerts]
Add summary counts to AlertsActive
component[cmake]
Add support for building & running tests with cmake (thanks @Naios!)[cmake]
Increase cmake version (thanks @Sororfortuna!)[doc]
Fix typos in examples/documentation (thanks @Rageking8!)[doc]
Documentation corrections (thanks @999pingGG!)[doc]
Improve comments of fwd_declare_component
example[doc]
Add missing argument to pair
function in relationship manual example[doc]
Show how to call target()
in relationship basics example[doc]
Fix incorrect documentation comments in C++ APIBenchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/f0c12a99219706c120fd49fe9862749f32f740b5
Known issues:
https://github.com/SanderMertens/flecs/issues/1042
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.7...v3.2.8
Published by SanderMertens about 1 year ago
set
operations are now almost twice as fast in the C++ API 💨// Connect to flecs application
flecs.connect("http://localhost:27750")
// World that stores the joined result of two queries
let w = flecs.world()
.query("SpaceShip, (Dockedto, *)")
.query("Planet, Habitable")
.on_update(() => {
// Access replicated entities
for (let s in w.entities["fleet"]) {
const planet = w.entities[s.pairs.DockedTo];
// Is spaceship docked to a planet?
if (planet.tags.include("Planet") {
// Is planet habitable?
const habitable = planet.tags.include("Habitable") ? "habitable" : "inhabitable";
console.log("SpaceShip " + s.name + " is docked to a " + habitable + " planet!");
}
}
});
This version includes the following bugfixes:
ecs_table_get_column_size
was interpreting column as type indexget
with wildcard idTEXT()
yield_existing
observers weren't always deferredINVALID_COMPONENT_SIZE
assertThis version includes the following improvements:
[c]
Fix inconsistency in naming of get_ctx/set_ctx functions[c]
Add binding_ctx
and ctx_free
/binding_ctx_free
to world[c]
Add ctx
/binding_ctx
to query objects[c]
Add Private
trait to more internal components[c++]
Assert when attempting to create a nested pair id[c++]
Improve performance of deferred C++ set
operations[c++]
Fix issue in filter builder API with pair singletons[timer]
Allow for timer randomization to reduce spikes in pipeline schedule[queries]
Add support for setting $this
variable on query iterators[meta]
Shorten enum constant names by removing name prefix/enum type name prefix[json]
Add ecs_entity_to_json_desc_t::serialize_ids
option[json]
Add ecs_iter_to_json_desc_t::serialize_term_labels
option[json]
Add ecs_iter_to_json_desc_t::serialize_id_labels
option[json]
Remove serialize_meta_ids
option[json]
Add option to serializer to return all queries an entity matches with[json]
Support serialize_id_labels
and serialize_variable_labels
in combination with serialize_table
[json]
Allow for toggling private components in combination with serialize_table
[stats]
Add statistics for sync points[doc]
Fix typo in OS API header[doc]
Fix example in query manual (thanks @jbarthelmes!)[doc]
Fix outdated documentation in query manual and manual[doc]
Fix typo in query manual (thanks @pfeodrippe!)[doc]
Fix documentation for ecs_new_w_pair
in manual[doc]
Fix links in flecs script tutorial[doc]
Fix & improve documentation in main header (thanks @copygirl!)[doc]
Add new C# binding by @BeanCheeseBurrito to README[doc]
Add questions to FAQ on how to debug issues with the explorer[doc]
Remove redundant group_by
callback from group_iter
example[ci]
Suppress new clang warningBenchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/563b5476cf13afdeff70fe120ad9d4308da9350b
Breaking changes
Known issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.6...v.3.2.7
Published by SanderMertens about 1 year ago
add
/remove
operations when entity already has the componentThis version includes the following bugfixes:
serialize_alerts
is enabled but module is not importedecs_map_t
macro APIThis version includes the following improvements:
[c]
Fix inconsistencies between column index and type index in table API[c]
Fix naming inconsistencies in table API[cpp]
Fix inconsistencies between column index and type index in flecs::table
API[cpp]
Fix naming inconsistencies in flecs::table
API[cpp]
Add component::member
overload that takes pointer to member (thanks @ZeroErrors!)[cpp]
Add const
to flecs::string::size
and flecs::string::length
(thanks @yuyoyuppe!)[cpp]
Add world::scope(const char*)
method (thanks @sasichkamega!)[meta]
Add support for packed structs (thanks @ZeroErrors!)[meta]
Remove unused size/alignment from EcsMetaType
(thanks @ZeroErrors!)[rest]
Reduce amount of default enabled parameters for REST query endpoint[internals]
Simplify table data structures[internals]
Improve organization and naming of source files[doc]
Add note to FAQ about why (recycled) entity ids can be large[doc]
Add Tempest Rising to README[doc]
Add note on empty entities to cleanup order[ci]
Add msys/mingw builds to CI[ci]
Fix orphaned testsBenchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/e66a97d07528be158c1875b7193612904d203ef7
Breaking changes
Known issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.5...v3.2.6
Published by SanderMertens about 1 year ago
This version includes the following bugfixes:
ecs_count
didn't include prefabs and disabled entitiesOVERRIDE
flag in plecs scriptsflecs.monitor
without flecs.meta
removed
argument was not correctly passed by ecs_commit
ecs_commit
wouldn't enter deferred mode while executing the operationecs_iter_t::other_table
would get reset for observers after event propagation.get()
on flecs::table
/flecs::range
from stageifdef
that checked for MSVC
instead of POSIX
(thanks @MilanDierick!)interval
and rate
This version includes the following improvements:
[core]
Remove ability to get entity id array as field with index 0 (thanks @ZeroErrors!)[c]
Add ecs_singleton_set_ptr
(thanks @darkuranium!)[cpp]
Add entity_builder::scope
method that returns world object scoped to entity[cpp]
Add flecs::iter::entities
method (thanks @ZeroErrors!)[cpp]
Add world::run_pipeline<T>
overload (thanks @ZeroErrors!)[cpp]
Add world::target
method (thanks @ZeroErrors!)[cpp]
Add world::get_info
, remove redundant functions (thanks @ZeroErrors!)[pipeline]
Add support for multithreading to ecs_run_pipeline
(thanks @ZeroErrors!)[meta]
Add support for member value ranges[json]
Serialize alerts from children in entity serializer[json]
Add option to serialize incoming relationship edges for entity[alerts]
Add retain_period
to alert configuration[alerts]
Make it possible for alerts to change severity based on a condition[alerts]
Add ability to generate alerts for member values that are out of range[alerts]
Reduce alert detection interval to 0.5 seconds[monitor]
Add WorldSummary
component[expr]
Implement parent()
, name()
and doc_name()
functions in expression parser[http]
Fix unused parameter warning (thanks @MilanDierick!)[doc]
Fix quickstart example[doc]
Fix filenames in documentation comments (thanks @ZeroErrors!)[doc]
Reduce usage of auto
in C++ examples[doc]
Remove redundant functions from C++ examples[doc]
Update C++ examples that used older/more verbose API methods[ci]
Use stricter warning settings to compile code warning free[ci]
Switch asan build to run on Linux, which includes leakage reporting[ci]
Build code on additional compiler versions[cmake]
Add FLECS_STRICT
flag that enables Werror
and stricter warning settingsBenchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/8539a8634bc6cc99a61efd5919ffe8f02c6b3478
Breaking changes
ecs_field
no longer returns the entity id array (https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-6425615)ecs_lookup_symbol
function has an additional recursive
argument (https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-6486657)Known issues:
https://github.com/SanderMertens/flecs/issues/965
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.4...v3.2.5
Published by SanderMertens over 1 year ago
This version includes the following bugfixes:
children()
on builtin Wildcard
/This
entitiesThis version includes the following improvements:
[alerts]
Implement alert addon[cpp]
Add world::children
method for iterating root entities[expr]
Add ecs_interpolate_string
function[expr]
Add support for evaluation of dotexpressions on variables (e.g. $foo.x
)[rules]
Add support for nested query terms
[queries]
Reduce overhead of query cache entry by not inlining infrequently used fields[queries]
Reduce complexity and indirection of query cache data structures[systems]
Allow rate/interval to be modified with ecs_system_init
[pipelines]
Add support for integration with external tasks systems (thanks @gsnook!)[docs]
Correct parameter naming of flecs_hashmap_init
(thanks @kagetu!)[docs]
Add section on task systems to system manual[core]
Allow Exclusive
property to be removed from (unused) ids[ux]
Improve error messages in flecs_bulk_new
, ecs_rule_iter
[internals]
Improve naming of functions, constants and add more comments[internals]
Don't emit unnecessary TableFill
/TableEmpty
events[internals]
Don't emit unnecessary TableCreate
/TableDelete
events[internals]
Revalidate observer cache in more scenarios (reduces cache invalidation events)[internals]
Remove redundant calls to defer_begin
/defer_end
in bootstrap[internals]
Improve performance of id record creation for pairs[internals]
Don't inline infrequently used fields in ecs_table_t
[internals]
Remove dead sorting code (thanks @jbarthelmes!)Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/f1a776066fc6d857c9aa1e7c3d7ff59069583750
Known issues:
https://github.com/SanderMertens/flecs/issues/969
https://github.com/SanderMertens/flecs/issues/965
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.3...v3.2.4
Published by SanderMertens over 1 year ago
This version includes the following bugfixes:
$this
termsECS_PRIVATE
in ECS_STRUCT
This version includes the following improvements:
[c]
Change ecs_owns_id
from macro to function[queries]
Reset query match counters after iteration has finished (improves change detection usability in systems)[metrics]
Add support for metrics that count the number of entities with an id[http]
Enable blocking for HTTP send call to improve stability of sending large replies[docs]
Fix broken links in documentation (thanks @MewSoul!)[meson]
Link with ws2_32
for Windows builds (thanks @randy408!)Known issues:
https://github.com/SanderMertens/flecs/issues/969
https://github.com/SanderMertens/flecs/issues/965
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.2...v3.2.3
Published by SanderMertens over 1 year ago
This version includes the following bugfixes:
EcsTypeKindLast
ecs_iter_fini
when using chained iteratorsWith
pair would assume type of pair targetecs_rule_var_count
, ecs_rule_var_name
and ecs_rule_var_is_entity
functions (thanks @copygirl!)0
sourceecs_pipeline_stats_get
when obtaining stats for pipeline with one task systemThis version includes the following improvements:
[cpp]
Don't compile ECS_FUNC_*
marco's for C code (thanks @aganm!)[cpp]
Add component::constant
overload that works with enum classes[cpp]
Remove entity_view::delta_time
function[cpp]
Change argument of enable_rest
to HTTP port[c]
Remove unnecessary sep
variable initialization in ecs_new_from_path_w_sep
(thanks @copygirl!)[c]
Add port
member to ecs_app_desc_t
[http]
use non-blocking socket for recv
which increases stability for servers with many clients[docs]
Add note on pipeline switching performance[docs]
Update outdated cascade
example in quickstart[docs]
Fix incorrect comment for iterable::each
(thanks @ZeroErrors!)[docs]
Fix error in quickstart example[json]
Improve error handling of JSON iterator serializer[rest]
Propagate serialization errors to REST endpoints[rest]
Log errors that happen while replying to REST request to console[metrics]
Improved logic for deriving metric name from enum constant in untyped_component::metric
[internals]
Implement new entity index data structure[internals]
Replace hash function with wyhash[portability]
Emulate POSIX atomics for systems that do not have GNU builtins (thanks @aganm!)[portability]
Add compiler support for tinycc (thanks @aganm!)[ci]
Add vs2017 job to CIBenchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/7bb9d7cf672f0b5991b5faff4f5f8cc5afcd94ef
Breaking changes:
entity_view::delta_time
method has been removed (https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-5841519)app_builder::enable_rest
has changed (https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-5888615)Known issues:
https://github.com/SanderMertens/flecs/issues/969
https://github.com/SanderMertens/flecs/issues/965
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.1...v3.2.2
Published by SanderMertens over 1 year ago
FLECS_LOW_FOOTPRINT
compiler flag that reduces memory usageThis version includes the following bugfixes:
ecs_query_next_table
OnRemove
observer wasn't invoked after deferred batched clear(*, T)
pair termThis version includes the following improvements:
[cpp]
Add flecs::world::reset
method deletes/recreates a world[cpp]
Add get
/set
methods to flecs::world
for singleton pairs[cpp]
Add method to get filter from flecs::rule
(thanks @Thinkofname!)[cpp]
Add flecs::rule::rule_str
method[cpp]
Add flecs::entity_view::path_from
method[cpp]
Allow iterable::set_var
to be called for filters[cpp]
Add flecs::iter::column_index
method[cpp]
Add flecs::table::column_size
method[c]
Add ecs_field_column_index
function[c]
Add ecs_table_get_column_size
function[queries]
Improve performance of trivial query iteration (addresses performance regression in 3.2.0)[queries]
Implement change detection for flattened tables[filters]
Return data for OR terms if the type of terms in the OR chain is the same[filters]
Reuse same sizes
array for all results of filter (improves cache locality during iteration)[filters]
Improve performance of filter creation[metrics]
Implement metrics addon[docs]
Add scene management example (thanks @benjitrosch!)[docs]
Fix typos/grammar issues in relationships doc (thanks @oznogon!)[docs]
Fix outdated docs for ecs_filter_iter[docs]
Fix outdated docs for ecs_bulk_new_w_id[docs]
Fix link to FAQ in readme[cmake]
Update version number to 3.2 (thanks @podsvirov!)[internals]
Reduce overhead of tables that don't use bitsets/union relationships/flattening[internals]
Add FLECS_LOW_FOOTPRINT
compiler flag for reduced memory utilizationBreaking changes:
when_changed
argument has been added to ecs_query_populate
(https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-5484364)Known issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
https://github.com/SanderMertens/flecs/issues/951
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.0...v3.2.1
Published by SanderMertens over 1 year ago
ecs_get_target
would try inheritance for relationship with DontInherit
custom_phases_no_builtin
C++ exampleecs_get_target_id_for
ecs_iter_t::offset
in component hooksdotmember
ecs_rule_get_filter
ecs_set_entity_generation
ecs_get_target_for_id
from stageworld::vector
delta_system_time
for interval systems[c]
Add missing const
qualifiers to query functions[c]
Add missing const
qualifier to ecs_id_in_use
[c]
Add ecs_get_parent
convenience function[cpp]
Add flecs::rule::move
method[cpp]
Don't assert when creating invalid rule, add flecs::rule::is_valid
method[cpp]
Add flecs::entity_builder::set_alias
method[cpp]
Add API for singleton pairs to flecs::world
[cpp]
Ensure world is cleaned up when app().run()
returns[rules]
Rule engine refactor[rules]
Improved support for Not
, Optional
, Or
operators[rules]
Added support for fuzzy name matching[rules]
Added support for dependent terms[rules]
Added a query profiler for analyzing term performance[rules]
Many improvements to performance, VM, data structures, runtime[rules]
Add option to auto-match unresolved identifiers at query creation time by name[rules]
Add support for using any (_
) variable as term source[rules]
Add support for queries that start with Not/Optional terms[rules]
Add support for transitive queries with any (_
) target[rules]
Add support for transitive queries with self
modifier for target[rules]
Allow for usage of relationships other than IsA
for component inheritance[rules]
Add support for parsing variable values from argument string[rules]
Add performance optimization for trivial rule queries[filters]
Default to InOutNone
if the term type is not known beforehand[filters]
Change interface for Or operator to allow for neighboring Or terms[queries]
Improve query sorting performance[queries]
Add assert on invalid order_by
component id[core]
Implement relationship flattening[core]
Replace all remaining occurrences of ecs_vector_t
with ecs_vec_t
[core]
Cache (ChildOf, *)
id record on world for improved performance[core]
Cache (Identifier, Name)
id record on world for improved performance[core]
Add AlwaysOverride
component property[core]
Ensure children of a prefab are also tagged as prefabs[core]
Add stricter check on adding properties to components that are already in use[meta]
Add conversion to cursor API from bool to int[meta]
Throw less confusing error in cursor API when assigning out of bounds element/member[rest]
Add validity checks on offset
/limit
parameters[rest]
Add functions to call REST API from C[http]
Implement request caching (replaces caching mechanism of REST API)[doc]
Fix conflicting declaration in quickstart example[doc]
Fix outdated code example in systems manual[doc]
Add build instructions to quickstart for cmake and bake[doc]
Fix incorrect link in README to prefab documentation[doc]
Add parent()
, target_for()
to query section of relationship manual[doc]
Expand explorer section of REST manual with query examples[script]
Add experimental support for loading managed scripts[script]
Add experimental support for assemblies[script]
Allow for setting nested members in expression[script]
Add support for deriving variable name from assigned member[script]
Add support for adding variables as components[script]
Make EXPR
/META
addon mandatory when using script addon[script]
Add support for using foo.*
syntax[script]
Add support for module foo
syntax[script]
Add Flecs script tutorial[script]
Add support for assigning singletons with $ :- Component{}
[log]
Add ecs_log_get_level
ecs_vector_t
type has been removed from the source and replaced with ecs_vec_t
(https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-5137606)https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.1.5...v3.2.0
Published by SanderMertens over 1 year ago
This version includes the following bugfixes:
on_set
hook was not called before observers during command batchingecs_id_is_tag
to bool
flecs::world
objectThis version includes the following improvements:
[core]
Allow for ecs_ensure
to be called from stage[core]
Add Traversable
property to allow for relationships that are acyclic but not traversable[core]
Only apply DontInherit
property to IsA
traversal[meta]
Serialization & deserialization support for opaque types[meta]
Add methods for deserializing values & entities to C++ API[json]
Add option to JSON serializer to serialize all contents of a matched table[json]
Add functions for serializing/deserializing world to/from JSON[observers]
Improve performance of invoking multiple observers for the same event[queries]
Improve detection and handling of query terms without data[cpp]
Remove redundant world argument from flecs::entity
constructor in id::second()
[cpp]
Add begin/end
methods to flecs::type
so it can be iterated[cpp]
Add entity::view
method for safe upcast from staged flecs::entity
object[cpp]
Automatically disable enum reflection for compilers that don't support it[docs]
Improve documentation of get_mut
[docs]
Rewrite of the FAQ[docs]
Add query example for singletons, add singleton section to quickstart[ux]
Add assert when not using stage when creating iterator in multi threaded world[internals]
Use observers for notifying queries of new tables[internals]
Improve performance of ecs_bulk_init
by using faster function to update entity index[internals]
Implement small utility API for parsing JSON stringsBreaking Changes:
Acyclic
property has been split up into an Acyclic
and Traversable
property (https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-4871023)Known issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.1.4...v3.1.5
Published by SanderMertens over 1 year ago
get_mut
are now immediately visible to systems & other get_mut
calls (https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-4762991)Performance improved in this release for 116 in a total of 120 benchmarks! Here are a few of the most significant improvements between v3.0.0 and v3.1.4 (which also includes improvements from command batching & the observer cache):
Benchmark | v3.0.0 | v3.1.4 | Difference |
---|---|---|---|
has_id | 8.92ns | 4.38ns | +50.90% |
get_id | 7.18ns | 3.69ns | +48.61% |
get_mut_id | 12.22ns | 7.35ns | +39.85% |
set_id | 29.13ns | 11.85ns | +59.32% |
add_remove_1_tag | 20.43ns | 17.63ns | +13.71% |
add_remove_cmd_16_tags | 40.40ns | 17.55ns | +56.56% (command batching) |
get_mut_cmd_16 | 47.17ns | 18.65ns | +60.46% (command batching) |
create_delete_tree_depth_10 | 19.27us | 8.24us | +57.25% |
emit_propagate_depth_10 | 1.52us | 194.33ns | +87.25% (observer cache) |
query_iter_16_tags_4_terms | 56.39ns | 26.15ns | +53.63% |
This version includes the following bugfixes:
HAVE_EXECINFO
is defined on all platformsflecs_cpp.c
to the meson build file<strong></strong>
from documentation markdown headersflecs::ref
would store stage instead of worldecs_set_name
that overlaps with current nameset<R, T>
ecs_bulk_init
with existing tableChildOf
pair while removing nameThis version includes the following improvements:
[core]
Require entities to be alive for ECS operations[core]
Deferred ecs_get_mut_id
now returns reference to actual component if it exists (thanks @dmlary!)[c]
Add matching *_DECLARE
convenience macro's for each *_DEFINE
macro[cpp]
Add world::get_ref
[docs]
Lots of small improvements to documentation (thanks @copygirl!)[docs]
Move build instructions from README to Quickstart
[docs]
Improve build instructions for gcc/clang on Windows[ux]
Add example for entity::emplace
[internals]
Faster map implementation that no longer stores a variable size payload[internals]
Use array vs. sparse set to lookup id records with low ids[internals]
Replace usage of ecs_vector_t
in sparse set with faster ecs_vec_t
[internals]
Add new/faster sparse set operations that assume id is alive[internals]
Cleanup sparse set API[internals]
Replace code of ecs_has_id
with faster implementation[internals]
Remove redundant code from table graph operations[internals]
Improve performance of defer/suspend mechanism[internals]
Improve performance of pipelines queries by adding self
flag to System
termBreaking Changes:
get_mut
now returns pointer to existing component (https://github.com/SanderMertens/flecs/discussions/466#discussioncomment-4762991)Known issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.1.3...v3.1.4
Published by SanderMertens almost 2 years ago
This version includes the following bugfixes:
foo::bar::100
)self
term is created before idecs_remove_all
/ecs_delete_with
ChildOf
pair and deferred ecs_entity_init
EcTableHasObserved
flag (fixes reachable cache asserts)Pipeline
component (fixes segfault when using multiple pipelines)This version includes the following improvements:
[entities]
Use empty separator string to prevent tokenization of name in ecs_entity_init
[cpp]
Add const to query class methods[cpp]
Add const to iterable class methods[cpp]
Add emplace_override
for pairs[queries]
Prevent query rematching from happening more than once per query/frame[pipelines]
Prevent adding empty operation at end of schedule[table]
Support calling ecs_table_get
from stage[units]
Add units for hyperlinks, images and files[units]
Add Length::Pixel
unit[docs]
Add doxygen headers to source and include files[docs]
Add edcs_get_depth
, entity_view::depth
, ecs_table_get_depth
, table::depth
functions[docs]
Add doxygen documentation[docs]
Replace old flecs.dev site with doxygen generated one[docs]
Remove dead links to docsforge pages[docs]
Add instructions for how to fix compilation errors related to time/socket functions[ux]
Improved C/C++ APIs for working with tables[ux]
Remove redundant tracing when component is reregistered[ux]
Throw assert when trying to delete entity/component that is still queried for[internals]
Move code out of query iterator in preparation of union/bitset support for filters[internals]
Remove redundant relationship traversal call from table edge creation codeKnown issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Published by SanderMertens almost 2 years ago
OnStart
phase which is ran only in the first frameThis version includes the following bugfixes:
flecs::bitmask
)use_low_id
was not set by ECS_COMPONENT
no_readonly
systemself
flag would not iterate all permutationsget_mut<First, Second>
would always return First*
This version includes the following improvements:
[cpp]
Add missing const
to flecs::world
methods[cpp]
Add missing const
to flecs::entity_view
methods[cpp]
Change argument type of run_pipeline
to flecs::entity_t
[cpp]
Add observer::query
method[pipeline]
Refactor of pipeline code[pipeline]
Add OnStart
phase for systems that are ran only at startup[rest]
Add set
endpoint for remotely setting component values[rest]
Add delete
endpoint for remotely deleting an entity[internals]
Add debugging instrumentation to allocator[internals]
Remove redundant code[internals]
Add missing tests for get
pair operations[internals]
Split off entity filter code (union relationships/bitsets) from query iterator codeKnown issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Published by SanderMertens almost 2 years ago
This version includes the following bugfixes:
InOutNone
on_add
hooks when using ecs_bulk_init
no_readonly
systems in multithreaded appsIsA
relationshipfloat
to ecs_ftime_t
in system addonflecs::filter
move assignmentThis version includes the following improvements:
[c++]
Add support for run callback to C++ observers[c++]
Add typed method for getting iterator ctx in C++ API[c++]
Add support for run callback to C++ systems[c++]
Add .term<R>(string)
and .term(R, string)
overloads to filter builder[c++]
Add shorthand with
/without
methods to filter builder API[c++]
Add pair support to emplace
[c++]
Add pair support for flecs::ref
[c++]
Ensure set
, set_override
use move for pairs where possible[journal]
Implement journaling addin[queries]
Improve performance of query rematching[filters]
Allow for creation of named filters/rules[filters]
Cache id record on filter terms for faster matching[rules]
Enable overriding transitive behavior with self
flag[observers]
Refactor observer code for improved event propagation performance[observers]
Implement reachable id cache to improve event performance of adding relationships[pipeline]
Add doc name to pipeline schedule tracing[pipeline]
Exclude systems from pipeline with disabled phase/disabled module[pipeline]
Run single threaded systems on main thread[iterator]
Add ecs_iter_first
function[query DSL]
Add query DSL support for specifying flags for (r, t)
notation[commands]
Reduce lookups during command batching (performance improvement)[storage]
Reduce overhead of table graph edges, improve table creation speed[stats]
Always use double
for metric types to avoid precision issues[stats]
Add REST and HTTP statistics[units]
Add frequency units[rest]
Add endpoint for requesting results of existing query[rest]
Add endpoint for enabling/disabling entities[rest]
Add caching for named query requests[rest]
Start/stop HTTP servers when enabling/disabling REST module[http]
Send HTTP headers in send thread[http]
Improve response times and handling of HTTP preflight requests[http]
Always use double precision for time values in HTTP server[doc]
Add system examples[doc]
Update C++ examples with simplified query variable syntax[doc]
Add example to show how to forward declare component/tag variables[doc]
Fix typos in manuals[doc]
Add custom phase example that does not use builtin phases[doc]
Remove outdated reference to ecs_scope_iter
[doc]
Replace flecs::entity
with flecs::entity_t
in C++ order_by
example[doc]
Improve pipeline section of manual[doc]
Add observer examples for C/C++[ux]
Improve error message for conflicting symbols during implicit component registration[build]
Improve directory structure of cmake build to match visual studio[build]
Improve bazel build to support .inl files[internals]
Don't free chunks in flecs_sparse_clear
(performance improvement)[internals]
Use faster sparse set function in table event batching admin[internals]
Replace map with faster sparse set in generic allocator[internals]
Use faster storage for id records in low id range[internals]
Inline type_info sparse setKnown issues:
https://github.com/SanderMertens/flecs/issues/844
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314
Published by SanderMertens about 2 years ago
This version includes the following bugfixes:
Not
operator in combination with relationship traversaliter
callsctx
and ctx_free
ecs_ref_t
would do more lookups than necessarymove
hook when moving entity in tableapp::run
OnRemove
observer adds component to deleted entityecs_add_path
when path is rootno_staging
system activated at end of schedule_
in ECS_STRUCT
ECS_STRUCT
This version includes the following improvements:
[c]
Added ecs_children
/ ecs_children_next
functions for iterating an entity's children[c++]
Added entity_view::parent
function (shorthand for target(flecs::ChildOf)
[c++]
Made calling world::module
in module constructor optional[c++]
Added each
/iter
overloads that accept a stage[c++]
Allow module entity to be retrieved using world::entity
/ world::component
[threading]
Allowed using the world (vs. stage) in single threaded system running in multi threaded apps[commands]
Command batching, which reduces archetype moves for entities when doing deferred operations[entity DSL]
Improved syntax[entity DSL]
Added entity DSL examples[entity DSL]
Added support for multiline strings[entity DSL]
Added support for anonymous entities[entity DSL]
Added variable support (reusable values)[entity DSL]
Added support for using simple arithmetic expressions[entity DSL]
Implemented a vscode extension for DSL syntax highlighting[os api]
Added function to get OS API struct (for easier support in language bindings)[queries]
Added ability to add user-defined context to query groups[queries]
Added assert on invalid usage of Filter
in combination with queries[queries]
Added ecs_query_next_table
for fast iteration where only tables are needed[queries]
Improved performance/cleanup technical debt of query change detection[queries]
Added ecs_query_get_group_info
function[observers]
Added EcsFilter
/flecs::Filter
term flag for terms only for filtering, not receiving events[observers]
Added level 3 trace that shows which observers are invoked[pipeline]
Improved detection of sync points, correctly handle wildcard queries[pipeline]
Always insert sync point after no_staging
system to ensure schedule consistency[stats]
Added FLECS_ACCURATE_COUNTERS
for tracking allocation counters in multithreaded apps[stats]
Added new statistics for allocators, events and performance tracking[stats]
Organized statistics into categories[stats]
Improved system time measurement so it no longer includes merge time[stats]
Fixed issue where measuring system time for last part of schedule could be skipped[stats]
Use 64bit counters to reduce occurrences of stat overflows[stats]
Ensure counter metrics are monotonically increasing in case of overflow[rest]
Added brief descriptions to stats endpoints for improved visualization in explorer[http]
Don't enqueue requests for connections that are no longer alive[http]
Don't keep HTTP connection open longer than timeout[http]
Set timeout on connection receive socket[http]
Set SO_KEEPALIVE
on connection socket so server is notified when client drops connection[http]
Implement send queue to prevent blocking on main thread when sending reply[http]
Fixed issue with sending replies without payload[ux]
Throw assert when component id overlaps with reserved bits for id flags[ux]
Added typename to invalid ctor/dtor error messages[ux]
Added assert when attempting to use ecs_bulk_init
on stage[internals]
Reduced number of heap allocations with internals now mostly using custom allocators[internals]
Allow for overriding of ECS_HI_COMPONENT_ID
macro[internals]
Allow for overriding of ECS_ID_CACHE_SIZE
macro[internals]
Reduced bits reserved for id flags from 8 to 4[internals]
Improved detection of platforms where execinfo/backtrace
is not available[internals]
Improved strbuf
API so it relies less on strlen
[internals]
Improved performance of flecs_sparse_clear
Known issues:
https://github.com/SanderMertens/flecs/issues/765
https://github.com/SanderMertens/flecs/issues/714
https://github.com/SanderMertens/flecs/issues/620
https://github.com/SanderMertens/flecs/issues/478
https://github.com/SanderMertens/flecs/issues/314