This Astro integration enables server-side rendering and client-side hydration for your Svelte components.
There are two ways to add integrations to your project. Let's try the most convenient option first!
Astro includes a CLI tool for adding first party integrations: astro add. This command will:
- (Optionally) Install all necessary dependencies and peer dependencies
- (Also optionally) Update your
astro.config.*file to apply this integration
To install @astrojs/svelte, run the following from your project directory and follow the prompts:
# Using NPM
npx astro add svelte
# Using Yarn
yarn astro add svelte
# Using PNPM
pnpx astro add svelteIf you run into any hiccups, feel free to log an issue on our GitHub and try the manual installation steps below.
First, install the @astrojs/svelte integration like so:
npm install @astrojs/svelte
Most package managers will install associated peer dependencies as well. Still, if you see a "Cannot find package 'svelte'" (or similar) warning when you start up Astro, you'll need to install Svelte:
npm install svelteNow, apply this integration to your astro.config.* file using the integrations property:
astro.config.mjs
import svelte from '@astrojs/svelte';
export default {
// ...
integrations: [svelte()],
}To use your first Svelte component in Astro, head to our UI framework documentation. You'll explore:
- 📦 how framework components are loaded,
- 💧 client-side hydration options, and
- 🪆 opportunities to mix and nest frameworks together
Also check our Astro Integration Documentation for more on integrations.
This integration is powered by @sveltejs/vite-plugin-svelte. To customize the Svelte compiler, options can be provided to the integration. See the @sveltejs/vite-plugin-svelte docs for more details.
A few of the default options passed to the Svelte compiler are required to build properly for Astro and cannot be overridden.
const defaultOptions = {
emitCss: true,
compilerOptions: { dev: isDev, hydratable: true },
preprocess: [
preprocess({
less: true,
sass: { renderSync: true },
scss: { renderSync: true },
stylus: true,
typescript: true,
}),
],
};The emitCss, compilerOptions.dev, and compilerOptions.hydratable cannot be overridden.
Providing your own preprocess options will override the defaults - make sure to enable the preprocessor flags needed for your project.