---
title: Serialize Portable Text to Svelte
description: Render Portable Text in Svelte 5 and SvelteKit using @portabletext/svelte
tags: [portable-text, svelte, sveltekit, serialization, rendering]
---
# Serialize Portable Text to Svelte
Use `@portabletext/svelte` (requires Svelte 5+) to render PT in Svelte/SvelteKit.
```bash
npm install @portabletext/svelte
```
## Basic Usage
```svelte
```
## Custom Components
Svelte components receive a `portableText` prop with `value`, `global`, and `indexInParent`. Child content is passed via Svelte snippets.
### Block Styles
```svelte
{#if value.style === 'h1'}
{@render children()}
{:else if value.style === 'h2'}
{@render children()}
{:else}
{@render children()}
{/if}
```
### Custom Types
```svelte
{#if value.caption}
{value.caption}
{/if}
```
### Mark Components (Annotations)
```svelte
{@render children()}
```
## Assembling Components
```svelte
```
## Passing Context
Pass external data to all components via `context`:
```svelte
```
Access in components via `portableText.global.context`.
## Plain Text Extraction
```js
import {toPlainText} from '@portabletext/svelte'
const text = toPlainText(blocks)
```
## Reference
- [@portabletext/svelte](https://github.com/portabletext/svelte-portabletext)
- [Sanity + SvelteKit guide](https://www.sanity.io/guides/sanity-sveltekit)