> ## Documentation Index
> Fetch the complete documentation index at: https://developers.strawberryfoundations.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction to Strawberry Chat

> What is Strawberry Chat?

# Configuration

### Server

We use [YAML](https://yaml.org/) for the configuration of Strawberry Chat.
So that you don't have to write the whole configuration yourself, we have a sample configuration ([Legacy](https://raw.githubusercontent.com/Strawberry-Foundations/strawberry-chat/legacy/server/config.yml.example)/[Stable](https://raw.githubusercontent.com/Strawberry-Foundations/strawberry-chat/1.9.0/server/config.yml.example))
However, to fully understand which value configures what, you can have a look at this table:

| Server configuration | Explanation                                                               |
| -------------------- | ------------------------------------------------------------------------- |
| `address`            | The IP address where the server can be reached (e.g. `192.168.0.157`)     |
| `port`               | The associated and required port (e.g. `49200` --> `192.168.0.157:49200`) |
| `name`               | The name of the chat server (server name) (e.g. `My personal Server!`)    |
| `description`        | A description of the chat server (e.g. `This is my personal chat server`) |
| `edition_key`        | A non-developed argument for configuring an edition                       |
| `update`             | The update channel of the chat server (`stable`, `dev`, `canary`)         |
| `config_ver`         | Version value of the configuration. Should not be changed.                |

| General configuration  | Explanation                                                                              |
| ---------------------- | ---------------------------------------------------------------------------------------- |
| `max_message_length`   | Maximum length of a message (e.g. `256`)                                                 |
| `max_users`            | Maximum number of online users (e.g. '32')                                               |
| `max_registered_users` | Maximum number of registered users (e.g. '64')                                           |
| `max_username_length`  | Maximum length of the username (e.g. `32`)                                               |
| `max_password_length`  | Maximum length of the password (e.g. `32`)                                               |
| `recv_allowed_bytes`   | Maximum size of the allowed received bytes (e.g. `32`)                                   |
| `watchdog_timeout`     | Time at which the watchdog should restart the server in the event of a freeze (e.g. `4`) |

| Flag configuration  | Explanation                                                                                                                     |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `enable_messages`   | Activates or deactivates the logging of user messages (`true`, `false`)                                                         |
| `enable_queue`      | Activates or deactivates the queue (`true`, `false`)                                                                            |
| `debug_mode`        | Activates or deactivates the debug mode. Useful for tracking errors more easily (`true`, `false`)                               |
| `online_mode`       | Activates or deactivates the online mode. This disables all functions of the Strawberry API (Not recommended) (`true`, `false`) |
| `admins_wait_queue` | Activates or deactivates whether admins have to wait in the queue. (`true`, `false`)                                            |
| `bots_wait_queue`   | Activates or deactivates whether bots have to wait in the queue. (`true`, `false`)                                              |
| `special_messages`  | Activates or deactivates **s p e c i a l** messages (`true`, `false`)                                                           |

| Security configuration | Explanation                                                                                                           |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `require_signing`      | Activates or deactivates the need for a verified client. However, this feature is not yet available (`true`, `false`) |
| `signing_key`          | The signing key for the verified clients                                                                              |
| `banned_ips`           | A list of banned IP addresses (e.g. \[192.168.0.157])                                                                 |

| Database configuration | Explanation                                                                                                 |
| ---------------------- | ----------------------------------------------------------------------------------------------------------- |
| `driver`               | The driver used for database administration (`sqlite`, `mysql`)                                             |
| `check_same_thread`    | Activates or deactivates the detection of whether something is running in the same thread (`true`, `false`) |
| `host`                 | MySQL database host                                                                                         |
| `port`                 | MySQL database port                                                                                         |
| `user`                 | MySQL database username                                                                                     |
| `password`             | MySQL database user password                                                                                |
| `database_name`        | MySQL database name                                                                                         |
| `database_table`       | MySQL database table                                                                                        |

<Warning>
  Some arguments are only available for v1.9.0 (`v1.9.0-vacakes-std_stmbv2`).

  These include: `enable_queue`, `max_users`, `max_registered_users`, `admins_wait_queue`, `bots_wait_queue`, `special_messages`
</Warning>

<Warning>
  Some arguments are only available for v1.10.0 (`v1.10.0-vacakes-std_stmbv2`).

  These include: `banned_ips, driver, check_same_thread, host, port, user, password, database_name, database_table`.
</Warning>

### Client

We also use [YAML](https://yaml.org/) for the configuration of our client.
So that you don't have to write the entire configuration yourself, we have a sample configuration ([Legacy](https://raw.githubusercontent.com/Strawberry-Foundations/strawberry-chat/legacy/client/config.yml.example)/[Stable](https://raw.githubusercontent.com/Strawberry-Foundations/strawberry-chat/1.9.0/client/config.yml.example)/[Main](https://raw.githubusercontent.com/Strawberry-Foundations/strawberry-chat/main/client/config.yml.example))
However, to fully understand which value configures what, you can have a look at this table:

| Client configuration          | Explanation                                                                             |
| ----------------------------- | --------------------------------------------------------------------------------------- |
| `language`                    | The language of the client (`de_DE`, `en_US`)                                           |
| `update_channel`              | The update channel of the client (`stable`, `dev`, `canary`)                            |
| `detect_same_system_messages` | Activates or deactivates the recognition of identical system messages (`true`, `false`) |
| `config_ver`                  | Version value of the configuration. Should not be changed.                              |
| `enable_notifications`        | Activates or deactivates the chat notification (`true`, `false`)                        |

<Warning>
  The argument `enable_notifications` is only available for v2.6.0 or higher.
</Warning>

***

#### Networking

<Info>
  This configuration part refers to the network behavior of the client. The following code block only works as of v2.6.0

  ```yaml theme={null}
  networking:
    online_mode: false
    keep_alive: true
    latency_mode: false
    latency_mode_time: 1
  ```
</Info>

| Networking configuration | Explanation                                                                                                                                            |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `online_mode`            | Activates or deactivates the online mode. This disables all functions of the Strawberry API (Not recommended) (`true`, `false`)                        |
| `keep_alive`             | Enables or disables keep-alive pings to the server. Deactivating causes you to be disconnected from the server after a certain time. (`true`, `false`) |
| `latency_mode`           | Activates or deactivates the latency mode. This is used to continue to offer stability with a slow connection (`true`, `false`)                        |
| `latency_mode_time`      | The time between certain latency events (e.g. `1`, `2`, `0.5`)                                                                                         |

<Warning>
  Some arguments are only available for v2.6.0.
  These include: `latency_mode`, `latency_mode_time`.
</Warning>

***

#### Autoserver

<Info>
  This configuration section refers to the autoserver behavior of the client.

  ```yaml theme={null}
  autoserver:
    enabled: false
    server_id: 2
  ```
</Info>

| Autoserver configuration | Explanation                                                                                                         |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| `enabled`                | Activates or deactivates autoserver (automatic connection to a server when the client is started) (`true`, `false`) |
| `server_id`              | Server ID of the server (e.g. `1`, `2`)                                                                             |

#### Preconfigured servers

<Info>
  This configuration section refers to preconfigured servers. An example configuration could be structured as follows:

  ```yaml theme={null}
  2: 
  name: localhost
  address: 127.0.0.1
  port: 8080
  type: Local Development Server
  autologin: true
  compatibility_mode: false
  credentials:
      username: username
      password: password
  ```
</Info>

| Server configuration   | Explanation                                                                       |
| ---------------------- | --------------------------------------------------------------------------------- |
| `name`                 | Name of the server (e.g. `My server`)                                             |
| `address`              | IP address of the server (e.g. `127.0.0.1`)                                       |
| `port`                 | Port of the server (e.g. `8080`)                                                  |
| `type`                 | A separate type description of the server (e.g. `programming`, `school`)          |
| `autologin`            | Activates or deactivates Autologin for this server (`true`, `false`)              |
| `compatibility_mode`   | Activates or deactivates the compatibility mode for this server (`true`, `false`) |
| `credentials/username` | The user name required for Autologin (e.g. `user`)                                |
| `credentials/username` | The password required for Autologin (e.g. `password`)                             |

<Warning>
  The `compatibility_mode` argument is only available for v2.5.0 or higher.
</Warning>
