> For the complete documentation index, see [llms.txt](https://abzi.noxen.b0se.liloche.docs.rtype.liloche.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://abzi.noxen.b0se.liloche.docs.rtype.liloche.dev/technical-choices.md).

# Technical Choices

Record of the **major technical choices** for this project, required by the Epitech subject (Software Engineering Requirements and Technical & Comparative Study).

This file records decisions already made; it is not a place to decide new ones. Any new major choice goes through the user first (see `AGENTS.md`, Workflow step 2).

## How to use this file

* Add an entry when a major choice is settled: language, build system, package manager, libraries, networking approach, architecture, storage, security, documentation tooling.
* Each entry states the choice, the alternatives considered, and the justification — this feeds the subject’s comparative study.
* Keep the **dependency allowlist** below in sync: it is the only set of third-party dependencies the project may use.

## Language

* **C++** (mandated by the subject). Standard version: TODO.

## Build system

* **CMake** with presets (assumed; to confirm).
* Alternative generators considered: TODO (Xmake, Meson).

## Package manager

Mandated to be one of Conan, Vcpkg, or CMake CPM, and the project must be self-contained.

* Choice: TODO
* Alternatives considered: TODO
* Justification: TODO

## Dependency allowlist

Third-party dependencies the project may use, and where each is needed (client / server / common):

| Dependency | Usage | Justification |
| ---------- | ----- | ------------- |
| TODO       | TODO  | TODO          |

> Copying dependency source into the repository is not an acceptable way to handle dependencies.

## Graphics / audio / input

* Candidate libraries: SFML, SDL, Raylib (subject allows these; broad-scope libraries and full game engines are forbidden).
* Choice: TODO
* Justification: TODO

## Networking

* Protocol: **binary over UDP** for all in-game traffic (mandated). TCP only for narrow, justified cases.
* Server model: **authoritative server**.
* Library: Asio **or** encapsulated OS sockets — TODO.

## Architecture

* Authoritative server; clients send input and render state.
* Decoupled Rendering / Networking / Game Logic layers (mandated).
* ECS and Mediator are recommended by the subject but **not mandatory**. Design choice: TODO.

## Storage

* TODO (required by the comparative study: persistence, reliability, constraints).

## Security

* TODO (required by the comparative study: main vulnerabilities, data integrity, long-term monitoring).

## Documentation tooling

* Must be available in a modern, navigable form (static site/wiki), in English.
* Choice: TODO (e.g. MkDocs, Sphinx, Doxygen + generator).

## CI/CD

* Build and test on Linux and Windows.
* Choice: TODO
* Note: do not fetch all dependencies on every commit, and do not dedicate a full-time member to CI/CD (subject warnings).


---

# 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://abzi.noxen.b0se.liloche.docs.rtype.liloche.dev/technical-choices.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.
