diff --git a/.changeset/afraid-apricots-buy.md b/.changeset/afraid-apricots-buy.md new file mode 100644 index 000000000000..8be7e9db8110 --- /dev/null +++ b/.changeset/afraid-apricots-buy.md @@ -0,0 +1,20 @@ +--- +'astro': minor +--- + +Adapters can now specify the build output type they're intended for using the `adapterFeatures.buildOutput` property. This property can be used to always generate a server output, even if the project doesn't have any server-rendered pages. + +```ts +{ + 'astro:config:done': ({ setAdapter, config }) => { + setAdapter({ + name: 'my-adapter', + adapterFeatures: { + buildOutput: 'server', + }, + }); + }, +} +``` + +If your adapter specifies `buildOutput: 'static'`, and the user's project contains server-rendered pages, Astro will warn in development and error at build time. Note that a hybrid output, containing both static and server-rendered pages, is considered to be a `server` output, as a server is required to serve the server-rendered pages. diff --git a/.changeset/giant-rocks-thank.md b/.changeset/giant-rocks-thank.md new file mode 100644 index 000000000000..920933351aa7 --- /dev/null +++ b/.changeset/giant-rocks-thank.md @@ -0,0 +1,21 @@ +--- +'astro': major +--- + +Merges the `output: 'hybrid'` and `output: 'static'` configurations into one single configuration (now called `'static'`) that works the same way as the previous `hybrid` option. + +It is no longer necessary to specify `output: 'hybrid'` in your Astro config to use server-rendered pages. The new `output: 'static'` has this capability included. Astro will now automatically provide the ability to opt out of prerendering in your static site with no change to your `output` configuration required. Any page route or endpoint can include `export const prerender = false` to be server-rendered, while the rest of your site is statically-generated. + +If your project used hybrid rendering, you must now remove the `output: 'hybrid'` option from your Astro config as it no longer exists. However, no other changes to your project are required, and you should have no breaking changes. The previous `'hybrid'` behavior is now the default, under a new name `'static'`. + +If you were using the `output: 'static'` (default) option, you can continue to use it as before. By default, all of your pages will continue to be prerendered and you will have a completely static site. You should have no breaking changes to your project. + +```diff +import { defineConfig } from "astro/config"; + +export default defineConfig({ +- output: 'hybrid', +}); +``` + +An adapter is still required to deploy an Astro project with any server-rendered pages. Failure to include an adapter will result in a warning in development and an error at build time. diff --git a/.changeset/poor-dots-add.md b/.changeset/poor-dots-add.md new file mode 100644 index 000000000000..088498eeed92 --- /dev/null +++ b/.changeset/poor-dots-add.md @@ -0,0 +1,7 @@ +--- +'astro': minor +--- + +Adds a new `buildOutput` property to the `astro:config:done` hook returning the build output type. + +This can be used to know if the user's project will be built as a static site (HTML files), or a server-rendered site (whose exact output depends on the adapter).