Releases: mlange-42/arche
Arche v0.13.3
Arche v0.13.3
Arche is an archetype-based Entity Component System for Go.
Arche's Features
- Simple core API. See the API docs.
- Optional logic filter and type-safe generic API.
- Entity relations as first-class feature. See the User Guide.
- World serialization and deserialization with arche-serde.
- No systems. Just queries. Use your own structure (or the Tools).
- No dependencies. Except for unit tests (100% coverage).
- Probably the fastest Go ECS out there. See the Benchmarks.
Changelog
Performance
- Simplifies the archetype graph to use only a single list of neighbors per node, saving a bit of memory (#433)
Documentation
Arche v0.13.2
Arche v0.13.2
Arche is an archetype-based Entity Component System for Go.
Arche's Features
- Simple core API. See the API docs.
- Optional logic filter and type-safe generic API.
- Entity relations as first-class feature. See the User Guide.
- World serialization and deserialization with arche-serde.
- No systems. Just queries. Use your own structure (or the Tools).
- No dependencies. Except for unit tests (100% coverage).
- Probably the fastest Go ECS out there. See the Benchmarks.
Changelog
Bugfixes
Arche v0.13.1
Arche v0.13.1
Arche is an archetype-based Entity Component System for Go.
Arche's Features
- Simple core API. See the API docs.
- Optional logic filter and type-safe generic API.
- Entity relations as first-class feature. See the User Guide.
- World serialization and deserialization with arche-serde.
- No systems. Just queries. Use your own structure (or the Tools).
- No dependencies. Except for unit tests (100% coverage).
- Probably the fastest Go ECS out there. See the Benchmarks.
Changelog
Bugfixes
Arche v0.13.0
Arche v0.13.0
Arche is an archetype-based Entity Component System for Go.
Arche's Features
- Simple core API. See the API docs.
- Optional logic filter and type-safe generic API.
- Entity relations as first-class feature. See the User Guide.
- World serialization and deserialization with arche-serde.
- No systems. Just queries. Use your own structure (or the Tools).
- No dependencies. Except for unit tests (100% coverage).
- Probably the fastest Go ECS out there. See the Benchmarks.
Changelog
Features
- Adds function
ResourceTypeID
to register/get a resource ID from areflect.Type
(#420)
Other
- Fix component type in examples/base (#419)
Arche v0.12.0
Arche v0.12.0
Arche is an archetype-based Entity Component System for Go.
Arche's Features
- Simple core API. See the API docs.
- Optional logic filter and type-safe generic API.
- Entity relations as first-class feature. See the User Guide.
- World serialization and deserialization with arche-serde.
- No systems. Just queries. Use your own structure (or the Tools).
- No dependencies. Except for unit tests (100% coverage).
- Probably the fastest Go ECS out there. See the Benchmarks.
Changelog
Features
Documentation
- Adds a showcase chapter "Made with Arche" to the documentation page (#411)
Performance
- Re-arrange struct fields to save memory in a few places (#413)
Bugfixes
First-time contributors
Arche v0.11.0
Arche v0.11.0
Arche is an archetype-based Entity Component System for Go.
Arche's Features
- Simple core API. See the API docs.
- Optional logic filter and type-safe generic API.
- Entity relations as first-class feature. See the User Guide.
- World serialization and deserialization with arche-serde.
- No systems. Just queries. Use your own structure (or the Tools).
- No dependencies. Except for unit tests (100% coverage).
- Probably the fastest Go ECS out there. See the Benchmarks.
Changelog
Release Highlights
Arche now has a dedicated documentation site with a structured user guide and background information. We hope that this will lower the barrier to entrance significantly.
Further, Arche got a few new features:
Query.EntityAt
was added for random access to query entities.- Generic filters now support
Exclusive
, like ID-based filters. - Build tag
debug
improves error messages in a few places where we rely on standard library panics for performance.
Breaking changes
- Renames types in
ecs.stats
to follow Go standards.
stats.WorldStats
->stats.World
,stats.NodeStats
->stats.Node
, ... (#388)
Features
- Adds method
Query.EntityAt()
, useful for things like random sampling of entities (#358) - Adds build tag
debug
to improve error messages in a few places where we rely on standard library panics for performance (#377) - Adds method
FilterX.Exclusive()
to all generic filters (#381)
Documentation
- Adds a dedicated Arche User Guide web site (#380, #382, #383, #384, #385)
- Adds
BENCHMARKS.mdbenchmarks for a tabular overview of the runtime cost of typical Arche ECS operations (#367, #372) - Link benchmarking code in
README.md
and benchmarking tables (#375) - Documents build tags
tiny
anddebug
in package docs ofecs
(#377) - Adds examples to demonstrate the use of non-ECS data structures together with ECS (#379)
Bugfixes
- Prevents using the same component multiple times in any operations, through panic (#357)
Performance
- Generic filters use
Mask
instead of slowerMaskFilter
if no components are excluded (#381)
Other
- Improves error messages for running out of world locks, components or resources, and on unbalanced unlock (#363)
- Adds benchmarks for query creation (#366)
- Upgrade to Go 1.22 in CI (#376)
- Renames directory
examples
to_examples
to accommodate changed test coverage behaviour of Go 1.22 (#376) - In unit tests, error messages of all panics are asserted (#377)
Arche v0.10.1
Arche v0.10.1
Arche is an archetype-based Entity Component System for Go.
Arche's Features
- Simple core API. See the API docs.
- Optional logic filter and type-safe generic API.
- Entity relations as first-class feature. See Architecture.
- World serialization and deserialization with arche-serde.
- No systems. Just queries. Use your own structure (or the Tools).
- No dependencies. Except for unit tests (100% coverage).
- Probably the fastest Go ECS out there. See the Benchmarks.
For more information, see the GitHub repository and API docs.
Changelog
Bugfixes
- Fix IsRelation check to allow for non-struct components, like type aliases (#354)
Arche v0.10.0
Arche v0.10.0
Arche is an archetype-based Entity Component System for Go.
Arche's Features
- Simple core API. See the API docs.
- Optional logic filter and type-safe generic API.
- Entity relations as first-class feature. See Architecture.
- World serialization and deserialization with arche-serde.
- No systems. Just queries. Use your own structure (or the Tools).
- No dependencies. Except for unit tests (100% coverage).
- Probably the fastest Go ECS out there. See the Benchmarks.
For more information, see the GitHub repository and API docs.
Changelog
Release highlights
- Arche supports full world serialization and deserialization, in conjunction with arche-serde (#319)
- Supports 256 instead of 128 component types as well as resource types and engine locks (#313)
- Generic API supports up to 12 instead of 8 component types (#324)
- Reworked event system with granular subscription to different event types and components (#333, #334, #335, #337, #340)
Breaking changes
MaskTotalBits
changed from 128 to 256 (#313)- Removes
Mask.Lo
andMask.Hi
, internal mask representation is now private (#313) Filter.Matches(Mask)
becameFilter.Matches(*Mask)
; same for allFilter
implementations (#313)
This change was necessary to get the same performance as before, despite the more heavyweight implementation of the now 256 bitsMask
.- Component and resource IDs are now opaque types instead of type aliases for
uint8
(#330) - Restructures
EntityEvent
to remove redundant information and better handle relation changes (#333) - World event listener changed from a simple function to a
Listener
interface (#334) - Removes
World.ComponentType(ID)
, use functionComponentInfo(ID)
instead (#341)
Features
- Adds functions
ComponentInfo(*World, ID)
andResourceType(*World, ResID)
(#315, #318) - Adds methods
World.Ids(Entity)
andQuery.Ids()
to get component IDs for an entity (#315, #325) - Entities support JSON marshalling and unmarshalling (#319)
- The world's entity state can be extracted and re-established via
World.DumpEntities()
andWorld.LoadEntities()
(#319, #326) - Adds functions
ComponentIDs(*World)
andResourceIDs(*World)
to get all registered IDs (#330) - Adds methods
Mask.And
,Mask.Or
andMask.Xor
(#335) - Adds build tag
tiny
to restrict to 64 components for an extra bit of performance (#338) - Adds methods
Relations.Exchange()
,Relations.ExchangeBatch()
,Relations.ExchangeBatchQ()
for exchange with relation target (#342) - Generic API adds
Exchange.WithRelation()
and optional target argument for operations with relation target (#342) - Generic API adds
MapX.AddBatch()
,MapX.AddBatchQ()
,MapX.RemoveBatch()
andMapX.RemoveBatchQ()
(#342) - Generic API adds optional relation target argument to most
MapX
methods (#342) - Generic API adds
FilterX.Filter()
to get anecs.Filter
from a generic one (#342) - Generic API adds
Map.SetRelationBatch()
andMap.SetRelationBatchQ()
(#344) - All batch operations (except entity creation) return the number of affected entities (#348)
Performance
- Reduces archetype memory footprint by using a dynamically sized slice for storage lookup (#327)
- Reduces event listener overhead through granular subscriptions and elimination of a heap allocation (#333, #334, #335, #337, #340)
Documentation
- Adds an overview to packages
ecs
andgeneric
on how to achieve ECS manipulation operations (#345)
Other
- Entity generation data type changed from
uint16
touint32
(#317) - Adds unitoftime/ecs to competition benchmarks (#311)
- Adds competition benchmarks for accessing 10 components (#328)
Arche v0.9.0
Infrastructure
- Upgraded to Go 1.21 toolchain (#308)
Arche v0.8.1
Documentation
- Emphasize in
Entity
andWorld
docs that entities are intended to be stored and passed by copy, not by pointer (#306)