syncEnvVars / syncVercelEnvVars / syncNeonEnvVars
Sync environment variables from external secret stores into Trigger.dev before each deployment.
syncEnvVars — Custom Callback
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 namectx.projectRef— Trigger.dev project refctx.env— currently set env vars in the project
Example: Sync from Infisical
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/tokensVERCEL_PROJECT_IDVERCEL_TEAM_ID— team projects only
import { syncVercelEnvVars } from "@trigger.dev/build/extensions/core";
export default defineConfig({
build: {
extensions: [syncVercelEnvVars()],
},
});Or pass credentials explicitly:
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-keysNEON_PROJECT_ID
import { syncNeonEnvVars } from "@trigger.dev/build/extensions/core";
export default defineConfig({
build: {
extensions: [syncNeonEnvVars()],
},
});Or with options:
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.