Next.js on Het­zn­er in­stead of Ver­cel: the sov­er­eign al­ter­na­tive

Ver­cel is con­ve­nient and sits un­der US law. Next.js is open source and runs self-host­ed on Het­zn­er with Coo­lify and Dock­er, sta­bly, from around 39 eu­ros a month. Why data sov­er­eign­ty is­n't op­tion­al for se­ri­ous or­gan­i­sa­tions but a re­quire­ment, and what the switch hon­est­ly costs.
8 min readMatthias RadscheitMatthias Radscheit
Happycodingen-US

TL;DR

Vercel is a US company and therefore subject to the CLOUD Act. Next.js is open source and fully self-hostable, running stably and fast on Hetzner with Coolify and Docker from around 39 euros a month. For organisations with a serious data-protection mandate, that isn't an option but a requirement.

  • Vercel runs primarily on AWS with a US default region and, as a US company, stays subject to the CLOUD Act; DPF certification and SCCs do not resolve that jurisdiction question.
  • Next.js officially supports every feature self-hosted via Docker or a Node server; the recommended build path is output: 'standalone'.
  • On Hetzner with Coolify (Apache-2.0) and Docker, a production stack runs from around 39 euros a month for an AX41, with git-push deploys, PR preview URLs and auto-SSL.
  • The genuinely hard part is not image optimisation or middleware but ISR caching across multiple instances, which requires a custom cacheHandler.
  • Self-hosting means operational responsibility: 2 to 5 hours a month for updates, monitoring and backups. If you can't cover that, Vercel legitimately buys the effort back.

Ver­cel is the most con­ve­nient way to run a Next.js ap­pli­ca­tion, and the most ex­pen­sive in a cur­ren­cy that shows up on no in­voice: sov­er­eign­ty. De­ploy there and you hand your ap­pli­ca­tion and your user­s' data into the reach of US law. That's not a scan­dal, it's a de­sign de­ci­sion, and too few de­ci­sion-mak­ers make it on pur­pose.

The re­flex to treat Next.js and Ver­cel as one in­sep­a­ra­ble pack­age is mar­ket­ing, not fact. Next.js is an open-source frame­work un­der the MIT li­cence. Ver­cel is the com­pa­ny be­hind it, run­ning a man­aged plat­form with an ex­cel­lent de­vel­op­er ex­pe­ri­ence. The two are re­lat­ed, but they are not the same thing. You can run Next.js on your own in­fra­struc­ture in Ger­many, with al­most every fea­ture and very sim­i­lar per­for­mance. The ques­tion is not whether that works tech­ni­cal­ly; it works, of­fi­cial­ly and doc­u­ment­ed. The real ques­tion is whether you want to car­ry the op­er­a­tional re­spon­si­bil­i­ty that Vercel's con­ve­nience takes off your hands.

Why ju­ris­dic­tion, not cer­ti­fi­ca­tion, is what counts when you run Next.js on Het­zn­er in­stead of Ver­cel

Ver­cel runs pri­mar­i­ly on AWS across rough­ly twen­ty re­gions, and the de­fault lo­ca­tion for Ver­cel Func­tions is the Unit­ed States. The com­pa­ny is cer­ti­fied un­der the EU-US Data Pri­va­cy Frame­work, uses Stan­dard Con­trac­tu­al Claus­es in­clud­ing the UK Ad­den­dum, and holds SOC 2 Type 2 and ISO 27001. All of that is real and not worth­less. It just does­n't solve the prob­lem it claims to solve.

Be­cause the prob­lem is not en­cryp­tion in tran­sit or the au­dit lev­el of the data cen­tre. The prob­lem is the reach of the law. Ver­cel is a US com­pa­ny and there­fore re­mains sub­ject to US law, in­clud­ing the CLOUD Act. That act lets US au­thor­i­ties com­pel Amer­i­can providers to hand over data, re­gard­less of where that data phys­i­cal­ly sits. A DPF cer­ti­fi­ca­tion and SCCs ad­dress the trans­fer of data, not ju­ris­dic­tion over the provider. That's a cat­e­gor­i­cal dif­fer­ence, and glossy le­gal brochures like to blur it.

