# Stack's environment variables
The environment variables listed in alphabetal order below can affect how Stack
behaves.
## `HACKAGE_KEY`
[:octicons-tag-24: 2.7.5](https://github.com/commercialhaskell/stack/releases/tag/v2.7.5)
Related command: [`stack upload`](upload_command.md)
Hackage allows its members to register an API authentification token and to
authenticate using the token.
A Hackage API authentification token can be used with `stack upload` instead of
username and password, by setting the `HACKAGE_KEY` environment variable. For
example:
=== "Unix-like"
~~~text
HACKAGE_KEY=
stack upload .
~~~
=== "Windows (with PowerShell)"
~~~text
$Env:HACKAGE_KEY=
stack upload .
~~~
## `HACKAGE_USERNAME` and `HACKAGE_PASSWORD`
[:octicons-tag-24: 2.3.1](https://github.com/commercialhaskell/stack/releases/tag/v2.3.1)
Related command: [`stack upload`](upload_command.md)
`stack upload` will request a Hackage username and password to authenticate.
This can be avoided by setting the `HACKAGE_USERNAME` and `HACKAGE_PASSWORD`
environment variables. For
example:
=== "Unix-like"
~~~text
export $HACKAGE_USERNAME=""
export $HACKAGE_PASSWORD=""
stack upload .
~~~
=== "Windows (with PowerShell)"
~~~text
$Env:HACKAGE_USERNAME=''
$Env:HACKAGE_PASSWORD=''
stack upload .
~~~
## `NO_COLOR`
Related command: all commands that can produce colored output using control character sequences.
Stack follows the standard at http://no-color.org/. Stack checks for a
`NO_COLOR` environment variable. When it is present and not an empty string
(regardless of its value), Stack prevents the addition of control character
sequences for color to its output.
## `STACK_ROOT`
Related command: all commands that make use of Stack's global YAML configuration
file (`config.yaml`).
Overridden by: Stack's global `--stack-root` option.
The environment variable `STACK_ROOT` can be used to specify the Stack root
directory.
## `STACK_WORK`
Related command: all commands that make use of Stack's working directory.
Overridden by: Stack's global `--work-dir` option.
The environment variable `STACK_YAML` can be used to specify Stack's
working directory in a project. The path must be a relative one, relative to the
root directory of the project.
## `STACK_XDG`
Related command: all commands that make use of Stack's user-specific general
YAML configuration file (`config.yaml`).
Overridden by: the use of Stack's `STACK_ROOT` environment variable, or the use
of Stack's global `--stack-root` option.
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.
## `STACK_YAML`
Related command: all commands that make use of Stack's project-level YAML
configuration file.
Overridden by: Stack's global `--stack-yaml` option.
The environment variable `STACK_YAML` can be used to specify Stack's
project-level YAML configuration file.