Understanging ENV variables in PayloadCMS

default discord avatar
last month

Leaving aside public variables and focusing on backend ones.

When I access a variable (e.g. procee.env.ENVIRON) from server.ts file, I can read the value.

When I do the same in my custom core code (called inside custom endpoint inside server.ts file) it is undefined. These variables are not accessed by front-end.


import { processGetAccountDetails } from './core/vault/controller';
console.log("server | ENVIRON: ", process.env.ENVIRON) // works
router.get('/vault/accounts', (req: any, res) => {


console.log("vault controller | ENVIRON: ", process.env.ENVIRON) // undefined

This happens seemingly at random. Some files it works, other not. What am I missing?

I must add, this is only an issue in production, locally all works as expected.

  • default discord avatar
    last month

    Like I said, I explicitly don't need them in admin panel. I need them in backend as I am using them (I have around 30). In some files they are undefined in production and I cannot find any pattern as to why.

  • default discord avatar
    last month

    @KasparTr Are they defined in the same .env with your payload env vars?

    If that's the case, then it makes sense

  • default discord avatar
    last month

    Yes, all in the same as payload secret var

  • default discord avatar
    last month


    Payload will automatically supply any present env variables that are prefixed with PAYLOAD_PUBLIC_ directly to the Admin panel.

    However, it seems like you want to use them in the backend

    Maybe create an additional .env with your custom env vars

    and use dotenv to also include that

  • discord user avatar
    Payload Team
    last month

    @KasparTr does this thread help you out?


    I chatted back and forth with some others about this same topic in that discussion. Basically, you will need to add

      path: path.resolve(__dirname, '../.env'),

    atop your payload config file, and your server.ts file

  • default discord avatar
    last month

    Yes this helps. For some reason, when I added the following to server.ts, things worked normally.

    import dotenv from 'dotenv';
Open the post
Continue the discussion in Discord
Like what we're doing?
Star us on GitHub!


Connect with the Payload Community on Discord



Can't find what you're looking for?

Get help straight from the Payload team with an Enterprise License.