astro/packages/integrations/netlify
Nate Moore 9f067dca27
Astro 1.0.0 (#4214)
* chore: remove changesets patch

* chore: add changesets

* chore: version packages

* chore: normalize formatting

* chore: update lockfile

* chore: fix codeblocks

* Update packages/astro/CHANGELOG.md

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

* Update packages/astro/CHANGELOG.md

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

* Update packages/astro/CHANGELOG.md

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

* chore: fixup code samples

* chore: move v0.25 message out of note

Co-authored-by: Nate Moore <nate@astro.build>
Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
2022-08-09 11:10:25 -05:00
..
src [ci] format 2022-07-25 04:20:38 +00:00
test Add the output option (#4015) 2022-07-25 00:18:02 -04:00
.npmignore Ignore test folder in Netlify 2022-04-19 11:45:19 -04:00
CHANGELOG.md Astro 1.0.0 (#4214) 2022-08-09 11:10:25 -05:00
package.json Astro 1.0.0 (#4214) 2022-08-09 11:10:25 -05:00
README.md remove details tags from integration READMEs (#4198) 2022-08-08 12:07:38 -05:00
tsconfig.json [ci] format 2022-04-22 14:04:54 +00:00

@astrojs/netlify

This adapter allows Astro to deploy your SSR site to Netlify.

Why Astro Netlify

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.

Netlify is a deployment platform that allows you to host your site by connecting directly to your GitHub repository. This adapter enhances the Astro build process to prepare your project for deployment through Netlify.

Installation

First, install the @astrojs/netlify package using your package manager. If you're using npm or aren't sure, run this in the terminal:

npm install @astrojs/netlify

Then, install this adapter in your astro.config.* file using the adapter property. Note: there are two different adapters, one for Netlify Functions and one for Edge Functions. See Edge Functions below on importing the latter.

astro.config.mjs

import { defineConfig } from 'astro/config';
import netlify from '@astrojs/netlify/functions';

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

Edge Functions

Netlify has two serverless platforms, Netlify Functions and Netlify Edge Functions. With Edge Functions your code is distributed closer to your users, lowering latency. You can use Edge Functions by changing the import in your astro configuration file:

import { defineConfig } from 'astro/config';
- import netlify from '@astrojs/netlify/functions';
+ import netlify from '@astrojs/netlify/edge-functions';

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

Usage

Read the full deployment guide here.

After performing a build the netlify/ folder will contain Netlify Functions in the netlify/functions/ folder.

Now you can deploy. Install the Netlify CLI and run:

netlify deploy --build

The Netlify Blog post on Astro and the Netlify Documentation provide more information on how to use this integration to deploy to Netlify.

Configuration

To configure this adapter, pass an object to the netlify() function call in astro.config.mjs - there's only one possible configuration option:

dist

We build to the dist directory at the base of your project. To change this, use the dist option:

import { defineConfig } from 'astro/config';
import netlify from '@astrojs/netlify/functions';

export default defineConfig({
  output: 'server',
  adapter: netlify({
    dist: new URL('./dist/', import.meta.url)
  })
});

And then point to the dist in your netlify.toml:

[functions]
directory = "dist/functions"

binaryMediaTypes

This option is only needed for the Functions adapter and is not needed for Edge Functions.

Netlify Functions requires binary data in the body to be base64 encoded. The @astrojs/netlify/functions adapter handles this automatically based on the Content-Type header.

We check for common mime types for audio, image, and video files. To include specific mime types that should be treated as binary data, include the binaryMediaTypes option with a list of binary mime types.

import fs from 'node:fs';

export function get() {
  const buffer = fs.readFileSync('../image.jpg');

  // Return the buffer directly, @astrojs/netlify will base64 encode the body
  return new Response(buffer, {
    status: 200,
    headers: {
      'content-type': 'image/jpeg'
    }
  });
}

Examples

Troubleshooting

For help, check out the #support-threads channel on Discord. Our friendly Support Squad members are here to help!

You can also check our Astro Integration Documentation for more on integrations.

Contributing

This package is maintained by Astro's Core team. You're welcome to submit an issue or PR!

Changelog

See CHANGELOG.md for a history of changes to this integration.