EthioDeploy/Docs
HomePricing
Overview

Overview

  • Getting started
  • How deploys work

Frameworks

  • Framework guides

Configuration

  • Web services & background workers
  • Environment variables
  • Addons
  • Database & Redis tools
  • Branch deployments
  • Custom domains
  • Analytics

Domains

  • Buying a domain

Agent mode

  • Agent mode
  • Agent plans & credit

Account

  • Team access
  • Billing

Help

  • Troubleshooting
  • Still stuck?
Deploy guides
  • Next.js
  • Node.js
  • Python
  • SvelteKit
Compare
  • AI coding agent
  • Hosting in Ethiopia
  • vs Vercel
  • vs Render
  • vs Railway
Deploy guidesSvelteKit

Deploy a SvelteKit app

SvelteKit needs one change before it runs on a container host: swap adapter-auto for adapter-node and add a start script. Then it's a normal git-push deploy.

Last updated September 29, 2026

Detected by
package.json
Install
npm ci / pnpm / yarn (from your lockfile)
Build
npm run build
Start
npm start (node build)

These are the defaults. Override any of them in Settings → Build.

Fix this first: adapter-auto has no runnable server here

A fresh SvelteKit project ships with adapter-auto, which picks an output by detecting known hosts (Vercel, Netlify, and so on). On a generic container host it finds none and produces no server; the build log says Could not detect a supported production environment. Use adapter-node instead.

Prepare your app

  1. Swap the adapter:
    npm install -D @sveltejs/adapter-node
    npm uninstall @sveltejs/adapter-auto
  2. Use it in svelte.config.js:
    import adapter from '@sveltejs/adapter-node';
    
    export default {
      kit: { adapter: adapter() },
    };
  3. Add a start script to package.json:
    "scripts": {
      "start": "node build"
    }

adapter-node listens on 0.0.0.0 and reads PORT by default, so no code change is needed for the health check. Never use vite dev as the production start command, since it only binds localhost.

Environment variables

Add variables in the project's settings. They're available both while the app builds and while it runs, so build-time values (like framework-public keys) work without extra setup. See Environment variables.

  • Set ORIGIN to your public URL (for example https://<project-slug>.ethiodeploy.com, or your custom domain). Without it, form actions are rejected as cross-site POSTs behind the proxy.
  • $env/static/* values and PUBLIC_ variables are baked in at build time. Set them before deploying. $env/dynamic/* is read at runtime.
  • A .envfile isn't loaded in production. Use project env vars instead.

Add a database

Add a Postgres addon and DATABASE_URL is injected automatically. Read it from $env/dynamic/privateso it's resolved at runtime and not baked into the build. Run migrations from the Build command in Settings → Build.

Deploy

  1. Sign in with GitHub and install the EthioDeploy app on the repo.
  2. Click “New Project” and pick the repo.
  3. Watch the build in the dashboard. When the health check passes, your app is live at <project-slug>.ethiodeploy.com. Every push to the default branch redeploys, and the old version keeps serving until the new one is healthy.

Troubleshooting

Could not detect a supported production environment

Cause: The project still uses adapter-auto.

Fix: Switch to @sveltejs/adapter-node.

Cannot find module … index.js on start

Cause: There's no start script.

Fix: Add "start": "node build".

Cross-site POST form submissions are forbidden (403)

Cause: ORIGIN isn't set, so the request origin doesn't match.

Fix: Set ORIGIN to your public URL.

PUBLIC_ or static env values are empty

Cause: They weren't set when the app was built.

Fix: Add them in Settings and redeploy.

Client IP shows the proxy address

Cause: adapter-node isn't told which forwarded header to trust.

Fix: Set ADDRESS_HEADER (for example X-Forwarded-For) and XFF_DEPTH.

Still stuck? Check the deployment's build log in the dashboard, or see Troubleshooting.

Ready to deploy? Sign in with GitHub and pick your repo. No Dockerfile, no YAML.

Other framework guides

Next.jsNode.jsPython

See the full docs for custom domains, env vars, addons, and billing.

On this page

  • Prepare your app
  • Environment variables
  • Add a database
  • Deploy
  • Troubleshooting

Product

  • Pricing
  • Documentation
  • AI coding agent
  • Agent mode docs
  • Domains
  • Hosting in Ethiopia

Deploy guides

  • Next.js
  • Node.js
  • Python
  • SvelteKit

Compare

  • EthioDeploy vs Vercel
  • EthioDeploy vs Render
  • EthioDeploy vs Railway

Company

  • About
  • Support
  • Contact
  • Terms
  • Privacy

EthioDeploy: agentic first development and deployment, started in Ethiopia, built for developers everywhere.