Framework Frankfurt, Germany

Deploy Nuxt on Nodion

Nodion recognizes Nuxt by nuxt in package.json. The Node.js buildpack installs your dependencies from the lockfile, runs nuxt build and starts the Nitro server with node .output/server/index.mjs, so the default Nuxt scripts work as they are. Your app runs as a long-running Node.js server in Frankfurt.

Deploy to Nodion ›

from 1 EUR / month

Up to 15 € credit when signing up

Detected by
nuxt in package.json
Start
start script or node .output/server/index.mjs
Node.js
22, 24 (default), 26
Region
EU Central (Frankfurt)

Deploy Nuxt step by step

  1. Keep the default scripts and a lockfile Commit your lockfile; the build fails without one. Nuxt projects ship no start script, and you do not need one: Nodion runs your build script and then starts .output/server/index.mjs, which listens on the PORT that Nodion sets. If you add a start script, Nodion runs that instead. package.json
    "scripts": {
      "build": "nuxt build",
      "dev": "nuxt dev"
    }
  2. Create the app In the dashboard, create an application from your GitHub, GitLab, Bitbucket or Gitea repository, pick the branch and the region EU Central, and keep the build strategy on Buildpacks.
  3. Configure with NUXT_ variables Declare your settings in runtimeConfig and set them as NUXT_API_SECRET or NUXT_PUBLIC_API_BASE on the Environment tab. Nuxt reads these when the server starts, so they need no Build flag. Only values that nuxt.config reads from process.env during the build need it. nuxt.config.ts
    export default defineNuxtConfig({
      runtimeConfig: {
        apiSecret: "",
        public: {
          apiBase: "",
        },
      },
    });
  4. Push to deploy Every push to the branch builds a new release. Traffic moves to it once / answers with a 2xx or 3xx status. If / answers 401 or 404, add a server route such as server/routes/health.ts and set /health as the health check path in the app settings.

Good to know

  • Static site with nuxt generateNodion does not detect nuxt generate on its own and keeps starting the server. For a static site, make nuxt generate your build script and add a static.toml with output-dir = ".output/public". Nodion then serves that folder with a static web server and an index.html fallback, and the smallest size is enough.
  • Nitro presetNodion starts .output/server/index.mjs, which Nitro's default node-server preset writes. If nuxt.config or NITRO_PRESET picks a preset for another host, remove it.

What Nodion runs for you

  • Deploys without downtime Push to your branch and Nodion builds a new release. Traffic switches once the new instances answer their health check; a failed release leaves the running one in place. Apps with a local volume restart instead, because the disk belongs to one instance.
  • Databases next to the app Managed PostgreSQL, pgvector, MySQL, Valkey and ClickHouse in the same region. Attached databases arrive as DATABASE_URL, REDIS_URL or CLICKHOUSE_URL.
  • Previews per pull request Turn on previews and pull requests from your repository get their own app with its own URL and fresh, empty databases, created automatically or by hand. Forks and bot pull requests are skipped.
  • Workers, cron jobs and scaling Run workers as extra processes of the same app, schedule jobs on the Cron tab, and scale every process to up to 16 instances.
  • Release step With buildpacks, a Procfile 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.
  • Logs and metrics Build, release and runtime logs plus CPU, memory, disk and network metrics for every instance in the dashboard.
  • Domains and HTTPS A default hostname with HTTPS from the first deploy; your own domains get certificates automatically.

Further reading

Nuxt on Nodion: questions and answers

Do I need a start script for Nuxt?

No. Without one, Nodion starts node .output/server/index.mjs, the server that nuxt build writes. A start script replaces that command, so if you add one, point it at the built server, not at nuxt dev.

Do server routes and API endpoints work?

Yes. Nodion runs the Nitro server as a long-running Node.js process, so everything under server/api and server/routes works as it does with node .output/server/index.mjs on your machine.

Which Node.js version does my Nuxt app get?

Node.js 24, unless you pin another one in .node-version, .nvmrc or engines.node. A range such as ">=20" resolves to the newest matching release, which is Node.js 26 today.

Where does my Nuxt app run?

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.

Can I use Nuxt in line with the GDPR?

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.

How much does it cost to run Nuxt on Nodion?

An app instance starts at 1 EUR per month. The setup in the cost box costs 2 EUR per month: App 2 EUR. Prices are net and billed per second, and you pick bigger sizes or more instances whenever you need them.

Can I use my own domain for my Nuxt app?

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.

Give your agent a cloud.

Earn up to 15 € in credit when signing up.

Continue with GitHub

or with email

Stay in the loop.

Product news, no spam. Unsubscribe anytime.