Netlify deployment & regions
★★★★★ 4.6 CE

Netlify Deployment, Regions & Data Residency 2026

Netlify runs functions in 12 self-serve regions plus 2 EU by request, with Edge Functions on Deno. Each function runs in one region; region choice needs Pro.

Netlify Deployment & Regions verdict

Verified today·7 sources checked

Netlify runs serverless functions in 12 self-serve AWS regions, plus 2 support-assisted EU regions in Paris and Milan.

With Edge Functions on Deno's global network. New sites default to cmh in Ohio.

How to pick your regions

Pin each function to the self-serve region nearest its database, and reach for dub, lhr or fra for EU residency, requesting cdg or mxp from support if you need Paris or Milan. One thing Netlify will not do for you is cross-region failover, so design that into the app rather than relying on the platform. Keep regulated PHI off Edge Functions, which fall outside HIPAA hosting.

Honest limits
  • Free and Starter sites are locked to cmh in Ohio. Choosing a function region requires Pro or Enterprise.
  • Functions run in exactly one region with no automatic cross-region failover, so cross-region HA is your responsibility. The Paris and Milan EU regions are support-assisted only, not self-serve.
  • Edge Functions run on Deno's global network, not the AWS function regions, and are excluded from HIPAA-compliant hosting.
Self-serve regions
12
Support-assisted EU
2
Default region
cmh (Ohio)
Regions per function
1
Auto failover
None
View sources

This page covers where Netlify functions run and how residency works. Performance and pricing live on their own pages.

Pick your Netlify region and deployment

Deploy Netlify: configuration and CLI

Commit netlify.toml to your repo root. [build] is global across deploy contexts; [functions] sets the functions directory and bundler; a per-function [functions."name"] block pins its region (Pro/Enterprise) and memory; [[redirects]] and [[headers]] are global; [[edge_functions]] maps an edge function to a path.

netlify.tomltoml
[build]
  command = "next build"
  publish = ".next"

[build.environment]
  NODE_VERSION = "20"

[functions]
  directory = "netlify/functions"
  node_bundler = "esbuild"

# Pin a single function near its database (Pro/Enterprise only).
[functions."process-orders"]
  region = "dub"
  memory = "2gb"

[[edge_functions]]
  path = "/personalize/*"
  function = "personalize"

[[redirects]]
  from = "/api/*"
  to = "https://api.example.com/:splat"
  status = 200
  force = true

[[headers]]
  for = "/*"
  [headers.values]
    X-Frame-Options = "DENY"
    Content-Security-Policy = "frame-ancestors 'none'"

[context.deploy-preview]
  command = "next build"

Install and authenticate the CLI, link the repo, then deploy. `netlify deploy` ships to a draft URL for review; add `--prod` to publish to the live site. Set function-scoped environment variables per deploy context without committing secrets.

Netlify CLIbash
# Install and authenticate
npm install -g netlify-cli
netlify login

# Link the local repo to a Netlify site (continuous deployment)
netlify init

# Build locally and deploy a draft for review
netlify build
netlify deploy --dir=.next --functions=netlify/functions

# Publish to the live production URL
netlify deploy --prod

# Function-scoped env var, production context only (kept out of source)
netlify env:set API_KEY s3cr3t --scope functions --context production

Override the site-level region per function in code. Functions run in exactly one region with no automatic geo-routing, so place data-bound functions near their database; an Edge Function exports a config with the path it should run on, executing at the location closest to each user.

Pin a function region (code)typescript
// netlify/functions/process-orders.mts  (Serverless Function)
import type { Config } from '@netlify/functions';

export default async (req: Request) => {
  // ...handler logic close to the EU database
  return new Response('ok');
};

// Run this one function in Dublin (overrides the site UI region).
export const config: Config = {
  path: '/api/orders',
  region: 'dub',
};

// netlify/edge-functions/personalize.ts  (Edge Function, Deno runtime)
import type { Config } from '@netlify/edge-functions';
export default async () => new Response('hi from the edge');
export const config: Config = { path: '/personalize/*', cache: 'manual' };

Function regions and locations

Region codeLocationAvailabilityDefault
cmhUS East (Ohio)Self-serveYes
iadUS East (N. Virginia)Self-serveNo
pdxUS West (Oregon)Self-serveNo
sfoUS West (N. California)Self-serveNo
yulCanada (Central)Self-serveNo
gruSouth America (Sao Paulo)Self-serveNo
dubEU (Ireland)Self-serveNo
lhrEU (London)Self-serveNo
fraEU (Frankfurt)Self-serveNo
nrtAsia Pacific (Tokyo)Self-serveNo
sinAsia Pacific (Singapore)Self-serveNo
sydAsia Pacific (Sydney)Self-serveNo
cdgEU (Paris)Support-assistedNo
mxpEU (Milan)Support-assistedNo

