--- title: Configuration files ---
# Configuration files Stack is configured by the content of files in the [YAML](https://yaml.org/) format. Stack also supports an [`!include` directive](include.md) that allows a configuration file to include the contents of another file. ## Project-specific and non-project specific options Stack's configuration options are each of one of two types:
- :material-account:{ .lg .middle } __Project-specific__ Configured only at the project level --- [:octicons-arrow-right-24: Learn more](project.md) - :material-account-multiple:{ .lg .middle } __Non-project specific__ Configured globally or at the project level. --- [:octicons-arrow-right-24: Learn more](non-project.md)
Most of Stack's configuration options are non-project specific. ## Project-level and global configuration files Stack's configuration files are each of one of two types:
- :material-language-haskell:{ .lg .middle } __Project-level__ Named `stack.yaml` by default. --- Contains [project-specific](project.md) options and may contain [non-project-specific](non-project.md) options. Non-project-specific options in the project-level configuration file in the `global-project` directory (see below) are ignored by Stack. - :octicons-globe-24:{ .lg .middle } __Global__ Named `config.yaml`. There is a user-specific file and there may be a system-wide one. If a user-specific file does not exist, then Stack will create one. --- Contains [non-project-specific](non-project.md) options. An option set in the user-specific file will override a corresponding option set in the system-wide file (if it exists).
## Location of project-level configuration Stack obtains project-level configuration from one of the following (in order of preference): 1. A file specified by the `--stack-yaml` or `-w` command line option. 2. A file specified by the `STACK_YAML` environment variable. 3. A file named `stack.yaml` in the current directory or an ancestor directory. 4. A file name `stack.yaml` in the `global-project` directory in the [Stack root](../../topics/stack_root.md). ## Location of global configuration The default location of global configuration files depends on the operating system and, in the case of the user-specific file, whether Stack is configured to use the XDG Base Directory Specification. An absolute path to these files can be specified by the [`STACK_CONFIG`](../environment_variables.md#stack_config) and [`STACK_GLOBAL_CONFIG`](../environment_variables.md#stack_config) environment variables, respectively. === "Unix-like" The default locations are: * system-wide: `/etc/stack/config.yaml`; and * user-specific: `config.yaml` in the [Stack root](../../topics/stack_root.md). !!! note For compatibility with Stack 0.1.5.0 and earlier, if deprecated file `/etc/stack/config` exists, then Stack will use it instead of `/etc/stack/config.yaml`. === "Windows" The default locations are: * system-wide: none; and * user-specific: `config.yaml` in the [Stack root](../../topics/stack_root.md). === "XDG Base Directory Specification" On Unix-like operating systems and Windows, Stack can be configured to follow the XDG Base Directory Specification if the environment variable `STACK_XDG` is set to any non-empty value. However, Stack will ignore that configuration if the [Stack root](../../topics/stack_root.md) location has been set on the command line or the `STACK_ROOT` environment variable exists. If Stack is following the XDG Base Directory Specification, the location of `config.yaml` (for user-specific options) is `/stack`. If the `XDG_CONFIG_HOME` environment variable does not exist, the default is `~/.config/stack` on Unix-like operating systems and `%APPDATA%\stack` on Windows.