Skip to content

feat: support defaultValue on <select> - #18591

Merged
dummdidumm merged 7 commits into
sveltejs:mainfrom
Socialpranker:fix/18447-select-defaultvalue
Aug 25, 2026
Merged

dummdidumm merged 7 commits into
sveltejs:mainfrom
Socialpranker:fix/18447-select-defaultvalue

Conversation

@Socialpranker

Copy link
Copy Markdown
Contributor

Closes #18447.

<select> accepted no defaultValue, so the only way to say which option starts selected was to put selected on the matching <option>. That falls apart when the options come from an #each, and it's impossible when the element is spread from an object, which is what the linked SvelteKit issue about resetting remote forms runs into.

Writing it didn't error, it just did nothing. is_dom_property() counts defaultValue as a property, so the client compiled <select defaultValue="b"> down to select.defaultValue = 'b', and HTMLSelectElement has no such property. The server dropped the attribute on the floor.

The fix marks the matching option selected, since that attribute is the default state the form reset algorithm restores. Two details were needed to make it behave. The call has to be emitted after the children, otherwise it runs before the options have their values assigned and matches nothing. And the current selection is only restored afterwards when something actually asked for an option through value or bind:value; without that check the initial default never took effect, because restoring selectedIndex put the browser's implicit "first option" choice back.

Server-side select_value now falls back to defaultValue when there's no value, so SSR emits the same selected attribute the client produces and hydration agrees.

An explicit value still wins over defaultValue while the form is live, and resetting the form goes back to the default, matching how <input defaultValue> already behaves.

Added tests/runtime-runes/samples/form-default-value-select, which covers the three cases and a form reset. It fails on main and passes here. Ran the full suite (7546 passing) plus tsc and eslint. The runtime-browser file fails on my machine because the Playwright browser isn't installed, and it fails the same way on a clean checkout of main.

Written with Claude Code (Claude Opus 5); I reviewed and tested everything before submitting.

`<select>` had no way to express a default selection other than putting
`selected` on the matching `<option>`, which is awkward when the options
are generated and impossible when the element is spread from an object.

`defaultValue` was silently ignored: `is_dom_property()` treats it as a
property, so the client compiled it to `select.defaultValue = value`,
which does nothing on `HTMLSelectElement`, and the server dropped it.

Client-side it now marks the matching option as `selected`, which is the
state the form reset algorithm restores. The call is emitted after the
children so the options exist and have had their values assigned. The
current selection is only preserved when something asked for a specific
option, so the default takes effect on the initial render.

Server-side the value falls back to `defaultValue` when no `value` is
given, so SSR and hydration agree.
@pkg-svelte-dev

pkg-svelte-dev Bot commented Jul 27, 2026 •

Copy link
Copy Markdown

Install the latest version of svelte from 1536096:

pnpm add https://pkg.svelte.dev/svelte/c/1536096dae692dff342c1b24b4804aa7d1115c05

Open in pkg.svelte.dev: https://pkg.svelte.dev/repos/svelte/pr/18591

Note

This PR is from a fork. A maintainer must approve approve each commit before it can be built and installed.

@changeset-bot

changeset-bot Bot commented Jul 27, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1536096

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
svelte Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@Nic-Polumeyv

Copy link
Copy Markdown
Member

