diff --git a/docs/reference/environment-variables.rst b/docs/reference/environment-variables.rst
new file mode 100644
index 00000000..0fb29d8f
--- /dev/null
+++ b/docs/reference/environment-variables.rst
@@ -0,0 +1,111 @@
+*********************
+Environment variables
+*********************
+
+Applications built on craft-application have several environment variables that
+can configure their behaviour. They and the behaviour they modify are listed
+below.
+
+Variables passed to managed builders
+------------------------------------
+
+Several environment variables from the host environment are passed to the
+managed build environment. While an application may adjust these by adjusting
+the ``environment`` dictionary attached to the ``ProviderService``,
+craft-application will by default forward the ``http_proxy``, ``https_proxy``
+and ``no_proxy`` environment variables from the host.
+
+Supported variables
+-------------------
+
+These variables are explicitly supported for user configuration.
+
+.. _env-var-craft-build-environment:
+
+``CRAFT_BUILD_ENVIRONMENT``
+===========================
+
+If the value is ``host``, allows an environment to tell a craft application
+to run directly on the host rather than in managed mode. This method is
+roughly equivalent to using ``--destructive-mode``, but is designed for
+configurations where the application is already being run in an appropriate
+container or VM, such as
+`Snapcraft rocks `_ or
+when controlled by a CI system such as `Launchpad `_.
+
+**CAUTION**: Setting the build environment is only recommended if you are
+aware of the exact packages needed to reproduce the build containers created
+by the app.
+
+``CRAFT_BUILD_FOR``
+===================
+
+Sets the default architecture to build for. Overridden by ``--build-for`` in
+lifecycle commands.
+
+``CRAFT_PLATFORM``
+==================
+
+Sets the default platform to build. Overridden by ``--platform`` in lifecycle
+commands.
+
+``CRAFT_SNAP_CHANNEL``
+======================
+
+Overrides the default channel that a craft application's snap is installed from
+if the manager instance is not running as a snap. If unset, the application
+will be installed from the ``latest/stable`` channel. If the application is
+running from a snap, this variable is ignored and the same snap used on
+the host system is injected into the managed builder.
+
+``CRAFT_VERBOSITY_LEVEL``
+=========================
+
+Set the verbosity level for the application. Valid values are: ``quiet``,
+``brief``, ``verbose``, ``debug`` and ``trace``. This is overridden by the
+``--quiet``, ``--verbose`` or ``--verbosity={value}`` global command options.
+
+Development variables
+---------------------
+
+The following variables exist to help developers writing applications using
+craft-application more easily debug their code:
+
+``CRAFT_DEBUG``
+===============
+
+Controls whether the application is in debug mode. If this variable is set to
+``1``, general exceptions will not be caught, instead showing a traceback on
+the command line. This is normally only useful for developers working on
+craft-application or an app that uses the framework, as a traceback is always
+written to the log file as well.
+
+``CRAFT_LAUNCHPAD_INSTANCE``
+============================
+
+For remote builds, allows the user to set an alternative launchpad instance.
+Accepts any string that can be used as the ``service_root`` value in
+`Launchpadlib `_.
+
+Unsupported variables
+---------------------
+
+The following variables cause behaviour changes in craft-application, but
+should not be set except by craft-application itself.
+
+``CRAFT_LXD_REMOTE``
+====================
+
+If using LXD, the application will start containers in the configured remote
+rather than ``local``.
+
+**CAUTION:** Using non-default remotes is experimental and not recommended at
+this time.
+
+``CRAFT_MANAGED_MODE``
+======================
+
+Alerts the application that it is running in managed mode. This should only be
+set by craft-application when creating a provider. Systems designed to wrap
+craft applications may use the :ref:`env-var-craft-build-environment`
+environment variable to make the app run on the host.
diff --git a/docs/reference/index.rst b/docs/reference/index.rst
index b188a0d4..1e7796c6 100644
--- a/docs/reference/index.rst
+++ b/docs/reference/index.rst
@@ -7,6 +7,7 @@ Reference
:maxdepth: 1
changelog
+ environment-variables
platforms
Indices and tables