2023-10-18 10:59:43 +00:00
---
title: 'useRuntimeConfig'
description: 'Access runtime config variables with the useRuntimeConfig composable.'
links:
- label: Source
icon: i-simple-icons-github
to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/asyncData.ts
size: xs
---
2022-09-12 10:29:42 +00:00
## Usage
```vue [app.vue]
< script setup lang = "ts" >
const config = useRuntimeConfig()
< / script >
```
```ts [server/api/foo.ts]
export default defineEventHandler((event) => {
2023-10-18 10:59:43 +00:00
const config = useRuntimeConfig(event)
2022-09-12 10:29:42 +00:00
})
```
2023-10-18 10:59:43 +00:00
:read-more{to="/docs/guide/going-further/runtime-config"}
2022-09-12 10:29:42 +00:00
## Define Runtime Config
The example below shows how to set a public API base URL and a secret API token that is only accessible on the server.
We should always define `runtimeConfig` variables inside `nuxt.config` .
```ts [nuxt.config.ts]
export default defineNuxtConfig({
runtimeConfig: {
// Private keys are only available on the server
apiSecret: '123',
// Public keys that are exposed to the client
public: {
apiBase: process.env.NUXT_PUBLIC_API_BASE || '/api'
}
}
})
```
2023-10-18 10:59:43 +00:00
::callout
2022-09-12 10:29:42 +00:00
Variables that need to be accessible on the server are added directly inside `runtimeConfig` . Variables that need to be accessible on both the client and the server are defined in `runtimeConfig.public` .
::
2023-10-18 10:59:43 +00:00
:read-more{to="/docs/guide/going-further/runtime-config"}
2022-09-12 10:29:42 +00:00
2022-11-14 14:00:58 +00:00
## Access Runtime Config
2022-09-12 10:29:42 +00:00
To access runtime config, we can use `useRuntimeConfig()` composable:
```ts [server/api/test.ts]
2023-10-18 10:59:43 +00:00
export default defineEventHandler((event) => {
const config = useRuntimeConfig(event)
2022-09-12 10:29:42 +00:00
// Access public variables
const result = await $fetch(`/test`, {
baseURL: config.public.apiBase,
headers: {
// Access a private variable (only available on the server)
Authorization: `Bearer ${config.apiSecret}`
}
})
return result
}
```
In this example, since `apiBase` is defined within the `public` namespace, it is universally accessible on both server and client-side, while `apiSecret` **is only accessible on the server-side** .
## Environment Variables
It is possible to update runtime config values using a matching environment variable name prefixed with `NUXT_` .
2023-10-18 10:59:43 +00:00
:read-more{to="/docs/guide/going-further/runtime-config"}
2022-09-12 10:29:42 +00:00
### Using the `.env` File
We can set the environment variables inside the `.env` file to make them accessible during **development** and **build/generate** .
``` [.env]
2023-05-30 16:30:58 +00:00
NUXT_PUBLIC_API_BASE = "https://api.localhost:5555"
2022-09-12 10:42:42 +00:00
NUXT_API_SECRET = "123"
2022-09-12 10:29:42 +00:00
```
2023-10-18 10:59:43 +00:00
::callout
2022-09-12 10:29:42 +00:00
Any environment variables set within `.env` file are accessed using `process.env` in the Nuxt app during **development** and **build/generate** .
::
2023-10-18 10:59:43 +00:00
::callout{color="amber" icon="i-ph-warning-duotone"}
2022-09-12 10:29:42 +00:00
In **production runtime** , you should use platform environment variables and `.env` is not used.
::
2023-10-18 10:59:43 +00:00
:read-more{to="/docs/guide/directory-structure/env"}
2022-09-12 10:29:42 +00:00
## `app` namespace
Nuxt uses `app` namespace in runtime-config with keys including `baseURL` and `cdnURL` . You can customize their values at runtime by setting environment variables.
2023-10-18 10:59:43 +00:00
::callout
2022-09-12 10:29:42 +00:00
This is a reserved namespace. You should not introduce additional keys inside `app` .
::
### `app.baseURL`
By default, the `baseURL` is set to `'/'` .
However, the `baseURL` can be updated at runtime by setting the `NUXT_APP_BASE_URL` as an environment variable.
Then, you can access this new base URL using `config.app.baseURL` :
```ts [/plugins/my-plugin.ts]
export default defineNuxtPlugin((NuxtApp) => {
const config = useRuntimeConfig()
// Access baseURL universally
const baseURL = config.app.baseURL
})
```
### `app.cdnURL`
This example shows how to set a custom CDN url and access them using `useRuntimeConfig()` .
You can use a custom CDN for serving static assets inside `.output/public` using the `NUXT_APP_CDN_URL` environment variable.
And then access the new CDN url using `config.app.cdnURL` .
```ts [server/api/foo.ts]
export default defineEventHandler((event) => {
2024-02-14 11:55:03 +00:00
const config = useRuntimeConfig(event)
2022-09-12 10:29:42 +00:00
// Access cdnURL universally
const cdnURL = config.app.cdnURL
})
```
2023-10-18 10:59:43 +00:00
:read-more{to="/docs/guide/going-further/runtime-config"}