# gt-next: General Translation Next.js SDK: Production vs Development URL: https://generaltranslation.com/en-GB/docs/next/concepts/environments.mdx --- title: Production vs Development description: Differences between production and development environments --- ## Overview `gt-next` behaves differently depending on the environment your Next.js application is running in. It detects the environment by checking the `NODE_ENV` environment variable. ## Production behaviour ### Environment variables In production, `gt-next` will only read the `GT_PROJECT_ID` and `GT_API_KEY` environment variables. The API Key must be a Production API Key, starting with `gtx-api-`. If you are using a Development API Key, `gt-next` will throw an error. ### Translation loading behaviour In production, `gt-next` will attempt to load translations from the General Translation CDN by default. If you have configured custom translation loading behaviour, such as local translations, via the `loadTranslations` function, `gt-next` will use that instead. Translation hot reloading is disabled in production. On-demand translation for dynamic content using the `` component or `tx` function is enabled, but only in server components. ## Development behaviour ### Environment variables `gt-next` accepts the `GT_PROJECT_ID` and `GT_API_KEY` environment variables. The API key can either be a Production API Key, beginning with `gtx-api-`, or a Development API Key, beginning with `gtx-dev-`. If a production API key is provided in development, `gt-next` will behave as though you are in production. This means that translation hot reloading will be disabled, and components without translations will render the original content. ### Translation loading behaviour In development, `gt-next` will first attempt to load translations in the same way as in production. These translations are loaded into memory. When rendering a component (that uses `useGT`, ``, or `useTranslations`) in a language other than the default, `gt-next` will do the following: 1. If it detects a valid stored translation for the given content, it will render that translation. 2. If no translation is found, it will attempt to translate the content dynamically via the General Translation API. 3. After translating, the translation will be rendered and stored in memory for future use. 4. If the translation times out, it will fall back to rendering the original content. Our API also caches development translations internally for a short period, so if the same translation is requested again, it will be served from cache. These translations are isolated at the project level, so they will not be mixed up with translations from other projects. Additionally, the cache is unique to development sessions, so cached translations will not be used in production. `gt-next` will detect changes to components that use `useGT`, ``, or `useTranslations` and dynamically translate the modified content via our API. ## Production vs development API keys [#api-keys] To help distinguish between the behaviour of `gt-next` in production and development, we use the terms "Production API Keys" and "Development API Keys". ### Production API keys Production API keys are API keys beginning with `gtx-api-`. When a Production API key is provided, `gt-next` will behave as described in the [Production Behaviour](#production-behavior) section. This means that if you are running your Next.js application in development mode and provide a Production API key, `gt-next` will behave as if you are in production. Translation hot reloading will be disabled, and components without translations will render the original content. Other than this behaviour, `gt-next` will not use the Production API key in any way. The CLI tool reads the `GT_API_KEY` environment variable and only accepts Production API keys. The CLI tool will apply billing and rate limiting using the "production" category. ### Development API keys Development API keys are API keys beginning with `gtx-dev-`. When a Development API key is provided, `gt-next` will behave as described in the [Development Behaviour](#development-behavior) section. When using a Development API key, billing and rate limiting will be applied under the "development" category. Translations created with a Development API key will not be stored, and will not be available for use in production. The purpose of development translations is to allow you to test your application before deploying to production.