diff --git a/apps/svelte.dev/content/docs/svelte/01-introduction/03-svelte-files.md b/apps/svelte.dev/content/docs/svelte/01-introduction/03-svelte-files.md
index d68bb89126..f534e30fcb 100644
--- a/apps/svelte.dev/content/docs/svelte/01-introduction/03-svelte-files.md
+++ b/apps/svelte.dev/content/docs/svelte/01-introduction/03-svelte-files.md
@@ -37,8 +37,6 @@ In addition to normal JavaScript, you can use _runes_ to declare [component prop
A `
```
+You can `export` bindings from this block, and they will become exports of the compiled module. You cannot `export default`, since the default export is the component itself.
+
## `
+```
+
+Now, a component that uses `` can add the [`bind:`](bind) directive ([demo](/playground/untitled#H4sIAAAAAAAAE3WQwWrDMBBEf2URBSfg2nfFMZRCoYeecqx6UJx1IyqvhLUONcb_XqSkTUOSk1az7DBvJtEai0HI90nw6FHIJIhckO7i78n7IhzQctS2OuAtvXHESByEFFVoeuO5VqTYdN71DC-amvGV_MDQ9q6DrCjP0skkWymKJxYZOgxBfyKs4SGwZlxke7TWZcuVoqo8-1P1z3lraCcP2g64nk4GM5S1osrXf0JV-lrkgvGbheR-wDm_g30V8JL-1vpOCZFogpQsEsWcemtxscyhKArfOx9gjps0Lq4hzRVfemaYfu-PoIqqwKPFY_XpaIqj4tYRP7a6M3aUkD27zjSw0RTgbZN6Z8WNs66XsEP03tBXUueUJFlelvYx_wCuI3leNwIAAA==)):
+
+
+```svelte
+/// App.svelte
+
+
+
+
{message}
+```
+
+The parent component doesn't _have_ to use `bind:` — it can just pass a normal prop. Some parents don't want to listen to what their children have to say.
+
+In this case, you can specify a fallback value for when no prop is passed at all:
+
+```js
+/// file: FancyInput.svelte
+let { value = $bindable('fallback'), ...props } = $props();
+```
diff --git a/apps/svelte.dev/content/docs/svelte/02-runes/07-$inspect.md b/apps/svelte.dev/content/docs/svelte/02-runes/07-$inspect.md
index 8bfb708bce..ff7fa92c36 100644
--- a/apps/svelte.dev/content/docs/svelte/02-runes/07-$inspect.md
+++ b/apps/svelte.dev/content/docs/svelte/02-runes/07-$inspect.md
@@ -2,4 +2,43 @@
title: $inspect
---
-Coming soon!
+The `$inspect` rune is roughly equivalent to `console.log`, with the exception that it will re-run whenever its argument changes. `$inspect` tracks reactive state deeply, meaning that updating something inside an object or array using fine-grained reactivity will cause it to re-fire ([demo](/#H4sIAAAAAAAACkWQ0YqDQAxFfyUMhSotdZ-tCvu431AXtGOqQ2NmmMm0LOK_r7Utfby5JzeXTOpiCIPKT5PidkSVq2_n1F7Jn3uIcEMSXHSw0evHpAjaGydVzbUQCmgbWaCETZBWMPlKj29nxBDaHj_edkAiu12JhdkYDg61JGvE_s2nR8gyuBuiJZuDJTyQ7eE-IEOzog1YD80Lb0APLfdYc5F9qnFxjiKWwbImo6_llKRQVs-2u91c_bD2OCJLkT3JZasw7KLA2XCX31qKWE6vIzNk1fKE0XbmYrBTufiI8-_8D2cUWBA_AQAA)):
+
+```svelte
+
+
+
+
+```
+
+## $inspect(...).with
+
+`$inspect` returns a property `with`, which you can invoke with a callback, which will then be invoked instead of `console.log`. The first argument to the callback is either `"init"` or `"update"`; subsequent arguments are the values passed to `$inspect` ([demo](/#H4sIAAAAAAAACkVQ24qDMBD9lSEUqlTqPlsj7ON-w7pQG8c2VCchmVSK-O-bKMs-DefKYRYx6BG9qL4XQd2EohKf1opC8Nsm4F84MkbsTXAqMbVXTltuWmp5RAZlAjFIOHjuGLOP_BKVqB00eYuKs82Qn2fNjyxLtcWeyUE2sCRry3qATQIpJRyD7WPVMf9TW-7xFu53dBcoSzAOrsqQNyOe2XUKr0Xi5kcMvdDB2wSYO-I9vKazplV1-T-d6ltgNgSG1KjVUy7ZtmdbdjqtzRcphxMS1-XubOITJtPrQWMvKnYB15_1F7KKadA_AQAA)):
+
+```svelte
+
+
+
+```
+
+A convenient way to find the origin of some change is to pass `console.trace` to `with`:
+
+```js
+// @errors: 2304
+$inspect(stuff).with(console.trace);
+```
+
+> [!NOTE] `$inspect` only works during development. In a production build it becomes a noop.
diff --git a/apps/svelte.dev/content/docs/svelte/02-runes/08-$host.md b/apps/svelte.dev/content/docs/svelte/02-runes/08-$host.md
index dee06943b5..7b5e041e5e 100644
--- a/apps/svelte.dev/content/docs/svelte/02-runes/08-$host.md
+++ b/apps/svelte.dev/content/docs/svelte/02-runes/08-$host.md
@@ -2,4 +2,36 @@
title: $host
---
-Coming soon!
+When compiling a component as a custom element, the `$host` rune provides access to the host element, allowing you to (for example) dispatch custom events ([demo](/playground/untitled#H4sIAAAAAAAAE41Ry2rDMBD8FSECtqkTt1fHFpSSL-ix7sFRNkTEXglrnTYY_3uRlDgxTaEHIfYxs7szA9-rBizPPwZOZwM89wmecqxbF70as7InaMjltrWFR3mpkQDJ8pwXVnbKkKiwItUa3RGLVtk7gTHQXRDR2lXda4CY1D0SK9nCUk0QPyfrCovsRoNFe17aQOAwGncgO2gBqRzihJXiQrEs2csYOhQ-7HgKHaLIbpRhhBG-I2eD_8ciM4KnnOCbeE5dD2P6h0Dz0-Yi_arNhPLJXBtSGi2TvSXdbpqwdsXvjuYsC1veabvvUTog2ylrapKH2G2XsMFLS4uDthQnq2t1cwKkGOGLvYU5PvaQxLsxOkPmsm97Io1Mo2yUPF6VnOZFkw1RMoopKLKAE_9gmGxyDFMwMcwN-Bx_ABXQWmOtAgAA)):
+
+
+```svelte
+/// file: Stepper.svelte
+
+
+
+
+
+
+```
+
+
+```svelte
+/// file: App.svelte
+
+
+ count -= 1}
+ onincrement={() => count += 1}
+>
+
+
count: {count}
+```
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/02-if.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/02-if.md
index 2401022fab..1378733e6f 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/02-if.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/02-if.md
@@ -2,4 +2,39 @@
title: {#if ...}
---
-Coming soon!
+```svelte
+
+{#if expression}...{/if}
+```
+
+```svelte
+
+{#if expression}...{:else if expression}...{/if}
+```
+
+```svelte
+
+{#if expression}...{:else}...{/if}
+```
+
+Content that is conditionally rendered can be wrapped in an if block.
+
+```svelte
+{#if answer === 42}
+
what was the question?
+{/if}
+```
+
+Additional conditions can be added with `{:else if expression}`, optionally ending in an `{:else}` clause.
+
+```svelte
+{#if porridge.temperature > 100}
+
too hot!
+{:else if 80 > porridge.temperature}
+
too cold!
+{:else}
+
just right!
+{/if}
+```
+
+(Blocks don't have to wrap elements, they can also wrap text within elements.)
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/03-each.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/03-each.md
index fffa1d98ac..e4246b6e9a 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/03-each.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/03-each.md
@@ -2,4 +2,91 @@
title: {#each ...}
---
-Coming soon!
+```svelte
+
+{#each expression as name}...{/each}
+```
+
+```svelte
+
+{#each expression as name, index}...{/each}
+```
+
+Iterating over values can be done with an each block. The values in question can be arrays, array-like objects (i.e. anything with a `length` property), or iterables like `Map` and `Set` — in other words, anything that can be used with `Array.from`.
+
+```svelte
+
Shopping list
+
+ {#each items as item}
+
{item.name} x {item.qty}
+ {/each}
+
+```
+
+You can use each blocks to iterate over any array or array-like value — that is, any object with a `length` property.
+
+An each block can also specify an _index_, equivalent to the second argument in an `array.map(...)` callback:
+
+```svelte
+{#each items as item, i}
+
{i + 1}: {item.name} x {item.qty}
+{/each}
+```
+
+## Keyed each blocks
+
+```svelte
+
+{#each expression as name (key)}...{/each}
+```
+
+```svelte
+
+{#each expression as name, index (key)}...{/each}
+```
+
+If a _key_ expression is provided — which must uniquely identify each list item — Svelte will use it to diff the list when data changes, rather than adding or removing items at the end. The key can be any object, but strings and numbers are recommended since they allow identity to persist when the objects themselves change.
+
+```svelte
+{#each items as item (item.id)}
+
{item.name} x {item.qty}
+{/each}
+
+
+{#each items as item, i (item.id)}
+
{i + 1}: {item.name} x {item.qty}
+{/each}
+```
+
+You can freely use destructuring and rest patterns in each blocks.
+
+```svelte
+{#each items as { id, name, qty }, i (id)}
+
{i + 1}: {name} x {qty}
+{/each}
+
+{#each objects as { id, ...rest }}
+
{id}
+{/each}
+
+{#each items as [id, ...rest]}
+
{id}
+{/each}
+```
+
+## Else blocks
+
+```svelte
+
+{#each expression as name}...{:else}...{/each}
+```
+
+An each block can also have an `{:else}` clause, which is rendered if the list is empty.
+
+```svelte
+{#each todos as todo}
+
{todo.text}
+{:else}
+
No tasks today!
+{/each}
+```
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/04-key.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/04-key.md
index 765a14da37..10b6ab4358 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/04-key.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/04-key.md
@@ -2,4 +2,23 @@
title: {#key ...}
---
-Coming soon!
+```svelte
+
+{#key expression}...{/key}
+```
+
+Key blocks destroy and recreate their contents when the value of an expression changes. When used around components, this will cause them to be reinstantiated and reinitialised:
+
+```svelte
+{#key value}
+
+{/key}
+```
+
+It's also useful if you want a transition to play whenever a value changes:
+
+```svelte
+{#key value}
+
{value}
+{/key}
+```
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/05-await.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/05-await.md
index 6df9ab5d13..7fe7a963c5 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/05-await.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/05-await.md
@@ -2,4 +2,69 @@
title: {#await ...}
---
-Coming soon!
+```svelte
+
+{#await expression}...{:then name}...{:catch name}...{/await}
+```
+
+```svelte
+
+{#await expression}...{:then name}...{/await}
+```
+
+```svelte
+
+{#await expression then name}...{/await}
+```
+
+```svelte
+
+{#await expression catch name}...{/await}
+```
+
+Await blocks allow you to branch on the three possible states of a [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) — pending, fulfilled or rejected.
+
+```svelte
+{#await promise}
+
+
waiting for the promise to resolve...
+{:then value}
+
+
The value is {value}
+{:catch error}
+
+
Something went wrong: {error.message}
+{/await}
+```
+
+> [!NOTE] During server-side rendering, only the pending branch will be rendered.
+>
+> If the provided expression is not a `Promise` only the `:then` branch will be rendered, including during server-side rendering.
+
+The `catch` block can be omitted if you don't need to render anything when the promise rejects (or no error is possible).
+
+```svelte
+{#await promise}
+
+
waiting for the promise to resolve...
+{:then value}
+
+
The value is {value}
+{/await}
+```
+
+If you don't care about the pending state, you can also omit the initial block.
+
+```svelte
+{#await promise then value}
+
The value is {value}
+{/await}
+```
+
+Similarly, if you only want to show the error state, you can omit the `then` block.
+
+```svelte
+{#await promise catch error}
+
The error is {error}
+{/await}
+```
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/06-snippet.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/06-snippet.md
index 9178a43d27..70aac3fd2a 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/06-snippet.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/06-snippet.md
@@ -2,14 +2,17 @@
title: {#snippet ...}
---
-Better title needed?
+```svelte
+
+{#snippet name()}...{/if}
+```
-- `#snippet`
-- `@render`
-- how they can be used to reuse markup
-- how they can be used to pass UI content to components
+```svelte
+
+{#snippet name(param1, param2, paramN)}...{/if}
+```
-Snippets, and _render tags_, are a way to create reusable chunks of markup inside your components. Instead of writing duplicative code like [this](/#H4sIAAAAAAAAE5VUYW-kIBD9K8Tmsm2yXXRzvQ-s3eR-R-0HqqOQKhAZb9sz_vdDkV1t000vRmHewMx7w2AflbIGG7GnPlK8gYhFv42JthG-m9Gwf6BGcLbVXZuPSGrzVho8ZirDGpDIhldgySN5GpEMez9kaNuckY1ANJZRamRuu2ZnhEZt6a84pvs43mzD4pMsUDDi8DMkQFYCGdkvsJwblFq5uCik9bmJ4JZwUkv1eoknWigX2eGNN6aGXa6bjV8ybP-X7sM36T58SVcrIIV2xVIaA41xeD5kKqWXuqpUJEefOqVuOkL9DfBchGrzWfu0vb-RpTd3o-zBR045Ga3HfuE5BmJpKauuhbPtENlUF2sqR9jqpsPSxWsMrlngyj3VJiyYjJXb1-lMa7IWC-iSk2M5Zzh-SJjShe-siq5kpZRPs55BbSGU5YPyte4vVV_VfFXxVb10dSLf17pS2lM5HnpPxw4Zpv6x-F57p0jI3OKlVnhv5V9wPQrNYQQ9D_f6aGHlC89fq1Z3qmDkJCTCweOGF4VUFSPJvD_DhreVdA0eu8ehJJ5x91dBaBkpWm3ureCFPt3uzRv56d4kdp-2euG38XZ6dsnd3ZmPG9yRBCrzRUvi-MccOdwz3qE-fOZ7AwAhlrtTUx3c76vRhSwlFBHDtoPhefgHX3dM0PkEAAA=)...
+Snippets, and [render tags](@render), are a way to create reusable chunks of markup inside your components. Instead of writing duplicative code like [this](/#H4sIAAAAAAAAE5VUYW-kIBD9K8Tmsm2yXXRzvQ-s3eR-R-0HqqOQKhAZb9sz_vdDkV1t000vRmHewMx7w2AflbIGG7GnPlK8gYhFv42JthG-m9Gwf6BGcLbVXZuPSGrzVho8ZirDGpDIhldgySN5GpEMez9kaNuckY1ANJZRamRuu2ZnhEZt6a84pvs43mzD4pMsUDDi8DMkQFYCGdkvsJwblFq5uCik9bmJ4JZwUkv1eoknWigX2eGNN6aGXa6bjV8ybP-X7sM36T58SVcrIIV2xVIaA41xeD5kKqWXuqpUJEefOqVuOkL9DfBchGrzWfu0vb-RpTd3o-zBR045Ga3HfuE5BmJpKauuhbPtENlUF2sqR9jqpsPSxWsMrlngyj3VJiyYjJXb1-lMa7IWC-iSk2M5Zzh-SJjShe-siq5kpZRPs55BbSGU5YPyte4vVV_VfFXxVb10dSLf17pS2lM5HnpPxw4Zpv6x-F57p0jI3OKlVnhv5V9wPQrNYQQ9D_f6aGHlC89fq1Z3qmDkJCTCweOGF4VUFSPJvD_DhreVdA0eu8ehJJ5x91dBaBkpWm3ureCFPt3uzRv56d4kdp-2euG38XZ6dsnd3ZmPG9yRBCrzRUvi-MccOdwz3qE-fOZ7AwAhlrtTUx3c76vRhSwlFBHDtoPhefgHX3dM0PkEAAA=)...
```svelte
{#each images as image}
@@ -34,12 +37,7 @@ Snippets, and _render tags_, are a way to create reusable chunks of markup insid
```svelte
{#snippet figure(image)}
-
+ {image.caption}
{/snippet}
@@ -248,6 +246,10 @@ We can tighten things up further by declaring a generic, so that `data` and `row
```
+## Programmatic snippets
+
+Snippets can be created programmatically with the [`createRawSnippet`](svelte#createRawSnippet) API. This is intended for advanced use cases.
+
## Snippets and slots
In Svelte 4, content can be passed to components using [slots](https://svelte.dev/docs/special-elements#slot). Snippets are more powerful and flexible, and as such slots are deprecated in Svelte 5.
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/07-@render.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/07-@render.md
index 9876c1f8d8..b7e41e8337 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/07-@render.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/07-@render.md
@@ -2,4 +2,38 @@
title: {@render ...}
---
-Coming soon!
+To render a [snippet](snippet), use a `{@render ...}` tag.
+
+```svelte
+{#snippet sum(a, b)}
+
{a} + {b} = {a + b}
+{/snippet}
+
+{@render sum(1, 2)}
+{@render sum(3, 4)}
+{@render sum(5, 6)}
+```
+
+The expression can be an identifer like `sum`, or an arbitrary JavaScript expression:
+
+```svelte
+{@render (cool ? coolSnippet : lameSnippet)()}
+```
+
+## Optional snippets
+
+If the snippet is potentially undefined — for example, because it's an incoming prop — then you can use optional chaining to only render it when it _is_ defined:
+
+```svelte
+{@render children?.()}
+```
+
+Alternatively, use an [`{#if ...}`](if) block with an `:else` clause to render fallback content:
+
+```svelte
+{#if children}
+ {@render children()}
+{:else}
+
fallback content
+{/if}
+```
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/08-@html.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/08-@html.md
index 97304f067f..28a0cdb470 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/08-@html.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/08-@html.md
@@ -2,4 +2,50 @@
title: {@html ...}
---
-Coming soon!
+To inject raw HTML into your component, use the `{@html ...}` tag:
+
+```svelte
+
+ {@html content}
+
+```
+
+> [!NOTE] Make sure that you either escape the passed string or only populate it with values that are under your control in order to prevent [XSS attacks](https://owasp.org/www-community/attacks/xss/). Never render unsanitized content.
+
+The expression should be valid standalone HTML — this will not work, because `` is not valid HTML:
+
+```svelte
+{@html '
'}content{@html '
'}
+```
+
+It also will not compile Svelte code.
+
+## Styling
+
+Content rendered this way is 'invisible' to Svelte and as such will not receive [scoped styles](styles-and-classes) — in other words, this will not work, and the `a` and `img` styles will be regarded as unused:
+
+
+```svelte
+
+ {@html content}
+
+
+
+```
+
+Instead, use the `:global` modifier to target everything inside the ``:
+
+
+```svelte
+
+```
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/09-@const.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/09-@const.md
index cc0e27c9b7..396054d9e8 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/09-@const.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/09-@const.md
@@ -2,4 +2,13 @@
title: {@const ...}
---
-Coming soon!
+The `{@const ...}` tag defines a local constant.
+
+```svelte
+{#each boxes as box}
+ {@const area = box.width * box.height}
+ {box.width} * {box.height} = {area}
+{/each}
+```
+
+`{@const}` is only allowed as an immediate child of a block — `{#if ...}`, `{#each ...}`, `{#snippet ...}` and so on — or a .
diff --git a/apps/svelte.dev/content/docs/svelte/03-template-syntax/10-bind.md b/apps/svelte.dev/content/docs/svelte/03-template-syntax/10-bind.md
index bb16b8cb7a..70d7d25920 100644
--- a/apps/svelte.dev/content/docs/svelte/03-template-syntax/10-bind.md
+++ b/apps/svelte.dev/content/docs/svelte/03-template-syntax/10-bind.md
@@ -2,46 +2,96 @@
title: bind:
---
-- how for dom elements
-- list of all bindings
-- how for components
+Data ordinarily flows down, from parent to child. The `bind:` directive allows data to flow the other way, from child to parent.
-Most of the time a clear separation between data flowing down and events going up is worthwhile and results in more robust apps. But in some cases - especially when interacting with form elements - it's more ergonomic to declare a two way binding. Svelte provides many element bindings out of the box, and also allows component bindings.
-
-## bind:_property_ for elements
+The general syntax is `bind:property={expression}`, where `expression` is an _lvalue_ (i.e. a variable or an object property). When the expression is an identifier with the same name as the property, we can omit the expression — in other words these are equivalent:
+
```svelte
-
-bind:property={variable}
+
+
```
-Data ordinarily flows down, from parent to child. The `bind:` directive allows data to flow the other way, from child to parent. Most bindings are specific to particular elements.
+Svelte creates an event listener that updates the bound value. If an element already has a listener for the same event, that listener will be fired before the bound value is updated.
+
+Most bindings are _two-way_, meaning that changes to the value will affect the element and vice versa. A few bindings are _readonly_, meaning that changing their value will have no effect on the element.
-The simplest bindings reflect the value of a property, such as `input.value`.
+## ``
+A `bind:value` directive on an `` element binds the input's `value` property:
+
+
```svelte
-
-
+
-
+
+
{message}
```
-If the name matches the value, you can use a shorthand.
+In the case of a numeric input (`type="number"` or `type="range"`), the value will be coerced to a number ([demo](/playground/untitled#H4sIAAAAAAAAE6WPwYoCMQxAfyWEPeyiOOqx2w74Hds9pBql0IllmhGXYf5dKqwiyILsLXnwwsuI-5i4oPkaUX8yo7kCnKNQV7dNzoty4qSVBSr8jG-Poixa0KAt2z5mbb14TaxA4OCtKCm_rz4-f2m403WltrlrYhMFTtcLNkoeFGqZ8yhDF7j3CCHKzpwoDexGmqCL4jwuPUJHZ-dxVcfmyYGe5MAv-La5pbxYFf5Z9Zf_UJXb-sEMquFgJJhBmGyTW5yj8lnRaD_w9D1dAKSSj7zqAQAA)):
```svelte
-
-
+
+
+
+
+
+
+
{a} + {b} = {a + b}
```
-Numeric input values are coerced; even though `input.value` is a string as far as the DOM is concerned, Svelte will treat it as a number. If the input is empty or invalid (in the case of `type="number"`), the value is `undefined`.
+If the input is empty or invalid (in the case of `type="number"`), the value is `undefined`.
+
+## ``
+
+Checkbox and radio inputs can be bound with `bind:checked`:
```svelte
-
-
+
```
+## ``
+
+Inputs that work together can use `bind:group`.
+
+```svelte
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+> [!NOTE] `bind:group` only works if the inputs are in the same Svelte component.
+
+## ``
+
On `` elements with `type="file"`, you can use `bind:files` to get the [`FileList` of selected files](https://developer.mozilla.org/en-US/docs/Web/API/FileList). When you want to update the files programmatically, you always need to use a `FileList` object. Currently `FileList` objects cannot be constructed directly, so you need to create a new [`DataTransfer`](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer) object and get `files` from there.
```svelte
@@ -62,19 +112,7 @@ On `` elements with `type="file"`, you can use `bind:files` to get the [`
> [!NOTE] `DataTransfer` may not be available in server-side JS runtimes. Leaving the state that is bound to `files` uninitialized prevents potential errors if components are server-side rendered.
-If you're using `bind:` directives together with `on` event attributes, the binding will always fire before the event attribute.
-
-```svelte
-
-
- console.log('New value:', value)} bind:value />
-```
-
-Here we were binding to the value of a text input, which uses the `input` event. Bindings on other elements may use different events such as `change`.
-
-## Binding `