[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"github-release-repo-nuxt-fonts":3,"$f2v3tzw7dti6zg":-1,"github-release-repo-nuxt-fonts-page-1":18},{"project":4,"relatedArticles":17},{"id":5,"name":6,"owner":7,"repo":8,"url":9,"firstPublishedAt":10,"releaseCount":11,"tags":12},"019d75be-cf05-755b-ada6-4e2ab1570b77","Nuxt Fonts","nuxt","fonts","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts","2026-10-11T13:07:26.000Z",2,[13],{"color":14,"id":15,"name":16,"slug":7},"#41DC82","019d75ad-5b60-75ca-9027-363caa1d5e2a","Nuxt",[],{"items":19,"page":49,"pageSize":50,"totalCount":11},[20,36],{"body":21,"createdAt":22,"githubId":23,"htmlUrl":24,"id":25,"isPrerelease":26,"isPublished":27,"name":28,"projectId":5,"projectName":6,"projectOwner":7,"projectRepo":8,"publishedAt":29,"summary":30,"tagName":28,"updatedAt":31,"displayName":32,"hasBreakingChanges":26,"tags":33,"version":35},"> v1.0.1 is the next patch release.\n\n## 👉 Changelog\n\n[compare changes](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcompare\u002Fv1.0.0...v1.0.1)\n\n### 📦 Build\n\n- prepare before prepack step ([`e2777f9`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fe2777f9))\n\n### ❤️ Contributors\n\n- Daniel Roe (@danielroe)","2026-10-11T16:00:04.067Z","409693430","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Freleases\u002Ftag\u002Fv1.0.1","01a12bb1-53e2-70f5-a78e-672083f4ed2f",false,true,"v1.0.1","2026-10-11T13:42:33.000Z","Nuxt Fonts v1.0.1 is a patch release that includes a preparation update before the prepack step. No new features or major fixes were introduced in this version.","2026-10-11T16:00:32.954Z","Nuxt Fonts v1.0.1",[34],{"color":14,"id":15,"name":16,"slug":7},"1.0.1",{"body":37,"createdAt":38,"githubId":39,"htmlUrl":40,"id":41,"isPrerelease":26,"isPublished":27,"name":42,"projectId":5,"projectName":6,"projectOwner":7,"projectRepo":8,"publishedAt":10,"summary":43,"tagName":42,"updatedAt":44,"displayName":45,"hasBreakingChanges":26,"tags":46,"version":48},"> v1.0.0 is the first stable release of Nuxt Fonts.\r\n\r\nNuxt Fonts has been in production use for over a year, and the underlying stack it is built on has now stabilised: [`unifont`](https:\u002F\u002Funifont.dev), [`fontaine`](https:\u002F\u002Fgithub.com\u002Funjs\u002Ffontaine) and [`fontless`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffontless) all reached v1 alongside this release.\r\n\r\n- `unifont` resolves font metadata from providers\r\n- `fontaine` uses that metadata to cut layout shift\r\n- `fontless` does the whole thing in Vite with zero config\r\n\r\n… and of course, `@nuxt\u002Ffonts` wraps all three and wires them into Nuxt.\r\n\r\nMost projects should be able to upgrade simply by bumping the version, but read on for full details...!\r\n\r\n## 🚨 Breaking (or significant) changes\r\n\r\n### Font metadata is cached per project\r\n\r\nFont metadata and downloaded font files are now cached in `node_modules\u002F.cache\u002Fnuxt\u002Ffonts\u002Fmeta` relative to your project root rather than to the directory you run Nuxt from. The first build after upgrading will re-resolve and re-download fonts.\r\n\r\nYou can now configure the location with the [`cache`](https:\u002F\u002Ffonts.nuxt.com\u002Fget-started\u002Fconfiguration#cache) option, pass your own [unstorage](https:\u002F\u002Funstorage.unjs.io\u002F) instance, or disable persistent caching with `cache: false`.\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    cache: '.cache\u002Ffonts',\r\n  },\r\n})\r\n```\r\n\r\n### Font failures fail production builds\r\n\r\n[`throwOnError`](https:\u002F\u002Ffonts.nuxt.com\u002Fget-started\u002Fconfiguration#throwonerror) now defaults to `true` outside of dev mode. Rather than producing a build with a missing font, the build fails when a provider errors, when a font file cannot be downloaded after retries, or when you set `provider` on a family and that provider does not contain it.\r\n\r\nA family that cannot be found by any provider still warns rather than failing, as does an unknown provider name, so fonts you declare yourself in CSS are unaffected.\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    throwOnError: false,\r\n  },\r\n})\r\n```\r\n\r\n### Family-level `@font-face` descriptors now apply to provider fonts\r\n\r\n`display` and `unicodeRange` set on a family were previously only honoured for families you declared manually with `src`, and were silently dropped for fonts resolved from a provider. They now apply in both cases. Descriptors other than `display`, `weight` and `style` (such as `stretch`, `featureSettings` and `variationSettings`) are also no longer dropped from manually declared families.\r\n\r\nIf you set any of these options on a family and relied on them being ignored, your generated CSS will change. Setting `unicodeRange` on a family marks it as subsetted, so it is no longer preloaded by default; set [`preload`](https:\u002F\u002Ffonts.nuxt.com\u002Fget-started\u002Fconfiguration#preload) explicitly if you still want a preload link for it.\r\n\r\n### Injected `@font-face` rules are minified with `lightningcss`\r\n\r\nGenerated `@font-face` declarations were previously minified with esbuild unless you had opted into `css.lightningcss`. They are now always minified with lightningcss, so the exact serialisation of the CSS we inject may differ (for example `local(Font Name)` rather than `local(\"Font Name\")`). This is cosmetic, but it will show up in snapshot tests.\r\n\r\n### The default `400 700` weight range is applied\r\n\r\n`weights` has always been documented as defaulting to `['400 700']`, but the default was set on the wrong option and never reached the resolver, so families without an explicit `weights` resolved at weight `400` alone. The documented default now takes effect ([#619](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fissues\u002F619)).\r\n\r\nA family you didn't set `weights` on will resolve a bold face as well as a regular one, so expect additional `@font-face` rules and an additional file downloaded per family. Text that silently fell back to a synthesised bold will now render in the real one.\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    defaults: {\r\n      weights: [400],\r\n    },\r\n  },\r\n})\r\n```\r\n\r\n### Fonts are served from `\u002F_nuxt\u002Ffonts` in Vite builds\r\n\r\nProduction builds with the Vite builder now emit font files as Vite build assets under `app.buildAssetsDir`, so they are served from `\u002F_nuxt\u002Ffonts\u002F\u003Chash>.woff2` rather than `\u002F_fonts\u002F\u003Chash>.woff2`. Vite owns their URLs, which means `app.cdnURL`, a relative `app.baseURL` and `experimental.renderBuiltUrl` all now apply to fonts as they do to every other built asset.\r\n\r\nThe location of a font file is an implementation detail rather than a stable URL contract. If you have hard-coded `\u002F_fonts\u002F` anywhere (a CDN rule, a CSP directive, a cache header, a test), point it at your build assets directory instead. Fonts are still served from `\u002F_fonts` in development and with the webpack and rspack builders.\r\n\r\n### `app.cdnURL` now applies to fonts\r\n\r\nThis follows from the change above. `cdnURL` was previously never applied to font URLs, so fonts were always served same-origin. They now come from your CDN.\r\n\r\n> [!IMPORTANT]\r\n> Browsers always fetch fonts in CORS mode, so the CDN must respond with an `Access-Control-Allow-Origin` header that covers your site. Without it, fonts that previously loaded fail silently and the browser falls back to the next family in the stack. If you set `cdnURL` and don't control the headers on it, check this before upgrading.\r\n\r\n### `assets.prefix` is relative to `buildAssetsDir` in Vite builds\r\n\r\n`assets.prefix` now names a directory inside `app.buildAssetsDir` in Vite production builds, and defaults to `fonts`. Setting `prefix: '\u002Fmy-fonts'` serves fonts from `\u002F_nuxt\u002Fmy-fonts` rather than from `\u002Fmy-fonts`. It remains a public path in development and with the webpack and rspack builders.\r\n\r\n### `global: true` families get font fallback metrics\r\n\r\n`global` is the escape hatch for fonts we can't detect from your CSS, but until now that meant the fonts most likely to cause layout shift were the ones we did least about: the `@font-face` went into a global stylesheet and no fallback metric overrides were generated at all.\r\n\r\nWe now generate those overrides at every usage site we can see, so `font-family: 'Anton'` in a component becomes `font-family: 'Anton', 'Anton Fallback: Arial', ...` with the matching `size-adjust` and `ascent-override` rules alongside it, exactly as it would for a family that wasn't declared globally. The `@font-face` rule itself still comes from the global stylesheet and isn't duplicated, and preload hints are unchanged. Usage we can't scan (an SVG, a family chosen at runtime) keeps working as before.\r\n\r\nSet `fallbacks: []` on the family if you don't want the fallback rules.\r\n\r\n### The `local` provider only scans layer `public\u002F` directories\r\n\r\nThe [`local` provider](https:\u002F\u002Ffonts.nuxt.com\u002Fget-started\u002Fproviders#local) previously scanned every directory in `nitro.publicAssets`, including those that modules register for their own files. It now scans only the `public\u002F` directory of your project and of each layer.\r\n\r\nIf you relied on fonts in another `nitro.publicAssets` directory, add it to [`local.dirs`](https:\u002F\u002Ffonts.nuxt.com\u002Fget-started\u002Fproviders#fonts-installed-from-npm):\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    local: {\r\n      dirs: ['..\u002Fsome-module\u002Ffonts'],\r\n    },\r\n  },\r\n})\r\n```\r\n\r\n## ⚠️ Deprecations\r\n\r\n### `experimental.processCSSVariables`\r\n\r\n`fonts.experimental.processCSSVariables` has moved to `fonts.processCSSVariables`. The old location still works and now warns.\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    processCSSVariables: true,\r\n  },\r\n})\r\n```\r\n\r\n### `fonts:public-asset-context`\r\n\r\nUse [`fonts:resolved`](https:\u002F\u002Ffonts.nuxt.com\u002Fadvanced#fontsresolved) instead. It reports each family as it is resolved, with the URL every font file is served from and a `readFont()` to read its contents, so there's no need to reconstruct paths from the asset context. (The old hook still works.)\r\n\r\n## ✨ Features\r\n\r\n### A new DevTools panel\r\n\r\nThe Fonts panel in [Nuxt DevTools](https:\u002F\u002Fdevtools.nuxt.com) has been rebuilt on `fontless`. It lists every family resolved for your app, the provider that served it, the faces generated for it, where each one is used, and any warnings raised while resolving it.\r\n\r\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F287f08a8-f92e-4a3d-a585-ab4ea80432db\r\n\r\n### webpack and rspack support\r\n\r\nNuxt Fonts now works with the webpack and rspack builders. Previously our CSS transform ran after `css-loader` had already turned stylesheets into JavaScript modules, so no `@font-face` rule was ever injected, and a family declared with `global: true` failed the client build outright.\r\n\r\nThe transform now runs immediately before `css-loader`, which means it sees your styles after Sass and PostCSS have run, so a family named only through a preprocessor variable is detected too. There's nothing to change on your side, but a build that silently shipped no web fonts will now download them and serve them from `\u002F_fonts`.\r\n\r\n### Arbitrary variable axes\r\n\r\nVariable font axes beyond `wght` now resolve from providers that publish them, so you can ask for `wdth`, `slnt`, `opsz` and more.\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    families: [\r\n      {\r\n        name: 'Roboto Flex',\r\n        provider: 'google',\r\n        providerOptions: {\r\n          google: {\r\n            experimental: {\r\n              variableAxis: { wdth: [['75', '100']] },\r\n            },\r\n          },\r\n        },\r\n      },\r\n    ],\r\n  },\r\n})\r\n```\r\n\r\n### Subsetting fonts to the glyphs you use\r\n\r\nThe new `glyphs` option reduces every font file we emit to the characters needed to render the text you give it, which can dramatically cut the bytes shipped for icon fonts and single-language sites.\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    defaults: {\r\n      glyphs: 'Handgloves & 0123',\r\n    },\r\n  },\r\n})\r\n```\r\n\r\nWhere a provider can subset server-side the characters are passed through to it, so the full file is never downloaded. Every other file is subsetted after download, which needs the [`subset-font`](https:\u002F\u002Fgithub.com\u002Fpapandreou\u002Fsubset-font) package; we'll offer to install it the first time you run Nuxt with `glyphs` set.\r\n\r\n> [!IMPORTANT]\r\n> Before enabling subsetting, make sure the font licence allows you to do so. Many do not.\r\n\r\n### Preloading by subset\r\n\r\n[`preload`](https:\u002F\u002Ffonts.nuxt.com\u002Fget-started\u002Fconfiguration#preload) (on `defaults` and on individual `families`) accepts `{ subsets: [...] }` or a filter function, so you can preload just the subsets your app needs.\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    defaults: {\r\n      preload: { subsets: ['latin'] },\r\n    },\r\n  },\r\n})\r\n```\r\n\r\n### Named font weights\r\n\r\n`weights` accepts CSS keywords (`normal`, `bold`, `light`, ...) in config, and the `local` provider recognises them in filenames, so `MyFont-Bold.woff2` is picked up as weight `700`.\r\n\r\n### Scanning additional local font directories\r\n\r\nThe `local` provider can scan directories beyond `public\u002F`, and now reports which filenames it looked for when a family cannot be resolved, which makes misnamed files much easier to debug.\r\n\r\n```ts\r\nexport default defineNuxtConfig({\r\n  fonts: {\r\n    local: {\r\n      paths: ['assets\u002Ffonts'],\r\n    },\r\n  },\r\n})\r\n```\r\n\r\n### Reuse resolved fonts from another module\r\n\r\nModules that need the fonts your app already uses - for example, to [render an OG image](https:\u002F\u002Fgithub.com\u002Fnuxt-modules\u002Fog-image\u002F) or a PDF - had to reverse-engineer internal build machinery to find them, then re-resolve and re-download the same families themselves.\r\n\r\nThe new `fonts:resolved` hook reports each family as it is resolved, with the URL every font file is served from and a `readFont()` to read its contents, so nothing has to be resolved or downloaded more than once.\r\n\r\n```ts\r\nconst files = new Map\u003Cstring, () => Promise\u003CBuffer>>()\r\n\r\nnuxt.hook('fonts:resolved', (font) => {\r\n  for (const file of font.files) {\r\n    files.set(file.url, file.readFont)\r\n  }\r\n})\r\n```\r\n\r\nListeners run while your stylesheets are transformed, so collect what you need and call `readFont()` later. See [the hook documentation](https:\u002F\u002Ffonts.nuxt.com\u002Fadvanced#fontsresolved).\r\n\r\n### Custom CSS variable prefixes\r\n\r\n[`processCSSVariables`](https:\u002F\u002Ffonts.nuxt.com\u002Fget-started\u002Fconfiguration#processcssvariables) accepts a custom prefix, so `processCSSVariables: 'my-app'` processes `--my-app-*` variables only.\r\n\r\n## 🩹 Fixes\r\n\r\n- Font asset URLs respect the app `baseURL` and a custom `cdnURL`\r\n- Inlined `@font-face` rules are deduplicated in the rendered HTML\r\n- Font downloads are retried before a build is failed\r\n- Local variable fonts with weight ranges resolve correctly\r\n- Fallback metrics are generated for fonts in the public directory\r\n- Nitro v3 and Nuxt 5 compatibility\r\n- Devtools UI works under a custom `baseURL` and with `@nuxt\u002Fdevtools` v4\r\n- Deprecated `experimental.processCSSVariables` now warns rather than being silently ignored\r\n- Dev font server errors are passed to the next middleware instead of hanging the request\r\n- Multiple `families` entries sharing a name are all applied\r\n- The `local` provider detects camel-cased variable font markers in filenames\r\n- Font faces injected into bundled CSS resolve their URLs correctly\r\n- Hoisted global font faces are minified\r\n- Fallbacks are not regenerated for already-transformed declarations\r\n- The `local` provider no longer scans `nitro.publicAssets` directories registered by modules\r\n\r\n## 🙏 Thank you\r\n\r\nThank you so much to everyone who has contributed to `@nuxt\u002Ffonts`, `unifont`, `fontaine` and `fontless` to get us here. ❤️\r\n\r\n## 🚀 How to upgrade\r\n\r\nAfter upgrading to the latest version, clear your font cache and rebuild:\r\n\r\n```bash\r\nrm -rf node_modules\u002F.cache\u002Fnuxt\u002Ffonts\r\n```\r\n\r\nPlease read the [upgrade guide](https:\u002F\u002Ffonts.nuxt.com\u002Fget-started\u002Fupgrade) for the full detail, and let me know how you get on! 🙏\r\n\r\n## 👉 Changelog\r\n\r\n[compare changes](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcompare\u002Fv0.14.0...v1.0.0)\r\n\r\n### 🚀 Enhancements\r\n\r\n- use devframe-based devtools from `fontless` (#937)\r\n- add `fonts:resolved` hook (#921)\r\n- ⚠️  serve fonts as vite build assets under `buildAssetsDir` (#918)\r\n- generate fallback metrics for `global` families where used (#915)\r\n- inject font faces under the webpack and rspack builders (#914)\r\n- support resolving variable font axes (#909)\r\n- **local:** accept named font weights in config and filename aliases ([`136ac36`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F136ac36))\r\n- **deps:** update `fontless` to `0.4.3` (#421)\r\n- subset downloaded fonts to the glyphs a family declares (#131)\r\n- **local:** report filenames looked for when a family can't be resolved (#895)\r\n- **npm:** resolve installed font packages with `resolve` + `exists` hooks (#894)\r\n- ⚠️  **deps:** update `fontless` and `unifont` (#887)\r\n- **local:** support scanning font files from additional directories (#876)\r\n- configurable font cache (#869)\r\n- ⚠️  **deps:** update `unifont`, `fontaine` and `fontless` (#868)\r\n\r\n### 🩹 Fixes\r\n\r\n- resolve urls of font faces injected into bundled css (#939)\r\n- minify hoisted global font faces ([`6103883`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F6103883))\r\n- don't regenerate fallbacks for already-transformed declarations ([`60d7904`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F60d7904))\r\n- **local:** only scan layer `public\u002F` directories (#938)\r\n- support multiple `families` entries with the same name ([`d7987a8`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fd7987a8))\r\n- **local:** detect camel-cased variable font markers (#931)\r\n- use explicit file extensions in relative imports (#930)\r\n- **local:** scan for font files during module setup (#929)\r\n- use `fontless` preload selection (#920)\r\n- fail before downloading fonts that need a missing `subset-font` ([`00436e1`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F00436e1))\r\n- respect user weights if provided ([`8b6d7f0`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F8b6d7f0))\r\n- apply the default `400 700` weight range (#619)\r\n- **local:** generate fallback metrics for public directory fonts (#171)\r\n- nitro v3 compatibility (#898)\r\n- warn when deprecated `experimental.processCSSVariables` is set (#892)\r\n- pass dev font server errors to the next middleware (#891)\r\n- deduplicate inlined `@font-face` rules in rendered html (#879)\r\n- retry font downloads and fail production builds on font errors (#877)\r\n- support local variable fonts with weight ranges (#794)\r\n- inline font faces from global stylesheets (#875)\r\n- prefix font asset URLs with app `baseURL` ([`1f13e79`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F1f13e79))\r\n- respect `baseURL` when serving devtools UI ([`918d036`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F918d036))\r\n- consider global fonts for preloading as well (#856)\r\n- **devtools:** use hook for compat with devtools v4 ([`05ae60c`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F05ae60c))\r\n- strip style queries when tracking fonts to preload (#872)\r\n- pass a real H3Event in storybook mode (#807)\r\n\r\n### 💅 Refactors\r\n\r\n- let `fontless` fill per-category fallback defaults (#893)\r\n- **client:** migrate away from devtools-ui-kit ([`ad5b781`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fad5b781))\r\n\r\n### 📖 Documentation\r\n\r\n- add docs for devtools panel and `fonts:resolved` ([`c9478ca`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fc9478ca))\r\n- document variable font usage and naming (#933)\r\n- note that non-default subsets need configuring (#932)\r\n- cover unicode ranges in `glyphs` and provider failure isolation ([`4b7a21b`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F4b7a21b))\r\n- correct some inaccuracies in the docs ([`823edb0`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F823edb0))\r\n- refresh the docs site for v1 (#919)\r\n- note that lightningcss minification needs the optional peer ([`8928fb0`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F8928fb0))\r\n- update upgrade guide ([`5f41ed3`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F5f41ed3))\r\n- document `global` as the escape hatch for undetectable font usage (#917)\r\n- drop mention of tailwindcss v3 ([`b764025`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fb764025))\r\n\r\n### 🏡 Chore\r\n\r\n- fix typecheck against the module stub ([`99bb608`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F99bb608))\r\n- pin nuxt 5 playground ([`7a46fde`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F7a46fde))\r\n- **client:** don't overwrite built client when running playground ([`bb36013`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fbb36013))\r\n- exempt first-party packages from pnpm `minimumReleaseAge` (#862)\r\n- replace `latest` ranges with caret ranges (#861)\r\n- migrate to pnpm v11 (#831)\r\n- migrate npm badges and links to npmx.dev ([`a5c61fb`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fa5c61fb))\r\n\r\n### ✅ Tests\r\n\r\n- tolerate per-file font face duplication in bundled css ([`a5a4dd9`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fa5a4dd9))\r\n- clear the font cache of every fixture and playground ([`7995bd1`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F7995bd1))\r\n- cover tailwind v4 `--default-font-family` theme variables (#890)\r\n- cover family-level font-face descriptor overrides (#888)\r\n- cover font URLs in inlined styles with a custom `cdnURL` (#880)\r\n- drop tailwindcss v3 ([`d7921fb`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fd7921fb))\r\n- use human readable font names in snapshots ([`d119be1`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fd119be1))\r\n- refresh snapshots + make resilient to vite 8 changes (#857)\r\n- update test assertions for vite 8 ([`16e87f6`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F16e87f6))\r\n- mock adobe api responses (#819)\r\n\r\n### 🤖 CI\r\n\r\n- use `pnpm\u002Fsetup` and `devEngines` (#907)\r\n- adopt uppt for release workflow (#866)\r\n- run ci for merge groups ([`8c3dd7f`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F8c3dd7f))\r\n- migrate agentscan-action to v2 ([`7dd7a38`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F7dd7a38))\r\n- add agent-scan workflow to flag bot-authored PRs ([`349b7ba`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F349b7ba))\r\n- rename workflow ([`8154aa6`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002F8154aa6))\r\n- avoid checkout for reproduction comment ([`ed921dc`](https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Fcommit\u002Fed921dc))\r\n\r\n### 🎉 New Contributors\r\n\r\n- Peter Uithoven (@peteruithoven)\r\n- Meliceanu (@Meliceanu)\r\n- Cynthia Rey (@cyyynthia)\r\n\r\n### ❤️ Contributors\r\n\r\n- Daniel Roe (@danielroe)\r\n- Harlan Wilton (@harlan-zw)\r\n- Peter Uithoven (@peteruithoven)\r\n- Meliceanu (@Meliceanu)\r\n- Cynthia Rey (@cyyynthia)","2026-10-11T16:00:04.075Z","409674004","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts\u002Freleases\u002Ftag\u002Fv1.0.0","01a12bb1-53e9-7522-abfa-7ddd4e011804","v1.0.0","Nuxt Fonts v1.0.0 marks its first stable release, integrating the latest versions of `unifont`, `fontaine`, and `fontless`. Key updates include caching font metadata per project, enforcing build failures on font errors, and improved handling of `@font-face` descriptors. Additionally, fonts are now served from `\u002F_nuxt\u002Ffonts` in Vite builds, with support for CDN URLs and enhanced configuration options.","2026-10-11T16:00:33.665Z","Nuxt Fonts v1.0.0",[47],{"color":14,"id":15,"name":16,"slug":7},"1.0.0",1,25]