Svelte 5 Migration
How to migrate to Svelte 5 from Svelte 4.
Prerequisites
- Ensure you have read up on the changes from Svelte 4 to Svelte 5. Svelte provides a comprehensive guide for this on their website.
- Commit any pending changes to your repository.
- Determine which of your components have custom behavior/styles so that you can reimplement those after updating.
Migrate Configs
The tailwind.config
, components.json
, and utils
files have all changed for Svelte 5.
Automatic
Note: This works best for projects that have not changed the contents of tailwind.config
, utils
, and the global css file.
npx shadcn-svelte@next init
Manual
Update components.json
Add the registry
to the root object, and add hooks
and ui
keys under aliases
.
{
"$schema": "https://next.shadcn-svelte.com/schema.json",
"style": "default",
"tailwind": {
"config": "tailwind.config.js",
"css": "src/app.pcss",
"baseColor": "zinc"
},
"aliases": {
"components": "$lib/components",
"utils": "$lib/utils",
"ui": "$lib/components/ui",
"hooks": "$lib/hooks"
},
"typescript": true,
"registry": "https://next.shadcn-svelte.com/registry"
}
Update tailwind.config
Add tailwindcss-animate
.
npm i tailwindcss-animate
Add tailwindcss-animate
plugin, sidebar colors, and animations config.
import type { Config } from 'tailwindcss';
import tailwindcssAnimate from 'tailwindcss-animate';
const config: Config = {
darkMode: ['class'],
content: ['./src/**/*.{html,js,svelte,ts}'],
safelist: ['dark'],
theme: {
container: {
// unchanged ...
},
extend: {
colors: {
// unchanged ...
sidebar: {
DEFAULT: "hsl(var(--sidebar-background))",
foreground: "hsl(var(--sidebar-foreground))",
primary: "hsl(var(--sidebar-primary))",
"primary-foreground": "hsl(var(--sidebar-primary-foreground))",
accent: "hsl(var(--sidebar-accent))",
"accent-foreground": "hsl(var(--sidebar-accent-foreground))",
border: "hsl(var(--sidebar-border))",
ring: "hsl(var(--sidebar-ring))",
},
},
borderRadius: {
// unchanged ...
},
fontFamily: {
// unchanged ...
},
keyframes: {
'accordion-down': {
from: { height: '0' },
to: { height: 'var(--bits-accordion-content-height)' }
},
'accordion-up': {
from: { height: 'var(--bits-accordion-content-height)' },
to: { height: '0' }
},
'caret-blink': {
'0%,70%,100%': { opacity: '1' },
'20%,50%': { opacity: '0' }
}
},
animation: {
'accordion-down': 'accordion-down 0.2s ease-out',
'accordion-up': 'accordion-up 0.2s ease-out',
'caret-blink': 'caret-blink 1.25s ease-out infinite'
}
}
},
plugins: [tailwindcssAnimate]
};
export default config;
Update utils
Note: You may not want to do this if you aren't going to upgrade all your components, as some components may still rely on the now removed flyAndScale
function.
The only function exported from utils now is cn
.
import { type ClassValue, clsx } from "clsx";
import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
Upgrade Components
Pick and choose which components to upgrade with the update
command.
npx shadcn-svelte@next update
Upgrade bits-ui
The update
command doesn't upgrade bits-ui
so you will need to do that yourself.
npm i bits-ui@next
Remove unused dependencies
In Svelte 5 we have changed some dependencies.
Remove cmdk-sv
cmdk-sv
has been merged into bits-ui
and is no longer necessary. Update any imports from cmdk-sv
to bits-ui
.
npm uninstall cmdk-sv
Remove svelte-headless-table
svelte-headless-table
has been removed in favor of @tanstack/table-core
.
npm uninstall svelte-headless-table
On This Page