> For the complete documentation index, see [llms.txt](https://arch-ecs.gitbook.io/arch/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://arch-ecs.gitbook.io/arch/misc/faq.md).

# FAQ

<details>

<summary>Can i support this project?</summary>

Of course you can! By either becoming a [contributor](https://github.com/genaray/Arch/blob/master/CONTRIBUTING.MD) and actively participating in the ecosystem or by [supporting Arch financially](https://github.com/sponsors/genaray)! We are happy about any help!

</details>

<details>

<summary>Which projects is Arch suitable for?</summary>

Especially for **games** or **simulations**... but also data-oriented applications where it is important to have and query a lot of flexible data!

</details>

<details>

<summary>Why do other ECS-Frameworks claim to be faster?</summary>

You may have seen that Arch performs well in some benchmarks, but slower than some ECS frameworks. Does this mean that Arch is slow or poorly optimized? No, its the opposite! Every benchmark is implemented differently and sometimes uses a different (often outdated) Arch version. In addition, Arch has something that many other ECS do not have, [**Chunks**](/arch/documentation/archetypes-and-chunks.md). [**Chunks**](/arch/documentation/archetypes-and-chunks.md) allow you to create huge amounts of entities at runtime and even remove them later to free up memory, but this adds a bit of overhead. It's a trade-off that's worth it though!

</details>

<details>

<summary>Why doesn't Arch have XYZ?</summary>

Arch's mantra is to be [**bare minimum**](/arch/documentation/concepts.md#archs-promise). A basic ECS that can be quickly and easily integrated anywhere with the possibility to expand it according to your own wishes. Thus we support clean code, separation of concerns and KISS as programming principles. Arch only does what it is supposed to do, to be a **high-performance ECS** that is easy to use and gives YOU the tools. Nothing more and nothing less, no hidden operations in the background. For everything else there is [**Arch.Extended**](/arch/extensions/page-3.md), a collection of tools and libraries that extend Arch.

</details>

<details>

<summary>Can i use Arch in an Engine?</summary>

You can do that too. You can use Arch anywhere you use **.Net Framework 2**, **.Net 6** to **.Net8**. This means you can use Arch in a pure C# project or in an engine like [**Unity, Godot or Stride**](https://github.com/genaray/Arch/wiki/Integration-Guides)!

</details>

<details>

<summary>Is Arch AOT compatible?</summary>

Arch also **works** in **AOT** environments. Depending on how you use it, however, you may have to [**register the components**](/arch/documentation/utilities/component-registration.md) in advance or simply use [**Arch.Aot-SourceGenerator**](https://github.com/genaray/Arch.Extended/wiki/AOT-Source-Generator).

</details>

<details>

<summary>Can i use managed structs and classes as components with Arch?</summary>

You can do that too! In arch you can simply use classes and structs as components without having to play around with pointers or forcing only structs. This even has some advantages, it is faster to develop with it! If you want to get the **maximum performance** out of it, we still recommend using only **unmanaged structs** as components.

</details>

<details>

<summary>ECS for everything?</summary>

ECS is a **tool** not a silver bullet. Sooner or later you will encounter problems that simply cannot be mapped as well with an ECS. Don't use an ECS for everything, but **complement** it **with other tools** that help you. Forcing it never works!

</details>

<details>

<summary>How do i make queries run spatial?</summary>

You don't. ECS is not intended to do everything, for this case you will likely require an additional data structure on top of Arch that is being used together.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://arch-ecs.gitbook.io/arch/misc/faq.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
