[{"data":1,"prerenderedAt":401},["ShallowReactive",2],{"navigation_docs":3,"section-navigation-docs":130,"-blog-european-open-source-alternative-to-vercel-heroku-railway":164,"doc-previews":309},[4,8,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126],{"title":5,"path":6,"stem":7},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F01.quickstart",{"title":9,"path":10,"stem":11,"children":12},"Guides","\u002Fdocs\u002Fguides","docs\u002F02.guides\u002Findex",[13,14,18,22,26,30,34,38,42,46],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},"Next.js","\u002Fdocs\u002Fguides\u002Fnextjs","docs\u002F02.guides\u002F1.nextjs",{"title":19,"path":20,"stem":21},"Nuxt","\u002Fdocs\u002Fguides\u002Fnuxt","docs\u002F02.guides\u002F2.nuxt",{"title":23,"path":24,"stem":25},"SvelteKit","\u002Fdocs\u002Fguides\u002Fsveltekit","docs\u002F02.guides\u002F3.sveltekit",{"title":27,"path":28,"stem":29},"Astro","\u002Fdocs\u002Fguides\u002Fastro","docs\u002F02.guides\u002F4.astro",{"title":31,"path":32,"stem":33},"Express","\u002Fdocs\u002Fguides\u002Fexpress","docs\u002F02.guides\u002F5.express",{"title":35,"path":36,"stem":37},"FastAPI","\u002Fdocs\u002Fguides\u002Ffastapi","docs\u002F02.guides\u002F6.fastapi",{"title":39,"path":40,"stem":41},"Django","\u002Fdocs\u002Fguides\u002Fdjango","docs\u002F02.guides\u002F7.django",{"title":43,"path":44,"stem":45},"Laravel","\u002Fdocs\u002Fguides\u002Flaravel","docs\u002F02.guides\u002F8.laravel",{"title":47,"path":48,"stem":49},"Go","\u002Fdocs\u002Fguides\u002Fgo","docs\u002F02.guides\u002F9.go",{"title":51,"path":52,"stem":53},"Services","\u002Fdocs\u002Fservices","docs\u002F03.services",{"title":55,"path":56,"stem":57},"Deployments","\u002Fdocs\u002Fdeployments","docs\u002F04.deployments",{"title":59,"path":60,"stem":61},"Builds","\u002Fdocs\u002Fbuilds","docs\u002F05.builds",{"title":63,"path":64,"stem":65},"Variables","\u002Fdocs\u002Fvariables","docs\u002F06.variables",{"title":67,"path":68,"stem":69},"Domains","\u002Fdocs\u002Fdomains","docs\u002F07.domains",{"title":71,"path":72,"stem":73},"PostgreSQL","\u002Fdocs\u002Fpostgres","docs\u002F08.postgres",{"title":75,"path":76,"stem":77},"Object storage","\u002Fdocs\u002Fobject-storage","docs\u002F09.object-storage",{"title":79,"path":80,"stem":81},"Volumes","\u002Fdocs\u002Fvolumes","docs\u002F10.volumes",{"title":83,"path":84,"stem":85},"Key-value store","\u002Fdocs\u002Fredis","docs\u002F11.redis",{"title":87,"path":88,"stem":89},"Workspaces","\u002Fdocs\u002Fworkspaces","docs\u002F12.workspaces",{"title":91,"path":92,"stem":93},"Projects","\u002Fdocs\u002Fprojects","docs\u002F13.projects",{"title":95,"path":96,"stem":97},"Environments","\u002Fdocs\u002Fenvironments","docs\u002F14.environments",{"title":99,"path":100,"stem":101},"Eject","\u002Fdocs\u002Feject","docs\u002F15.eject",{"title":103,"path":104,"stem":105},"API","\u002Fdocs\u002Fapi","docs\u002F16.api",{"title":107,"path":108,"stem":109},"CLI","\u002Fdocs\u002Fcli","docs\u002F17.cli",{"title":111,"path":112,"stem":113},"Claude Plugin & MCP","\u002Fdocs\u002Fclaude-plugin","docs\u002F18.claude-plugin",{"title":115,"path":116,"stem":117},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F19.metrics",{"title":119,"path":120,"stem":121},"Logs","\u002Fdocs\u002Flogs","docs\u002F20.logs",{"title":123,"path":124,"stem":125},"Billing","\u002Fdocs\u002Fbilling","docs\u002F21.billing",{"title":127,"path":128,"stem":129},"Self-hosting","\u002Fdocs\u002Fself-hosting","docs\u002F22.self-hosting",[131,132,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],{"title":5,"path":6,"stem":7},{"title":9,"path":10,"stem":11,"children":133},[134,135,136,137,138,139,140,141,142,143],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},{"title":19,"path":20,"stem":21},{"title":23,"path":24,"stem":25},{"title":27,"path":28,"stem":29},{"title":31,"path":32,"stem":33},{"title":35,"path":36,"stem":37},{"title":39,"path":40,"stem":41},{"title":43,"path":44,"stem":45},{"title":47,"path":48,"stem":49},{"title":51,"path":52,"stem":53},{"title":55,"path":56,"stem":57},{"title":59,"path":60,"stem":61},{"title":63,"path":64,"stem":65},{"title":67,"path":68,"stem":69},{"title":71,"path":72,"stem":73},{"title":75,"path":76,"stem":77},{"title":79,"path":80,"stem":81},{"title":83,"path":84,"stem":85},{"title":87,"path":88,"stem":89},{"title":91,"path":92,"stem":93},{"title":95,"path":96,"stem":97},{"title":99,"path":100,"stem":101},{"title":103,"path":104,"stem":105},{"title":107,"path":108,"stem":109},{"title":111,"path":112,"stem":113},{"title":115,"path":116,"stem":117},{"title":119,"path":120,"stem":121},{"title":123,"path":124,"stem":125},{"title":127,"path":128,"stem":129},{"id":165,"title":166,"author":167,"body":168,"date":300,"description":301,"extension":302,"meta":303,"navigation":304,"path":305,"seo":306,"stem":307,"__hash__":308},"blog\u002Fblog\u002Feuropean-open-source-alternative-to-vercel-heroku-railway.md","The European open-source alternative to Vercel, Heroku, and Railway","Christian Blättler",{"type":169,"value":170,"toc":296},"minimark",[171,181,184,187,195,198,201,207,215,252,260,273,276],[172,173,174,175,180],"p",{},"Ever since I deployed my first web app to Vercel (back when it was ",[176,177,179],"a",{"href":178},"https:\u002F\u002Fvercel.com\u002Fblog\u002Fzeit-is-now-vercel","still called ZEIT",") as a teenager, I was hooked on the developer experience. Simple and intuitive, yet scalable enough for real projects.",[172,182,183],{},"At the time I was used to configuring Windows servers by hand, so it felt genuinely magical that infrastructure could be this effortless.",[172,185,186],{},"That fascination with infrastructure automation stuck with me. I have spent almost ten years as a software engineer on infrastructure automation projects, much of it on teams running containers at scale with Kubernetes. I saw first hand how a few well-chosen integrations can turn a plain cluster into a platform that is far greater than the sum of its parts.",[172,188,189,190,194],{},"So I always assumed Kubernetes would be the obvious foundation for a platform like this. That is why it surprised me to learn that Heroku, Vercel, and Railway were all built on proprietary container orchestration (",[176,191,193],{"href":192},"https:\u002F\u002Fwww.heroku.com\u002Fblog\u002Fnext-generation-heroku-platform\u002F","Heroku appears to have moved to Kubernetes in recent years",").",[172,196,197],{},"For a long time that was just an interesting technical detail. Then the recent geopolitical instability made something clear: these platforms fall under US jurisdiction, and with it the US CLOUD Act, which is more than a theoretical risk for a European business.",[172,199,200],{},"So I finally started building the platform I had been sketching in the back of my mind for years, with one goal:",[202,203,204],"blockquote",{},[172,205,206],{},"Replicate the developer experience of Vercel, Heroku, and Railway, on an open platform that never locks you in.",[172,208,209,210,214],{},"The result is Lucity. You can ",[176,211,213],{"href":212},"https:\u002F\u002Flucity.cloud\u002Fapp\u002Flogin","try it for free",". A few of the highlights:",[216,217,218,222,225,228,231,234,237,240,243,246,249],"ul",{},[219,220,221],"li",{},"Git push to deploy",[219,223,224],{},"Automated builds for your favorite languages and frameworks: Node.js, Next.js, Python, Go, PHP, Ruby, Rust, Java, Elixir, Bun, Deno, .NET, and static sites",[219,226,227],{},"One-click PostgreSQL (replicated), S3-compatible object storage, and Redis-compatible key-value stores",[219,229,230],{},"Tokenless deployments from GitHub Actions",[219,232,233],{},"AI-native deployments powered by an MCP server and a Claude Code plugin",[219,235,236],{},"Dynamic variables, so you reference credentials instead of hardcoding them",[219,238,239],{},"Usage-based billing: pay only for what you use",[219,241,242],{},"Vulnerability and leaked-credential scans on every commit",[219,244,245],{},"Separate environments for development, staging, and production",[219,247,248],{},"Logs, metrics, and observability built in",[219,250,251],{},"Custom domains, private networking, and much more",[172,253,254,255,259],{},"And naturally, that headline feature is what makes \"no lock-in\" more than a slogan. When you want out, ",[256,257,258],"code",{},"lucity eject"," hands you the full configuration as standard Helm charts, ready to run on any Kubernetes cluster with Lucity out of the picture. It works because Lucity keeps no database of its own: it derives all of its state from Kubernetes and the systems around it. Your infrastructure stays yours.",[172,261,262,263,267,268,272],{},"Lucity is under active development. Reach out at ",[176,264,266],{"href":265},"mailto:christian@zeitlos.software","christian@zeitlos.software"," or open an issue at ",[176,269,271],{"href":270},"https:\u002F\u002Fgithub.com\u002Fzeitlos\u002Flucity","github.com\u002Fzeitlos\u002Flucity"," for feature requests and bug reports.",[172,274,275],{},"It is also listed as a European alternative on:",[216,277,278,284,290],{},[219,279,280],{},[176,281,283],{"href":282},"https:\u002F\u002Feuropeantechmap.eu\u002Fcompany\u002Flucity","European Tech Map",[219,285,286],{},[176,287,289],{"href":288},"https:\u002F\u002Feuroalternative.eu\u002Flucity","euroalternative.eu",[219,291,292],{},[176,293,295],{"href":294},"https:\u002F\u002Feuropeanpurpose.com\u002Ftool\u002Flucity","European Purpose",{"title":297,"searchDepth":298,"depth":298,"links":299},"",2,[],"2026-07-27","Why I built Lucity: the same developer experience as Vercel, Heroku, and Railway, on an open platform you own and can leave at any time.","md",{},true,"\u002Fblog\u002Feuropean-open-source-alternative-to-vercel-heroku-railway",{"title":166,"description":301},"blog\u002Feuropean-open-source-alternative-to-vercel-heroku-railway","xuRbBPKHwwahxgYR0lALv5Zg-NRzWzcUuGKU51R6AjQ",[310,313,316,319,322,325,328,331,334,337,340,343,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,389,393,397],{"path":6,"title":311,"description":312},"Deploy your first service","Deploy an app to Lucity, put it on a public domain, and connect a PostgreSQL database and an object storage bucket in about fifteen minutes.",{"path":314,"title":9,"description":315},"\u002Fdocs\u002Fguides\u002F.navigation",null,{"path":16,"title":317,"description":318},"Deploy a Next.js app","Deploy a Next.js app on Lucity, with a database, environment variables that behave, and no Dockerfile.",{"path":20,"title":320,"description":321},"Deploy a Nuxt app","Deploy a Nuxt app on Lucity. Nitro output, runtime config, and a database, with no preset to pick.",{"path":24,"title":323,"description":324},"Deploy a SvelteKit app","Deploy a SvelteKit app on Lucity. One adapter change stands between a fresh project and a running service.",{"path":28,"title":326,"description":327},"Deploy an Astro site","Deploy an Astro site on Lucity, static by default and server rendered when you add an adapter.",{"path":32,"title":329,"description":330},"Deploy an Express API","Deploy an Express API on Lucity. Three requirements, none of them platform-specific.",{"path":36,"title":332,"description":333},"Deploy a FastAPI service","Deploy a FastAPI service on Lucity. Detection is picky about layout, and the fix is one setting.",{"path":40,"title":335,"description":336},"Deploy a Django project","Deploy a Django project on Lucity, with migrations that run themselves and static files that do not.",{"path":44,"title":338,"description":339},"Deploy a Laravel application","Deploy a Laravel application on Lucity, with migrations, caches and a queue worker, and no server to configure.",{"path":48,"title":341,"description":342},"Deploy a Go service","Deploy a Go service on Lucity. Compiled in the build, shipped as a binary, nothing else in the image.",{"path":10,"title":344,"description":345},"Deploy your framework","Deploy guides for the frameworks people actually ship: Next.js, Nuxt, SvelteKit, Astro, Express, FastAPI, Django, Laravel, and Go.",{"path":52,"title":51,"description":347},"Services are the deployable units of a project: what they are, how they are configured, and how they scale.",{"path":56,"title":55,"description":349},"How a deployment goes live on Lucity, and the ways to trigger one.",{"path":60,"title":59,"description":351},"How Lucity turns your source code into a container image.",{"path":64,"title":63,"description":353},"Configuration for your services: service variables, shared variables, and dynamic variables.",{"path":68,"title":67,"description":355},"Put a service on the internet. Use a platform hostname for quick tests, or a domain you own.",{"path":72,"title":71,"description":357},"Managed PostgreSQL databases, replicated and backed up, connected to your services without copying credentials.",{"path":76,"title":75,"description":359},"S3-compatible buckets for uploads, exports and anything else your service needs to keep.",{"path":80,"title":79,"description":361},"Persistent disks for services that need to keep state on the filesystem.",{"path":84,"title":83,"description":363},"A Redis®-compatible key-value store for caching, sessions and queues.",{"path":88,"title":87,"description":365},"Workspaces represent your organization in Lucity, with their own members, isolation and billing.",{"path":92,"title":91,"description":367},"Projects group services, databases and the environments they run in.",{"path":96,"title":95,"description":369},"Development, staging, production: isolated copies of the same application.",{"path":100,"title":99,"description":371},"Download a project as a Helm chart and run it on a Kubernetes cluster of your own.",{"path":104,"title":103,"description":373},"The GraphQL API behind the dashboard, with an interactive playground.",{"path":108,"title":107,"description":375},"Deploy and manage your services from a terminal or a CI pipeline.",{"path":112,"title":111,"description":377},"Deploy and manage your services from Claude Code, Codex, Cursor or any other MCP client.",{"path":116,"title":115,"description":379},"CPU and memory for every service, activity for every database, and disk usage for every volume.",{"path":120,"title":119,"description":381},"What your services print while they run, and the output of every deployment step.",{"path":124,"title":123,"description":383},"Plans, resource usage, the free trial, and what happens when a payment fails.",{"path":128,"title":127,"description":385},"Run the whole platform on a Kubernetes cluster you own, using the same two Helm charts we run ourselves.",{"path":387,"title":388,"description":315},"\u002Flegal\u002F.navigation","Legal",{"path":390,"title":391,"description":392},"\u002Flegal\u002Fdata-processing-agreement","Data Processing Agreement","How Lucity processes personal data on your behalf.",{"path":394,"title":395,"description":396},"\u002Flegal\u002Fprivacy-policy","Privacy Policy","How Lucity handles your data.",{"path":398,"title":399,"description":400},"\u002Flegal\u002Fterms-of-use","Terms of Use","Terms governing your use of Lucity.",1793630524862]