Fix: Cannot Use Server-side Rendering Without an Adapter in Astro

Error message:
Cannot use Server-side Rendering without an adapter.
Adapters & SSR 2025-01-25

What Causes This Error?

This error occurs when your Astro project uses server-side rendering features but doesn’t have an adapter configured. Adapters are required to deploy SSR sites to hosting platforms.

The Problem

// astro.config.mjs
export default defineConfig({
  output: 'server', // ❌ SSR enabled but no adapter
});
---
// src/pages/api/data.ts
export const prerender = false; // ❌ Server route without adapter
---

The Fix

Install an Adapter

# For Vercel
npx astro add vercel

# For Netlify
npx astro add netlify

# For Node.js
npx astro add node

# For Cloudflare
npx astro add cloudflare

Configure the Adapter

// astro.config.mjs
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';

export default defineConfig({
  output: 'server',
  adapter: vercel(), // ✅ Adapter configured
});

Common Scenarios

Vercel Deployment

npm install @astrojs/vercel
// astro.config.mjs
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';

export default defineConfig({
  output: 'server',
  adapter: vercel(),
});

Netlify Deployment

npm install @astrojs/netlify
// astro.config.mjs
import { defineConfig } from 'astro/config';
import netlify from '@astrojs/netlify';

export default defineConfig({
  output: 'server',
  adapter: netlify(),
});

Node.js / Express

npm install @astrojs/node
// astro.config.mjs
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';

export default defineConfig({
  output: 'server',
  adapter: node({
    mode: 'standalone', // or 'middleware'
  }),
});

Cloudflare Workers/Pages

npm install @astrojs/cloudflare
// astro.config.mjs
import { defineConfig } from 'astro/config';
import cloudflare from '@astrojs/cloudflare';

export default defineConfig({
  output: 'server',
  adapter: cloudflare(),
});

Hybrid Rendering (Static + SSR)

// astro.config.mjs
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';

export default defineConfig({
  output: 'hybrid', // Most pages static, some server-rendered
  adapter: vercel(),
});
---
// This page will be server-rendered
export const prerender = false;
---

Switch to Static Output

If you don’t need SSR:

// astro.config.mjs
export default defineConfig({
  output: 'static', // ✅ No adapter needed for static sites
});

Available Adapters

PlatformPackageCommand
Vercel@astrojs/vercelnpx astro add vercel
Netlify@astrojs/netlifynpx astro add netlify
Cloudflare@astrojs/cloudflarenpx astro add cloudflare
Node.js@astrojs/nodenpx astro add node
Deno@astrojs/denonpx astro add deno

Quick Checklist

  • SSR requires an adapter
  • Run npx astro add <adapter> to install
  • Configure adapter in astro.config.mjs
  • Use output: 'static' for adapter-free static sites
  • Use output: 'hybrid' for mixed static/SSR