[{"data":1,"prerenderedAt":415},["ShallowReactive",2],{"navigation_docs":3,"-docs-storage-nuxthub":77,"-docs-storage-nuxthub-surround":410},[4,19,41,63],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":18},"Getting Started","i-ph-rocket-launch-duotone","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10,14],{"title":11,"path":12,"stem":13},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F1.installation",{"title":15,"path":16,"stem":17},"Configuration","\u002Fdocs\u002Fgetting-started\u002Fconfiguration","docs\u002F1.getting-started\u002F2.configuration",false,{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":18},"Storage","i-ph-database-duotone","\u002Fdocs\u002Fstorage","docs\u002F2.storage",[25,29,33,37],{"title":26,"path":27,"stem":28},"Overview","\u002Fdocs\u002Fstorage\u002Foverview","docs\u002F2.storage\u002F1.overview",{"title":30,"path":31,"stem":32},"NuxtHub","\u002Fdocs\u002Fstorage\u002Fnuxthub","docs\u002F2.storage\u002F2.nuxthub",{"title":34,"path":35,"stem":36},"Nitro Storage","\u002Fdocs\u002Fstorage\u002Fnitro","docs\u002F2.storage\u002F3.nitro",{"title":38,"path":39,"stem":40},"Memory","\u002Fdocs\u002Fstorage\u002Fmemory","docs\u002F2.storage\u002F4.memory",{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":18},"Composables","i-ph-puzzle-piece-duotone","\u002Fdocs\u002Fcomposables","docs\u002F3.composables",[47,51,55,59],{"title":48,"path":49,"stem":50},"useFlag()","\u002Fdocs\u002Fcomposables\u002Fuse-flag","docs\u002F3.composables\u002F1.use-flag",{"title":52,"path":53,"stem":54},"useVariant()","\u002Fdocs\u002Fcomposables\u002Fuse-variant","docs\u002F3.composables\u002F2.use-variant",{"title":56,"path":57,"stem":58},"useAllFlags()","\u002Fdocs\u002Fcomposables\u002Fuse-all-flags","docs\u002F3.composables\u002F3.use-all-flags",{"title":60,"path":61,"stem":62},"useFlagsStatus()","\u002Fdocs\u002Fcomposables\u002Fuse-flags-status","docs\u002F3.composables\u002F4.use-flags-status",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":18},"Server","i-ph-cloud-duotone","\u002Fdocs\u002Fserver","docs\u002F4.server",[69,73],{"title":70,"path":71,"stem":72},"API Route","\u002Fdocs\u002Fserver\u002Fapi-route","docs\u002F4.server\u002F1.api-route",{"title":74,"path":75,"stem":76},"Server Utils","\u002Fdocs\u002Fserver\u002Fserver-utils","docs\u002F4.server\u002F2.server-utils",{"id":78,"title":30,"body":79,"description":404,"extension":405,"links":406,"meta":407,"navigation":201,"path":31,"seo":408,"stem":32,"__hash__":409},"docs\u002Fdocs\u002F2.storage\u002F2.nuxthub.md",{"type":80,"value":81,"toc":396},"minimark",[82,86,91,331,349,353,377,381,392],[83,84,85],"p",{},"The recommended storage backend. NuxtHub KV provides persistent key-value storage on Cloudflare with a single config line.",[87,88,90],"h2",{"id":89},"setup","Setup",[92,93,94,99,125,129],"steps",{},[95,96,98],"h3",{"id":97},"install-nuxthub","Install NuxtHub",[100,101,106],"pre",{"className":102,"code":103,"language":104,"meta":105,"style":105},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @nuxthub\u002Fcore\n","bash","",[107,108,109],"code",{"__ignoreMap":105},[110,111,114,118,122],"span",{"class":112,"line":113},"line",1,[110,115,117],{"class":116},"sBMFI","pnpm",[110,119,121],{"class":120},"sfazB"," add",[110,123,124],{"class":120}," @nuxthub\u002Fcore\n",[95,126,128],{"id":127},"configure","Configure",[100,130,135],{"className":131,"code":132,"filename":133,"language":134,"meta":105,"style":105},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@nuxthub\u002Fcore', '@adamkasper\u002Fnuxt-unleash'],\n\n  hub: {\n    kv: true,\n  },\n\n  unleash: {\n    url: 'https:\u002F\u002Fyour-proxy.example.com\u002Fapi\u002Ffrontend',\n    token: 'your-frontend-token',\n    appName: 'my-app',\n    storage: 'nuxthub',\n  },\n})\n","nuxt.config.ts","ts",[107,136,137,158,196,203,214,228,234,239,249,266,283,300,317,322],{"__ignoreMap":105},[110,138,139,143,146,150,154],{"class":112,"line":113},[110,140,142],{"class":141},"s7zQu","export",[110,144,145],{"class":141}," default",[110,147,149],{"class":148},"s2Zo4"," defineNuxtConfig",[110,151,153],{"class":152},"sTEyZ","(",[110,155,157],{"class":156},"sMK4o","{\n",[110,159,161,165,168,171,174,177,179,182,185,188,190,193],{"class":112,"line":160},2,[110,162,164],{"class":163},"swJcz","  modules",[110,166,167],{"class":156},":",[110,169,170],{"class":152}," [",[110,172,173],{"class":156},"'",[110,175,176],{"class":120},"@nuxthub\u002Fcore",[110,178,173],{"class":156},[110,180,181],{"class":156},",",[110,183,184],{"class":156}," '",[110,186,187],{"class":120},"@adamkasper\u002Fnuxt-unleash",[110,189,173],{"class":156},[110,191,192],{"class":152},"]",[110,194,195],{"class":156},",\n",[110,197,199],{"class":112,"line":198},3,[110,200,202],{"emptyLinePlaceholder":201},true,"\n",[110,204,206,209,211],{"class":112,"line":205},4,[110,207,208],{"class":163},"  hub",[110,210,167],{"class":156},[110,212,213],{"class":156}," {\n",[110,215,217,220,222,226],{"class":112,"line":216},5,[110,218,219],{"class":163},"    kv",[110,221,167],{"class":156},[110,223,225],{"class":224},"sfNiH"," true",[110,227,195],{"class":156},[110,229,231],{"class":112,"line":230},6,[110,232,233],{"class":156},"  },\n",[110,235,237],{"class":112,"line":236},7,[110,238,202],{"emptyLinePlaceholder":201},[110,240,242,245,247],{"class":112,"line":241},8,[110,243,244],{"class":163},"  unleash",[110,246,167],{"class":156},[110,248,213],{"class":156},[110,250,252,255,257,259,262,264],{"class":112,"line":251},9,[110,253,254],{"class":163},"    url",[110,256,167],{"class":156},[110,258,184],{"class":156},[110,260,261],{"class":120},"https:\u002F\u002Fyour-proxy.example.com\u002Fapi\u002Ffrontend",[110,263,173],{"class":156},[110,265,195],{"class":156},[110,267,269,272,274,276,279,281],{"class":112,"line":268},10,[110,270,271],{"class":163},"    token",[110,273,167],{"class":156},[110,275,184],{"class":156},[110,277,278],{"class":120},"your-frontend-token",[110,280,173],{"class":156},[110,282,195],{"class":156},[110,284,286,289,291,293,296,298],{"class":112,"line":285},11,[110,287,288],{"class":163},"    appName",[110,290,167],{"class":156},[110,292,184],{"class":156},[110,294,295],{"class":120},"my-app",[110,297,173],{"class":156},[110,299,195],{"class":156},[110,301,303,306,308,310,313,315],{"class":112,"line":302},12,[110,304,305],{"class":163},"    storage",[110,307,167],{"class":156},[110,309,184],{"class":156},[110,311,312],{"class":120},"nuxthub",[110,314,173],{"class":156},[110,316,195],{"class":156},[110,318,320],{"class":112,"line":319},13,[110,321,233],{"class":156},[110,323,325,328],{"class":112,"line":324},14,[110,326,327],{"class":156},"}",[110,329,330],{"class":152},")\n",[332,333,334,336,337,341,342,344,345,348],"warning",{},[107,335,176],{}," must be listed ",[338,339,340],"strong",{},"before"," ",[107,343,187],{}," in the ",[107,346,347],{},"modules"," array.",[87,350,352],{"id":351},"how-it-works","How It Works",[354,355,356,364,371,374],"ul",{},[357,358,359,360,363],"li",{},"Flags are stored in NuxtHub KV under the ",[107,361,362],{},"unleash:flags"," key",[357,365,366,367,370],{},"A TTL of ",[107,368,369],{},"refreshInterval * 10"," is set as a safety net (e.g., 150s with the default 15s refresh)",[357,372,373],{},"The refresh lock uses a separate key with a 5-second deduplication window",[357,375,376],{},"KV reads are fast and co-located with your Worker — no HTTP roundtrip",[87,378,380],{"id":379},"when-to-use","When to Use",[354,382,383,386,389],{},[357,384,385],{},"Deploying to Cloudflare Workers via NuxtHub",[357,387,388],{},"You want persistent cache that survives Worker restarts",[357,390,391],{},"You want zero-config storage",[393,394,395],"style",{},"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 .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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":105,"searchDepth":160,"depth":160,"links":397},[398,402,403],{"id":89,"depth":160,"text":90,"children":399},[400,401],{"id":97,"depth":198,"text":98},{"id":127,"depth":198,"text":128},{"id":351,"depth":160,"text":352},{"id":379,"depth":160,"text":380},"Use NuxtHub KV as the storage backend for feature flags.","md",null,{"icon":65},{"title":30,"description":404},"Va65mCZs-6VMhiRXZRxByww--IKml9j0jQw9fncxO90",[411,413],{"title":26,"path":27,"stem":28,"description":412,"children":-1},"How nuxt-unleash caches feature flags across different runtimes.",{"title":34,"path":35,"stem":36,"description":414,"children":-1},"Use any Nitro\u002Funstorage driver as the storage backend.",1775559945628]