# Configuration Options
## Introduction
zProtect uses the [YAML](https://en.wikipedia.org/wiki/YAML) data serialization language for configuring the behavior of the zProtect obfuscator. It is possible to hand-write the configuration file to upload on the web interface, however, you may wish to use the configurator tool in the zProtect dashboard area.
## Value Types
There are a few value types used in the zProtect configuration, which are listed below.
### Boolean
Only accepts `true` and `false` as the value.
For example:
```yaml
# A key with value as true
key1: true
# A key with value as false
key2: false
```
### String
Accepts any text character.
For example:
```yaml
# A key with a string value
key: value
```
### String Array
A list of [`strings`](#string), separated by a newline and prefixed with a dash.
For example:
```yaml
# An array with entries
key:
- something
- another thing
# An empty array
empty: []
```
### Simple Option
A [`string array`](#string-array) with a [`boolean`](#boolean) value `enabled`.
For example:
```yaml
# Option enabled
key:
enabled: true
```
### Option with Path
A [`string array`](#string-array) with a [`boolean`](#boolean) key `enabled` and a [`string`](#string) key `path`.
For example:
```yaml
# Option enabled
key:
enabled: true
path: something
```
## Options
These options specify runtime information and general configuration.
### Output
Name of the obfuscated JAR file.
Value type: [`string`](#string)
### Libraries
Dependencies required to obfuscate your jar to prevent "Not found" errors.
Value type: [`string array`](#string-array)
### Exclusions
Class files and directories that should be ignored by the obfuscator. They will not have any obfuscation applied to them.
Value type: [`string array`](#string-array)
### ForceExclusions
::: tip Note
Transformer priority will fix this in the future.
:::
Class files and directories that should be blacklisted by the obfuscator before processing. This will prevent issues with exclusions if the regular exclusions fail for some unknown reason.
Value type: [`string array`](#string-array)
### Watermark
Adds a watermark to the obfuscated JAR for advertisement. Only removable for users with a Commercial License.
Value type: [`boolean`](#boolean)
## Transformers
These options specify wherether to enable available obfuscation techniques.
### AntiDebug
::: tip Warning!
This option may cause issues with certain programs.
:::
Blocks debugging options on terminal.
Value type: [`simple option`](#simple-option)
### DecompilerCrasher
::: tip Warning!
This option is very buggy at the moment and will likely cause problems.
You are strongly advised not to use this.
:::
Manipulates instructions to crash decompilers.
Value type: [`simple option`](#simple-option)
### BadAnnotationCrasher
Manipulates annotations to break bad decompilers. This should not cause any major issues.
Value type: [`simple option`](#simple-option)
### Flow
Adds fake jumps, and such to code.
Value type: [`simple option`](#simple-option)
## Renamers
Renames various components of your jar's contents.
### ClassRenamer
Renames class files.
Value type: [`option with path`](#option-with-path)
### FieldRenamer
Renames field names.
Value type: [`simple option`](#simple-option)
### LocalVariableRenamer
Renames local variables.
Value type: [`simple option`](#simple-option)
### MethodRenamer
Renames methods.
Value type: [`simple option`](#simple-option)
## Optimization
### EnumOptimiser
Value type: [`simple option`](#simple-option)
### FinalRemover
Value type: [`simple option`](#simple-option)
### HideClassMembers
Value type: [`simple option`](#simple-option)
### InsnRemover
Value type: [`simple option`](#simple-option)
### KotlinMetadataRemover
Value type: [`simple option`](#simple-option)
### NOPInsnRemover
Value type: [`simple option`](#simple-option)
### RemoveSignatures
Value type: [`simple option`](#simple-option)
## Poolers
### NumberPooler
Value type: [`simple option`](#simple-option)
### StringPooler
Value type: [`simple option`](#simple-option)
## Shrinking
### LineNumberRemover
Value type: [`simple option`](#simple-option)
### LocalVariableRemover
Value type: [`simple option`](#simple-option)
### RemoveInnerClasses
Value type: [`simple option`](#simple-option)
### SourceDebugRemover
Value type: [`simple option`](#simple-option)
### SourceFileRemover
Value type: [`simple option`](#simple-option)
## Shufflers
### ShuffleFields
Value type: [`simple option`](#simple-option)
### ShuffleMethods
Value type: [`simple option`](#simple-option)
### ShuffleClasses
Value type: [`simple option`](#simple-option)
## Example
Below is a fully functional example configuration file with some zProtect transformers enabled and some disabled.
```yaml
# Blocks debugging options on terminal, may cause issues with certain programs.
AntiDebug:
enabled: false
# Manipulates instructions to crash decompilers. Currently very buggy at the moment and will likely cause problems.
# Strongly advised not to use this.
DecompilerCrasher:
enabled: false
# Manipulates annotations to break bad decompilers.
# This should not cause any major issues with Spigot jars.
BadAnnotationCrasher:
enabled: true
# Adds fake jumps, and such to code.
Flow:
enabled: false
# Renames various components of your jar's contents.
# Renames class files.
ClassRenamer:
enabled: false
path: ""
# Renames field names.
FieldRenamer:
enabled: false
# Renames local variables.
LocalVariableRenamer:
enabled: false
# Renames methods.
MethodRenamer:
enabled: false
# Optimization
EnumOptimiser:
enabled: false
FinalRemover:
enabled: false
HideClassMembers:
enabled: false
InsnRemover:
enabled: false
KotlinMetadataRemover:
enabled: false
NOPInsnRemover:
enabled: false
RemoveSignatures:
enabled: false
# Poolers
NumberPooler:
enabled: false
StringPooler:
enabled: false
# Shrinking
LineNumberRemover:
enabled: false
LocalVariableRemover:
enabled: false
RemoveInnerClasses:
enabled: false
SourceDebugRemover:
enabled: false
SourceFileRemover:
enabled: false
# Shufflers
ShuffleFields: false
ShuffleMethods: false
ShuffleClasses: false
```