aliaset
Version:
twind monorepo
162 lines (103 loc) • 3.81 kB
Markdown
---
section: Use With
title: SvelteKit
package: '/with-sveltekit'
example: true
excerpt: |
Setting up Twind for seamless integration in a [SvelteKit](https://kit.svelte.dev) project.
next: ./reference.md
---
## 🤝 Compatibility
| /with-sveltekit | @sveltejs/kit |
| ------------------------------- | ---------------------------------- |
| `>=1.0.0-next.38 <1` | `>=1.0.0-next.391 <1` |
| `>=1.0.0-next.1 <1.0.0-next.38` | `>=1.0.0-next.100 <1.0.0-next.391` |
## 📦 Installation
1. :::cols-12{.gap-4}
::col-span-4
**Install from npm**
`twind` and `/with-sveltekit` are available on npm and need to be installed together.
::col-span-8
```sh
npm install /core @twind/with-sveltekit
```
:::
1. :::cols-12{.gap-4}
::col-span-4
**Define the configuration**
Using an extra file, `twind.config.js`, allows some tools like [IntelliSense](./installation) to find your configuration.
::col-span-8
```js title="twind.config.js"
import { defineConfig } from '/core'
export default defineConfig({
/* @twind/with-sveltekit will use hashed class names in production by default
* If you don't want this, uncomment the next line
*/
// hash: false,
})
```
:::
1. :::cols-12{.gap-4}
::col-span-4
**Load Twind in the [root layout](https://kit.svelte.dev/docs/routing#layout-layout-js)**
`install` creates and registers a twind instance that will generate the styles. This allows third-party packages to import `tw` from the twind package and get the same instance.
::col-span-8
```js title="src/routes/+layout.js"
import install from '/with-sveltekit'
import config from '../../twind.config'
install(config)
// Optional: add a load function
```
:::
1. :::cols-12{.gap-4}
::col-span-4
**Enable Twind [in hooks](https://kit.svelte.dev/docs/hooks#server-hooks-handle)**
Enable server-side rendering of all the styles that are used within the HTML and sending them to the client.
::col-span-8
```js title="src/hooks.server.js"
import handleTwind from '/with-sveltekit/hooks'
export const handle = handleTwind()
```
::col-span-4
If you have other handlers use the [`sequence` helper](https://kit.svelte.dev/docs/modules#sveltejs-kit-hooks):
::col-span-8
```js
import { sequence } from '/kit/hooks'
export const handle = sequence(handleTwind(), ...otherHandlers)
```
:::
1. <details>
<summary><strong>Optional</strong>: Install and configure the recommended presets <a href="./preset-autoprefix"><code>/preset-autoprefix</code></a> and <a href="./preset-tailwind"><code>/preset-tailwind</code></a>.</summary>
:::cols-12{.gap-4}
::col-span-4
**Install the presets**
All presets are [available on npm](https://www.npmjs.com/search?q=keywords:twind-preset).
::col-span-8
```sh
npm install /preset-autoprefix @twind/preset-tailwind
```
:::
:::cols-12{.gap-4}
::col-span-4
**Configure the presets**
Each preset must be added to the `presets` array in the configuration.
::col-span-8
```js title="twind.config.js" [2-3,6]
import { defineConfig } from '/core'
import presetAutoprefix from '/preset-autoprefix'
import presetTailwind from '/preset-tailwind'
export default defineConfig({
presets: [presetAutoprefix(), presetTailwind()],
})
```
:::
</details>
1. :::cols-12{.gap-4}
::col-span-4
**Start using Twind in your svelte component**
Start using Twind classes to style your content.
::col-span-8
```html
<h1 class="text-3xl font-bold underline">Hello world!</h1>
```
:::