From 4f00299d47807fa23f838d4bece7f0251bd9acbb Mon Sep 17 00:00:00 2001
From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com>
Date: Mon, 20 Jul 2026 15:47:27 -0400
Subject: [PATCH 1/8] feat: pass `name` to the `preload` filter for fonts and
assets
Assets are emitted as `[name].[hash][extname]`, so the source file name can
be recovered from the output path without a manifest lookup.
The font and modulepreload paths each branched on `link_header_preload`
themselves; a Link header value is the `` attribute list joined with
`; ` plus `nopush`, so one helper now covers both.
---
.changeset/hungry-hounds-argue.md | 5 ++
documentation/docs/30-advanced/20-hooks.md | 2 +-
packages/kit/src/exports/public.d.ts | 10 +++-
.../kit/src/runtime/server/page/render.js | 53 ++++++++-----------
packages/kit/types/index.d.ts | 10 +++-
5 files changed, 47 insertions(+), 33 deletions(-)
create mode 100644 .changeset/hungry-hounds-argue.md
diff --git a/.changeset/hungry-hounds-argue.md b/.changeset/hungry-hounds-argue.md
new file mode 100644
index 000000000000..8e630f12fd7e
--- /dev/null
+++ b/.changeset/hungry-hounds-argue.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': minor
+---
+
+feat: pass `name` to the `preload` filter for fonts and assets
diff --git a/documentation/docs/30-advanced/20-hooks.md b/documentation/docs/30-advanced/20-hooks.md
index 6d1275d8665d..621555511f1c 100644
--- a/documentation/docs/30-advanced/20-hooks.md
+++ b/documentation/docs/30-advanced/20-hooks.md
@@ -45,7 +45,7 @@ You can define multiple `handle` functions and execute them with the [`sequence`
- `transformPageChunk(opts: { html: string, done: boolean }): MaybePromise` — applies custom transforms to HTML. If `done` is true, it's the final chunk. Chunks are not guaranteed to be well-formed HTML (they could include an element's opening tag but not its closing tag, for example) but they will always be split at sensible boundaries such as `%sveltekit.head%` or layout/page components.
- `filterSerializedResponseHeaders(name: string, value: string): boolean` — determines which headers should be included in serialized responses when a `load` function loads a resource with `fetch`. By default, none will be included.
-- `preload(input: { type: 'js' | 'css' | 'font' | 'asset', path: string }): boolean` — determines which files should be preloaded. Files are preloaded via `` tags added to the `` tag; if [`output.linkHeaderPreload`](configuration#output) is enabled, dynamically rendered pages use the [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead. The method is called with each file that was found at build time while constructing the code chunks — so if you for example have `import './styles.css` in your `+page.svelte`, `preload` will be called with the resolved path to that CSS file when visiting that page. Note that in dev mode `preload` is _not_ called, since it depends on analysis that happens at build time. Preloading can improve performance by downloading assets sooner, but it can also hurt if too much is downloaded unnecessarily. By default, `js` and `css` files will be preloaded. `asset` files are not preloaded at all currently, but we may add this later after evaluating feedback.
+- `preload(input: { type: 'js' | 'css', path: string } | { type: 'font' | 'asset', path: string, name: string }): boolean` — determines which files should be preloaded. Files are preloaded via `` tags added to the `` tag; if [`output.linkHeaderPreload`](configuration#output) is enabled, dynamically rendered pages use the [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead. The method is called with each file that was found at build time while constructing the code chunks — so if you for example have `import './styles.css` in your `+page.svelte`, `preload` will be called with the resolved path to that CSS file when visiting that page. Note that in dev mode `preload` is _not_ called, since it depends on analysis that happens at build time. Preloading can improve performance by downloading assets sooner, but it can also hurt if too much is downloaded unnecessarily. By default, `js` and `css` files will be preloaded. `asset` files are not preloaded at all currently, but we may add this later after evaluating feedback. `font` and `asset` files also receive `name`, the file name before hashing, so that a filter can match on it instead of the hashed path. Characters that can't appear in a URL are rewritten in the output, so a font saved as `inter+bold.woff2` has a `name` of `inter_bold.woff2`.
```js
/// file: src/hooks.server.js
diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts
index 8b493da6337a..cc24972fa6da 100644
--- a/packages/kit/src/exports/public.d.ts
+++ b/packages/kit/src/exports/public.d.ts
@@ -1732,9 +1732,17 @@ export interface ResolveOptions {
* `` tag; if `output.linkHeaderPreload` is enabled, dynamically rendered pages use the
* [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead.
* By default, `js` and `css` files will be preloaded.
+ *
+ * `font` and `asset` files also receive `name`, the source file name before hashing, so that a
+ * filter can match on it instead of the hashed path. `js` and `css` files are bundled and have no
+ * single source file name.
* @param input the type of the file and its path
*/
- preload?: (input: { type: 'font' | 'css' | 'js' | 'asset'; path: string }) => boolean;
+ preload?: (
+ input:
+ | { type: 'css' | 'js'; path: string }
+ | { type: 'font' | 'asset'; path: string; name: string }
+ ) => boolean;
}
export interface RouteDefinition {
diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js
index c63329967881..3df91819353f 100644
--- a/packages/kit/src/runtime/server/page/render.js
+++ b/packages/kit/src/runtime/server/page/render.js
@@ -290,6 +290,19 @@ export async function render_response({
return `${assets}/${path}`;
};
+ /**
+ * see the `output.preloadStrategy` option for details on why we have multiple options here
+ * @param {string} path
+ * @param {string[]} attributes
+ */
+ const add_preload = (path, attributes) => {
+ if (options.link_header_preload && !state.prerendering) {
+ link_headers.add(`<${encodeURI(path)}>; ${attributes.join('; ')}; nopush`);
+ } else {
+ head.add_link_tag(path, attributes);
+ }
+ };
+
const style = client?.inline
? client.inline?.style
: Array.from(inline_styles.values()).join('\n');
@@ -325,21 +338,12 @@ export async function render_response({
for (const dep of fonts) {
const path = prefixed(dep);
- if (resolve_opts.preload({ type: 'font', path })) {
- const ext = dep.slice(dep.lastIndexOf('.') + 1);
+ // assets are emitted as `[name].[hash][extname]`
+ const name = dep.slice(dep.lastIndexOf('/') + 1).replace(/\.[^.]+(?=\.[^.]+$)/, '');
+ const ext = name.slice(name.lastIndexOf('.') + 1);
- if (options.link_header_preload && !state.prerendering) {
- link_headers.add(
- `<${encodeURI(path)}>; rel="preload"; as="font"; type="font/${ext}"; crossorigin; nopush`
- );
- } else {
- head.add_link_tag(path, [
- 'rel="preload"',
- 'as="font"',
- `type="font/${ext}"`,
- 'crossorigin'
- ]);
- }
+ if (resolve_opts.preload({ type: 'font', path, name })) {
+ add_preload(path, ['rel="preload"', 'as="font"', `type="font/${ext}"`, 'crossorigin']);
}
}
@@ -368,23 +372,12 @@ export async function render_response({
}
if (!client.inline) {
- const included_modulepreloads = Array.from(modulepreloads, (dep) => prefixed(dep)).filter(
- (path) => resolve_opts.preload({ type: 'js', path })
- );
-
- /** @type {(path: string) => void} */
- let add_preload;
+ for (const dep of modulepreloads) {
+ const path = prefixed(dep);
- // see the output.preloadStrategy option for details on why we have multiple options here
- if (options.link_header_preload && !state.prerendering) {
- add_preload = (path) =>
- link_headers.add(`<${encodeURI(path)}>; rel="modulepreload"; nopush`);
- } else {
- add_preload = (path) => head.add_link_tag(path, ['rel="modulepreload"']);
- }
-
- for (const path of included_modulepreloads) {
- add_preload(path);
+ if (resolve_opts.preload({ type: 'js', path })) {
+ add_preload(path, ['rel="modulepreload"']);
+ }
}
}
diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts
index b35569cdfc29..600063d2c12b 100644
--- a/packages/kit/types/index.d.ts
+++ b/packages/kit/types/index.d.ts
@@ -1702,9 +1702,17 @@ declare module '@sveltejs/kit' {
* `` tag; if `output.linkHeaderPreload` is enabled, dynamically rendered pages use the
* [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead.
* By default, `js` and `css` files will be preloaded.
+ *
+ * `font` and `asset` files also receive `name`, the source file name before hashing, so that a
+ * filter can match on it instead of the hashed path. `js` and `css` files are bundled and have no
+ * single source file name.
* @param input the type of the file and its path
*/
- preload?: (input: { type: 'font' | 'css' | 'js' | 'asset'; path: string }) => boolean;
+ preload?: (
+ input:
+ | { type: 'css' | 'js'; path: string }
+ | { type: 'font' | 'asset'; path: string; name: string }
+ ) => boolean;
}
export interface RouteDefinition {
From be0eacdf7fcee0775ad970a4f297e4aeee14b9f1 Mon Sep 17 00:00:00 2001
From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com>
Date: Mon, 20 Jul 2026 15:47:27 -0400
Subject: [PATCH 2/8] test: cover `name` in the preload filter
---
packages/kit/test/apps/basics/src/hooks.server.js | 4 ++--
packages/kit/test/apps/basics/test/server.test.js | 1 +
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/packages/kit/test/apps/basics/src/hooks.server.js b/packages/kit/test/apps/basics/src/hooks.server.js
index dc20c948692c..b6eb4d00a107 100644
--- a/packages/kit/test/apps/basics/src/hooks.server.js
+++ b/packages/kit/test/apps/basics/src/hooks.server.js
@@ -193,8 +193,8 @@ export const handle = sequence(
}
return resolve(event, {
- // needed for asset-preload tests
- preload: () => true
+ // needed for asset-preload tests, which assert `name` is the unhashed file name
+ preload: (input) => input.type !== 'font' || input.name === 'shlop.woff2'
});
}
);
diff --git a/packages/kit/test/apps/basics/test/server.test.js b/packages/kit/test/apps/basics/test/server.test.js
index f6890b012d33..b0054d2b7ecc 100644
--- a/packages/kit/test/apps/basics/test/server.test.js
+++ b/packages/kit/test/apps/basics/test/server.test.js
@@ -1492,6 +1492,7 @@ test.describe('asset preload', () => {
expect(body).toContain('rel="modulepreload"');
expect(body).toContain('as="font"');
+ expect(body).toMatch(/href="[^"]+\/shlop\.[^".]+\.woff2"/);
});
});
From 46550e086641ed90f4e7c08f03029a8ca160fea5 Mon Sep 17 00:00:00 2001
From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com>
Date: Mon, 20 Jul 2026 16:15:19 -0400
Subject: [PATCH 3/8] chore: fix stale preloadStrategy comment
---
packages/kit/src/runtime/server/page/render.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js
index 3df91819353f..72767a0ca352 100644
--- a/packages/kit/src/runtime/server/page/render.js
+++ b/packages/kit/src/runtime/server/page/render.js
@@ -291,7 +291,7 @@ export async function render_response({
};
/**
- * see the `output.preloadStrategy` option for details on why we have multiple options here
+ * see the `output.linkHeaderPreload` option for details on why we have multiple options here
* @param {string} path
* @param {string[]} attributes
*/
From e25a23660bd9f567c9e84de225f2409a95d4e85b Mon Sep 17 00:00:00 2001
From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com>
Date: Mon, 20 Jul 2026 16:15:19 -0400
Subject: [PATCH 4/8] docs: correct the description of name
---
documentation/docs/30-advanced/20-hooks.md | 2 +-
packages/kit/src/exports/public.d.ts | 7 ++++---
packages/kit/types/index.d.ts | 7 ++++---
3 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/documentation/docs/30-advanced/20-hooks.md b/documentation/docs/30-advanced/20-hooks.md
index 621555511f1c..ac300e5303a8 100644
--- a/documentation/docs/30-advanced/20-hooks.md
+++ b/documentation/docs/30-advanced/20-hooks.md
@@ -45,7 +45,7 @@ You can define multiple `handle` functions and execute them with the [`sequence`
- `transformPageChunk(opts: { html: string, done: boolean }): MaybePromise` — applies custom transforms to HTML. If `done` is true, it's the final chunk. Chunks are not guaranteed to be well-formed HTML (they could include an element's opening tag but not its closing tag, for example) but they will always be split at sensible boundaries such as `%sveltekit.head%` or layout/page components.
- `filterSerializedResponseHeaders(name: string, value: string): boolean` — determines which headers should be included in serialized responses when a `load` function loads a resource with `fetch`. By default, none will be included.
-- `preload(input: { type: 'js' | 'css', path: string } | { type: 'font' | 'asset', path: string, name: string }): boolean` — determines which files should be preloaded. Files are preloaded via `` tags added to the `` tag; if [`output.linkHeaderPreload`](configuration#output) is enabled, dynamically rendered pages use the [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead. The method is called with each file that was found at build time while constructing the code chunks — so if you for example have `import './styles.css` in your `+page.svelte`, `preload` will be called with the resolved path to that CSS file when visiting that page. Note that in dev mode `preload` is _not_ called, since it depends on analysis that happens at build time. Preloading can improve performance by downloading assets sooner, but it can also hurt if too much is downloaded unnecessarily. By default, `js` and `css` files will be preloaded. `asset` files are not preloaded at all currently, but we may add this later after evaluating feedback. `font` and `asset` files also receive `name`, the file name before hashing, so that a filter can match on it instead of the hashed path. Characters that can't appear in a URL are rewritten in the output, so a font saved as `inter+bold.woff2` has a `name` of `inter_bold.woff2`.
+- `preload(input: { type: 'js' | 'css', path: string } | { type: 'font' | 'asset', path: string, name: string }): boolean` — determines which files should be preloaded. Files are preloaded via `` tags added to the `` tag; if [`output.linkHeaderPreload`](configuration#output) is enabled, dynamically rendered pages use the [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead. The method is called with each file that was found at build time while constructing the code chunks — so if you for example have `import './styles.css` in your `+page.svelte`, `preload` will be called with the resolved path to that CSS file when visiting that page. Note that in dev mode `preload` is _not_ called, since it depends on analysis that happens at build time. Preloading can improve performance by downloading assets sooner, but it can also hurt if too much is downloaded unnecessarily. By default, `js` and `css` files will be preloaded. `asset` files are not preloaded at all currently, but we may add this later after evaluating feedback. For `font` and `asset` files, `input` also has a `name` property, the file name before hashing, so that a filter can match on it instead of the hashed path. Some characters are replaced in emitted file names, so a font saved as `inter+bold.woff2` has a `name` of `inter_bold.woff2`.
```js
/// file: src/hooks.server.js
diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts
index cc24972fa6da..e0c91f4cb173 100644
--- a/packages/kit/src/exports/public.d.ts
+++ b/packages/kit/src/exports/public.d.ts
@@ -1733,9 +1733,10 @@ export interface ResolveOptions {
* [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead.
* By default, `js` and `css` files will be preloaded.
*
- * `font` and `asset` files also receive `name`, the source file name before hashing, so that a
- * filter can match on it instead of the hashed path. `js` and `css` files are bundled and have no
- * single source file name.
+ * For `font` and `asset` files, `input` also has a `name` property, the file name before hashing,
+ * so that a filter can match on it instead of the hashed path. Some characters are replaced in
+ * emitted file names, so a font saved as `inter+bold.woff2` has a `name` of `inter_bold.woff2`.
+ * `js` and `css` files are bundled and have no single source file name.
* @param input the type of the file and its path
*/
preload?: (
diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts
index 600063d2c12b..92e6ef953b8f 100644
--- a/packages/kit/types/index.d.ts
+++ b/packages/kit/types/index.d.ts
@@ -1703,9 +1703,10 @@ declare module '@sveltejs/kit' {
* [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead.
* By default, `js` and `css` files will be preloaded.
*
- * `font` and `asset` files also receive `name`, the source file name before hashing, so that a
- * filter can match on it instead of the hashed path. `js` and `css` files are bundled and have no
- * single source file name.
+ * For `font` and `asset` files, `input` also has a `name` property, the file name before hashing,
+ * so that a filter can match on it instead of the hashed path. Some characters are replaced in
+ * emitted file names, so a font saved as `inter+bold.woff2` has a `name` of `inter_bold.woff2`.
+ * `js` and `css` files are bundled and have no single source file name.
* @param input the type of the file and its path
*/
preload?: (
From 22364b826cd2773ef28d8a8ee575256a73d95eee Mon Sep 17 00:00:00 2001
From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com>
Date: Mon, 20 Jul 2026 16:15:19 -0400
Subject: [PATCH 5/8] test: cover dotted font names
---
.../kit/test/apps/basics/src/hooks.server.js | 3 ++-
.../src/routes/asset-preload/shlop.var.woff2 | Bin 0 -> 28484 bytes
.../basics/src/routes/asset-preload/styles.css | 6 ++++++
.../kit/test/apps/basics/test/server.test.js | 1 +
4 files changed, 9 insertions(+), 1 deletion(-)
create mode 100644 packages/kit/test/apps/basics/src/routes/asset-preload/shlop.var.woff2
diff --git a/packages/kit/test/apps/basics/src/hooks.server.js b/packages/kit/test/apps/basics/src/hooks.server.js
index b6eb4d00a107..594b0b4f725c 100644
--- a/packages/kit/test/apps/basics/src/hooks.server.js
+++ b/packages/kit/test/apps/basics/src/hooks.server.js
@@ -194,7 +194,8 @@ export const handle = sequence(
return resolve(event, {
// needed for asset-preload tests, which assert `name` is the unhashed file name
- preload: (input) => input.type !== 'font' || input.name === 'shlop.woff2'
+ preload: (input) =>
+ input.type !== 'font' || ['shlop.woff2', 'shlop.var.woff2'].includes(input.name)
});
}
);
diff --git a/packages/kit/test/apps/basics/src/routes/asset-preload/shlop.var.woff2 b/packages/kit/test/apps/basics/src/routes/asset-preload/shlop.var.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..95964213afa74b6ecc3a30b956bff34e84d14f3f
GIT binary patch
literal 28484
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