[{"data":1,"prerenderedAt":1389},["ShallowReactive",2],{"navigation":3,"-guide-storage":234,"-guide-storage-surround":1384},[4,81,228],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Getting Started","/guide","1.guide/0.index",[9,11,16,21,26,31,36,41,46,51,56,61,66,71,76],{"title":5,"path":6,"stem":7,"icon":10},"ph:book-open-duotone",{"title":12,"path":13,"stem":14,"icon":15},"Migration Guide","/guide/migration","1.guide/00.migration","ri:arrow-right-up-line",{"title":17,"path":18,"stem":19,"icon":20},"Server Utils","/guide/utils","1.guide/1.utils","ri:tools-line",{"title":22,"path":23,"stem":24,"icon":25},"Tasks","/guide/tasks","1.guide/10.tasks","codicon:run-all",{"title":27,"path":28,"stem":29,"icon":30},"Server Routes","/guide/routing","1.guide/2.routing","ri:direction-line",{"title":32,"path":33,"stem":34,"icon":35},"WebSocket","/guide/websocket","1.guide/3.websocket","cib:socket-io",{"title":37,"path":38,"stem":39,"icon":40},"KV Storage","/guide/storage","1.guide/4.storage","carbon:datastore",{"title":42,"path":43,"stem":44,"icon":45},"SQL Database","/guide/database","1.guide/5.database","ri:database-2-line",{"title":47,"path":48,"stem":49,"icon":50},"Cache","/guide/cache","1.guide/6.cache","ri:speed-line",{"title":52,"path":53,"stem":54,"icon":55},"Fetch","/guide/fetch","1.guide/7.fetch","ri:global-line",{"title":57,"path":58,"stem":59,"icon":60},"Assets","/guide/assets","1.guide/8.assets","ri:image-2-line",{"title":62,"path":63,"stem":64,"icon":65},"Plugins","/guide/plugins","1.guide/9.plugins","ri:plug-line",{"title":67,"path":68,"stem":69,"icon":70},"Configuration","/guide/configuration","1.guide/97.configuration","ri:settings-3-line",{"title":72,"path":73,"stem":74,"icon":75},"TypeScript","/guide/typescript","1.guide/98.typescript","tabler:brand-typescript",{"title":77,"path":78,"stem":79,"icon":80},"Nightly Channel","/guide/nightly","1.guide/99.nightly","ri:moon-fill",{"title":82,"path":83,"stem":84,"children":85,"icon":87},"Overview","/deploy","2.deploy/0.index",[86,88,92,122,127],{"title":82,"path":83,"stem":84,"icon":87},"ri:upload-cloud-2-line",{"title":89,"path":90,"stem":91,"icon":55},"Edge Workers","/deploy/workers","2.deploy/1.workers",{"title":93,"path":94,"stem":95,"children":96,"page":121},"Runtimes","/deploy/runtimes","2.deploy/10.runtimes",[97,102,106,111,116],{"title":98,"path":99,"stem":100,"icon":101},"Node.js","/deploy/runtimes/node","2.deploy/10.runtimes/1.node","akar-icons:node-fill",{"title":103,"path":104,"stem":105,"icon":25},"Dir","/deploy/runtimes/_dir","2.deploy/10.runtimes/_dir",{"title":107,"path":108,"stem":109,"icon":110},"WinterJS","/deploy/runtimes/_winterjs","2.deploy/10.runtimes/_winterjs","game-icons:cold-heart",{"title":112,"path":113,"stem":114,"icon":115},"Bun","/deploy/runtimes/bun","2.deploy/10.runtimes/bun","simple-icons:bun",{"title":117,"path":118,"stem":119,"icon":120},"Deno","/deploy/runtimes/deno","2.deploy/10.runtimes/deno","simple-icons:deno",false,{"title":123,"path":124,"stem":125,"icon":126},"Custom Preset","/deploy/custom-presets","2.deploy/2.custom-presets","ri:file-code-line",{"title":128,"path":129,"stem":130,"children":131,"page":121},"Providers","/deploy/providers","2.deploy/20.providers",[132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224],{"title":103,"path":133,"stem":134,"icon":135},"/deploy/providers/_dir","2.deploy/20.providers/_dir","tdesign:cloud",{"title":137,"path":138,"stem":139},"Alwaysdata","/deploy/providers/alwaysdata","2.deploy/20.providers/alwaysdata",{"title":141,"path":142,"stem":143},"AWS Lambda","/deploy/providers/aws","2.deploy/20.providers/aws",{"title":145,"path":146,"stem":147},"AWS Amplify","/deploy/providers/aws-amplify","2.deploy/20.providers/aws-amplify",{"title":149,"path":150,"stem":151},"Azure","/deploy/providers/azure","2.deploy/20.providers/azure",{"title":153,"path":154,"stem":155},"Cleavr","/deploy/providers/cleavr","2.deploy/20.providers/cleavr",{"title":157,"path":158,"stem":159},"Cloudflare","/deploy/providers/cloudflare","2.deploy/20.providers/cloudflare",{"title":161,"path":162,"stem":163},"Deno Deploy","/deploy/providers/deno-deploy","2.deploy/20.providers/deno-deploy",{"title":165,"path":166,"stem":167},"DigitalOcean","/deploy/providers/digitalocean","2.deploy/20.providers/digitalocean",{"title":169,"path":170,"stem":171},"Firebase","/deploy/providers/firebase","2.deploy/20.providers/firebase",{"title":173,"path":174,"stem":175},"Flightcontrol","/deploy/providers/flightcontrol","2.deploy/20.providers/flightcontrol",{"title":177,"path":178,"stem":179},"Genezio","/deploy/providers/genezio","2.deploy/20.providers/genezio",{"title":181,"path":182,"stem":183},"GitHub Pages","/deploy/providers/github-pages","2.deploy/20.providers/github-pages",{"title":185,"path":186,"stem":187},"GitLab Pages","/deploy/providers/gitlab-pages","2.deploy/20.providers/gitlab-pages",{"title":189,"path":190,"stem":191},"Heroku","/deploy/providers/heroku","2.deploy/20.providers/heroku",{"title":193,"path":194,"stem":195},"IIS","/deploy/providers/iis","2.deploy/20.providers/iis",{"title":197,"path":198,"stem":199},"Koyeb","/deploy/providers/koyeb","2.deploy/20.providers/koyeb",{"title":201,"path":202,"stem":203},"Netlify","/deploy/providers/netlify","2.deploy/20.providers/netlify",{"title":205,"path":206,"stem":207},"Platform.sh","/deploy/providers/platform-sh","2.deploy/20.providers/platform-sh",{"title":209,"path":210,"stem":211},"Render.com","/deploy/providers/render","2.deploy/20.providers/render",{"title":213,"path":214,"stem":215},"StormKit","/deploy/providers/stormkit","2.deploy/20.providers/stormkit",{"title":217,"path":218,"stem":219},"Vercel","/deploy/providers/vercel","2.deploy/20.providers/vercel",{"title":221,"path":222,"stem":223},"Zeabur","/deploy/providers/zeabur","2.deploy/20.providers/zeabur",{"title":225,"path":226,"stem":227},"Zerops","/deploy/providers/zerops","2.deploy/20.providers/zerops",{"title":229,"path":230,"stem":231,"children":232,"icon":70},"Config","/config","3.config/0.index",[233],{"title":229,"path":230,"stem":231,"icon":70},{"id":235,"title":37,"body":236,"description":1378,"extension":1379,"meta":1380,"navigation":1381,"path":38,"seo":1382,"stem":39,"__hash__":1383},"content/1.guide/4.storage.md",{"type":237,"value":238,"toc":1371,"icon":40},"minimark",[239,251,256,272,534,537,540,547,727,738,743,750,1019,1030,1034,1037,1148,1158,1171,1360,1367],[240,241,242,243,250],"p",{},"Nitro has built-in integration with ",[244,245,249],"a",{"href":246,"rel":247},"https://unstorage.unjs.io",[248],"nofollow","unstorage"," to provide a runtime agnostic persistent layer.",[252,253,255],"h2",{"id":254},"usage","Usage",[240,257,258,259,263,264,267,268,271],{},"To use the storage layer, you can use the ",[260,261,262],"code",{},"useStorage()"," and call ",[260,265,266],{},"getItem(key)"," to retrieve an item and ",[260,269,270],{},"setItem(key, value)"," to set an item.",[273,274,279],"pre",{"className":275,"code":276,"language":277,"meta":278,"style":278},"language-ts shiki shiki-themes github-light github-dark github-dark","// Default storage is in memory\nawait useStorage().setItem('test:foo', { hello: 'world' })\nawait useStorage().getItem('test:foo')\n\n// You can also specify the base in useStorage(base)\nawait useStorage('test').setItem('foo', { hello: 'world' })\n\n// You can use data storage to write data to default .data/kv directory\nconst dataStorage = useStorage('data')\nawait dataStorage.setItem('test', 'works')\nawait dataStorage.getItem('data:test') // Value persists\n\n// You can use generics to define types\nawait useStorage\u003C{ hello: string }>('test').getItem('foo')\nawait useStorage('test').getItem\u003C{ hello: string }>('foo')\n","ts","",[260,280,281,290,324,343,350,356,384,389,395,417,439,459,464,470,505],{"__ignoreMap":278},[282,283,286],"span",{"class":284,"line":285},"line",1,[282,287,289],{"class":288},"sCsY4","// Default storage is in memory\n",[282,291,293,297,301,305,308,311,315,318,321],{"class":284,"line":292},2,[282,294,296],{"class":295},"so5gQ","await",[282,298,300],{"class":299},"shcOC"," useStorage",[282,302,304],{"class":303},"slsVL","().",[282,306,307],{"class":299},"setItem",[282,309,310],{"class":303},"(",[282,312,314],{"class":313},"sfrk1","'test:foo'",[282,316,317],{"class":303},", { hello: ",[282,319,320],{"class":313},"'world'",[282,322,323],{"class":303}," })\n",[282,325,327,329,331,333,336,338,340],{"class":284,"line":326},3,[282,328,296],{"class":295},[282,330,300],{"class":299},[282,332,304],{"class":303},[282,334,335],{"class":299},"getItem",[282,337,310],{"class":303},[282,339,314],{"class":313},[282,341,342],{"class":303},")\n",[282,344,346],{"class":284,"line":345},4,[282,347,349],{"emptyLinePlaceholder":348},true,"\n",[282,351,353],{"class":284,"line":352},5,[282,354,355],{"class":288},"// You can also specify the base in useStorage(base)\n",[282,357,359,361,363,365,368,371,373,375,378,380,382],{"class":284,"line":358},6,[282,360,296],{"class":295},[282,362,300],{"class":299},[282,364,310],{"class":303},[282,366,367],{"class":313},"'test'",[282,369,370],{"class":303},").",[282,372,307],{"class":299},[282,374,310],{"class":303},[282,376,377],{"class":313},"'foo'",[282,379,317],{"class":303},[282,381,320],{"class":313},[282,383,323],{"class":303},[282,385,387],{"class":284,"line":386},7,[282,388,349],{"emptyLinePlaceholder":348},[282,390,392],{"class":284,"line":391},8,[282,393,394],{"class":288},"// You can use data storage to write data to default .data/kv directory\n",[282,396,398,401,405,408,410,412,415],{"class":284,"line":397},9,[282,399,400],{"class":295},"const",[282,402,404],{"class":403},"suiK_"," dataStorage",[282,406,407],{"class":295}," =",[282,409,300],{"class":299},[282,411,310],{"class":303},[282,413,414],{"class":313},"'data'",[282,416,342],{"class":303},[282,418,420,422,425,427,429,431,434,437],{"class":284,"line":419},10,[282,421,296],{"class":295},[282,423,424],{"class":303}," dataStorage.",[282,426,307],{"class":299},[282,428,310],{"class":303},[282,430,367],{"class":313},[282,432,433],{"class":303},", ",[282,435,436],{"class":313},"'works'",[282,438,342],{"class":303},[282,440,442,444,446,448,450,453,456],{"class":284,"line":441},11,[282,443,296],{"class":295},[282,445,424],{"class":303},[282,447,335],{"class":299},[282,449,310],{"class":303},[282,451,452],{"class":313},"'data:test'",[282,454,455],{"class":303},") ",[282,457,458],{"class":288},"// Value persists\n",[282,460,462],{"class":284,"line":461},12,[282,463,349],{"emptyLinePlaceholder":348},[282,465,467],{"class":284,"line":466},13,[282,468,469],{"class":288},"// You can use generics to define types\n",[282,471,473,475,477,480,484,487,490,493,495,497,499,501,503],{"class":284,"line":472},14,[282,474,296],{"class":295},[282,476,300],{"class":299},[282,478,479],{"class":303},"\u003C{ ",[282,481,483],{"class":482},"sQHwn","hello",[282,485,486],{"class":295},":",[282,488,489],{"class":403}," string",[282,491,492],{"class":303}," }>(",[282,494,367],{"class":313},[282,496,370],{"class":303},[282,498,335],{"class":299},[282,500,310],{"class":303},[282,502,377],{"class":313},[282,504,342],{"class":303},[282,506,508,510,512,514,516,518,520,522,524,526,528,530,532],{"class":284,"line":507},15,[282,509,296],{"class":295},[282,511,300],{"class":299},[282,513,310],{"class":303},[282,515,367],{"class":313},[282,517,370],{"class":303},[282,519,335],{"class":299},[282,521,479],{"class":303},[282,523,483],{"class":482},[282,525,486],{"class":295},[282,527,489],{"class":403},[282,529,492],{"class":303},[282,531,377],{"class":313},[282,533,342],{"class":303},[535,536],"read-more",{"to":246},[252,538,67],{"id":539},"configuration",[240,541,542,543,546],{},"You can mount one or multiple custom storage drivers using the ",[260,544,545],{},"storage"," config.\nThe key is the mount point name, and the value is the driver name and configuration.",[548,549,550,638],"code-group",{},[273,551,554],{"className":275,"code":552,"filename":553,"language":277,"meta":278,"style":278},"export default defineNitroConfig({\n  storage: {\n    redis: {\n      driver: 'redis',\n      /* redis connector options */\n    },\n    db: {\n      driver: 'fs',\n      base: './data/db'\n    }\n  }\n})\n","nitro.config.ts",[260,555,556,570,575,580,591,596,601,606,615,623,628,633],{"__ignoreMap":278},[282,557,558,561,564,567],{"class":284,"line":285},[282,559,560],{"class":295},"export",[282,562,563],{"class":295}," default",[282,565,566],{"class":299}," defineNitroConfig",[282,568,569],{"class":303},"({\n",[282,571,572],{"class":284,"line":292},[282,573,574],{"class":303},"  storage: {\n",[282,576,577],{"class":284,"line":326},[282,578,579],{"class":303},"    redis: {\n",[282,581,582,585,588],{"class":284,"line":345},[282,583,584],{"class":303},"      driver: ",[282,586,587],{"class":313},"'redis'",[282,589,590],{"class":303},",\n",[282,592,593],{"class":284,"line":352},[282,594,595],{"class":288},"      /* redis connector options */\n",[282,597,598],{"class":284,"line":358},[282,599,600],{"class":303},"    },\n",[282,602,603],{"class":284,"line":386},[282,604,605],{"class":303},"    db: {\n",[282,607,608,610,613],{"class":284,"line":391},[282,609,584],{"class":303},[282,611,612],{"class":313},"'fs'",[282,614,590],{"class":303},[282,616,617,620],{"class":284,"line":397},[282,618,619],{"class":303},"      base: ",[282,621,622],{"class":313},"'./data/db'\n",[282,624,625],{"class":284,"line":419},[282,626,627],{"class":303},"    }\n",[282,629,630],{"class":284,"line":441},[282,631,632],{"class":303},"  }\n",[282,634,635],{"class":284,"line":461},[282,636,637],{"class":303},"})\n",[273,639,642],{"className":275,"code":640,"filename":641,"language":277,"meta":278,"style":278},"export default defineNuxtConfig({\n  nitro: {\n    storage: {\n      redis: {\n        driver: 'redis',\n        /* redis connector options */\n      },\n      db: {\n        driver: 'fs',\n        base: './.data/db'\n      }\n    }\n  }\n})\n","nuxt.config.ts",[260,643,644,655,660,665,670,679,684,689,694,702,710,715,719,723],{"__ignoreMap":278},[282,645,646,648,650,653],{"class":284,"line":285},[282,647,560],{"class":295},[282,649,563],{"class":295},[282,651,652],{"class":299}," defineNuxtConfig",[282,654,569],{"class":303},[282,656,657],{"class":284,"line":292},[282,658,659],{"class":303},"  nitro: {\n",[282,661,662],{"class":284,"line":326},[282,663,664],{"class":303},"    storage: {\n",[282,666,667],{"class":284,"line":345},[282,668,669],{"class":303},"      redis: {\n",[282,671,672,675,677],{"class":284,"line":352},[282,673,674],{"class":303},"        driver: ",[282,676,587],{"class":313},[282,678,590],{"class":303},[282,680,681],{"class":284,"line":358},[282,682,683],{"class":288},"        /* redis connector options */\n",[282,685,686],{"class":284,"line":386},[282,687,688],{"class":303},"      },\n",[282,690,691],{"class":284,"line":391},[282,692,693],{"class":303},"      db: {\n",[282,695,696,698,700],{"class":284,"line":397},[282,697,674],{"class":303},[282,699,612],{"class":313},[282,701,590],{"class":303},[282,703,704,707],{"class":284,"line":419},[282,705,706],{"class":303},"        base: ",[282,708,709],{"class":313},"'./.data/db'\n",[282,711,712],{"class":284,"line":441},[282,713,714],{"class":303},"      }\n",[282,716,717],{"class":284,"line":461},[282,718,627],{"class":303},[282,720,721],{"class":284,"line":466},[282,722,632],{"class":303},[282,724,725],{"class":284,"line":472},[282,726,637],{"class":303},[535,728,730],{"to":729},"https://unstorage.unjs.io/",[240,731,732,733,737],{},"You can find the driver list on ",[244,734,736],{"href":729,"rel":735},[248],"unstorage documentation"," with their configuration.",[739,740,742],"h3",{"id":741},"runtime-configuration","Runtime configuration",[240,744,745,746,749],{},"In scenarios where the mount point configuration is not known until runtime, Nitro can dynamically add mount points during startup using ",[244,747,748],{"href":63},"plugins",".",[548,751,752,900,962],{},[273,753,756],{"className":275,"code":754,"filename":755,"language":277,"meta":278,"style":278},"import redisDriver from 'unstorage/drivers/redis'\n\nexport default defineNitroPlugin(() => {\n  const storage = useStorage()\n\n  // Dynamically pass in credentials from runtime configuration, or other sources\n  const driver = redisDriver({\n      base: 'redis',\n      host: useRuntimeConfig().redis.host,\n      port: useRuntimeConfig().redis.port,\n      /* other redis connector options */\n    })\n\n  // Mount driver\n  storage.mount('redis', driver)\n})\n","server/plugins/storage.ts",[260,757,758,772,776,794,809,813,818,832,840,851,861,866,871,875,880,895],{"__ignoreMap":278},[282,759,760,763,766,769],{"class":284,"line":285},[282,761,762],{"class":295},"import",[282,764,765],{"class":303}," redisDriver ",[282,767,768],{"class":295},"from",[282,770,771],{"class":313}," 'unstorage/drivers/redis'\n",[282,773,774],{"class":284,"line":292},[282,775,349],{"emptyLinePlaceholder":348},[282,777,778,780,782,785,788,791],{"class":284,"line":326},[282,779,560],{"class":295},[282,781,563],{"class":295},[282,783,784],{"class":299}," defineNitroPlugin",[282,786,787],{"class":303},"(() ",[282,789,790],{"class":295},"=>",[282,792,793],{"class":303}," {\n",[282,795,796,799,802,804,806],{"class":284,"line":345},[282,797,798],{"class":295},"  const",[282,800,801],{"class":403}," storage",[282,803,407],{"class":295},[282,805,300],{"class":299},[282,807,808],{"class":303},"()\n",[282,810,811],{"class":284,"line":352},[282,812,349],{"emptyLinePlaceholder":348},[282,814,815],{"class":284,"line":358},[282,816,817],{"class":288},"  // Dynamically pass in credentials from runtime configuration, or other sources\n",[282,819,820,822,825,827,830],{"class":284,"line":386},[282,821,798],{"class":295},[282,823,824],{"class":403}," driver",[282,826,407],{"class":295},[282,828,829],{"class":299}," redisDriver",[282,831,569],{"class":303},[282,833,834,836,838],{"class":284,"line":391},[282,835,619],{"class":303},[282,837,587],{"class":313},[282,839,590],{"class":303},[282,841,842,845,848],{"class":284,"line":397},[282,843,844],{"class":303},"      host: ",[282,846,847],{"class":299},"useRuntimeConfig",[282,849,850],{"class":303},"().redis.host,\n",[282,852,853,856,858],{"class":284,"line":419},[282,854,855],{"class":303},"      port: ",[282,857,847],{"class":299},[282,859,860],{"class":303},"().redis.port,\n",[282,862,863],{"class":284,"line":441},[282,864,865],{"class":288},"      /* other redis connector options */\n",[282,867,868],{"class":284,"line":461},[282,869,870],{"class":303},"    })\n",[282,872,873],{"class":284,"line":466},[282,874,349],{"emptyLinePlaceholder":348},[282,876,877],{"class":284,"line":472},[282,878,879],{"class":288},"  // Mount driver\n",[282,881,882,885,888,890,892],{"class":284,"line":507},[282,883,884],{"class":303},"  storage.",[282,886,887],{"class":299},"mount",[282,889,310],{"class":303},[282,891,587],{"class":313},[282,893,894],{"class":303},", driver)\n",[282,896,898],{"class":284,"line":897},16,[282,899,637],{"class":303},[273,901,903],{"className":275,"code":902,"filename":553,"language":277,"meta":278,"style":278},"export default defineNitroConfig({\n  runtimeConfig: {\n    redis: { // Default values\n      host: '',\n      port: 0,\n      /* other redis connector options */\n    }\n  }\n})\n",[260,904,905,915,920,928,937,946,950,954,958],{"__ignoreMap":278},[282,906,907,909,911,913],{"class":284,"line":285},[282,908,560],{"class":295},[282,910,563],{"class":295},[282,912,566],{"class":299},[282,914,569],{"class":303},[282,916,917],{"class":284,"line":292},[282,918,919],{"class":303},"  runtimeConfig: {\n",[282,921,922,925],{"class":284,"line":326},[282,923,924],{"class":303},"    redis: { ",[282,926,927],{"class":288},"// Default values\n",[282,929,930,932,935],{"class":284,"line":345},[282,931,844],{"class":303},[282,933,934],{"class":313},"''",[282,936,590],{"class":303},[282,938,939,941,944],{"class":284,"line":352},[282,940,855],{"class":303},[282,942,943],{"class":403},"0",[282,945,590],{"class":303},[282,947,948],{"class":284,"line":358},[282,949,865],{"class":288},[282,951,952],{"class":284,"line":386},[282,953,627],{"class":303},[282,955,956],{"class":284,"line":391},[282,957,632],{"class":303},[282,959,960],{"class":284,"line":397},[282,961,637],{"class":303},[273,963,965],{"className":275,"code":964,"filename":641,"language":277,"meta":278,"style":278},"export default defineNuxtConfig({\n  runtimeConfig: {\n    redis: { // Default values\n      host: '',\n      port: 0,\n      /* other redis connector options */\n    }\n  }\n})\n",[260,966,967,977,981,987,995,1003,1007,1011,1015],{"__ignoreMap":278},[282,968,969,971,973,975],{"class":284,"line":285},[282,970,560],{"class":295},[282,972,563],{"class":295},[282,974,652],{"class":299},[282,976,569],{"class":303},[282,978,979],{"class":284,"line":292},[282,980,919],{"class":303},[282,982,983,985],{"class":284,"line":326},[282,984,924],{"class":303},[282,986,927],{"class":288},[282,988,989,991,993],{"class":284,"line":345},[282,990,844],{"class":303},[282,992,934],{"class":313},[282,994,590],{"class":303},[282,996,997,999,1001],{"class":284,"line":352},[282,998,855],{"class":303},[282,1000,943],{"class":403},[282,1002,590],{"class":303},[282,1004,1005],{"class":284,"line":358},[282,1006,865],{"class":288},[282,1008,1009],{"class":284,"line":386},[282,1010,627],{"class":303},[282,1012,1013],{"class":284,"line":391},[282,1014,632],{"class":303},[282,1016,1017],{"class":284,"line":397},[282,1018,637],{"class":303},[1020,1021,1022],"warning",{},[240,1023,1024,1025,749],{},"This is a temporary workaround, with a better solution coming in the future! Keep a lookout on the GitHub issue ",[244,1026,1029],{"href":1027,"rel":1028},"https://github.com/nitrojs/nitro/issues/1161#issuecomment-1511444675",[248],"here",[739,1031,1033],{"id":1032},"development-only-mount-points","Development-only mount points",[240,1035,1036],{},"By default, Nitro will mount the project directory and some other dirs using the filesystem driver in development time.",[273,1038,1042],{"className":1039,"code":1040,"language":1041,"meta":278,"style":278},"language-js shiki shiki-themes github-light github-dark github-dark","// Access to project root dir\nconst rootStorage = useStorage('root')\n\n// Access to project src dir (same as root by default)\nconst srcStorage = useStorage('src')\n\n// Access to server cache dir\nconst cacheStorage = useStorage('cache')\n\n// Access to the temp build dir\nconst buildStorage = useStorage('build')\n","js",[260,1043,1044,1049,1067,1071,1076,1094,1098,1103,1121,1125,1130],{"__ignoreMap":278},[282,1045,1046],{"class":284,"line":285},[282,1047,1048],{"class":288},"// Access to project root dir\n",[282,1050,1051,1053,1056,1058,1060,1062,1065],{"class":284,"line":292},[282,1052,400],{"class":295},[282,1054,1055],{"class":403}," rootStorage",[282,1057,407],{"class":295},[282,1059,300],{"class":299},[282,1061,310],{"class":303},[282,1063,1064],{"class":313},"'root'",[282,1066,342],{"class":303},[282,1068,1069],{"class":284,"line":326},[282,1070,349],{"emptyLinePlaceholder":348},[282,1072,1073],{"class":284,"line":345},[282,1074,1075],{"class":288},"// Access to project src dir (same as root by default)\n",[282,1077,1078,1080,1083,1085,1087,1089,1092],{"class":284,"line":352},[282,1079,400],{"class":295},[282,1081,1082],{"class":403}," srcStorage",[282,1084,407],{"class":295},[282,1086,300],{"class":299},[282,1088,310],{"class":303},[282,1090,1091],{"class":313},"'src'",[282,1093,342],{"class":303},[282,1095,1096],{"class":284,"line":358},[282,1097,349],{"emptyLinePlaceholder":348},[282,1099,1100],{"class":284,"line":386},[282,1101,1102],{"class":288},"// Access to server cache dir\n",[282,1104,1105,1107,1110,1112,1114,1116,1119],{"class":284,"line":391},[282,1106,400],{"class":295},[282,1108,1109],{"class":403}," cacheStorage",[282,1111,407],{"class":295},[282,1113,300],{"class":299},[282,1115,310],{"class":303},[282,1117,1118],{"class":313},"'cache'",[282,1120,342],{"class":303},[282,1122,1123],{"class":284,"line":397},[282,1124,349],{"emptyLinePlaceholder":348},[282,1126,1127],{"class":284,"line":419},[282,1128,1129],{"class":288},"// Access to the temp build dir\n",[282,1131,1132,1134,1137,1139,1141,1143,1146],{"class":284,"line":441},[282,1133,400],{"class":295},[282,1135,1136],{"class":403}," buildStorage",[282,1138,407],{"class":295},[282,1140,300],{"class":299},[282,1142,310],{"class":303},[282,1144,1145],{"class":313},"'build'",[282,1147,342],{"class":303},[1149,1150,1151],"tip",{},[240,1152,1153,1154,1157],{},"\nYou also can use the ",[260,1155,1156],{},"devStorage"," key to overwrite the storage configuration during development. This is very useful when you use a database in production and want to use the filesystem in development.",[240,1159,1160,1161,1163,1164,1167,1168,1170],{},"In order to use the ",[260,1162,1156],{}," key, you need to use the ",[260,1165,1166],{},"nitro dev"," command and the key in the ",[260,1169,545],{}," option must be the same as the production one.",[548,1172,1173,1262],{},[273,1174,1176],{"className":275,"code":1175,"filename":553,"language":277,"meta":278,"style":278},"export default defineNitroConfig({\n  // Production\n  storage: {\n    db: {\n      driver: 'redis',\n      /* redis connector options */\n    }\n  },\n  // Development\n  devStorage: {\n    db: {\n      driver: 'fs',\n      base: './data/db'\n    }\n  }\n})\n",[260,1177,1178,1188,1193,1197,1201,1209,1213,1217,1222,1227,1232,1236,1244,1250,1254,1258],{"__ignoreMap":278},[282,1179,1180,1182,1184,1186],{"class":284,"line":285},[282,1181,560],{"class":295},[282,1183,563],{"class":295},[282,1185,566],{"class":299},[282,1187,569],{"class":303},[282,1189,1190],{"class":284,"line":292},[282,1191,1192],{"class":288},"  // Production\n",[282,1194,1195],{"class":284,"line":326},[282,1196,574],{"class":303},[282,1198,1199],{"class":284,"line":345},[282,1200,605],{"class":303},[282,1202,1203,1205,1207],{"class":284,"line":352},[282,1204,584],{"class":303},[282,1206,587],{"class":313},[282,1208,590],{"class":303},[282,1210,1211],{"class":284,"line":358},[282,1212,595],{"class":288},[282,1214,1215],{"class":284,"line":386},[282,1216,627],{"class":303},[282,1218,1219],{"class":284,"line":391},[282,1220,1221],{"class":303},"  },\n",[282,1223,1224],{"class":284,"line":397},[282,1225,1226],{"class":288},"  // Development\n",[282,1228,1229],{"class":284,"line":419},[282,1230,1231],{"class":303},"  devStorage: {\n",[282,1233,1234],{"class":284,"line":441},[282,1235,605],{"class":303},[282,1237,1238,1240,1242],{"class":284,"line":461},[282,1239,584],{"class":303},[282,1241,612],{"class":313},[282,1243,590],{"class":303},[282,1245,1246,1248],{"class":284,"line":466},[282,1247,619],{"class":303},[282,1249,622],{"class":313},[282,1251,1252],{"class":284,"line":472},[282,1253,627],{"class":303},[282,1255,1256],{"class":284,"line":507},[282,1257,632],{"class":303},[282,1259,1260],{"class":284,"line":897},[282,1261,637],{"class":303},[273,1263,1265],{"className":275,"code":1264,"filename":641,"language":277,"meta":278,"style":278},"export default defineNuxtConfig({\n  nitro: {\n    // Production\n    storage: {\n      db: {\n        driver: 'redis',\n        /* redis connector options */\n      }\n    },\n    // Development\n    devStorage: {\n      db: {\n        driver: 'fs',\n        base: './data/db'\n      }\n    }\n  }\n})\n",[260,1266,1267,1277,1281,1286,1290,1294,1302,1306,1310,1314,1319,1324,1328,1336,1342,1346,1350,1355],{"__ignoreMap":278},[282,1268,1269,1271,1273,1275],{"class":284,"line":285},[282,1270,560],{"class":295},[282,1272,563],{"class":295},[282,1274,652],{"class":299},[282,1276,569],{"class":303},[282,1278,1279],{"class":284,"line":292},[282,1280,659],{"class":303},[282,1282,1283],{"class":284,"line":326},[282,1284,1285],{"class":288},"    // Production\n",[282,1287,1288],{"class":284,"line":345},[282,1289,664],{"class":303},[282,1291,1292],{"class":284,"line":352},[282,1293,693],{"class":303},[282,1295,1296,1298,1300],{"class":284,"line":358},[282,1297,674],{"class":303},[282,1299,587],{"class":313},[282,1301,590],{"class":303},[282,1303,1304],{"class":284,"line":386},[282,1305,683],{"class":288},[282,1307,1308],{"class":284,"line":391},[282,1309,714],{"class":303},[282,1311,1312],{"class":284,"line":397},[282,1313,600],{"class":303},[282,1315,1316],{"class":284,"line":419},[282,1317,1318],{"class":288},"    // Development\n",[282,1320,1321],{"class":284,"line":441},[282,1322,1323],{"class":303},"    devStorage: {\n",[282,1325,1326],{"class":284,"line":461},[282,1327,693],{"class":303},[282,1329,1330,1332,1334],{"class":284,"line":466},[282,1331,674],{"class":303},[282,1333,612],{"class":313},[282,1335,590],{"class":303},[282,1337,1338,1340],{"class":284,"line":472},[282,1339,706],{"class":303},[282,1341,622],{"class":313},[282,1343,1344],{"class":284,"line":507},[282,1345,714],{"class":303},[282,1347,1348],{"class":284,"line":897},[282,1349,627],{"class":303},[282,1351,1353],{"class":284,"line":1352},17,[282,1354,632],{"class":303},[282,1356,1358],{"class":284,"line":1357},18,[282,1359,637],{"class":303},[240,1361,1362,1363,1366],{},"You will also be able to access to a ",[260,1364,1365],{},"build"," namespace in the storage layer only during development. It contains file generated by Nitro.",[1368,1369,1370],"style",{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}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);}",{"title":278,"searchDepth":292,"depth":292,"links":1372},[1373,1374],{"id":254,"depth":292,"text":255},{"id":539,"depth":292,"text":67,"children":1375},[1376,1377],{"id":741,"depth":326,"text":742},{"id":1032,"depth":326,"text":1033},"Nitro provides a built-in storage layer that can abstract filesystem or database or any other data source.","md",{"icon":40},{"icon":40},{"title":37,"description":1378},"mVWyaSVx5Vm5KQq1A6ubox4Bs1-3QoG7E6EYrqEuiHw",[1385,1387],{"title":32,"path":33,"stem":34,"description":1386,"icon":35,"children":-1},"Nitro natively supports a cross platform WebSocket API",{"title":42,"path":43,"stem":44,"description":1388,"icon":45,"children":-1},"Nitro provides a built-in and lightweight SQL database layer.",1778145697624]