The cer­ti­fi­ca­tions are doc­u­ment­ed and ver­i­fi­able; the ju­ris­dic­tion ques­tion fol­lows from the gen­er­al le­gal po­si­tion, which we cov­er in more de­tail else­where. For a mar­ket­ing land­ing page with no per­son­al data, all of this is ir­rel­e­vant. For a sys­tem that process­es cus­tomer data, health data or trade se­crets, it's the de­ci­sive point, es­pe­cial­ly in light of NIS2 and ris­ing de­mands for data lo­cal­i­sa­tion. Ar­gue here with "but we're DPF cer­ti­fied" and you've ei­ther missed the ques­tion or you're hop­ing your data pro­tec­tion of­fi­cer won't ask it.

What Next.js can ac­tu­al­ly do self-host­ed

The biggest mis­con­cep­tion around this top­ic is that self-host­ing costs you half the fea­ture list. It does­n't, and the of­fi­cial doc­u­men­ta­tion is un­am­bigu­ous. A Node.js serv­er and Dock­er sup­port every Next.js fea­ture; only pure sta­t­ic ex­port is con­strained. The rec­om­mend­ed build path is out­put: 's­tand­alone', a lean, self-con­tained arte­fact that drops into a con­tain­er with­out the full node_mod­ules bal­last.

The two fea­tures peo­ple wor­ry about most are, in prac­tice, un­re­mark­able. Im­age op­ti­mi­sa­tion via next/im­age runs self-host­ed with zero con­fig un­der next start, be­cause Next.js uses sharp in­ter­nal­ly; only edge cas­es like glibc mem­o­ry tun­ing need man­u­al work. Mid­dle­ware too, or the proxy con­ven­tion it's re­named to from ver­sion 16 on­wards, runs self-host­ed with­out con­fig­u­ra­tion. What you lose is not the func­tion but its glob­al­ly dis­trib­uted ex­e­cu­tion on an edge net­work. That's a per­for­mance de­tail, not a loss of ca­pa­bil­i­ty, and for the vast ma­jor­i­ty of DACH ap­pli­ca­tions with a Eu­ro­pean user base it's a de­tail that dis­ap­pears into the noise.

The gen­uine­ly hard part is some­thing else, and I name it de­lib­er­ate­ly, be­cause hon­est ar­chi­tec­ture is where the dif­fer­ence is made. In­cre­men­tal Sta­t­ic Re­gen­er­a­tion works au­to­mat­i­cal­ly only as long as you run one next start in­stance with a per­sis­tent disk. The mo­ment you scale hor­i­zon­tal­ly across sev­er­al in­stances be­hind a load bal­ancer, you need a cus­tom cacheHan­dler, typ­i­cal­ly on Re­dis or S3, plus co­or­di­nat­ed cache tags, a shared en­cryp­tion key for Serv­er Ac­tions and a sta­ble de­ploy­men­tId. That's pre­cise­ly Vercel's core val­ue propo­si­tion, and it is­n't triv­ial to re­build. For a sin­gle in­stance with de­cent ver­ti­cal scal­ing, and a Het­zn­er AX41 is sur­pris­ing­ly large, the ques­tion nev­er even aris­es.

Het­zn­er, Coo­lify and Dock­er: the con­crete stack

Here's how we build it. A Het­zn­er ded­i­cat­ed serv­er, say an AX41 for around 39 to 49 eu­ros a month, in a Ger­man data cen­tre, GDPR-com­pli­ant and with no third-coun­try trans­fer. On top of that Coo­lify, an Apache-2.0 li­censed open-source plat­form that han­dles what makes Ver­cel so pleas­ant day to day: git-push de­ploys, PR pre­view URLs, au­to­mat­ic SSL via Let's En­crypt and zero-down­time de­ploys. Next.js is built as a stan­dard Dock­er im­age, out­put: 's­tand­alone', and runs as a con­tain­er.

One clar­i­fi­ca­tion be­longs here: Coo­lify is not a Next.js adapter. It sim­ply builds and runs the stan­dard Dock­er build, and there­fore in­her­its the Next.js doc­s' as­sur­ance that Dock­er sup­ports every fea­ture. The cache han­dler and the in­fra­struc­ture be­hind it re­main your re­spon­si­bil­i­ty, which, for a sin­gle in­stance, as not­ed, is no re­spon­si­bil­i­ty at all. The cost ra­tio to Ver­cel gets quot­ed in com­par­i­son blogs as ten to twen­ty per­cent; treat that as a rough, heav­i­ly set­up-de­pen­dent rule of thumb, not a bench­mark. The di­rec­tion is re­li­able, the dec­i­mal place is not.

