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 field | Temps equivalent |
|---|---|
[build] command | Build command in Project Settings |
[build] publish | Output directory in Project Settings |
[build] environment | Environment 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).
- List the rules. Copy every line from
_redirects,_headersand thenetlify.tomlredirect and header blocks into a checklist. - 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 },
];
},
};
- For a plain static site, deploy it with a
Dockerfilethat serves the files through a web server you configure (nginx or Caddy), and translate each rule into that server's config (return 301/redirlines and header directives). An Express or Fastify server that serves the build folder works too. - Test every redirect on the preview URL before DNS cutover, for example with
curl -sI https://<preview-url>/old-pathand checking the status code andLocationheader.
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 feature | Temps alternative |
|---|---|
| Edge Functions | Standard middleware in your app. Temps has no edge functions. |
| Scheduled Functions | cron: entries (path + schedule) in .temps.yaml that call an API route. See Cron jobs. |
| Background Functions | A worker process or job queue in your app, for example backed by managed Redis |
| Netlify Blobs | Temps managed S3 storage |
| Image CDN | Your framework's image optimisation (e.g. next/image), optionally behind a CDN |
| Netlify Identity | Your own auth library (Auth.js, Lucia, Clerk, etc.) |
| An external database | Temps 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
In Netlify, open Site Settings then Environment Variables and export or copy the variables.
- 2
In Temps, open Project then Settings then Environment Variables and paste them in.
- 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
Download deploy.sh, review it, then run the local copy to install Temps.
- 2
Go to Projects then New Project in the Temps console.
- 3
Connect your Git repository.
- 4
Set build command and output directory if not auto-detected.
- 5
Add your environment variables.
- 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:
- Go to Projects → New Project in the Temps console
- Connect your Git repository
- Set build command and output directory if not auto-detected
- Add your environment variables
- Click Deploy
Cut over DNS
Add a custom domain and cut over DNS
- 1
Find your numeric project ID with: bunx @temps-sdk/cli projects show -p my-app --json (look for the id field).
- 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
Go to Project then Settings then Domains then Add Domain.
- 4
Add the DNS records shown (A or CNAME) at your DNS provider.
- 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.
- Go to Project → Settings → Domains → Add Domain
- Add the DNS records shown (A or CNAME)
- 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.