Region reach by plan

Plan / scopeRegion reachFailoverConfig
Free / Startercmh (Ohio) onlyNone (single region)Default; region change not available
Pro12 self-serve regionsNone automaticSite UI or per-function in code
Enterprise12 self-serve + cdg, mxpNone automaticSupport-assisted for cdg/mxp; credit-based memory/vCPU
Per-function overrideAny allowed regionPlace near the relevant datastoreconfig.region in function code
Single-region functionsExactly one regionNo same-function geo-routingArchitectural constraint
Edge FunctionsDeno global networkRuns at closest locationDeployed everywhere by default

Netlify data residency and compliance

Data type / controlEU / residency optionNotes
Function executiondub, lhr, fra, cdg, mxpPin per function for in-region processing
Edge FunctionsDeno global networkNot supported under HIPAA-compliant hosting
Compliance auditsSOC 2 Type 2, ISO 27001/27018, PCI DSS v4Plus HIPAA, GDPR, CCPA
Transfer frameworkEU-US DPF + Swiss-US DPFCertified for transatlantic data transfer
Data Processing AgreementIncorporated by referenceDownloadable; part of terms and conditions

What to verify before you commit to Netlify

  • Free and Starter sites cannot choose a function region, they are locked to cmh (Ohio); region selection needs a Pro or Enterprise plan
  • Each function runs in exactly one region with no automatic cross-region failover, so high availability across regions must be handled in your architecture, not by the platform
  • Edge Functions are explicitly not part of Netlify's HIPAA-compliant hosting offering, so regulated PHI workloads cannot use them
  • The Paris (cdg) and Milan (mxp) EU regions are support-assisted only, not self-serve, so plan lead time if you need them for residency

Netlify Deployment & Regions FAQ

Which regions can Netlify functions run in?

Twelve self-serve regions. cmh in Ohio is the default. The others are iad, pdx, sfo, yul, gru, dub, lhr, fra, nrt, sin, syd, mapping to the US, Canada, Sao Paulo and the main EU and APAC cities. Two more, cdg in Paris and mxp in Milan, come through support-assisted setup. Edge Functions run separately on Deno's global network.

Can I change a function's region, and on which plan?

Region selection requires a Pro or Enterprise plan, since Free and Starter sites are locked to cmh in Ohio. You set the region at the site level in the UI, or override it per function in code through the function's config.region. Each function runs in exactly one region, so place data-bound functions near their database.

Does Netlify support EU data residency for GDPR?

Yes. Pin functions to dub in Ireland, lhr in London or fra in Frankfurt self-serve, or request cdg in Paris or mxp in Milan from support. Netlify commits to GDPR and CCPA, provides a downloadable DPA in its terms, and holds EU-US and Swiss-US Data Privacy Framework certification. Edge Functions, though, are not covered by HIPAA-compliant hosting.

How does Netlify handle regional failover?

It doesn't, automatically. Each function runs in exactly one region, and the same function cannot deploy to several regions for geo-routing, so cross-region high availability has to be designed into your application. The CDN layer and Edge Functions are globally distributed, but serverless function execution stays single-region.

How do I deploy and pin a region with Netlify?

Configure builds, redirects, headers, per-function regions in netlify.toml, for example [functions."name"] region = "dub". Then deploy with the Netlify CLI: netlify deploy for a draft URL, netlify deploy --prod to publish. You can also override a region in function code with export const config = { region: 'dub' }.

Sources & verification

Verified by ComparEdgeMethod: Vendor docs, official pages, and selected independent sources
SourceWhat was checkedLast checked
Netlify OfficialOfficial product pageJuly 10, 2026
Netlify Developer docsConfigure Builds File Based ConfigurationJuly 10, 2026
Netlify Developer docsCLI Guides Get Started With CLIJuly 10, 2026
Netlify Developer docsFunctions ConfigurationJuly 10, 2026
Netlify Developer docsEdge Functions OverviewJuly 10, 2026
Netlify Developer docsLimits and quotasJuly 10, 2026
Netlify Gdpr CcpaGDPR CcpaJuly 10, 2026

Every fact on this Netlify page is tied to a named source and a verification date. Freshness-sensitive figures trace to the sources above; verify against the vendor before relying on them.