Skip to main content
CI/CD for Nango is about keeping your Functions — sync functions, action functions, webhook functions, and event functions — in sync with your application across environments. The core principle: deploy to Nango as part of the same pipeline step as your application. Deploying them separately risks your app and your Functions going out of sync, which can cause subtle bugs that are hard to trace.

Authentication

To deploy from CI, you need a scoped API key for each Nango environment.
  1. Create API keys: In the Nango UI, go to Environment Settings > API Keys and create a key for each environment (e.g., dev and prod). For CI/CD pipelines, use a key scoped to environment:deploy only — see the CI/CD Deploy profile.
  2. Store the keys: Add them as secrets in your CI/CD provider. The Nango CLI reads them from these environment variables:
    • NANGO_SECRET_KEY_DEV
    • NANGO_SECRET_KEY_PROD
Treat Nango Functions like application code: validate on every PR, deploy to each environment in the same step as your application. The Nango CLI deploy command targets a specific environment:
If you don’t specify an environment, it defaults to dev. If you don’t have a staging environment, wire the prod Nango deploy directly to your production release step — use a workflow_dispatch trigger or equivalent manual approval. This keeps production deploys intentional, and ensures they always happen through CI using the prod API key rather than from a local machine.
Add the dist/ folder inside your nango-integrations directory to .gitignore. The CLI writes compiled JS artifacts there, and committing them creates noisy diffs and risks deploying stale bundles.

Example: GitHub Actions

Two workflow files implement the pipeline above.
Destructive ChangesA destructive change removes an integration, sync function, or action function. To prevent accidental deletions, nango deploy will prompt for confirmation when it detects one.In CI, use --auto-confirm or --allow-destructive to bypass the prompt. We recommend only doing this on a manual trigger, as shown above.

Testing in CI

Run your test suite in CI before every deployment. Nango’s testing framework uses dry runs and snapshot testing to validate your Functions without affecting live data:
See the Testing integrations guide for details.

Ephemeral preview environments (e.g. Vercel)

If you use ephemeral preview environments — such as Vercel preview deployments — as your staging layer, you’ll run into a challenge: each preview has a unique URL, but Nango webhook URLs must be registered in advance and point to a stable destination.
Nango doesn’t currently support creating environments programmatically. This is on the roadmap and will make ephemeral environment setups much cleaner when available.
For now, the simplest approach is to designate a fixed, long-lived Nango environment (e.g., dev) specifically for Nango-related changes, and use that consistently across preview deployments rather than trying to create a new Nango environment per preview. If you need previews to receive live webhook events, a proxy server is the current workaround: register a stable URL in Nango, and have the proxy forward incoming webhooks to the correct preview URL.

Dependency-safe CI and monorepos

When running Nango in CI or monorepos, you often want to avoid modifying package.json or running extra installs from within Nango commands. Use --no-dependency-update on CLI commands, or set NANGO_CLI_DEPENDENCY_UPDATE=false as an environment variable:
With --no-dependency-update, Nango will not install dependencies. Make sure your pipeline does so first (e.g. npm ci, pnpm install --frozen-lockfile, yarn install --immutable, or bun install --frozen-lockfile).
In CI environments, Nango automatically disables dependency updates to prevent modifying package.json. Passing --no-dependency-update explicitly silences the related warning.