Framework Frankfurt, Germany
Nodion builds frontends such as Vite, Angular, Create React App, Gatsby and Eleventy with its Node.js buildpack, then serves the output folder with a static web server. A repository with a root index.html and no package.json is served as it is. Your site runs in Frankfurt, and the smallest app size is enough.
static.toml or a root index.htmldist/, build/, public/, _site/ or your static.tomlindex.html fallbackbuild script and takes the output folder from your framework: dist/ for Vite, build/ for Create React App, dist/<project>/browser for Angular, public/ for Gatsby and _site/ for Eleventy. package.json "scripts": {
"dev": "vite",
"build": "vite build"
} VITE_*, REACT_APP_* or GATSBY_* into the files during the build, so they need the Build flag on the Environment tab. Everything in them is public, so never put secrets there. index.html in dist, build, out, .output/public, public and _site. If yours writes somewhere else, as VitePress does, add a static.toml next to package.json. It also makes Nodion treat the repository as a static site when it would not detect one. fallback names the file served for paths that do not exist. static.toml output-dir = "docs/.vitepress/dist"
fallback = "index.html" index.html in the root and no package.json is served as it is. Nodion leaves out .git, .env files and some common key files, but treat everything you commit as public and keep secrets out of the repository. / answers, which your index.html takes care of. index.html, so React Router, Vue Router and Angular routes survive a reload. The fallback cannot be switched off; fallback in static.toml only swaps the file.release: line would still run, but in an image that holds only the built files, so leave it out. If your repository is a Node.js server with a build script, read the Node.js guide for how Nodion tells the two apart.@angular/ssr, so server rendering does not run. For SSR, use a Dockerfile.public/ or _site/) and set the app's base directory to it: a folder with an index.html and no package.json is served as it is. Or build the site in a Dockerfile.DATABASE_URL, REDIS_URL or CLICKHOUSE_URL. release: line runs with every new build. Dockerfile apps, and redeploys or rollbacks to an earlier image, use a release command set on the app itself, which also takes precedence over the Procfile line. On static sites a release step runs in an image that holds only the built files. After the build, Nodion found no index.html in the folders it checks. Make sure your build script writes one, or name the folder with output-dir in a static.toml.
No. No server runs that could read them, so every value has to be there during the build: give it the Build flag. After you change one, deploy again to rebuild the files.
Node.js 24, unless you pin 22 or 26 in .node-version, .nvmrc or engines.node. A range such as ">=20" resolves to the newest matching release.
In the EU Central region in Frankfurt, Germany. Build, registry, the app and its databases, volumes, buckets, logs and metrics stay in that region, and Nodion's API and control plane are hosted in Germany. Nodion GmbH is based in Stuttgart.
Nodion provides the basis for it: Nodion GmbH is based in Stuttgart, Germany, in the Frankfurt region the app, its databases and volumes run in Germany, and you conclude the data processing agreement (DPA) under Art. 28 GDPR electronically in the dashboard. Whether your setup complies also depends on how you configure and use the app.
An app instance starts at 1 EUR per month. The setup in the cost box costs 1 EUR per month: App 1 EUR. Prices are net and billed per second, and you pick bigger sizes or more instances whenever you need them.
Yes. Every app gets a default hostname with HTTPS. Add your own domain on the app's Domains tab; the TLS certificate is issued and renewed automatically.
Earn up to 15 € in credit when signing up.
or with email
Product news, no spam. Unsubscribe anytime.
Successfully subscribed.