#Env Variables
1 messages · Page 1 of 1 (latest)
Hi @lusty venture. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave:
Yes, in Next.js, environment variables are handled differently depending on whether they are intended for the server or the client.
-
Server-Side Environment Variables: By default, environment variables are only available on the server. These variables are not bundled into the JavaScript that is sent to the browser.
-
Client-Side Environment Variables: If you want to expose environment variables to the browser, you need to prefix them with
NEXT_PUBLIC_. These public environment variables will be inlined into the JavaScript bundle during thenext buildprocess. This means that their values are fixed at build time and cannot be changed at runtime.
Here is a summary of the key points:
- Server-Side Only: Environment variables without the
NEXT_PUBLIC_prefix are only available on the server and are not bundled into the client-side JavaScript. - Client-Side: Environment variables with the
NEXT_PUBLIC_prefix are bundled into the client-side JavaScript during the build process and cannot be changed after the build.
For example, if you have the following in your .env file:
DB_HOST=localhost
NEXT_PUBLIC_API_URL=<https://api.example.com>
process.env.DB_HOSTwill only be available on the server.process.env.NEXT_PUBLIC_API_URLwill be bundled into the client-side JavaScript and available in the browser.
Here is a code snippet demonstrating how to use these environment variables:
// This will only be available on the server
const dbHost = process.env.DB_HOST;
// This will be available on both the server and the client
const apiUrl = process.env.NEXT_PUBLIC_API_URL;
For more detailed information, you can refer to the Next.js documentation on environment variables (https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables#bundling-environment-variables-for-the-browser).
If you need to read runtime environment variables, consider using getServerSideProps or incrementally adopting the App Router, as described here (https://nextjs.org/docs/app/building-your-application/configuring/environment-variables#runtime-environment-variables).
import { unstable_noStore as noStore } from 'next/cache';
export default function Component() {
noStore();
// cookies(), headers(), and other dynamic functions
// will also opt into dynamic rendering, meaning
// this env variable is evaluated at runtime
const value = process.env.MY_VALUE;
// ...
}
For more information on this approach, you can check the Next.js documentation on runtime environment variables (https://nextjs.org/docs/app/building-your-application/configuring/environment-variables#runtime-environment-variables).
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
@lusty venture kapa.ai is still learning and improving, please let us know how it did by reacting below
@wanton hazel With static generation, will the env variable on the server be saved into the server-side JS?
Let me check the knowledge base for you. One moment! :books:
With static generation in Next.js, environment variables used on the server will be evaluated at build time and their values will be saved into the server-side JavaScript. This means that the values of these environment variables are fixed at the time of the build and cannot be changed at runtime.
Here are the key points:
- Server-Side Environment Variables: These are evaluated at build time and their values are saved into the server-side JavaScript. They are not exposed to the client unless explicitly prefixed with
NEXT_PUBLIC_. - Client-Side Environment Variables: These must be prefixed with
NEXT_PUBLIC_and are bundled into the client-side JavaScript during the build process.
For example, if you have the following in your .env file:
DB_HOST=localhost
NEXT_PUBLIC_API_URL=<https://api.example.com>
process.env.DB_HOSTwill be evaluated at build time and saved into the server-side JavaScript.process.env.NEXT_PUBLIC_API_URLwill be bundled into the client-side JavaScript and available in the browser.
Here is a code snippet demonstrating how to use these environment variables:
// This will be evaluated at build time and saved into the server-side JS
const dbHost = process.env.DB_HOST;
// This will be available on both the server and the client
const apiUrl = process.env.NEXT_PUBLIC_API_URL;
For more detailed information, you can refer to the Next.js documentation on environment variables (https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables#bundling-environment-variables-for-the-browser).
If you need to read runtime environment variables, consider using getServerSideProps or incrementally adopting the App Router, as described here (https://nextjs.org/docs/app/building-your-application/configuring/environment-variables#runtime-environment-variables).
import { unstable_noStore as noStore } from 'next/cache';
export default function Component() {
noStore();
// cookies(), headers(), and other dynamic functions
// will also opt into dynamic rendering, meaning
// this env variable is evaluated at runtime
const value = process.env.MY_VALUE;
// ...
}