---
date: "2019-02-12:00:00+02:00"
title: "Configuration Options"
draft: false
type: "doc"
menu:
  sidebar:
    parent: "development"
---

# Configuration options

All configuration variables are declared in the `config` package.
It uses [viper](https://github.com/spf13/viper) under the hood to handle setting defaults and parsing config files.
Viper handles parsing all different configuration sources.

## Adding new config options

To make handling configuration parameters a bit easier, we introduced a `Key` string type in the `config` package which 
you can call directly to get a config value.

To add a new config option, you should add a new key const to `pkg/config/config.go` and possibly a default value.
Default values should always enable the feature to work or turn it off completely if it always needs
additional configuration.

Make sure to also add the new config option to the default config file (`config.yml.sample` at the root of the repository) 
with an explanatory comment to make sure it is well documented.
Then run `mage generate-docs` to generate the configuration docs from the sample file.

## Getting Configuration Values

To retrieve a configured value call the key with a getter for the type you need.
For example:

{{< highlight golang >}}
if config.CacheEnabled.GetBool() {
	// Do something with enabled caches
}
{{< /highlight >}}

Take a look at the methods declared on the type to see what's available.
