Migrate from Netlify to Temps

To move a site from Netlify to Temps: map your netlify.toml build settings, port your redirects and headers into your framework or web server config, turn Functions into API routes, replace Forms, import your environment variables, deploy, and cut DNS over while keeping Netlify live for 48 hours as a fallback. Static sites and full-stack apps both deploy from the same Git repository.

For plan and feature differences, see Temps vs Netlify. For what Netlify's credit-based pricing costs as a site grows, see Netlify's hidden costs.


Build settings

Netlify reads build config from netlify.toml. Temps auto-detects most frameworks; override the build command and output directory in the console or the CLI. Health checks and cron jobs go in a .temps.yaml file in your repository (see Networking and Cron jobs). Temps doesn't read netlify.toml.

netlify.toml → Temps equivalents

netlify.toml fieldTemps equivalent
[build] commandBuild command in Project Settings
[build] publishOutput directory in Project Settings
[build] environmentEnvironment Variables in Project Settings
[[redirects]]Your framework's redirect config (e.g. Next.js redirects()), or your own web server config — see Redirects and headers
[[headers]]Framework-level headers (e.g. Next.js headers() or middleware), or headers set by your app server
[functions]Standard API routes (Node.js, Python, etc.)

A typical netlify.toml for a static site:

[build]
  command = "npm run build"
  publish = "dist"

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

The equivalent Temps setup: set Build command to npm run build and Output directory to dist. Temps serves the static files, and the SPA fallback (unknown paths serve index.html) is handled by default for single-page apps, so that catch-all rule needs no replacement.


Redirects and headers

Temps does not read Netlify's _redirects or _headers files, or the [[redirects]] and [[headers]] blocks in netlify.toml. Every rule other than the SPA catch-all has to move somewhere Temps runs it, or those URLs will return 404 after the cutover (and lose the search traffic they carried).

  1. List the rules. Copy every line from _redirects, _headers and the netlify.toml redirect and header blocks into a checklist.
  2. Move them into your app. For framework apps (Next.js, Nuxt, Astro in server mode, etc.), keep redirects in the framework's config:
// next.config.ts
const nextConfig = {
  async redirects() {
    return [
      { source: "/old-path", destination: "/new-path", permanent: true },
    ];
  },
};
  1. For a plain static site, deploy it with a Dockerfile that serves the files through a web server you configure (nginx or Caddy), and translate each rule into that server's config (return 301 / redir lines and header directives). An Express or Fastify server that serves the build folder works too.
  2. Test every redirect on the preview URL before DNS cutover, for example with curl -sI https://<preview-url>/old-path and checking the status code and Location header.

Netlify Functions → API routes

Netlify Functions are Lambda-style serverless functions; on current Netlify plans a synchronous function times out after 60 seconds. On Temps, use standard framework API routes instead — they run in a long-lived process rather than cold-starting per invocation, and the proxy applies no request timeout unless you configure one (see request timeouts).

A Netlify Function:

// netlify/functions/hello.js
exports.handler = async (event) => {
  return { statusCode: 200, body: JSON.stringify({ message: "Hello" }) };
};

The equivalent Next.js API route:

// app/api/hello/route.ts
export async function GET() {
  return Response.json({ message: "Hello" });
}

For non-Next.js projects, add an Express or Fastify server and Temps will run it as a container.


What needs an alternative

Netlify featureTemps alternative
Edge FunctionsStandard middleware in your app. Temps has no edge functions.
Scheduled Functionscron: entries (path + schedule) in .temps.yaml that call an API route. See Cron jobs.
Background FunctionsA worker process or job queue in your app, for example backed by managed Redis
Netlify BlobsTemps managed S3 storage
Image CDNYour framework's image optimisation (e.g. next/image), optionally behind a CDN
Netlify IdentityYour own auth library (Auth.js, Lucia, Clerk, etc.)
An external databaseTemps managed PostgreSQL, or keep your provider

Forms

Netlify Forms captures form submissions without a backend. Temps doesn't include a managed forms service — use one of these instead:

  • Formspree or Formspark — drop-in replacements, same embed pattern
  • An API route in your app — store submissions in your own database
  • Email — send the submission from an API route with Temps transactional email (SES, Scaleway or an SMTP relay), or an email API such as Resend

Environment variables

Add environment variables

  1. 1

    In Netlify, open Site Settings then Environment Variables and export or copy the variables.

  2. 2

    In Temps, open Project then Settings then Environment Variables and paste them in.

  3. 3

    Remove or replace Netlify-specific variables (CONTEXT, DEPLOY_URL, NETLIFY) using their Temps equivalents.

Export from Netlify → Site Settings → Environment Variables, then add them in Temps → Project → Settings → Environment Variables.

Netlify's deploy-context variables (CONTEXT=production) don't have a direct equivalent. On Temps, variables are set per environment, so give your production and preview environments their own values instead (see Environments).


Deploy to Temps

Create and deploy the project

  1. 1

    Download deploy.sh, review it, then run the local copy to install Temps.

  2. 2

    Go to Projects then New Project in the Temps console.

  3. 3

    Connect your Git repository.

  4. 4

    Set build command and output directory if not auto-detected.

  5. 5

    Add your environment variables.

  6. 6

    Click Deploy.

    Checkpoint: Wait until the deployment completes and the app responds at its Temps preview URL before cutting over DNS.

# Install Temps on your server if not already done
curl -fsSL https://temps.sh/deploy.sh -o deploy.sh
less deploy.sh
bash deploy.sh

Then:

  1. Go to Projects → New Project in the Temps console
  2. Connect your Git repository
  3. Set build command and output directory if not auto-detected
  4. Add your environment variables
  5. Click Deploy

Cut over DNS

Add a custom domain and cut over DNS

  1. 1

    Find your numeric project ID with: bunx @temps-sdk/cli projects show -p my-app --json (look for the id field).

  2. 2

    Confirm your app works at the Temps preview URL before touching DNS.

    Checkpoint: Open the preview URL and run your test suite first.

  3. 3

    Go to Project then Settings then Domains then Add Domain.

  4. 4

    Add the DNS records shown (A or CNAME) at your DNS provider.

  5. 5

    Temps provisions TLS automatically.

    Checkpoint: Keep your Netlify site active for 48 hours post-migration as a fallback in case you need to roll back.

  1. Go to Project → Settings → Domains → Add Domain
  2. Add the DNS records shown (A or CNAME)
  3. Temps provisions TLS automatically

Lower your DNS TTL to 60 seconds a few hours before cutting over to minimize the window where requests still hit Netlify.

Keep your Netlify site active for 48 hours post-migration as a fallback. For framework and runtime support details, see supported platforms. Once live, web analytics and error tracking are built into Temps.

Last updated

Was this page helpful?