Skip to content

syncEnvVars / syncVercelEnvVars / syncNeonEnvVars

Sync environment variables from external secret stores into Trigger.dev before each deployment.

syncEnvVars — Custom Callback

ts
import { syncEnvVars } from "@trigger.dev/build/extensions/core";

export default defineConfig({
  build: {
    extensions: [
      syncEnvVars(async (ctx) => {
        return [
          { name: "SECRET_KEY", value: "secret-value" },
        ];
      }),
    ],
  },
});

Callback context (ctx)

  • ctx.environment — target environment name
  • ctx.projectRef — Trigger.dev project ref
  • ctx.env — currently set env vars in the project

Example: Sync from Infisical

ts
import { InfisicalSDK } from "@infisical/sdk";

syncEnvVars(async (ctx) => {
  const client = new InfisicalSDK();
  await client.auth().universalAuth.login({
    clientId: process.env.INFISICAL_CLIENT_ID!,
    clientSecret: process.env.INFISICAL_CLIENT_SECRET!,
  });
  const { secrets } = await client.secrets().listSecrets({
    environment: ctx.environment,
    projectId: process.env.INFISICAL_PROJECT_ID!,
  });
  return secrets.map((s) => ({ name: s.secretKey, value: s.secretValue }));
})

syncVercelEnvVars

Sync environment variables from a Vercel project.

Required env vars

  • VERCEL_ACCESS_TOKEN — from vercel.com/account/settings/tokens
  • VERCEL_PROJECT_ID
  • VERCEL_TEAM_ID — team projects only
ts
import { syncVercelEnvVars } from "@trigger.dev/build/extensions/core";

export default defineConfig({
  build: {
    extensions: [syncVercelEnvVars()],
  },
});

Or pass credentials explicitly:

ts
syncVercelEnvVars({
  projectId: "your-vercel-project-id",
  vercelAccessToken: "your-vercel-access-token",
  vercelTeamId: "your-vercel-team-id", // optional
})

Vercel build environment

When building inside Vercel, values come from process.env (not the API), allowing branch-specific values set by integrations like Neon to be picked up.

syncNeonEnvVars

Sync Neon database connection strings for branch-specific environments.

Required env vars

  • NEON_ACCESS_TOKEN — from console.neon.tech/app/settings/api-keys
  • NEON_PROJECT_ID
ts
import { syncNeonEnvVars } from "@trigger.dev/build/extensions/core";

export default defineConfig({
  build: {
    extensions: [syncNeonEnvVars()],
  },
});

Or with options:

ts
syncNeonEnvVars({
  projectId: "your-neon-project-id",
  neonAccessToken: "your-neon-access-token",
  branch: "your-branch-name",
  databaseName: "your-database-name",
  roleName: "your-role-name",
  envVarPrefix: "MY_PREFIX_",
})

Synced variables

DATABASE_URL, DATABASE_URL_UNPOOLED, POSTGRES_URL, POSTGRES_URL_NO_SSL, POSTGRES_URL_NON_POOLING, POSTGRES_PRISMA_URL, POSTGRES_HOST, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DATABASE, PGHOST, PGHOST_UNPOOLED, PGUSER, PGPASSWORD, PGDATABASE

INFO

syncNeonEnvVars is skipped in Vercel build environments (Neon integration handles it there). Also skipped for prod — designed for preview/staging branches.

Built from official Trigger.dev documentation