The hon­est full reck­on­ing looks like this. We bud­get the clean ini­tial build of a self-host­ed stack as a one-off of 5,000 to 20,000 eu­ros, de­pend­ing on com­plex­i­ty. Run­ning op­er­a­tions sit at 2 to 5 hours a month for up­dates, mon­i­tor­ing and back­ups. You can start from 20 to 50 eu­ros a month; if you need high avail­abil­i­ty with re­dun­dant in­stances and a sep­a­rate data­base, you land at a few hun­dred eu­ros. Against that stands Ver­cel Pro at 20 US dol­lars per user per month, plus over­ages for build min­utes and trans­fer; SAML SSO is a paid add-on, and En­ter­prise has no pub­lic list price (as of mid-2026, ver­i­fy; Vercel's pric­ing is high­ly volatile). The de­ci­sive dy­nam­ic un­der­neath: self-host­ed costs fall over time, be­cause the set­up is in place. Man­aged costs rise with the pro­jec­t's suc­cess, be­cause you pay per suc­cess. Miss that and you make host­ing de­ci­sions on the demo price in­stead of the three-year curve.

Can Vercel's de­vel­op­er ex­pe­ri­ence be re­built?

Part­ly, and I won't de­fend the an­swer too op­ti­misti­cal­ly. Coo­lify cov­ers the most im­por­tant DX build­ing blocks: you push to a branch, a build starts, a pre­view URL ap­pears. For the dai­ly work of a mid-sized team, that's close enough to Ver­cel that the switch stops hurt­ing af­ter two weeks. Auto-SSL and zero-down­time de­ploys are solved prob­lems, not tin­ker­ing.

What you don't get one-to-one is the depth of the Ver­cel ecosys­tem: the glob­al edge net­work, the gran­u­lar an­a­lyt­ics, the Speed In­sights built into the work­flow, the tight in­ter­play of Edge Func­tions and ISR across re­gions. Those things are gen­uine­ly bet­ter on Ver­cel, and it would be dis­hon­est to dis­pute it. The point is not that Ver­cel is bad; Ver­cel is ex­cel­lent. The point is that this con­ve­nience de­mands a re­turn that is­n't paid in dol­lars but in con­trol over your data and in a ven­dor lock-in that builds up qui­et­ly. We see the same pat­tern with data­bas­es: Su­pabase ver­sus Fire­base is at heart the same Eu­ro­pean sov­er­eign­ty ques­tion, just one lay­er deep­er in the stack. Think fron­tend and data through con­sis­tent­ly and you an­swer both ques­tions the same way.

The un­com­fort­able point: self-host­ing is op­er­a­tional re­spon­si­bil­i­ty

Now the part con­sul­tants like to skip, be­cause it com­pli­cates the the­sis. Self-host­ing shifts re­spon­si­bil­i­ty, it does­n't elim­i­nate it. Ver­cel patch­es for you, scales for you, keeps the edge warm for you. Take that on your­self and you take it on for real: ap­ply Coo­lify up­dates, hard­en the op­er­at­ing sys­tem, test back­ups, not just set them up but prac­tise restor­ing them, and in a scal­ing sce­nario stand up the cache han­dler cor­rect­ly.

And some things gen­uine­ly are hard. Vercel's Edge Func­tions run at dozens of lo­ca­tions si­mul­ta­ne­ous­ly; you don't re­build that on a Ger­man serv­er, and for glob­al user bases with la­ten­cy de­mands that's a real dis­ad­van­tage. The mul­ti-in­stance ISR case de­scribed above is en­gi­neer­ing work that can go wrong if you un­der­es­ti­mate tag co­or­di­na­tion and shared keys. Run an ap­pli­ca­tion with a glob­al au­di­ence and hard la­ten­cy tar­gets, with no ops ca­pac­i­ty in-house, and Ver­cel le­git­i­mate­ly buys the ef­fort back. That's not ca­pit­u­la­tion, it's a clean make-or-buy de­ci­sion. Run-the-busi­ness tasks that no­body at your end can or wants to car­ry be­long out­sourced, as long as you know what you're out­sourc­ing.

The mis­take is­n't choos­ing Ver­cel. The mis­take is choos­ing Ver­cel with­out ever ask­ing the sov­er­eign­ty ques­tion, then be­ing sur­prised when the data pro­tec­tion of­fi­cer or a NIS2 au­dit asks it for you. A de­lib­er­ate make-or-buy de­ci­sion made with eyes open is al­ways de­fen­si­ble. A de­fault de­ci­sion you nev­er ac­tu­al­ly made nev­er is.

What I tell de­ci­sion-mak­ers

Sep­a­rate the two ques­tions Ver­cel de­lib­er­ate­ly fus­es: do you want Next.js? And do you want Ver­cel as your op­er­a­tor? The first an­swer is of­ten yes; Next.js is an ex­cel­lent frame­work, and we've laid out in full why it holds up as a tech­no­log­i­cal foun­da­tion. The sec­ond an­swer hangs sole­ly on your data-pro­tec­tion man­date and your ops ca­pac­i­ty, not on the frame­work.

If you process sen­si­tive data, fall un­der NIS2, or have a data pro­tec­tion of­fi­cer who takes the job se­ri­ous­ly, then self-host­ed on Het­zn­er with Coo­lify and Dock­er is­n't an ex­ot­ic op­tion but the ob­vi­ous an­swer. The stack is proven, the costs are pre­dictable and falling, and the per­for­mance is prac­ti­cal­ly in­dis­tin­guish­able from Ver­cel for Eu­ro­pean user bases. What you give up, edge con­ve­nience and a bit of DX pol­ish, is name­able and plannable.

If you have no ops team, no sen­si­tive data mod­el, and a glob­al au­di­ence with hard la­ten­cy tar­gets, then Ver­cel is the hon­est­ly bet­ter choice, and I would­n't talk you out of it. Just make that de­ci­sion ac­tive­ly. A tech­nol­o­gy de­ci­sion is al­ways a de­ci­sion about pow­er and de­pen­den­cy. Leave it to the de­fault and you buy your provider's in­ter­ests along with the prod­uct, and you only no­tice when the exit gets ex­pen­sive.

Frequently asked questions

Does self-hosting Next.js mean losing features compared to Vercel?
Functionally, almost none. The Next.js documentation confirms that a Node server and Docker officially support every feature. next/image runs self-hosted with zero config via sharp, and so does middleware. What you lose is not the function but its globally distributed edge execution. The one genuinely hard part is ISR caching across multiple instances, which requires a custom cacheHandler backed by Redis or S3.
What does a production Next.js stack on Hetzner cost compared to Vercel?
A Hetzner AX41 runs around 39 to 49 euros a month. Coolify is Apache-2.0 licensed and free. We budget the clean initial build of the self-hosted stack as a one-off of 5,000 to 20,000 euros, and operations at 2 to 5 hours a month. Vercel Pro costs 20 US dollars per user per month plus overages, and SAML SSO is an add-on (as of mid-2026, verify). Self-hosted costs fall over time; managed costs rise with the project's success.
Does the CLOUD Act make a Vercel deployment legally inadmissible?
Not automatically. Vercel is EU-US Data Privacy Framework certified, uses Standard Contractual Clauses, and holds SOC 2 Type 2 and ISO 27001. The problem is structural: as a US company, Vercel remains subject to US law, including the CLOUD Act. Certifications do not lift that jurisdiction question. For organisations with a serious data-protection mandate, it's a risk you have to assess deliberately rather than certify away.
Do I need a dedicated ops team to run Next.js on Hetzner?
No, but you need operational responsibility. Coolify handles git-push deploys, preview URLs, auto-SSL and zero-downtime deploys, so day-to-day work comes close to Vercel. We budget the running operation at 2 to 5 hours a month for updates, monitoring and backups. If you don't have that capacity in-house, Vercel legitimately buys the effort back, which is a valid make-or-buy decision, not a defeat.

Sources

Related articles

Open for select projects

Let's talk about your project

Book a no-oblig­a­tion call, send us an email, or use the form – we'd love to hear from you.

150+
Completed projects
15
Years of experience
8
Senior‑level team members