Astro uses Vite’s built-in support for environment variables, and lets you use any of its methods to work with them.
Note that while all environment variables are available in server-side code, only environment variables prefixed with PUBLIC_
are available in client-side code for security purposes.
In this example, PUBLIC_ANYBODY
(accessible via import.meta.env.PUBLIC_ANYBODY
) will be available in server or client code, while SECRET_PASSWORD
(accessible via import.meta.env.SECRET_PASSWORD
) will be server-side only.
Astro includes a few environment variables out-of-the-box:
import.meta.env.MODE
: The mode your site is running in. This is development
when running astro dev
and production
when running astro build
.import.meta.env.PROD
: true
if your site is running in production; false
otherwise.import.meta.env.DEV
: true
if your site is running in development; false
otherwise. Always the opposite of import.meta.env.PROD
.import.meta.env.BASE_URL
: The base url your site is being served from. This is determined by the base
config option.import.meta.env.SITE
: This is set to the site
option specified in your project’s astro.config
.import.meta.env.ASSETS_PREFIX
: The prefix for Astro-generated asset links if the build.assetsPrefix
config option is set. This can be used to create asset links not handled by Astro..env
filesEnvironment variables can be loaded from .env
files in your project directory.
You can also attach a mode (either production
or development
) to the filename, like .env.production
or .env.development
, which makes the environment variables only take effect in that mode.
Just create a .env
file in the project directory and add some variables to it.
For more on .env
files, see the Vite documentation.
You can also add environment variables as you run your project:
Instead of using process.env
, with Vite you use import.meta.env
, which uses the import.meta
feature added in ES2020.
For example, use import.meta.env.PUBLIC_POKEAPI
to get the PUBLIC_POKEAPI
environment variable.
By default, Astro provides type definition for import.meta.env
in astro/client.d.ts
.
While you can define more custom env variables in .env.[mode]
files, you may want to get TypeScript IntelliSense for user-defined env variables which are prefixed with PUBLIC_
.
To achieve this, you can create an env.d.ts
in src/
and configure ImportMetaEnv
like this:
© 2021 Fred K. Schott
Licensed under the MIT License.
https://docs.astro.build/en/guides/environment-variables/