[{"data":1,"prerenderedAt":1731},["ShallowReactive",2],{"navigation_docs":3,"-get-started-upgrade":38,"-get-started-upgrade-surround":1726},[4,30,34],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fget-started","1.get-started",[9,13,17,21,25],{"title":10,"path":11,"stem":12},"Installation","\u002Fget-started\u002Finstallation","1.get-started\u002F1.installation",{"title":14,"path":15,"stem":16},"Configuration","\u002Fget-started\u002Fconfiguration","1.get-started\u002F2.configuration",{"title":18,"path":19,"stem":20},"Usage","\u002Fget-started\u002Fusage","1.get-started\u002F3.usage",{"title":22,"path":23,"stem":24},"Providers","\u002Fget-started\u002Fproviders","1.get-started\u002F4.providers",{"title":26,"path":27,"stem":28},"Upgrade Guide","\u002Fget-started\u002Fupgrade","1.get-started\u002F5.upgrade",false,{"title":31,"path":32,"stem":33},"Advanced","\u002Fadvanced","2.advanced",{"title":35,"path":36,"stem":37},"Contributing","\u002Fcontributing","3.contributing",{"id":39,"title":26,"body":40,"description":1719,"extension":1720,"links":1721,"meta":1722,"navigation":1723,"path":27,"seo":1724,"stem":28,"__hash__":1725},"docs\u002F1.get-started\u002F5.upgrade.md",{"type":41,"value":42,"toc":1708},"minimark",[43,48,52,57,67,88,98,104,201,209,239,255,259,273,283,310,317,334,351,355,369,376,393,396,420,424,441,444,450,457,490,503,507,513,523,571,575,581,601,611,615,624,689,704,708,721,839,843,866,941,945,956,1024,1028,1045,1122,1130,1134,1146,1197,1201,1218,1222,1225,1233,1248,1257,1263,1346,1364,1367,1371,1381,1446,1450,1457,1646,1652,1655,1705],[44,45,47],"h2",{"id":46},"upgrading-to-v1","Upgrading to v1",[49,50,51],"p",{},"v1 follows v0.14, as v0.15 was never released. If you are on v0.14, everything in this section applies to you.",[53,54,56],"h3",{"id":55},"breaking-changes","Breaking Changes",[58,59,61,62,66],"h4",{"id":60},"the-default-400-700-weight-range-is-applied","The default ",[63,64,65],"code",{},"400 700"," weight range is applied",[49,68,69,76,77,80,81,83,84,87],{},[70,71,73],"a",{"href":72},"\u002Fget-started\u002Fconfiguration#weights",[63,74,75],{},"weights"," has always been documented as defaulting to ",[63,78,79],{},"['400 700']",", but the default was set on the wrong option and never reached the resolver, so families without an explicit ",[63,82,75],{}," were resolved at weight ",[63,85,86],{},"400"," alone. The documented default now takes effect.",[49,89,90,91,93,94,97],{},"A family you did not set ",[63,92,75],{}," on will resolve a bold face as well as a regular one, so you will see additional ",[63,95,96],{},"@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.",[49,99,100,101,103],{},"Set ",[63,102,75],{}," explicitly to go back to a single weight:",[105,106,111],"pre",{"className":107,"code":108,"language":109,"meta":110,"style":110},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  fonts: {\n    defaults: {\n      weights: [400],\n    },\n  },\n})\n","ts","",[63,112,113,137,150,160,180,186,192],{"__ignoreMap":110},[114,115,118,122,125,129,133],"span",{"class":116,"line":117},"line",1,[114,119,121],{"class":120},"s7zQu","export",[114,123,124],{"class":120}," default",[114,126,128],{"class":127},"s2Zo4"," defineNuxtConfig",[114,130,132],{"class":131},"sTEyZ","(",[114,134,136],{"class":135},"sMK4o","{\n",[114,138,140,144,147],{"class":116,"line":139},2,[114,141,143],{"class":142},"swJcz","  fonts",[114,145,146],{"class":135},":",[114,148,149],{"class":135}," {\n",[114,151,153,156,158],{"class":116,"line":152},3,[114,154,155],{"class":142},"    defaults",[114,157,146],{"class":135},[114,159,149],{"class":135},[114,161,163,166,168,171,174,177],{"class":116,"line":162},4,[114,164,165],{"class":142},"      weights",[114,167,146],{"class":135},[114,169,170],{"class":131}," [",[114,172,86],{"class":173},"sbssI",[114,175,176],{"class":131},"]",[114,178,179],{"class":135},",\n",[114,181,183],{"class":116,"line":182},5,[114,184,185],{"class":135},"    },\n",[114,187,189],{"class":116,"line":188},6,[114,190,191],{"class":135},"  },\n",[114,193,195,198],{"class":116,"line":194},7,[114,196,197],{"class":135},"}",[114,199,200],{"class":131},")\n",[58,202,204,205,208],{"id":203},"fonts-are-served-from-_nuxtfonts-in-vite-builds","Fonts are served from ",[63,206,207],{},"\u002F_nuxt\u002Ffonts"," in Vite builds",[49,210,211,212,215,216,219,220,223,224,227,228,231,232,235,236,238],{},"Production builds with the Vite builder now emit font files as Vite build assets under ",[63,213,214],{},"app.buildAssetsDir",", so they are served from ",[63,217,218],{},"\u002F_nuxt\u002Ffonts\u002F\u003Chash>.woff2"," rather than ",[63,221,222],{},"\u002F_fonts\u002F\u003Chash>.woff2",". Vite owns their URLs, which means ",[63,225,226],{},"app.cdnURL",", a relative ",[63,229,230],{},"app.baseURL"," and ",[63,233,234],{},"experimental.renderBuiltUrl"," now apply to fonts as they do to every other built asset. ",[63,237,226],{}," in particular was previously never applied.",[49,240,241,242,245,246,249,250,254],{},"The location of a font file is an implementation detail rather than a stable URL contract, so this may change again. If you have hard-coded ",[63,243,244],{},"\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 ",[63,247,248],{},"\u002F_fonts"," in development and with the webpack and rspack builders; see ",[70,251,253],{"href":252},"\u002Fadvanced#where-fonts-are-served-from","where fonts are served from",".",[58,256,258],{"id":257},"fonts-served-from-a-cdn-need-cors-headers","Fonts served from a CDN need CORS headers",[49,260,261,262,264,265,268,269,272],{},"If you set ",[63,263,226],{},", your fonts are now fetched from that CDN rather than from your own origin. Browsers always fetch fonts in CORS mode, so the CDN must respond with an ",[63,266,267],{},"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. Preload links for fonts carry the ",[63,270,271],{},"crossorigin"," attribute so the preloaded response is reused rather than fetched twice.",[58,274,276,279,280,208],{"id":275},"assetsprefix-is-relative-to-buildassetsdir-in-vite-builds",[63,277,278],{},"assets.prefix"," is relative to ",[63,281,282],{},"buildAssetsDir",[49,284,285,290,291,293,294,297,298,301,302,305,306,309],{},[70,286,288],{"href":287},"\u002Fget-started\u002Fconfiguration#assets",[63,289,278],{}," now names a directory inside ",[63,292,214],{}," in Vite production builds, and defaults to ",[63,295,296],{},"fonts",". Setting ",[63,299,300],{},"prefix: '\u002Fmy-fonts'"," serves fonts from ",[63,303,304],{},"\u002F_nuxt\u002Fmy-fonts"," rather than from ",[63,307,308],{},"\u002Fmy-fonts",". It remains a public path in development and with the webpack and rspack builders.",[58,311,313,316],{"id":312},"global-true-families-get-font-fallback-metrics",[63,314,315],{},"global: true"," families get font fallback metrics",[49,318,319,320,325,326,329,330,333],{},"A family declared with ",[70,321,323],{"href":322},"\u002Fget-started\u002Fconfiguration#global",[63,324,315],{}," previously got no fallback metrics at all, which made the fonts most likely to cause layout shift the ones Nuxt Fonts did least about. Fallbacks are now generated wherever Nuxt Fonts can see the family being used, so ",[63,327,328],{},"font-family: 'Anton'"," in your CSS becomes ",[63,331,332],{},"font-family: 'Anton', 'Anton Fallback: Arial', ..."," with the matching metric-override rules alongside it, exactly as it would for a family that wasn't declared globally. Usage Nuxt Fonts can't scan (an SVG, or a family chosen at runtime) is unaffected and continues to rely on the global stylesheet alone.",[49,335,336,337,339,340,346,347,350],{},"The ",[63,338,96],{}," rule for the family itself still comes from the global stylesheet and isn't duplicated, and preload hints are unchanged. If you don't want the fallback rules, set ",[70,341,343],{"href":342},"\u002Fget-started\u002Fconfiguration#fallbacks",[63,344,345],{},"fallbacks"," to ",[63,348,349],{},"[]"," for the family.",[58,352,354],{"id":353},"font-metadata-is-cached-per-project","Font metadata is cached per project",[49,356,357,358,361,362,368],{},"Font metadata and downloaded font files are now cached in ",[63,359,360],{},"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, and you can now configure the location with the new ",[70,363,365],{"href":364},"\u002Fget-started\u002Fconfiguration#cache",[63,366,367],{},"cache"," option.",[58,370,372,373,375],{"id":371},"injected-font-face-rules-are-minified-with-lightningcss","Injected ",[63,374,96],{}," rules are minified with lightningcss",[49,377,378,379,381,382,385,386,219,389,392],{},"Generated ",[63,380,96],{}," declarations were previously minified with esbuild unless you had opted into ",[63,383,384],{},"css.lightningcss",". They are now minified with lightningcss, so the exact serialisation of the CSS we inject may differ (for example ",[63,387,388],{},"local(Font Name)",[63,390,391],{},"local(\"Font Name\")","). This is cosmetic, but it will show up in snapshot tests.",[49,394,395],{},"lightningcss is an optional peer dependency, as its native binary is several megabytes. Nuxt v4.5 (with Vite 8) brings this in, but if you are using an earlier version of Nuxt, you will need to install it manually to enable css minification.",[105,397,402],{"className":398,"code":399,"filename":400,"language":401,"meta":110,"style":110},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install --save-dev lightningcss\n","Terminal","bash",[63,403,404],{"__ignoreMap":110},[114,405,406,410,414,417],{"class":116,"line":117},[114,407,409],{"class":408},"sBMFI","npm",[114,411,413],{"class":412},"sfazB"," install",[114,415,416],{"class":412}," --save-dev",[114,418,419],{"class":412}," lightningcss\n",[58,421,423],{"id":422},"font-failures-fail-production-builds","Font failures fail production builds",[49,425,426,432,433,436,437,440],{},[70,427,429],{"href":428},"\u002Fget-started\u002Fconfiguration#throwonerror",[63,430,431],{},"throwOnError"," now defaults to ",[63,434,435],{},"true"," outside of dev mode, so 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 ",[63,438,439],{},"provider"," on a family and that provider does not contain it.",[49,442,443],{},"A 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.",[49,445,100,446,449],{},[63,447,448],{},"throwOnError: false"," to restore the previous behaviour.",[58,451,453,454,456],{"id":452},"family-level-font-face-descriptors-now-apply-to-provider-fonts","Family-level ",[63,455,96],{}," descriptors now apply to provider fonts",[49,458,459,231,462,465,466,469,470,472,473,231,476,479,480,472,483,231,486,489],{},[63,460,461],{},"display",[63,463,464],{},"unicodeRange"," set on a family were previously only honoured for families you declared manually with ",[63,467,468],{},"src",", and were silently dropped for fonts resolved from a provider. They now apply in both cases. Descriptors other than ",[63,471,461],{},", ",[63,474,475],{},"weight",[63,477,478],{},"style"," (such as ",[63,481,482],{},"stretch",[63,484,485],{},"featureSettings",[63,487,488],{},"variationSettings",") are also no longer dropped from manually declared families.",[49,491,492,493,495,496,502],{},"If you set any of these options on a family and (perhaps unknowingly) relied on them being ignored, your generated CSS will change. Note that setting ",[63,494,464],{}," on a family marks it as subsetted, so it is no longer preloaded by default; set ",[70,497,499],{"href":498},"\u002Fget-started\u002Fconfiguration#preload",[63,500,501],{},"preload"," explicitly if you still want a preload link for it.",[53,504,506],{"id":505},"deprecations","Deprecations",[58,508,510],{"id":509},"experimentalprocesscssvariables",[63,511,512],{},"experimental.processCSSVariables",[49,514,515,518,519,522],{},[63,516,517],{},"fonts.experimental.processCSSVariables"," has moved to ",[63,520,521],{},"fonts.processCSSVariables",". The old location still works and now warns.",[105,524,526],{"className":107,"code":525,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    processCSSVariables: true,\n  },\n})\n",[63,527,528,540,548,561,565],{"__ignoreMap":110},[114,529,530,532,534,536,538],{"class":116,"line":117},[114,531,121],{"class":120},[114,533,124],{"class":120},[114,535,128],{"class":127},[114,537,132],{"class":131},[114,539,136],{"class":135},[114,541,542,544,546],{"class":116,"line":139},[114,543,143],{"class":142},[114,545,146],{"class":135},[114,547,149],{"class":135},[114,549,550,553,555,559],{"class":116,"line":152},[114,551,552],{"class":142},"    processCSSVariables",[114,554,146],{"class":135},[114,556,558],{"class":557},"sfNiH"," true",[114,560,179],{"class":135},[114,562,563],{"class":116,"line":162},[114,564,191],{"class":135},[114,566,567,569],{"class":116,"line":182},[114,568,197],{"class":135},[114,570,200],{"class":131},[53,572,574],{"id":573},"new-features","New Features",[58,576,578,580],{"id":577},"font-face-rules-are-injected-with-the-webpack-and-rspack-builders",[63,579,96],{}," rules are injected with the webpack and rspack builders",[49,582,583,584,231,587,590,591,594,595,597,598,600],{},"Font injection now works with ",[63,585,586],{},"@nuxt\u002Fwebpack-builder",[63,588,589],{},"@nuxt\u002Frspack-builder",". Previously our CSS transform ran after ",[63,592,593],{},"css-loader"," had already turned your stylesheets into JavaScript modules, so no ",[63,596,96],{}," rule was ever injected, and a family declared with ",[63,599,315],{}," failed the client build.",[49,602,603,604,606,607,254],{},"There's nothing to change on your side, but a build that silently shipped no web fonts now downloads them and serves them from ",[63,605,248],{},". See ",[70,608,610],{"href":609},"\u002Fadvanced#builder-support","builder support",[58,612,614],{"id":613},"subsetting-fonts-to-the-glyphs-you-use","Subsetting fonts to the glyphs you use",[49,616,617,623],{},[70,618,620],{"href":619},"\u002Fget-started\u002Fconfiguration#glyphs",[63,621,622],{},"glyphs"," 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.",[105,625,627],{"className":107,"code":626,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    defaults: {\n      glyphs: 'Handgloves & 0123',\n    },\n  },\n})\n",[63,628,629,641,649,657,675,679,683],{"__ignoreMap":110},[114,630,631,633,635,637,639],{"class":116,"line":117},[114,632,121],{"class":120},[114,634,124],{"class":120},[114,636,128],{"class":127},[114,638,132],{"class":131},[114,640,136],{"class":135},[114,642,643,645,647],{"class":116,"line":139},[114,644,143],{"class":142},[114,646,146],{"class":135},[114,648,149],{"class":135},[114,650,651,653,655],{"class":116,"line":152},[114,652,155],{"class":142},[114,654,146],{"class":135},[114,656,149],{"class":135},[114,658,659,662,664,667,670,673],{"class":116,"line":162},[114,660,661],{"class":142},"      glyphs",[114,663,146],{"class":135},[114,665,666],{"class":135}," '",[114,668,669],{"class":412},"Handgloves & 0123",[114,671,672],{"class":135},"'",[114,674,179],{"class":135},[114,676,677],{"class":116,"line":182},[114,678,185],{"class":135},[114,680,681],{"class":116,"line":188},[114,682,191],{"class":135},[114,684,685,687],{"class":116,"line":194},[114,686,197],{"class":135},[114,688,200],{"class":131},[49,690,691,692,700,701,703],{},"Where 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 ",[70,693,697],{"href":694,"rel":695},"https:\u002F\u002Fgithub.com\u002Fpapandreou\u002Fsubset-font",[696],"nofollow",[63,698,699],{},"subset-font"," package; we will offer to install it the first time you run Nuxt with ",[63,702,622],{}," set, or warn where we cannot ask, such as in CI, and fail the build before downloading any font that needs subsetting locally.",[58,705,707],{"id":706},"variable-font-axes","Variable font axes",[49,709,710,716,717,720],{},[70,711,713],{"href":712},"\u002Fget-started\u002Fconfiguration#variableaxis",[63,714,715],{},"variableAxis"," chooses the values a variable font is shipped at, for any OpenType axis rather than just ",[63,718,719],{},"wght",". Pin an axis to a single value, or narrow it to a range.",[105,722,724],{"className":107,"code":723,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    defaults: {\n      variableAxis: {\n        CASL: [1],\n        MONO: [{ min: 0, max: 1 }],\n      },\n    },\n  },\n})\n",[63,725,726,738,746,754,763,779,817,822,827,832],{"__ignoreMap":110},[114,727,728,730,732,734,736],{"class":116,"line":117},[114,729,121],{"class":120},[114,731,124],{"class":120},[114,733,128],{"class":127},[114,735,132],{"class":131},[114,737,136],{"class":135},[114,739,740,742,744],{"class":116,"line":139},[114,741,143],{"class":142},[114,743,146],{"class":135},[114,745,149],{"class":135},[114,747,748,750,752],{"class":116,"line":152},[114,749,155],{"class":142},[114,751,146],{"class":135},[114,753,149],{"class":135},[114,755,756,759,761],{"class":116,"line":162},[114,757,758],{"class":142},"      variableAxis",[114,760,146],{"class":135},[114,762,149],{"class":135},[114,764,765,768,770,772,775,777],{"class":116,"line":182},[114,766,767],{"class":142},"        CASL",[114,769,146],{"class":135},[114,771,170],{"class":131},[114,773,774],{"class":173},"1",[114,776,176],{"class":131},[114,778,179],{"class":135},[114,780,781,784,786,788,791,794,796,799,802,805,807,810,813,815],{"class":116,"line":188},[114,782,783],{"class":142},"        MONO",[114,785,146],{"class":135},[114,787,170],{"class":131},[114,789,790],{"class":135},"{",[114,792,793],{"class":142}," min",[114,795,146],{"class":135},[114,797,798],{"class":173}," 0",[114,800,801],{"class":135},",",[114,803,804],{"class":142}," max",[114,806,146],{"class":135},[114,808,809],{"class":173}," 1",[114,811,812],{"class":135}," }",[114,814,176],{"class":131},[114,816,179],{"class":135},[114,818,819],{"class":116,"line":194},[114,820,821],{"class":135},"      },\n",[114,823,825],{"class":116,"line":824},8,[114,826,185],{"class":135},[114,828,830],{"class":116,"line":829},9,[114,831,191],{"class":135},[114,833,835,837],{"class":116,"line":834},10,[114,836,197],{"class":135},[114,838,200],{"class":131},[58,840,842],{"id":841},"named-font-weights","Named font weights",[49,844,845,849,850,857,858,861,862,865],{},[70,846,847],{"href":72},[63,848,75],{}," accepts CSS keywords as well as numbers, and the ",[70,851,853,856],{"href":852},"\u002Fget-started\u002Fproviders#local",[63,854,855],{},"local"," provider"," recognises them in filenames, so ",[63,859,860],{},"MyFont-Bold.woff2"," is picked up as weight ",[63,863,864],{},"700",". Remote providers still expect numeric weights.",[105,867,869],{"className":107,"code":868,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    defaults: {\n      weights: ['medium', 'semibold'],\n    },\n  },\n})\n",[63,870,871,883,891,899,927,931,935],{"__ignoreMap":110},[114,872,873,875,877,879,881],{"class":116,"line":117},[114,874,121],{"class":120},[114,876,124],{"class":120},[114,878,128],{"class":127},[114,880,132],{"class":131},[114,882,136],{"class":135},[114,884,885,887,889],{"class":116,"line":139},[114,886,143],{"class":142},[114,888,146],{"class":135},[114,890,149],{"class":135},[114,892,893,895,897],{"class":116,"line":152},[114,894,155],{"class":142},[114,896,146],{"class":135},[114,898,149],{"class":135},[114,900,901,903,905,907,909,912,914,916,918,921,923,925],{"class":116,"line":162},[114,902,165],{"class":142},[114,904,146],{"class":135},[114,906,170],{"class":131},[114,908,672],{"class":135},[114,910,911],{"class":412},"medium",[114,913,672],{"class":135},[114,915,801],{"class":135},[114,917,666],{"class":135},[114,919,920],{"class":412},"semibold",[114,922,672],{"class":135},[114,924,176],{"class":131},[114,926,179],{"class":135},[114,928,929],{"class":116,"line":182},[114,930,185],{"class":135},[114,932,933],{"class":116,"line":188},[114,934,191],{"class":135},[114,936,937,939],{"class":116,"line":194},[114,938,197],{"class":135},[114,940,200],{"class":131},[58,942,944],{"id":943},"scanning-additional-local-font-directories","Scanning additional local font directories",[49,946,336,947,951,952,955],{},[70,948,949,856],{"href":852},[63,950,855],{}," can scan directories beyond ",[63,953,954],{},"public\u002F",", and reports the filenames it looked for when a family cannot be resolved.",[105,957,959],{"className":107,"code":958,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    local: {\n      dirs: ['assets\u002Ffonts'],\n    },\n  },\n})\n",[63,960,961,973,981,990,1010,1014,1018],{"__ignoreMap":110},[114,962,963,965,967,969,971],{"class":116,"line":117},[114,964,121],{"class":120},[114,966,124],{"class":120},[114,968,128],{"class":127},[114,970,132],{"class":131},[114,972,136],{"class":135},[114,974,975,977,979],{"class":116,"line":139},[114,976,143],{"class":142},[114,978,146],{"class":135},[114,980,149],{"class":135},[114,982,983,986,988],{"class":116,"line":152},[114,984,985],{"class":142},"    local",[114,987,146],{"class":135},[114,989,149],{"class":135},[114,991,992,995,997,999,1001,1004,1006,1008],{"class":116,"line":162},[114,993,994],{"class":142},"      dirs",[114,996,146],{"class":135},[114,998,170],{"class":131},[114,1000,672],{"class":135},[114,1002,1003],{"class":412},"assets\u002Ffonts",[114,1005,672],{"class":135},[114,1007,176],{"class":131},[114,1009,179],{"class":135},[114,1011,1012],{"class":116,"line":182},[114,1013,185],{"class":135},[114,1015,1016],{"class":116,"line":188},[114,1017,191],{"class":135},[114,1019,1020,1022],{"class":116,"line":194},[114,1021,197],{"class":135},[114,1023,200],{"class":131},[58,1025,1027],{"id":1026},"preloading-fonts-by-subset","Preloading fonts by subset",[49,1029,336,1030,1032,1033,1036,1037,1040,1041,1044],{},[63,1031,501],{}," option (on ",[63,1034,1035],{},"defaults"," and on individual ",[63,1038,1039],{},"families",") now accepts ",[63,1042,1043],{},"{ subsets: [...] }"," or a filter function, so you can preload just the subsets your app needs.",[105,1046,1048],{"className":107,"code":1047,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    defaults: {\n      preload: { subsets: ['latin'] },\n    },\n  },\n})\n",[63,1049,1050,1062,1070,1078,1108,1112,1116],{"__ignoreMap":110},[114,1051,1052,1054,1056,1058,1060],{"class":116,"line":117},[114,1053,121],{"class":120},[114,1055,124],{"class":120},[114,1057,128],{"class":127},[114,1059,132],{"class":131},[114,1061,136],{"class":135},[114,1063,1064,1066,1068],{"class":116,"line":139},[114,1065,143],{"class":142},[114,1067,146],{"class":135},[114,1069,149],{"class":135},[114,1071,1072,1074,1076],{"class":116,"line":152},[114,1073,155],{"class":142},[114,1075,146],{"class":135},[114,1077,149],{"class":135},[114,1079,1080,1083,1085,1088,1091,1093,1095,1097,1100,1102,1105],{"class":116,"line":162},[114,1081,1082],{"class":142},"      preload",[114,1084,146],{"class":135},[114,1086,1087],{"class":135}," {",[114,1089,1090],{"class":142}," subsets",[114,1092,146],{"class":135},[114,1094,170],{"class":131},[114,1096,672],{"class":135},[114,1098,1099],{"class":412},"latin",[114,1101,672],{"class":135},[114,1103,1104],{"class":131},"] ",[114,1106,1107],{"class":135},"},\n",[114,1109,1110],{"class":116,"line":182},[114,1111,185],{"class":135},[114,1113,1114],{"class":116,"line":188},[114,1115,191],{"class":135},[114,1117,1118,1120],{"class":116,"line":194},[114,1119,197],{"class":135},[114,1121,200],{"class":131},[49,1123,1124,1125,1129],{},"See ",[70,1126,1127],{"href":498},[63,1128,501],{}," for the full set of values.",[58,1131,1133],{"id":1132},"configurable-cache","Configurable cache",[49,1135,1136,1137,1142,1143,254],{},"You can now point the font cache at a directory of your choice, pass your own ",[70,1138,1141],{"href":1139,"rel":1140},"https:\u002F\u002Funstorage.unjs.io\u002F",[696],"unstorage"," instance, or disable persistent caching with ",[63,1144,1145],{},"cache: false",[105,1147,1149],{"className":107,"code":1148,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    cache: '.cache\u002Ffonts',\n  },\n})\n",[63,1150,1151,1163,1171,1187,1191],{"__ignoreMap":110},[114,1152,1153,1155,1157,1159,1161],{"class":116,"line":117},[114,1154,121],{"class":120},[114,1156,124],{"class":120},[114,1158,128],{"class":127},[114,1160,132],{"class":131},[114,1162,136],{"class":135},[114,1164,1165,1167,1169],{"class":116,"line":139},[114,1166,143],{"class":142},[114,1168,146],{"class":135},[114,1170,149],{"class":135},[114,1172,1173,1176,1178,1180,1183,1185],{"class":116,"line":152},[114,1174,1175],{"class":142},"    cache",[114,1177,146],{"class":135},[114,1179,666],{"class":135},[114,1181,1182],{"class":412},".cache\u002Ffonts",[114,1184,672],{"class":135},[114,1186,179],{"class":135},[114,1188,1189],{"class":116,"line":162},[114,1190,191],{"class":135},[114,1192,1193,1195],{"class":116,"line":182},[114,1194,197],{"class":135},[114,1196,200],{"class":131},[58,1198,1200],{"id":1199},"custom-css-variable-prefixes","Custom CSS variable prefixes",[49,1202,1203,1209,1210,1213,1214,1217],{},[70,1204,1206],{"href":1205},"\u002Fget-started\u002Fconfiguration#processcssvariables",[63,1207,1208],{},"processCSSVariables"," now accepts a custom prefix, so ",[63,1211,1212],{},"processCSSVariables: 'my-app'"," will process ",[63,1215,1216],{},"--my-app-*"," variables only.",[44,1219,1221],{"id":1220},"upgrading-to-v014","Upgrading to v0.14",[53,1223,56],{"id":1224},"breaking-changes-1",[58,1226,1228,1229,1232],{"id":1227},"default-font-format-is-now-woff2-only","Default font format is now ",[63,1230,1231],{},"woff2"," only",[49,1234,1235,1236,472,1238,472,1241,1244,1245,1247],{},"Previously, font providers could return multiple formats (e.g., ",[63,1237,1231],{},[63,1239,1240],{},"woff",[63,1242,1243],{},"truetype","). The default behavior now only resolves ",[63,1246,1231],{}," format fonts, which is universally supported in all modern browsers.",[49,1249,1250,1251,1253,1254,1256],{},"This means your rendered ",[63,1252,96],{}," declarations will typically have fewer ",[63,1255,468],{}," entries, reducing overall CSS size. In most cases this is a transparent improvement and requires no action.",[49,1258,1259,1260,146],{},"If you need to support legacy browsers that require other formats, you can configure this in your ",[63,1261,1262],{},"nuxt.config.ts",[105,1264,1266],{"className":107,"code":1265,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    defaults: {\n      formats: ['woff2', 'woff', 'ttf'],\n    },\n  },\n})\n",[63,1267,1268,1280,1288,1296,1332,1336,1340],{"__ignoreMap":110},[114,1269,1270,1272,1274,1276,1278],{"class":116,"line":117},[114,1271,121],{"class":120},[114,1273,124],{"class":120},[114,1275,128],{"class":127},[114,1277,132],{"class":131},[114,1279,136],{"class":135},[114,1281,1282,1284,1286],{"class":116,"line":139},[114,1283,143],{"class":142},[114,1285,146],{"class":135},[114,1287,149],{"class":135},[114,1289,1290,1292,1294],{"class":116,"line":152},[114,1291,155],{"class":142},[114,1293,146],{"class":135},[114,1295,149],{"class":135},[114,1297,1298,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1326,1328,1330],{"class":116,"line":162},[114,1299,1300],{"class":142},"      formats",[114,1302,146],{"class":135},[114,1304,170],{"class":131},[114,1306,672],{"class":135},[114,1308,1231],{"class":412},[114,1310,672],{"class":135},[114,1312,801],{"class":135},[114,1314,666],{"class":135},[114,1316,1240],{"class":412},[114,1318,672],{"class":135},[114,1320,801],{"class":135},[114,1322,666],{"class":135},[114,1324,1325],{"class":412},"ttf",[114,1327,672],{"class":135},[114,1329,176],{"class":131},[114,1331,179],{"class":135},[114,1333,1334],{"class":116,"line":182},[114,1335,185],{"class":135},[114,1337,1338],{"class":116,"line":188},[114,1339,191],{"class":135},[114,1341,1342,1344],{"class":116,"line":194},[114,1343,197],{"class":135},[114,1345,200],{"class":131},[49,1347,1348,1349,472,1352,472,1355,472,1358,472,1361,254],{},"The available format values are: ",[63,1350,1351],{},"'woff2'",[63,1353,1354],{},"'woff'",[63,1356,1357],{},"'ttf'",[63,1359,1360],{},"'otf'",[63,1362,1363],{},"'eot'",[53,1365,574],{"id":1366},"new-features-1",[58,1368,1370],{"id":1369},"font-format-resolution","Font format resolution",[49,1372,1373,1374,1377,1378,254],{},"You can now control which font formats are resolved via the new ",[63,1375,1376],{},"defaults.formats"," option. This defaults to ",[63,1379,1380],{},"['woff2']",[105,1382,1384],{"className":107,"code":1383,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    defaults: {\n      formats: ['woff2'],\n    },\n  },\n})\n",[63,1385,1386,1398,1406,1414,1432,1436,1440],{"__ignoreMap":110},[114,1387,1388,1390,1392,1394,1396],{"class":116,"line":117},[114,1389,121],{"class":120},[114,1391,124],{"class":120},[114,1393,128],{"class":127},[114,1395,132],{"class":131},[114,1397,136],{"class":135},[114,1399,1400,1402,1404],{"class":116,"line":139},[114,1401,143],{"class":142},[114,1403,146],{"class":135},[114,1405,149],{"class":135},[114,1407,1408,1410,1412],{"class":116,"line":152},[114,1409,155],{"class":142},[114,1411,146],{"class":135},[114,1413,149],{"class":135},[114,1415,1416,1418,1420,1422,1424,1426,1428,1430],{"class":116,"line":162},[114,1417,1300],{"class":142},[114,1419,146],{"class":135},[114,1421,170],{"class":131},[114,1423,672],{"class":135},[114,1425,1231],{"class":412},[114,1427,672],{"class":135},[114,1429,176],{"class":131},[114,1431,179],{"class":135},[114,1433,1434],{"class":116,"line":182},[114,1435,185],{"class":135},[114,1437,1438],{"class":116,"line":188},[114,1439,191],{"class":135},[114,1441,1442,1444],{"class":116,"line":194},[114,1443,197],{"class":135},[114,1445,200],{"class":131},[58,1447,1449],{"id":1448},"provider-specific-font-family-options","Provider-specific font family options",[49,1451,1452,1453,1456],{},"You can now pass provider-specific options when configuring individual font families using the new ",[63,1454,1455],{},"providerOptions"," property:",[105,1458,1460],{"className":107,"code":1459,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    families: [\n      {\n        name: 'My Font',\n        provider: 'google',\n        providerOptions: {\n          google: {\n            experimental: {\n              variableAxis: {\n                wdth: [['75', '100']],\n              },\n            },\n          },\n        },\n      },\n    ],\n  },\n})\n",[63,1461,1462,1474,1482,1492,1497,1513,1529,1538,1547,1556,1565,1597,1603,1609,1615,1621,1626,1634,1639],{"__ignoreMap":110},[114,1463,1464,1466,1468,1470,1472],{"class":116,"line":117},[114,1465,121],{"class":120},[114,1467,124],{"class":120},[114,1469,128],{"class":127},[114,1471,132],{"class":131},[114,1473,136],{"class":135},[114,1475,1476,1478,1480],{"class":116,"line":139},[114,1477,143],{"class":142},[114,1479,146],{"class":135},[114,1481,149],{"class":135},[114,1483,1484,1487,1489],{"class":116,"line":152},[114,1485,1486],{"class":142},"    families",[114,1488,146],{"class":135},[114,1490,1491],{"class":131}," [\n",[114,1493,1494],{"class":116,"line":162},[114,1495,1496],{"class":135},"      {\n",[114,1498,1499,1502,1504,1506,1509,1511],{"class":116,"line":182},[114,1500,1501],{"class":142},"        name",[114,1503,146],{"class":135},[114,1505,666],{"class":135},[114,1507,1508],{"class":412},"My Font",[114,1510,672],{"class":135},[114,1512,179],{"class":135},[114,1514,1515,1518,1520,1522,1525,1527],{"class":116,"line":188},[114,1516,1517],{"class":142},"        provider",[114,1519,146],{"class":135},[114,1521,666],{"class":135},[114,1523,1524],{"class":412},"google",[114,1526,672],{"class":135},[114,1528,179],{"class":135},[114,1530,1531,1534,1536],{"class":116,"line":194},[114,1532,1533],{"class":142},"        providerOptions",[114,1535,146],{"class":135},[114,1537,149],{"class":135},[114,1539,1540,1543,1545],{"class":116,"line":824},[114,1541,1542],{"class":142},"          google",[114,1544,146],{"class":135},[114,1546,149],{"class":135},[114,1548,1549,1552,1554],{"class":116,"line":829},[114,1550,1551],{"class":142},"            experimental",[114,1553,146],{"class":135},[114,1555,149],{"class":135},[114,1557,1558,1561,1563],{"class":116,"line":834},[114,1559,1560],{"class":142},"              variableAxis",[114,1562,146],{"class":135},[114,1564,149],{"class":135},[114,1566,1568,1571,1573,1576,1578,1581,1583,1585,1587,1590,1592,1595],{"class":116,"line":1567},11,[114,1569,1570],{"class":142},"                wdth",[114,1572,146],{"class":135},[114,1574,1575],{"class":131}," [[",[114,1577,672],{"class":135},[114,1579,1580],{"class":412},"75",[114,1582,672],{"class":135},[114,1584,801],{"class":135},[114,1586,666],{"class":135},[114,1588,1589],{"class":412},"100",[114,1591,672],{"class":135},[114,1593,1594],{"class":131},"]]",[114,1596,179],{"class":135},[114,1598,1600],{"class":116,"line":1599},12,[114,1601,1602],{"class":135},"              },\n",[114,1604,1606],{"class":116,"line":1605},13,[114,1607,1608],{"class":135},"            },\n",[114,1610,1612],{"class":116,"line":1611},14,[114,1613,1614],{"class":135},"          },\n",[114,1616,1618],{"class":116,"line":1617},15,[114,1619,1620],{"class":135},"        },\n",[114,1622,1624],{"class":116,"line":1623},16,[114,1625,821],{"class":135},[114,1627,1629,1632],{"class":116,"line":1628},17,[114,1630,1631],{"class":131},"    ]",[114,1633,179],{"class":135},[114,1635,1637],{"class":116,"line":1636},18,[114,1638,191],{"class":135},[114,1640,1642,1644],{"class":116,"line":1641},19,[114,1643,197],{"class":135},[114,1645,200],{"class":131},[58,1647,1649,1651],{"id":1648},"throwonerror-option",[63,1650,431],{}," option",[49,1653,1654],{},"You can now configure whether font resolution errors should throw or just warn:",[105,1656,1658],{"className":107,"code":1657,"language":109,"meta":110,"style":110},"export default defineNuxtConfig({\n  fonts: {\n    throwOnError: true, \u002F\u002F default: false\n  },\n})\n",[63,1659,1660,1672,1680,1695,1699],{"__ignoreMap":110},[114,1661,1662,1664,1666,1668,1670],{"class":116,"line":117},[114,1663,121],{"class":120},[114,1665,124],{"class":120},[114,1667,128],{"class":127},[114,1669,132],{"class":131},[114,1671,136],{"class":135},[114,1673,1674,1676,1678],{"class":116,"line":139},[114,1675,143],{"class":142},[114,1677,146],{"class":135},[114,1679,149],{"class":135},[114,1681,1682,1685,1687,1689,1691],{"class":116,"line":152},[114,1683,1684],{"class":142},"    throwOnError",[114,1686,146],{"class":135},[114,1688,558],{"class":557},[114,1690,801],{"class":135},[114,1692,1694],{"class":1693},"sHwdD"," \u002F\u002F default: false\n",[114,1696,1697],{"class":116,"line":162},[114,1698,191],{"class":135},[114,1700,1701,1703],{"class":116,"line":182},[114,1702,197],{"class":135},[114,1704,200],{"class":131},[478,1706,1707],{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":110,"searchDepth":139,"depth":139,"links":1709},[1710,1715],{"id":46,"depth":139,"text":47,"children":1711},[1712,1713,1714],{"id":55,"depth":152,"text":56},{"id":505,"depth":152,"text":506},{"id":573,"depth":152,"text":574},{"id":1220,"depth":139,"text":1221,"children":1716},[1717,1718],{"id":1224,"depth":152,"text":56},{"id":1366,"depth":152,"text":574},"Breaking changes and migration steps when upgrading to the latest version of @nuxt\u002Ffonts.","md",null,{},true,{"title":26,"description":1719},"QNwDNBhd4U7z4VGzt_OXgGLvkgxXFILwazM_UPQBvOI",[1727,1729],{"title":22,"path":23,"stem":24,"description":1728,"children":-1},"Font providers are designed to be pluggable and extensible, so no matter your setup you should be able to use an existing provider or write your own.",{"title":31,"path":32,"stem":33,"description":1730,"children":-1},"Find out how Nuxt Fonts works behind the scenes to optimize fonts in your project.",1790555541535]