# Installation

This page covers what Verité needs to run, the optional plugins it can work alongside, and what happens the first time it starts. For the download steps and a short overview, see the [home page](index.md). The material here goes deeper into requirements, dependencies, and first-run behaviour.

## Requirements

Verité targets modern Minecraft servers and their common forks.

| Requirement | Detail |
| --- | --- |
| Server platform | Paper, Purpur, Folia, or Spigot |
| Minecraft version | 1.21.6 through 26.3 |
| API level | Built against API version 1.21.6 |
| Folia | Supported |
| Java | The Java version required by your server software for your chosen Minecraft version |

Verité does not ship a separate build per platform beyond the version appropriate for your server. Install the correct file for your Minecraft version and server software, place it in the `plugins/` directory, and restart.

On any Minecraft version outside the supported range, Verité disables itself at startup and logs the running version alongside the supported range. Verité 1.2.8 is the last release for Minecraft 1.19 through 1.21.5.

!!! note "Java version"
    Verité follows the Java requirement of the server you run it on. Newer Minecraft versions require newer Java releases. If your server starts, Verité has the Java version it needs.

## Runtime library

Verité stores its data in an embedded [H2](https://www.h2database.com/) database. H2 is declared as a plugin library in `plugin.yml`:

```yaml
libraries:
  - com.h2database:h2:2.4.240
```

Your server resolves and downloads this library automatically at load onto an isolated library class loader. No manual download is required. If the library cannot be resolved, Verité disables itself rather than run without storage, so watch the console on first start.

The database runs in embedded file mode with no network socket. It is described further on the [Privacy and data](page:privacy) page.

## Soft dependencies

Verité declares four soft dependencies:

```yaml
softdepend: [floodgate, PlaceholderAPI, LuckPerms, Skript]
```

A soft dependency is never required. When one of these plugins is present, the server loads it before Verité so the matching feature can turn on. When it is absent, Verité runs normally and the feature simply does not exist.

| Plugin | What it enables |
| --- | --- |
| Floodgate | Improves handling of Bedrock players who join through Floodgate. |
| PlaceholderAPI | Exposes vanish state to other plugins as placeholders under the `verite` identifier. When PlaceholderAPI is absent, the placeholders are never registered. |
| LuckPerms | Supplies group weights for rank-aware moderation, so staff cannot punish equal or higher ranks. This is controlled by `use.rank.weights` in the moderation section of the config. Operators are always treated as the highest rank. |
| Skript | Makes Verité's chat-filter syntax available to scripts automatically. See the [Skript integration](page:developers/skript) guide. |

!!! note "Custom chat systems"
    If another plugin intercepts and delivers chat itself, Verité may never see the message to filter it. The [Custom Chat Integration](page:developers/wiring) guide explains how to pass messages through Verité in that case.

## First run

The first time Verité loads it prepares its own data folder at `plugins/Verite/`. During this first start it will:

- Create the plugin data folder.
- Open the embedded H2 database (`verite.mv.db`) in that folder, creating it if absent.
- Write the default `config.yml`.
- Deploy the chat-filter resources into a `filter/` subfolder.
- Register commands, listeners, and integrations for any soft dependencies that are installed.

Watch the console during this first start. Confirm that Verité loads and that no warnings or errors appear that point to a configuration or compatibility problem.

## Console output

Verité colours its console messages so failures stand out from routine start-up lines. Errors are red, successes green, and counts are shown in the Verité brand colour. Every message is prefixed with `[Verité]`.

Colour is added only when the console can display it. Verité checks, in order:

| Check | Effect |
| --- | --- |
| `NO_COLOR` is set (to any value) | Colour is disabled. This is the [NO_COLOR](https://no-color.org/) standard, honoured by many command-line tools. |
| `TERM` is `dumb` | Colour is disabled. |
| Windows without a known ANSI-capable terminal | Colour is disabled, unless Windows Terminal or ANSICON is detected. |
| Anything else | Colour is enabled. |

When colour is disabled the messages are written as plain text, with no escape codes left behind, so log files stay readable.

Two system properties override the detection if you need to force a result:

```
-Dverite.console.colour=false
-Dverite.console.truecolour=false
```

The first turns colour off (or on) outright. The second keeps colour but drops from 24-bit to the basic 16-colour palette, which is worth trying if your console shows stray characters instead of colour.

## Modules

Verité is built from three modules, each toggled independently in `config.yml`. All three are enabled by default. Disable a module by setting its `enabled` flag to `false`; the rest of the plugin continues to run.

| Module | Config key | Purpose |
| --- | --- | --- |
| Veritédoux | `chat.filter.enabled` | Chat filtering and content checks. |
| Veritésauver | `moderation.enabled` | Moderation, punishments, and account intelligence. |
| Veritévoiler | `vanish.enabled` | Staff vanish. |

```yaml
chat.filter:
  enabled: true

moderation:
  enabled: true

vanish:
  enabled: true
```

## Configuration auto-update

When Verité updates, it can append new keys to your existing `config.yml` so you do not lose your settings. This is controlled in the `general` section:

```yaml
general:
  auto.update.config: true
```

With this enabled, new configuration keys added in a later release are merged into your file automatically. This does not bypass tokenizer updates, which are handled separately.

The chat-filter resource files (the `.eve` files) have their own toggle, which is off by default:

```yaml
chat.filter:
  auto.update.eve: false
```

!!! warning "Custom filter entries"
    When `auto.update.eve` is enabled, the `.eve` files are replaced with updated versions when new entries are added, and any custom entries you added are overwritten or discarded. Leave it off if you maintain your own entries.