The client transform only applies this when there's no spread (if (!has_spread && name === 'select') in RegularElement.js), and set_attributes has no defaultValue handling for selects, so <select {...props}> compiles to $.attribute_effect(...) and never reaches set_default_select_value. The server renderer does handle the spread case, so SSR and CSR diverge on exactly the usage #18447 was filed for: SvelteKit's <select {...form.fields.x.as('select')}> (sveltejs/kit#16093) is always a spread.

The client only handled `defaultValue` in the non-spread path, so
`<select {...props}>` compiled to `attribute_effect` and never reached
`set_default_select_value`. `set_attributes` can't apply it either,
since assigning the property does nothing on a select. It now marks the
default option from the same effect that handles `value`, after the
options exist.

Server-side the key was only read as `defaultvalue`. That is what the
compiler emits for an attribute written in the template, but a spread
passes keys through as the user wrote them, so `defaultValue` was
ignored and SSR disagreed with the client. Both spellings are accepted
now.

This is the case #18447 was filed for: `<select {...form.fields.x.as('select')}>`
in SvelteKit is always a spread.
@Socialpranker

Copy link
Copy Markdown
Contributor Author

You're right, and it was worse than just the client: the server read the key only as defaultvalue, which is what the compiler emits for an attribute written in the template, but a spread passes keys through as the user wrote them. So SSR ignored it too and the two sides disagreed for a different reason than the one you spotted.

Fixed in 22c07e6. The client now marks the default option from the same effect that already handles value for spreads, once the options exist, and the server accepts both spellings. Added a runtime sample with {...props} and an SSR sample covering both, since my original test only exercised the non-spread path, which is why green CI told me nothing here.

`set_default_select_value` compared every option against the whole value,
so a `multiple` select never matched and its default selection was lost.
Mirror `select_option` instead: branch on `select.multiple` and test
membership, leaving a non-array value alone.

Restoring `selectedIndex` only preserves a single selection, so the
multiple branch snapshots `selectedOptions` and restores each option,
keeping the current selection untouched.
@Socialpranker

Copy link
Copy Markdown
Contributor Author

The red Tests (20, windows-latest) on 72eef03 doesn't look related to this PR — it's the same Windows runner flake that hit main itself.

The job dies without running anything. Its log ends on the vitest banner with no test results at all:

> vitest run

 RUN  v4.1.7 D:/a/svelte/svelte

That's the last line — 350 lines of log, zero Test Files / FAIL / assertion output, and the job sat for 4 minutes (11:04→11:08) while every other job in the run finished in 2-3.

The same thing happened on main in run 29288819961 (13 July, no PR involved): Tests (20, windows-latest) failed after 4 minutes (22:08→22:12), log ends on the identical RUN v4.1.7 line, zero test results. 330 lines vs my 350, same shape.

Everything else on this run is green — Ubuntu on Node 20/22/24, macOS, Lint, TSGo, TestNoAsync, Benchmarks.

Locally the new test passes (form-default-value-select-multiple, 2 passed). I can't run the full suite to completion on this machine, so I'm not claiming more than that — but the main failure above is the part that shows this isn't a regression from the commit.

Could someone with the right access re-run that job? I don't have permission to (Must have admin rights to Repository). Happy to push an empty commit instead if that's easier.

@Socialpranker

Copy link
Copy Markdown
Contributor Author

Following up here — anything else needed on the flake explanation, or is this just waiting for a re-look?

@Socialpranker

Copy link
Copy Markdown
Contributor Author

Correction to my earlier comment: I was wrong about the log. The failing Windows job does produce test output — I read a truncated log and reported it as empty. The actual failure is a single test:

FAIL packages/svelte/tests/signals/test.ts > signals > schedules rerun when writing to signal before reading it (runes mode)
Error: Test timed out in 30000ms.
Tests  1 failed | 7674 passed | 69 skipped (7744)

It's still unrelated to this PR, but for a better reason than the one I gave. The same test times out on main with no PR involved:

Same job, same single test, same 30s timeout. The Windows runner takes ~176s for the suite where the others take 2-3 minutes total, so a 30s per-test timeout is marginal there. Nothing in this PR touches the signals runtime.

A re-run should clear it — I don't have permission to trigger one. Happy to push a merge of main if that's easier for you than a manual re-run.

@dummdidumm
dummdidumm self-requested a review August 25, 2026 09:30
@Socialpranker

Copy link
Copy Markdown
Contributor Author

Thanks for merging main — CI is fully green now, Windows included (Tests (20, windows-latest) passed in 4m3s).

One data point that may be worth more than this PR: I tried to reproduce that timeout locally while you were merging, and it reproduces on clean main with no PR involved — packages/svelte/tests/signals/test.ts -t "schedules rerun when writing to signal before reading it", macOS, isolated run, failed 1 of 3 times at the 30s timeout. On the merged branch it passed 3 of 3. So it isn't Windows-specific, it's just timing-sensitive enough that a loaded runner tips it over, and Windows is the slowest runner in the matrix.

If it keeps costing people re-runs, a larger testTimeout for that file would probably settle it. Happy to open a separate PR for that if you'd like — not folding it into this one.

@dummdidumm
dummdidumm merged commit c575b07 into sveltejs:main Aug 25, 2026
10 of 11 checks passed
@github-actions github-actions Bot mentioned this pull request Aug 25, 2026
dummdidumm pushed a commit that referenced this pull request Aug 26, 2026
…e` is applied (#18719)

Also ensure init_select isn't called multiple times

Follow-up to #18591.
dummdidumm added a commit that referenced this pull request Aug 26, 2026
…`value` on the server (#18720)

Follow-up to #18591.

---------

Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>
dummdidumm pushed a commit that referenced this pull request Aug 28, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## svelte@5.57.0

### Minor Changes

- feat: export `RenderOutput`, `SyncRenderOutput`, `Csp` and
`Sha256Source` from `svelte/server`
([#18648](#18648))

- feat: add `has` function to `createContext`
([#18472](#18472))

- feat: support `defaultValue` on `<select>`
([#18591](#18591))

- feat: add getOrInsert/getOrInsertComputed to SvelteMap
([#18728](#18728))

### Patch Changes

- fix: block template store subscriptions on the promise that assigns
the store ([#18582](#18582))

- fix: route $derived teardown errors through invoke_error_boundary
([#18486](#18486))

- fix: track SvelteDate snapshots in reactions
([#18700](#18700))

- fix: remove `<svelte:head>` anchors on unmount
([#18697](#18697))

- fix: warn on undeclared shorthand event handlers on `<svelte:window>`,
`<svelte:document>` and `<svelte:body>`
([#18480](#18480))

- perf: reuse the cached value in the `<option>`/`<select>` value guard
([#18713](#18713))

- fix: prevent malformed AST output for `<select>` with static `value`
attribute ([#18449](#18449))

- fix: apply ownership mutation ignores to binding assignments
([#18718](#18718))

- fix: prevent onoutroend from firing twice when compilerOptions.hmr is
true ([#18655](#18655))

- fix: preserve whitespace after inline elements when printing
([#18685](#18685))

- perf: fold SSR block-open markers into the branch's first push
([#18712](#18712))

- fix: run `onDestroy` callbacks when a server render throws
([#18585](#18585))

- fix: report `derived_invalid_export` for `export let x =
$derived(...)` in runes mode
([#18692](#18692))

- fix: never apply class hash to elements inside `<svelte:head>`
([#18160](#18160))

- fix: keep `defaultChecked` on hydrated radio inputs with spread
attributes ([#18701](#18701))

- fix: accept `onfocusin`/`onfocusout` in
`a11y_mouse_events_have_key_events`
([#18689](#18689))

- perf: O(n²)→O(n) Map lookups for legacy `$:` reactive statement
ordering ([#18602](#18602))

- fix: distinct memoizer on style/class directives
([#18466](#18466))

- fix: measure nested transitions before applying their starting styles
([#18647](#18647))

- fix: don't turn component instances stored in `$state` into state
proxies ([#18646](#18646))

- perf: emit `$.only_child` for elements with a single child
([#18717](#18717))

- fix: omit `bind:focused` from SSR output (it has no HTML attribute)
([#18724](#18724))

- fix: more robust rendering of Svelte custom element slots
([#18710](#18710))

- perf: optimize simple object destructuring in `@const` tags
([#18390](#18390))

- fix: properly apply static textarea value attribute during CSR
([#18727](#18727))

- fix: end a restored reaction context at the end of its synchronous
segment ([#18694](#18694))

- fix: keep the dependencies of a reaction that throws, so deriveds it
read are neither leaked nor stuck in their error
([#18703](#18703))

- fix: don't resurrect outroing elements when an ancestor block is
paused and resumed
([#18431](#18431))

- perf: use `$.comment()` for single-comment templates
([#18714](#18714))

- chore: move `@types/trusted-types` to devDependencies
([#18730](#18730))

- perf: store setters cache as `Set` instead of `Array`
([#18251](#18251))

- fix: transform derived assignments and select function bindings
correctly during server-side rendering
([#18669](#18669))

- fix: keep boolean attributes with an empty string value when rendering
attribute objects on the server
([#18721](#18721))

- fix: sync `SvelteURL` port signal when the protocol setter clears the
port ([#18705](#18705))

- fix: block declaration tags and `{@const}` on async values read inside
closures ([#18533](#18533))

- fix: avoid css tree-shaking for exported Snippet
([#18540](#18540))

- perf: treat `<img loading>` as a static element again
([#18711](#18711))

- fix: prevent `selectedcontent` mutation from changing the selected
option ([#18495](#18495))

- fix: avoid `NaN` keyframe values in `slide` transition for elements
without a layout box
([#18430](#18430))

- fix: preserve line feed character references in attribute values
([#18691](#18691))

- fix: decode uppercase-`X` hex numeric character references (`&#X...;`)
([#18708](#18708))

- chore: clarify when `$effect.pre` runs relative to DOM updates
([#18534](#18534))

- fix: scope SSR boundary failed snippets to their boundary
([#18593](#18593))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
dadezzz pushed a commit to dadezzz/events-cash-register that referenced this pull request Sep 1, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [svelte](https://svelte.dev) ([source](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte)) | [`5.56.10` → `5.57.0`](https://renovatebot.com/diffs/npm/svelte/5.56.10/5.57.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/svelte/5.57.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/svelte/5.56.10/5.57.0?slim=true) |

---

### Release Notes

<details>
<summary>sveltejs/svelte (svelte)</summary>

### [`v5.57.0`](https://github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5570)

[Compare Source](https://github.com/sveltejs/svelte/compare/svelte@5.56.10...svelte@5.57.0)

##### Minor Changes

- feat: export `RenderOutput`, `SyncRenderOutput`, `Csp` and `Sha256Source` from `svelte/server` ([#&#8203;18648](sveltejs/svelte#18648))

- feat: add `has` function to `createContext` ([#&#8203;18472](sveltejs/svelte#18472))

- feat: support `defaultValue` on `<select>` ([#&#8203;18591](sveltejs/svelte#18591))

- feat: add getOrInsert/getOrInsertComputed to SvelteMap ([#&#8203;18728](sveltejs/svelte#18728))

##### Patch Changes

- fix: block template store subscriptions on the promise that assigns the store ([#&#8203;18582](sveltejs/svelte#18582))

- fix: route $derived teardown errors through invoke\_error\_boundary ([#&#8203;18486](sveltejs/svelte#18486))

- fix: track SvelteDate snapshots in reactions ([#&#8203;18700](sveltejs/svelte#18700))

- fix: remove `<svelte:head>` anchors on unmount ([#&#8203;18697](sveltejs/svelte#18697))

- fix: warn on undeclared shorthand event handlers on `<svelte:window>`, `<svelte:document>` and `<svelte:body>` ([#&#8203;18480](sveltejs/svelte#18480))

- perf: reuse the cached value in the `<option>`/`<select>` value guard ([#&#8203;18713](sveltejs/svelte#18713))

- fix: prevent malformed AST output for `<select>` with static `value` attribute ([#&#8203;18449](sveltejs/svelte#18449))

- fix: apply ownership mutation ignores to binding assignments ([#&#8203;18718](sveltejs/svelte#18718))

- fix: prevent onoutroend from firing twice when compilerOptions.hmr is true ([#&#8203;18655](sveltejs/svelte#18655))

- fix: preserve whitespace after inline elements when printing ([#&#8203;18685](sveltejs/svelte#18685))

- perf: fold SSR block-open markers into the branch's first push ([#&#8203;18712](sveltejs/svelte#18712))

- fix: run `onDestroy` callbacks when a server render throws ([#&#8203;18585](sveltejs/svelte#18585))

- fix: report `derived_invalid_export` for `export let x = $derived(...)` in runes mode ([#&#8203;18692](sveltejs/svelte#18692))

- fix: never apply class hash to elements inside `<svelte:head>` ([#&#8203;18160](sveltejs/svelte#18160))

- fix: keep `defaultChecked` on hydrated radio inputs with spread attributes ([#&#8203;18701](sveltejs/svelte#18701))

- fix: accept `onfocusin`/`onfocusout` in `a11y_mouse_events_have_key_events` ([#&#8203;18689](sveltejs/svelte#18689))

- perf: O(n²)→O(n) Map lookups for legacy `$:` reactive statement ordering ([#&#8203;18602](sveltejs/svelte#18602))

- fix: distinct memoizer on style/class directives ([#&#8203;18466](sveltejs/svelte#18466))

- fix: measure nested transitions before applying their starting styles ([#&#8203;18647](sveltejs/svelte#18647))

- fix: don't turn component instances stored in `$state` into state proxies ([#&#8203;18646](sveltejs/svelte#18646))

- perf: emit `$.only_child` for elements with a single child ([#&#8203;18717](sveltejs/svelte#18717))

- fix: omit `bind:focused` from SSR output (it has no HTML attribute) ([#&#8203;18724](sveltejs/svelte#18724))

- fix: more robust rendering of Svelte custom element slots ([#&#8203;18710](sveltejs/svelte#18710))

- perf: optimize simple object destructuring in `@const` tags ([#&#8203;18390](sveltejs/svelte#18390))

- fix: properly apply static textarea value attribute during CSR ([#&#8203;18727](sveltejs/svelte#18727))

- fix: end a restored reaction context at the end of its synchronous segment ([#&#8203;18694](sveltejs/svelte#18694))

- fix: keep the dependencies of a reaction that throws, so deriveds it read are neither leaked nor stuck in their error ([#&#8203;18703](sveltejs/svelte#18703))

- fix: don't resurrect outroing elements when an ancestor block is paused and resumed ([#&#8203;18431](sveltejs/svelte#18431))

- perf: use `$.comment()` for single-comment templates ([#&#8203;18714](sveltejs/svelte#18714))

- chore: move `@types/trusted-types` to devDependencies ([#&#8203;18730](sveltejs/svelte#18730))

- perf: store setters cache as `Set` instead of `Array` ([#&#8203;18251](sveltejs/svelte#18251))

- fix: transform derived assignments and select function bindings correctly during server-side rendering ([#&#8203;18669](sveltejs/svelte#18669))

- fix: keep boolean attributes with an empty string value when rendering attribute objects on the server ([#&#8203;18721](sveltejs/svelte#18721))

- fix: sync `SvelteURL` port signal when the protocol setter clears the port ([#&#8203;18705](sveltejs/svelte#18705))

- fix: block declaration tags and `{@const}` on async values read inside closures ([#&#8203;18533](sveltejs/svelte#18533))

- fix: avoid css tree-shaking for exported Snippet ([#&#8203;18540](sveltejs/svelte#18540))

- perf: treat `<img loading>` as a static element again ([#&#8203;18711](sveltejs/svelte#18711))

- fix: prevent `selectedcontent` mutation from changing the selected option ([#&#8203;18495](sveltejs/svelte#18495))

- fix: avoid `NaN` keyframe values in `slide` transition for elements without a layout box ([#&#8203;18430](sveltejs/svelte#18430))

- fix: preserve line feed character references in attribute values ([#&#8203;18691](sveltejs/svelte#18691))

- fix: decode uppercase-`X` hex numeric character references (`&#X...;`) ([#&#8203;18708](sveltejs/svelte#18708))

- chore: clarify when `$effect.pre` runs relative to DOM updates ([#&#8203;18534](sveltejs/svelte#18534))

- fix: scope SSR boundary failed snippets to their boundary ([#&#8203;18593](sveltejs/svelte#18593))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC41Mi4xIiwidXBkYXRlZEluVmVyIjoiNDQuNTIuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
renovate Bot added a commit to cigaleapp/cigale that referenced this pull request Sep 6, 2026
##### [v5.57.0](https://github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5570)

##### Minor Changes

- feat: export `RenderOutput`, `SyncRenderOutput`, `Csp` and `Sha256Source` from `svelte/server` ([#18648](sveltejs/svelte#18648))

- feat: add `has` function to `createContext` ([#18472](sveltejs/svelte#18472))

- feat: support `defaultValue` on `<select>` ([#18591](sveltejs/svelte#18591))

- feat: add getOrInsert/getOrInsertComputed to SvelteMap ([#18728](sveltejs/svelte#18728))

##### Patch Changes

- fix: block template store subscriptions on the promise that assigns the store ([#18582](sveltejs/svelte#18582))

- fix: route $derived teardown errors through invoke\_error\_boundary ([#18486](sveltejs/svelte#18486))

- fix: track SvelteDate snapshots in reactions ([#18700](sveltejs/svelte#18700))

- fix: remove `<svelte:head>` anchors on unmount ([#18697](sveltejs/svelte#18697))

- fix: warn on undeclared shorthand event handlers on `<svelte:window>`, `<svelte:document>` and `<svelte:body>` ([#18480](sveltejs/svelte#18480))

- perf: reuse the cached value in the `<option>`/`<select>` value guard ([#18713](sveltejs/svelte#18713))

- fix: prevent malformed AST output for `<select>` with static `value` attribute ([#18449](sveltejs/svelte#18449))

- fix: apply ownership mutation ignores to binding assignments ([#18718](sveltejs/svelte#18718))

- fix: prevent onoutroend from firing twice when compilerOptions.hmr is true ([#18655](sveltejs/svelte#18655))

- fix: preserve whitespace after inline elements when printing ([#18685](sveltejs/svelte#18685))

- perf: fold SSR block-open markers into the branch's first push ([#18712](sveltejs/svelte#18712))

- fix: run `onDestroy` callbacks when a server render throws ([#18585](sveltejs/svelte#18585))

- fix: report `derived_invalid_export` for `export let x = $derived(...)` in runes mode ([#18692](sveltejs/svelte#18692))

- fix: never apply class hash to elements inside `<svelte:head>` ([#18160](sveltejs/svelte#18160))

- fix: keep `defaultChecked` on hydrated radio inputs with spread attributes ([#18701](sveltejs/svelte#18701))

- fix: accept `onfocusin`/`onfocusout` in `a11y_mouse_events_have_key_events` ([#18689](sveltejs/svelte#18689))

- perf: O(n²)→O(n) Map lookups for legacy `$:` reactive statement ordering ([#18602](sveltejs/svelte#18602))

- fix: distinct memoizer on style/class directives ([#18466](sveltejs/svelte#18466))

- fix: measure nested transitions before applying their starting styles ([#18647](sveltejs/svelte#18647))

- fix: don't turn component instances stored in `$state` into state proxies ([#18646](sveltejs/svelte#18646))

- perf: emit `$.only_child` for elements with a single child ([#18717](sveltejs/svelte#18717))

- fix: omit `bind:focused` from SSR output (it has no HTML attribute) ([#18724](sveltejs/svelte#18724))

- fix: more robust rendering of Svelte custom element slots ([#18710](sveltejs/svelte#18710))

- perf: optimize simple object destructuring in `@const` tags ([#18390](sveltejs/svelte#18390))

- fix: properly apply static textarea value attribute during CSR ([#18727](sveltejs/svelte#18727))

- fix: end a restored reaction context at the end of its synchronous segment ([#18694](sveltejs/svelte#18694))

- fix: keep the dependencies of a reaction that throws, so deriveds it read are neither leaked nor stuck in their error ([#18703](sveltejs/svelte#18703))

- fix: don't resurrect outroing elements when an ancestor block is paused and resumed ([#18431](sveltejs/svelte#18431))

- perf: use `$.comment()` for single-comment templates ([#18714](sveltejs/svelte#18714))

- chore: move `@types/trusted-types` to devDependencies ([#18730](sveltejs/svelte#18730))

- perf: store setters cache as `Set` instead of `Array` ([#18251](sveltejs/svelte#18251))

- fix: transform derived assignments and select function bindings correctly during server-side rendering ([#18669](sveltejs/svelte#18669))

- fix: keep boolean attributes with an empty string value when rendering attribute objects on the server ([#18721](sveltejs/svelte#18721))

- fix: sync `SvelteURL` port signal when the protocol setter clears the port ([#18705](sveltejs/svelte#18705))

- fix: block declaration tags and `{@const}` on async values read inside closures ([#18533](sveltejs/svelte#18533))

- fix: avoid css tree-shaking for exported Snippet ([#18540](sveltejs/svelte#18540))

- perf: treat `<img loading>` as a static element again ([#18711](sveltejs/svelte#18711))

- fix: prevent `selectedcontent` mutation from changing the selected option ([#18495](sveltejs/svelte#18495))

- fix: avoid `NaN` keyframe values in `slide` transition for elements without a layout box ([#18430](sveltejs/svelte#18430))

- fix: preserve line feed character references in attribute values ([#18691](sveltejs/svelte#18691))

- fix: decode uppercase-`X` hex numeric character references (`&#X...;`) ([#18708](sveltejs/svelte#18708))

- chore: clarify when `$effect.pre` runs relative to DOM updates ([#18534](sveltejs/svelte#18534))

- fix: scope SSR boundary failed snippets to their boundary ([#18593](sveltejs/svelte#18593))
renovate Bot added a commit to cigaleapp/cigale that referenced this pull request Sep 7, 2026
##### [v5.57.0](https://github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5570)

##### Minor Changes

- feat: export `RenderOutput`, `SyncRenderOutput`, `Csp` and `Sha256Source` from `svelte/server` ([#18648](sveltejs/svelte#18648))

- feat: add `has` function to `createContext` ([#18472](sveltejs/svelte#18472))

- feat: support `defaultValue` on `<select>` ([#18591](sveltejs/svelte#18591))

- feat: add getOrInsert/getOrInsertComputed to SvelteMap ([#18728](sveltejs/svelte#18728))

##### Patch Changes

- fix: block template store subscriptions on the promise that assigns the store ([#18582](sveltejs/svelte#18582))

- fix: route $derived teardown errors through invoke\_error\_boundary ([#18486](sveltejs/svelte#18486))

- fix: track SvelteDate snapshots in reactions ([#18700](sveltejs/svelte#18700))

- fix: remove `<svelte:head>` anchors on unmount ([#18697](sveltejs/svelte#18697))

- fix: warn on undeclared shorthand event handlers on `<svelte:window>`, `<svelte:document>` and `<svelte:body>` ([#18480](sveltejs/svelte#18480))

- perf: reuse the cached value in the `<option>`/`<select>` value guard ([#18713](sveltejs/svelte#18713))

- fix: prevent malformed AST output for `<select>` with static `value` attribute ([#18449](sveltejs/svelte#18449))

- fix: apply ownership mutation ignores to binding assignments ([#18718](sveltejs/svelte#18718))

- fix: prevent onoutroend from firing twice when compilerOptions.hmr is true ([#18655](sveltejs/svelte#18655))

- fix: preserve whitespace after inline elements when printing ([#18685](sveltejs/svelte#18685))

- perf: fold SSR block-open markers into the branch's first push ([#18712](sveltejs/svelte#18712))

- fix: run `onDestroy` callbacks when a server render throws ([#18585](sveltejs/svelte#18585))

- fix: report `derived_invalid_export` for `export let x = $derived(...)` in runes mode ([#18692](sveltejs/svelte#18692))

- fix: never apply class hash to elements inside `<svelte:head>` ([#18160](sveltejs/svelte#18160))

- fix: keep `defaultChecked` on hydrated radio inputs with spread attributes ([#18701](sveltejs/svelte#18701))

- fix: accept `onfocusin`/`onfocusout` in `a11y_mouse_events_have_key_events` ([#18689](sveltejs/svelte#18689))

- perf: O(n²)→O(n) Map lookups for legacy `$:` reactive statement ordering ([#18602](sveltejs/svelte#18602))

- fix: distinct memoizer on style/class directives ([#18466](sveltejs/svelte#18466))

- fix: measure nested transitions before applying their starting styles ([#18647](sveltejs/svelte#18647))

- fix: don't turn component instances stored in `$state` into state proxies ([#18646](sveltejs/svelte#18646))

- perf: emit `$.only_child` for elements with a single child ([#18717](sveltejs/svelte#18717))

- fix: omit `bind:focused` from SSR output (it has no HTML attribute) ([#18724](sveltejs/svelte#18724))

- fix: more robust rendering of Svelte custom element slots ([#18710](sveltejs/svelte#18710))

- perf: optimize simple object destructuring in `@const` tags ([#18390](sveltejs/svelte#18390))

- fix: properly apply static textarea value attribute during CSR ([#18727](sveltejs/svelte#18727))

- fix: end a restored reaction context at the end of its synchronous segment ([#18694](sveltejs/svelte#18694))

- fix: keep the dependencies of a reaction that throws, so deriveds it read are neither leaked nor stuck in their error ([#18703](sveltejs/svelte#18703))

- fix: don't resurrect outroing elements when an ancestor block is paused and resumed ([#18431](sveltejs/svelte#18431))

- perf: use `$.comment()` for single-comment templates ([#18714](sveltejs/svelte#18714))

- chore: move `@types/trusted-types` to devDependencies ([#18730](sveltejs/svelte#18730))

- perf: store setters cache as `Set` instead of `Array` ([#18251](sveltejs/svelte#18251))

- fix: transform derived assignments and select function bindings correctly during server-side rendering ([#18669](sveltejs/svelte#18669))

- fix: keep boolean attributes with an empty string value when rendering attribute objects on the server ([#18721](sveltejs/svelte#18721))

- fix: sync `SvelteURL` port signal when the protocol setter clears the port ([#18705](sveltejs/svelte#18705))

- fix: block declaration tags and `{@const}` on async values read inside closures ([#18533](sveltejs/svelte#18533))

- fix: avoid css tree-shaking for exported Snippet ([#18540](sveltejs/svelte#18540))

- perf: treat `<img loading>` as a static element again ([#18711](sveltejs/svelte#18711))

- fix: prevent `selectedcontent` mutation from changing the selected option ([#18495](sveltejs/svelte#18495))

- fix: avoid `NaN` keyframe values in `slide` transition for elements without a layout box ([#18430](sveltejs/svelte#18430))

- fix: preserve line feed character references in attribute values ([#18691](sveltejs/svelte#18691))

- fix: decode uppercase-`X` hex numeric character references (`&#X...;`) ([#18708](sveltejs/svelte#18708))

- chore: clarify when `$effect.pre` runs relative to DOM updates ([#18534](sveltejs/svelte#18534))

- fix: scope SSR boundary failed snippets to their boundary ([#18593](sveltejs/svelte#18593))
renovate Bot added a commit to cigaleapp/cigale that referenced this pull request Sep 7, 2026
##### [v5.57.0](https://github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5570)

##### Minor Changes

- feat: export `RenderOutput`, `SyncRenderOutput`, `Csp` and `Sha256Source` from `svelte/server` ([#18648](sveltejs/svelte#18648))

- feat: add `has` function to `createContext` ([#18472](sveltejs/svelte#18472))

- feat: support `defaultValue` on `<select>` ([#18591](sveltejs/svelte#18591))

- feat: add getOrInsert/getOrInsertComputed to SvelteMap ([#18728](sveltejs/svelte#18728))

##### Patch Changes

- fix: block template store subscriptions on the promise that assigns the store ([#18582](sveltejs/svelte#18582))

- fix: route $derived teardown errors through invoke\_error\_boundary ([#18486](sveltejs/svelte#18486))

- fix: track SvelteDate snapshots in reactions ([#18700](sveltejs/svelte#18700))

- fix: remove `<svelte:head>` anchors on unmount ([#18697](sveltejs/svelte#18697))

- fix: warn on undeclared shorthand event handlers on `<svelte:window>`, `<svelte:document>` and `<svelte:body>` ([#18480](sveltejs/svelte#18480))

- perf: reuse the cached value in the `<option>`/`<select>` value guard ([#18713](sveltejs/svelte#18713))

- fix: prevent malformed AST output for `<select>` with static `value` attribute ([#18449](sveltejs/svelte#18449))

- fix: apply ownership mutation ignores to binding assignments ([#18718](sveltejs/svelte#18718))

- fix: prevent onoutroend from firing twice when compilerOptions.hmr is true ([#18655](sveltejs/svelte#18655))

- fix: preserve whitespace after inline elements when printing ([#18685](sveltejs/svelte#18685))

- perf: fold SSR block-open markers into the branch's first push ([#18712](sveltejs/svelte#18712))

- fix: run `onDestroy` callbacks when a server render throws ([#18585](sveltejs/svelte#18585))

- fix: report `derived_invalid_export` for `export let x = $derived(...)` in runes mode ([#18692](sveltejs/svelte#18692))

- fix: never apply class hash to elements inside `<svelte:head>` ([#18160](sveltejs/svelte#18160))

- fix: keep `defaultChecked` on hydrated radio inputs with spread attributes ([#18701](sveltejs/svelte#18701))

- fix: accept `onfocusin`/`onfocusout` in `a11y_mouse_events_have_key_events` ([#18689](sveltejs/svelte#18689))

- perf: O(n²)→O(n) Map lookups for legacy `$:` reactive statement ordering ([#18602](sveltejs/svelte#18602))

- fix: distinct memoizer on style/class directives ([#18466](sveltejs/svelte#18466))

- fix: measure nested transitions before applying their starting styles ([#18647](sveltejs/svelte#18647))

- fix: don't turn component instances stored in `$state` into state proxies ([#18646](sveltejs/svelte#18646))

- perf: emit `$.only_child` for elements with a single child ([#18717](sveltejs/svelte#18717))

- fix: omit `bind:focused` from SSR output (it has no HTML attribute) ([#18724](sveltejs/svelte#18724))

- fix: more robust rendering of Svelte custom element slots ([#18710](sveltejs/svelte#18710))

- perf: optimize simple object destructuring in `@const` tags ([#18390](sveltejs/svelte#18390))

- fix: properly apply static textarea value attribute during CSR ([#18727](sveltejs/svelte#18727))

- fix: end a restored reaction context at the end of its synchronous segment ([#18694](sveltejs/svelte#18694))

- fix: keep the dependencies of a reaction that throws, so deriveds it read are neither leaked nor stuck in their error ([#18703](sveltejs/svelte#18703))

- fix: don't resurrect outroing elements when an ancestor block is paused and resumed ([#18431](sveltejs/svelte#18431))

- perf: use `$.comment()` for single-comment templates ([#18714](sveltejs/svelte#18714))

- chore: move `@types/trusted-types` to devDependencies ([#18730](sveltejs/svelte#18730))

- perf: store setters cache as `Set` instead of `Array` ([#18251](sveltejs/svelte#18251))

- fix: transform derived assignments and select function bindings correctly during server-side rendering ([#18669](sveltejs/svelte#18669))

- fix: keep boolean attributes with an empty string value when rendering attribute objects on the server ([#18721](sveltejs/svelte#18721))

- fix: sync `SvelteURL` port signal when the protocol setter clears the port ([#18705](sveltejs/svelte#18705))

- fix: block declaration tags and `{@const}` on async values read inside closures ([#18533](sveltejs/svelte#18533))

- fix: avoid css tree-shaking for exported Snippet ([#18540](sveltejs/svelte#18540))

- perf: treat `<img loading>` as a static element again ([#18711](sveltejs/svelte#18711))

- fix: prevent `selectedcontent` mutation from changing the selected option ([#18495](sveltejs/svelte#18495))

- fix: avoid `NaN` keyframe values in `slide` transition for elements without a layout box ([#18430](sveltejs/svelte#18430))

- fix: preserve line feed character references in attribute values ([#18691](sveltejs/svelte#18691))

- fix: decode uppercase-`X` hex numeric character references (`&#X...;`) ([#18708](sveltejs/svelte#18708))

- chore: clarify when `$effect.pre` runs relative to DOM updates ([#18534](sveltejs/svelte#18534))

- fix: scope SSR boundary failed snippets to their boundary ([#18593](sveltejs/svelte#18593))
gwennlbh pushed a commit to cigaleapp/cigale that referenced this pull request Sep 7, 2026
##### [v5.57.0](https://github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5570)

##### Minor Changes

- feat: export `RenderOutput`, `SyncRenderOutput`, `Csp` and `Sha256Source` from `svelte/server` ([#18648](sveltejs/svelte#18648))

- feat: add `has` function to `createContext` ([#18472](sveltejs/svelte#18472))

- feat: support `defaultValue` on `<select>` ([#18591](sveltejs/svelte#18591))

- feat: add getOrInsert/getOrInsertComputed to SvelteMap ([#18728](sveltejs/svelte#18728))

##### Patch Changes

- fix: block template store subscriptions on the promise that assigns the store ([#18582](sveltejs/svelte#18582))

- fix: route $derived teardown errors through invoke\_error\_boundary ([#18486](sveltejs/svelte#18486))

- fix: track SvelteDate snapshots in reactions ([#18700](sveltejs/svelte#18700))

- fix: remove `<svelte:head>` anchors on unmount ([#18697](sveltejs/svelte#18697))

- fix: warn on undeclared shorthand event handlers on `<svelte:window>`, `<svelte:document>` and `<svelte:body>` ([#18480](sveltejs/svelte#18480))

- perf: reuse the cached value in the `<option>`/`<select>` value guard ([#18713](sveltejs/svelte#18713))

- fix: prevent malformed AST output for `<select>` with static `value` attribute ([#18449](sveltejs/svelte#18449))

- fix: apply ownership mutation ignores to binding assignments ([#18718](sveltejs/svelte#18718))

- fix: prevent onoutroend from firing twice when compilerOptions.hmr is true ([#18655](sveltejs/svelte#18655))

- fix: preserve whitespace after inline elements when printing ([#18685](sveltejs/svelte#18685))

- perf: fold SSR block-open markers into the branch's first push ([#18712](sveltejs/svelte#18712))

- fix: run `onDestroy` callbacks when a server render throws ([#18585](sveltejs/svelte#18585))

- fix: report `derived_invalid_export` for `export let x = $derived(...)` in runes mode ([#18692](sveltejs/svelte#18692))

- fix: never apply class hash to elements inside `<svelte:head>` ([#18160](sveltejs/svelte#18160))

- fix: keep `defaultChecked` on hydrated radio inputs with spread attributes ([#18701](sveltejs/svelte#18701))

- fix: accept `onfocusin`/`onfocusout` in `a11y_mouse_events_have_key_events` ([#18689](sveltejs/svelte#18689))

- perf: O(n²)→O(n) Map lookups for legacy `$:` reactive statement ordering ([#18602](sveltejs/svelte#18602))

- fix: distinct memoizer on style/class directives ([#18466](sveltejs/svelte#18466))

- fix: measure nested transitions before applying their starting styles ([#18647](sveltejs/svelte#18647))

- fix: don't turn component instances stored in `$state` into state proxies ([#18646](sveltejs/svelte#18646))

- perf: emit `$.only_child` for elements with a single child ([#18717](sveltejs/svelte#18717))

- fix: omit `bind:focused` from SSR output (it has no HTML attribute) ([#18724](sveltejs/svelte#18724))

- fix: more robust rendering of Svelte custom element slots ([#18710](sveltejs/svelte#18710))

- perf: optimize simple object destructuring in `@const` tags ([#18390](sveltejs/svelte#18390))

- fix: properly apply static textarea value attribute during CSR ([#18727](sveltejs/svelte#18727))

- fix: end a restored reaction context at the end of its synchronous segment ([#18694](sveltejs/svelte#18694))

- fix: keep the dependencies of a reaction that throws, so deriveds it read are neither leaked nor stuck in their error ([#18703](sveltejs/svelte#18703))

- fix: don't resurrect outroing elements when an ancestor block is paused and resumed ([#18431](sveltejs/svelte#18431))

- perf: use `$.comment()` for single-comment templates ([#18714](sveltejs/svelte#18714))

- chore: move `@types/trusted-types` to devDependencies ([#18730](sveltejs/svelte#18730))

- perf: store setters cache as `Set` instead of `Array` ([#18251](sveltejs/svelte#18251))

- fix: transform derived assignments and select function bindings correctly during server-side rendering ([#18669](sveltejs/svelte#18669))

- fix: keep boolean attributes with an empty string value when rendering attribute objects on the server ([#18721](sveltejs/svelte#18721))

- fix: sync `SvelteURL` port signal when the protocol setter clears the port ([#18705](sveltejs/svelte#18705))

- fix: block declaration tags and `{@const}` on async values read inside closures ([#18533](sveltejs/svelte#18533))

- fix: avoid css tree-shaking for exported Snippet ([#18540](sveltejs/svelte#18540))

- perf: treat `<img loading>` as a static element again ([#18711](sveltejs/svelte#18711))

- fix: prevent `selectedcontent` mutation from changing the selected option ([#18495](sveltejs/svelte#18495))

- fix: avoid `NaN` keyframe values in `slide` transition for elements without a layout box ([#18430](sveltejs/svelte#18430))

- fix: preserve line feed character references in attribute values ([#18691](sveltejs/svelte#18691))

- fix: decode uppercase-`X` hex numeric character references (`&#X...;`) ([#18708](sveltejs/svelte#18708))

- chore: clarify when `$effect.pre` runs relative to DOM updates ([#18534](sveltejs/svelte#18534))

- fix: scope SSR boundary failed snippets to their boundary ([#18593](sveltejs/svelte#18593))

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add defaultValue to <select>

3 participants