{"id":16117112,"url":"https://github.com/mlange-42/arche","last_synced_at":"2026-03-01T02:31:51.226Z","repository":{"id":65693640,"uuid":"597533916","full_name":"mlange-42/arche","owner":"mlange-42","description":"Arche -- Archetype-based Entity Component System (ECS) for Go.","archived":false,"fork":false,"pushed_at":"2025-04-01T08:49:20.000Z","size":2081,"stargazers_count":174,"open_issues_count":6,"forks_count":10,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-07T23:53:35.933Z","etag":null,"topics":["ecs","entity-component-system","go","golang","individual-based-modelling"],"latest_commit_sha":null,"homepage":"https://mlange-42.github.io/arche/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mlange-42.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-04T20:52:13.000Z","updated_at":"2025-06-04T06:47:01.000Z","dependencies_parsed_at":"2023-04-05T06:32:31.892Z","dependency_job_id":"24df6244-6424-468c-b73f-315caab25e2c","html_url":"https://github.com/mlange-42/arche","commit_stats":{"total_commits":314,"total_committers":2,"mean_commits":157.0,"dds":0.08917197452229297,"last_synced_commit":"ac5e6cca56a45783c8fc6c4b1252575bac6e93ff"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/mlange-42/arche","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlange-42%2Farche","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlange-42%2Farche/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlange-42%2Farche/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlange-42%2Farche/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mlange-42","download_url":"https://codeload.github.com/mlange-42/arche/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlange-42%2Farche/sbom","scorecard":{"id":653153,"data":{"date":"2025-08-11","repo":{"name":"github.com/mlange-42/arche","commit":"3fabf390f2639e2546213ebd125087fb9e53b51f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":5,"reason":"dependency not pinned by hash detected -- score normalized to 5","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmarks.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/benchmarks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmarks.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/benchmarks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmarks.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/benchmarks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmarks.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/benchmarks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmarks.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/benchmarks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmarks.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/benchmarks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmarks.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/benchmarks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:146: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:176: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:178: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:84: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:97: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:127: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:129: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:137: update your workflow using https://app.stepsecurity.io/secureworkflow/mlange-42/arche/tests.yml/main?enable=pin","Warn: goCommand not pinned by hash: .github/workflows/tests.yml:105","Warn: goCommand not pinned by hash: .github/workflows/tests.yml:106","Warn: goCommand not pinned by hash: .github/workflows/tests.yml:135","Info:   0 out of  26 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:  12 out of  15 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/benchmarks.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/publish.yml:12","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T13:59:48.948Z","repository_id":65693640,"created_at":"2025-08-21T13:59:48.949Z","updated_at":"2025-08-21T13:59:48.949Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29959048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T01:47:18.291Z","status":"online","status_checked_at":"2026-03-01T02:00:07.437Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ecs","entity-component-system","go","golang","individual-based-modelling"],"created_at":"2024-10-09T20:28:33.064Z","updated_at":"2026-03-01T02:31:51.189Z","avatar_url":"https://github.com/mlange-42.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Arche (logo)](https://user-images.githubusercontent.com/44003176/236701164-28178d13-7e52-4449-baa4-41b764183cbd.png)](https://github.com/mlange-42/arche)\n[![Test status](https://img.shields.io/github/actions/workflow/status/mlange-42/arche/tests.yml?branch=main\u0026label=Tests\u0026logo=github)](https://github.com/mlange-42/arche/actions/workflows/tests.yml)\n[![Coverage Status](https://img.shields.io/coverallsCoverage/github/mlange-42/arche?logo=coveralls)](https://badge.coveralls.io/github/mlange-42/arche?branch=main)\n[![Go Report Card](https://goreportcard.com/badge/github.com/mlange-42/arche)](https://goreportcard.com/report/github.com/mlange-42/arche)\n[![User Guide](https://img.shields.io/badge/user_guide-%23007D9C?logo=go\u0026logoColor=white\u0026labelColor=gray)](https://mlange-42.github.io/arche/)\n[![Go Reference](https://img.shields.io/badge/reference-%23007D9C?logo=go\u0026logoColor=white\u0026labelColor=gray)](https://pkg.go.dev/github.com/mlange-42/arche)\n[![GitHub](https://img.shields.io/badge/github-repo-blue?logo=github)](https://github.com/mlange-42/arche)\n[![DOI:10.5281/zenodo.7656484](https://img.shields.io/badge/10.5281%2Fzenodo.7656484-blue?label=doi)](https://doi.org/10.5281/zenodo.7656484)\n[![MIT license](https://img.shields.io/badge/MIT-brightgreen?label=license)](https://github.com/mlange-42/arche/blob/main/LICENSE)\n\n*Arche* is an [archetype](https://mlange-42.github.io/arche/background/architecture/)-based [Entity Component System](https://en.wikipedia.org/wiki/Entity_component_system) for [Go](https://go.dev/).\n\n\u003cdiv align=\"center\" width=\"100%\"\u003e\n\n\u0026mdash;\u0026mdash;\n\n[Features](#features) \u0026nbsp; \u0026bull; \u0026nbsp; [Installation](#installation) \u0026nbsp; \u0026bull; \u0026nbsp; [Usage](#usage) \u0026nbsp; \u0026bull; \u0026nbsp; [Tools](#tools) \u0026nbsp; \u0026bull; \u0026nbsp; [Design](#design) \u0026nbsp; \u0026bull; \u0026nbsp; [Benchmarks](#benchmarks)\n\u003c/div\u003e\n\n## Features\n\n* Designed for performance and highly optimized. See the [Benchmarks](#benchmarks).\n* Well-documented [API](https://pkg.go.dev/github.com/mlange-42/arche) and comprehensive [User Guide](https://mlange-42.github.io/arche/).\n* No systems. Just queries. Use your own structure (or the [Tools](#tools)).\n* No dependencies. Except for unit tests (100% [test coverage](https://coveralls.io/github/mlange-42/arche)).\n* World serialization and deserialization with [arche-serde](https://github.com/mlange-42/arche-serde).\n\n\u003e [!IMPORTANT]\n\u003e Arche has a successor: [Ark](https://github.com/mlange-42/ark).\n\u003e  - If you are new here, use [Ark](https://github.com/mlange-42/ark).\n\u003e  - If you use Arche's generic API, consider migrating to [Ark](https://github.com/mlange-42/ark). It will be easy.\n\u003e  - If you use Arche's ID-based API, stay with Arche.\n\u003e \n\u003e Arche will still be maintained further.\n\n## Installation\n\nTo use *Arche* in a Go project, run:\n\n```shell\ngo get github.com/mlange-42/arche\n```\n\n## Usage\n\nHere is the classical Position/Velocity example that every ECS shows in the docs.\nIt uses the type-safe [generic](https://pkg.go.dev/github.com/mlange-42/arche/generic) API.\n\nSee the [User Guide](https://mlange-42.github.io/arche/), [API docs](https://pkg.go.dev/github.com/mlange-42/arche) and\n[examples](https://github.com/mlange-42/arche/tree/main/_examples) for details.\nFor more complex examples, see [arche-demo](https://github.com/mlange-42/arche-demo).\n\n```go\npackage main\n\nimport (\n\t\"math/rand\"\n\n\t\"github.com/mlange-42/arche/ecs\"\n\t\"github.com/mlange-42/arche/generic\"\n)\n\n// Position component\ntype Position struct {\n\tX float64\n\tY float64\n}\n\n// Velocity component\ntype Velocity struct {\n\tX float64\n\tY float64\n}\n\nfunc main() {\n\t// Create a World.\n\tworld := ecs.NewWorld()\n\n\t// Create a component mapper.\n\tmapper := generic.NewMap2[Position, Velocity](\u0026world)\n\n\t// Create entities.\n\tfor i := 0; i \u003c 1000; i++ {\n\t\t// Create a new Entity with components.\n\t\tentity := mapper.New()\n\t\t// Get the components\n\t\tpos, vel := mapper.Get(entity)\n\t\t// Initialize component fields.\n\t\tpos.X = rand.Float64() * 100\n\t\tpos.Y = rand.Float64() * 100\n\t\tvel.X = rand.NormFloat64()\n\t\tvel.Y = rand.NormFloat64()\n\t}\n\n\t// Create a generic filter.\n\tfilter := generic.NewFilter2[Position, Velocity]()\n\n\t// Time loop.\n\tfor t := 0; t \u003c 1000; t++ {\n\t\t// Get a fresh query.\n\t\tquery := filter.Query(\u0026world)\n\t\t// Iterate it\n\t\tfor query.Next() {\n\t\t\t// Component access through the Query.\n\t\t\tpos, vel := query.Get()\n\t\t\t// Update component fields.\n\t\t\tpos.X += vel.X\n\t\t\tpos.Y += vel.Y\n\t\t}\n\t}\n}\n```\n\n## Tools\n\nSeveral tools for *Arche* are provided in separate modules:\n\n* [arche-serde](https://github.com/mlange-42/arche-serde) provides JSON serialization and deserialization for *Arche*'s World.\n* [arche-model](https://github.com/mlange-42/arche-model) provides a wrapper around *Arche*, and some common systems and resources.\nits purpose is to get started with prototyping and developing simulation models immediately, focussing on the model logic.\n* [arche-pixel](https://github.com/mlange-42/arche-pixel) provides OpenGL graphics and live plots for *Arche* using the [Pixel](https://github.com/gopxl/pixel) game engine.\n* [arche-demo](https://github.com/mlange-42/arche-demo) provides examples of *Arche* models, which can be viewed in a [live demo](https://mlange-42.github.io/arche-demo/).\n\n## Design\n\nUnlike most other ECS implementations, *Arche* is designed for the development of scientific,\nindividual-based models rather than for game development.\nThis motivates some design decisions, with an emphasis on simplicity, safety and performance.\nNevertheless, *Arche* can also be used for game development.\n\n### Simple core API\n\nThe `ecs.World` object is a pure and simple ECS implementation in the sense of a data store\nfor entities and components, with query and iteration capabilities.\nMore advanced features like batch operations or entity relations are provided through separate objects.\n\nThere is neither an update loop nor systems.\nThese should be implemented by the user.\nFor a batteries-included implementation, see module [arche-model](https://github.com/mlange-42/arche-model).\n\nThe type-safe generic API and advanced logic filters are provided in the packages\n[generic](https://pkg.go.dev/github.com/mlange-42/arche/generic) and\n[filter](https://pkg.go.dev/github.com/mlange-42/arche/filter), respectively.\nBoth packages are built on top of the core [ecs](https://pkg.go.dev/github.com/mlange-42/arche/ecs) package, so they could also be implemented by a user.\n\n### Determinism\n\nIteration order in *Arche* is deterministic and reproducible.\nThis does not mean that entities are iterated in their order of insertion, nor in the same order in successive iterations.\nHowever, given the same operations on the `ecs.World`, iteration order will always be the same.\n\n### Strict and panic\n\n*Arche* puts an emphasis on safety and on avoiding undefined behavior.\nIt panics on unexpected operations, like removing a dead entity,\nadding a component that is already present, or attempting to change a locked world.\nThis may not seem idiomatic for Go.\nHowever, explicit error handling in performance hot spots is not an option.\nNeither is silent failure, given the scientific background.\n\n### Limitations\n\n* The number of component types per `World` is limited to 256. This is mainly a performance decision.\n* The number of entities alive at any one time is limited to just under 5 billion (`uint32` ID).\n\n## Benchmarks\n\nA tabular overview of the runtime cost of typical *Arche* ECS operations is provided under [benchmarks](https://mlange-42.github.io/arche/background/benchmarks/) in the Arche's [User Guide](https://mlange-42.github.io/arche/).\n\nFor a benchmark comparison with other ECS implementations,\nsee the [go-ecs-benchmarks](https://github.com/mlange-42/go-ecs-benchmarks) repository.\n\n## Cite as\n\nLange, M. (2023): Arche \u0026ndash; An archetype-based Entity Component System for Go. DOI [10.5281/zenodo.7656484](https://doi.org/10.5281/zenodo.7656484),  GitHub repository: https://github.com/mlange-42/arche\n\n## License\n\nThis project is distributed under the [MIT license](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlange-42%2Farche","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmlange-42%2Farche","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlange-42%2Farche/lists"}