--- layout: ~/layouts/MainLayout.astro title: Migrating to v0.21 description: How to migrate projects from Astro v0.20. --- ## Vite Starting in v0.21, Astro is built with [Vite]. As a result, configurations written in `snowpack.config.mjs` should be moved into `astro.config.mjs`. ```js // @ts-check /** @type {import('astro').AstroUserConfig} */ export default { renderers: [], vite: { plugins: [], }, }; ``` To learn more about configuring Vite, please visit their [configuration guide](https://vitejs.dev/config/). ## Aliasing In Astro v0.21, import aliases can be added from `tsconfig.json` or `jsconfig.json`. ```json { "compilerOptions": { "baseUrl": ".", "paths": { "@/components/*": ["src/components/*"] } } } ``` _These aliases are integrated automatically into [VSCode](https://code.visualstudio.com/docs/languages/jsconfig) and other editors._ ## Variables in Scripts & Styles In Astro v0.21, _serializable_ server-side variables can be passed into client-side ` ``` ## Components in Markdown In Astro v0.21, Components from any framework can be used within Markdown files. ```markdown --- Layout: '...' setup: | import MyReactComponent from '../components/MyReactComponent.jsx' --- # Hydrating on visibility # Hello world! ``` ## Components in Frontmatter Previously, you could create mini Astro Components inside of the Astro Frontmatter, using JSX syntax instead of Astro's component syntax. This was always a bit of a hack, but in the new compiler it became impossible to support. We hope to re-introduce this feature in a future release of Astro using a different, non-JSX API. To migrate to v0.21, please convert all JSX Astro components (that is, any Astro components created inside of another component's frontmatter) to standalone components. ## Environment Variables In Astro v0.21, environment variables can be loaded from `.env` files in your project directory. ```ini .env # loaded in all cases .env.local # loaded in all cases, ignored by git .env.[mode] # only loaded in specified mode .env.[mode].local # only loaded in specified mode, ignored by git ``` For security purposes, only variables prefixed with `PUBLIC_` are accessible to your code. ```ini SECRET_PASSWORD=password123 PUBLIC_ANYBODY=there ``` In this example, `PUBLIC_ANYBODY` will be available as `import.meta.env.PUBLIC_ANYBODY` in server or client code, while `SECRET_PASSWORD` will not. > In prior releases, these variables were prefixed with `SNOWPACK_PUBLIC_` and required the `@snowpack/plugin-env` plugin. ## File Extensions In Astro v0.21, files need to be referenced by their actual extension, exactly as it is on disk. ```tsx // Div.tsx export default function Div(props) { return
; } ``` In this example, `Div.tsx` would need to be referenced as `Div.tsx`, not `Div.jsx`. ```diff - import Div from './Div.jsx' // Astro v0.20 + import Div from './Div.tsx' // Astro v0.21 ``` This same change applies to styles. ```scss // Div.scss div { all: unset; } ``` ```diff - + ``` ## Plugins In Astro v0.21, Vite plugins may be configured within `astro.config.mjs`. ```js import { imagetools } from 'vite-imagetools'; export default { vite: { plugins: [imagetools()], }, }; ``` To learn more about Vite plugins, please visit their [plugin guide](https://vitejs.dev/guide/using-plugins.html). ## Custom Renderers In Astro v0.21, plugins should now use `viteConfig()`. ```diff // renderer-svelte/index.js + import { svelte } from '@sveltejs/vite-plugin-svelte'; export default { name: '@astrojs/renderer-svelte', client: './client.js', server: './server.js', - snowpackPlugin: '@snowpack/plugin-svelte', - snowpackPluginOptions: { compilerOptions: { hydratable: true } }, + viteConfig() { + return { + optimizeDeps: { + include: ['@astrojs/renderer-svelte/client.js', 'svelte', 'svelte/internal'], + exclude: ['@astrojs/renderer-svelte/server.js'], + }, + plugins: [ + svelte({ + emitCss: true, + compilerOptions: { hydratable: true }, + }), + ], + }; + }, } ``` To learn more about Vite plugins, please visit their [plugin guide](https://vitejs.dev/guide/using-plugins.html). > In prior releases, these were configured with `snowpackPlugin` or `snowpackPluginOptions`. ## Styling Changes ### Autoprefixer Autoprefixer is no longer run by default. To enable: 1. Install the latest version (`npm i autoprefixer`) 2. Create a `postcss.config.cjs` file at the root of your project with: ```js module.exports = { plugins: { autoprefixer: {}, }, }; ``` ### Tailwind CSS Ensure you have PostCSS installed. This was optional in previous releases, but is required now: 1. Intall the latest version of postcss (`npm i -D postcss`) 2. Create a `postcss.config.cjs` file at the root of your project with: ```js module.exports = { plugins: { tailwindcss: {}, }, }; ``` For more information, read the [Tailwind CSS documentation](https://tailwindcss.com/docs/installation#add-tailwind-as-a-post-css-plugin) [snowpack]: https://www.snowpack.dev [vite]: https://vitejs.dev