@astrojs/deno 🦖
This adapter allows Astro to deploy your SSR site to Deno targets.
Why Astro Deno
If you're using Astro as a static site builder—its behavior out of the box—you don't need an adapter.
If you wish to use server-side rendering (SSR), Astro requires an adapter that matches your deployment runtime.
Deno is a runtime similar to Node, but with an API that's more similar to the browser's API. This adapter provides access to Deno's API and creates a script to run your project on a Deno server.
Installation
First, install the @astrojs/deno
package using your package manager. If you're using npm or aren't sure, run this in the terminal:
npm install @astrojs/deno
Then, install this adapter in your astro.config.*
file using the adapter
property:
astro.config.mjs
import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno';
export default defineConfig({
adapter: deno()
});
Usage
After performing a build there will be a dist/server/entry.mjs
module. You can start a server by importing this module in your Deno app:
import './dist/entry.mjs';
See the start
option below for how you can have more control over starting the Astro server.
You can also run the script directly using deno:
deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs
Configuration
To configure this adapter, pass an object to the deno()
function call in astro.config.mjs
.
astro.config.mjs
import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno';
export default defineConfig({
adapter: deno({
})
});
start
This adapter automatically starts a server when it is imported. You can turn this off with the start
option:
import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno';
export default defineConfig({
adapter: deno({
start: false
})
});
If you disable this, you need to write your own Deno web server. Import and call handle
from the generated entry script to render requests:
import { serve } from "https://deno.land/std@0.132.0/http/server.ts";
import { handle } from './dist/entry.mjs';
serve((req: Request) => {
return handle(req);
});
port and hostname
You can set the port (default: 8085
) and hostname (default: 0.0.0.0
) for the deno server to use. If start
is false, this has no effect; your own server must configure the port and hostname.
import { defineConfig } from 'astro/config';
import deno from '@astrojs/deno';
export default defineConfig({
adapter: deno({
port: 8081,
hostname: 'myhost'
})
});
Examples
The Astro Deno example includes a preview:deno
command that runs the entry script directly. Run npm run build
then npm run preview:deno
to run the production deno server.
Troubleshooting
Contributing
This package is maintained by Astro's Core team. You're welcome to submit an issue or PR!
Changelog