[{"data":1,"prerenderedAt":1394},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fconfiguration":111,"\u002Fgetting-started\u002Fconfiguration-surround":1389},[4,38,77,97,104],{"title":5,"path":6,"stem":7,"children":8,"icon":37},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17,22,27,32],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Usage","\u002Fgetting-started\u002Fusage","1.getting-started\u002F4.usage","i-lucide-code",{"title":28,"path":29,"stem":30,"icon":31},"Authentication","\u002Fgetting-started\u002Fauthentication","1.getting-started\u002F5.authentication","i-lucide-lock",{"title":33,"path":34,"stem":35,"icon":36},"DevTools","\u002Fgetting-started\u002Fdevtools","1.getting-started\u002F6.devtools","i-lucide-radio-tower",false,{"title":39,"icon":26,"path":40,"stem":41,"children":42,"page":37},"Composables","\u002Fcomposables","2.composables",[43,48,53,58,63,67,72],{"title":44,"path":45,"stem":46,"icon":47},"useRealtimeState","\u002Fcomposables\u002Fuserealtimestate","2.composables\u002F1.useRealtimeState","i-lucide-refresh-cw",{"title":49,"path":50,"stem":51,"icon":52},"useRealtimeEvents","\u002Fcomposables\u002Fuserealtimeevents","2.composables\u002F2.useRealtimeEvents","i-lucide-radio",{"title":54,"path":55,"stem":56,"icon":57},"useRealtimeConnection","\u002Fcomposables\u002Fuserealtimeconnection","2.composables\u002F3.useRealtimeConnection","i-lucide-wifi",{"title":59,"path":60,"stem":61,"icon":62},"useRealtimePresence","\u002Fcomposables\u002Fuserealtimepresence","2.composables\u002F4.useRealtimePresence","i-lucide-users",{"title":64,"path":65,"stem":66,"icon":31},"useRealtimeLock","\u002Fcomposables\u002Fuserealtimelock","2.composables\u002F5.useRealtimeLock",{"title":68,"path":69,"stem":70,"icon":71},"useRealtimeLockRoom","\u002Fcomposables\u002Fuserealtimelockroom","2.composables\u002F6.useRealtimeLockRoom","i-lucide-list-checks",{"title":73,"path":74,"stem":75,"icon":76},"useRealtimeRoom","\u002Fcomposables\u002Fuserealtimeroom","2.composables\u002F7.useRealtimeRoom","i-lucide-door-open",{"title":78,"icon":79,"path":80,"stem":81,"children":82,"page":37},"Technical","i-lucide-cpu","\u002Ftechnical","3.technical",[83,88,92],{"title":84,"path":85,"stem":86,"icon":87},"Architecture","\u002Ftechnical\u002Farchitecture","3.technical\u002F1.architecture","i-lucide-network",{"title":89,"path":90,"stem":91,"icon":52},"Notification Layer","\u002Ftechnical\u002Fpubsub","3.technical\u002F2.pubsub",{"title":93,"path":94,"stem":95,"icon":96},"Multi-Server Sync","\u002Ftechnical\u002Fcross-server-sync","3.technical\u002F3.cross-server-sync","i-lucide-server",{"title":98,"path":99,"stem":100,"children":101,"icon":103},"Blocks","\u002Fblocks","4.blocks\u002F1.index",[102],{"title":98,"path":99,"stem":100,"icon":103},"i-lucide-layout-grid",{"title":105,"path":106,"stem":107,"children":108,"icon":110},"Components","\u002Fcomponents","5.components\u002F1.index",[109],{"title":105,"path":106,"stem":107,"icon":110},"i-lucide-component",{"id":112,"title":18,"body":113,"description":1382,"extension":1383,"links":1384,"meta":1385,"navigation":1386,"path":19,"seo":1387,"stem":20,"__hash__":1388},"docs\u002F1.getting-started\u002F3.configuration.md",{"type":114,"value":115,"toc":1368},"minimark",[116,129,134,148,153,156,254,258,271,278,329,421,434,437,443,447,485,557,560,629,636,751,755,949,965,969,984,1130,1139,1143,1146,1149,1210,1214,1307,1311,1318,1364],[117,118,119,120,124,125,128],"p",{},"All options are set under the ",[121,122,123],"code",{},"nuxtRealtime"," key in ",[121,126,127],{},"nuxt.config.ts",".",[130,131,133],"h2",{"id":132},"storage","Storage",[117,135,136,137,144,145,147],{},"Nuxt Realtime uses ",[138,139,143],"a",{"href":140,"rel":141},"https:\u002F\u002Fnitro.unjs.io\u002Fguide\u002Fstorage",[142],"nofollow","Nitro's storage system"," for state persistence. Configure it with the ",[121,146,132],{}," option.",[149,150,152],"h3",{"id":151},"memory-default","Memory (default)",[117,154,155],{},"State is stored in-process and not shared between server instances. No extra configuration needed.",[157,158,163],"pre",{"className":159,"code":160,"filename":127,"language":161,"meta":162,"style":162},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  nuxtRealtime: {\n    storage: {\n      driver: 'memory',\n    },\n  },\n})\n","ts","",[121,164,165,189,202,212,233,239,245],{"__ignoreMap":162},[166,167,170,174,177,181,185],"span",{"class":168,"line":169},"line",1,[166,171,173],{"class":172},"s7zQu","export",[166,175,176],{"class":172}," default",[166,178,180],{"class":179},"s2Zo4"," defineNuxtConfig",[166,182,184],{"class":183},"sTEyZ","(",[166,186,188],{"class":187},"sMK4o","{\n",[166,190,192,196,199],{"class":168,"line":191},2,[166,193,195],{"class":194},"swJcz","  nuxtRealtime",[166,197,198],{"class":187},":",[166,200,201],{"class":187}," {\n",[166,203,205,208,210],{"class":168,"line":204},3,[166,206,207],{"class":194},"    storage",[166,209,198],{"class":187},[166,211,201],{"class":187},[166,213,215,218,220,223,227,230],{"class":168,"line":214},4,[166,216,217],{"class":194},"      driver",[166,219,198],{"class":187},[166,221,222],{"class":187}," '",[166,224,226],{"class":225},"sfazB","memory",[166,228,229],{"class":187},"'",[166,231,232],{"class":187},",\n",[166,234,236],{"class":168,"line":235},5,[166,237,238],{"class":187},"    },\n",[166,240,242],{"class":168,"line":241},6,[166,243,244],{"class":187},"  },\n",[166,246,248,251],{"class":168,"line":247},7,[166,249,250],{"class":187},"}",[166,252,253],{"class":183},")\n",[149,255,257],{"id":256},"redis","Redis",[117,259,260,261,265,266,270],{},"For persistent storage that survives server restarts. This does ",[262,263,264],"strong",{},"not"," sync state across multiple server instances (see ",[138,267,269],{"href":268},"#cross-server-sync","Cross-Server Sync"," for that).",[117,272,273,274,277],{},"Install ",[121,275,276],{},"ioredis"," as a peer dependency:",[279,280,281,300,315],"code-group",{},[157,282,287],{"className":283,"code":284,"filename":285,"language":286,"meta":162,"style":162},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add ioredis\n","pnpm","bash",[121,288,289],{"__ignoreMap":162},[166,290,291,294,297],{"class":168,"line":169},[166,292,285],{"class":293},"sBMFI",[166,295,296],{"class":225}," add",[166,298,299],{"class":225}," ioredis\n",[157,301,304],{"className":283,"code":302,"filename":303,"language":286,"meta":162,"style":162},"npm install ioredis\n","npm",[121,305,306],{"__ignoreMap":162},[166,307,308,310,313],{"class":168,"line":169},[166,309,303],{"class":293},[166,311,312],{"class":225}," install",[166,314,299],{"class":225},[157,316,319],{"className":283,"code":317,"filename":318,"language":286,"meta":162,"style":162},"yarn add ioredis\n","yarn",[121,320,321],{"__ignoreMap":162},[166,322,323,325,327],{"class":168,"line":169},[166,324,318],{"class":293},[166,326,296],{"class":225},[166,328,299],{"class":225},[157,330,332],{"className":159,"code":331,"filename":127,"language":161,"meta":162,"style":162},"export default defineNuxtConfig({\n  nuxtRealtime: {\n    storage: {\n      driver: 'redis',\n      host: 'localhost',\n      port: 6379,\n    },\n  },\n})\n",[121,333,334,346,354,362,376,392,405,409,414],{"__ignoreMap":162},[166,335,336,338,340,342,344],{"class":168,"line":169},[166,337,173],{"class":172},[166,339,176],{"class":172},[166,341,180],{"class":179},[166,343,184],{"class":183},[166,345,188],{"class":187},[166,347,348,350,352],{"class":168,"line":191},[166,349,195],{"class":194},[166,351,198],{"class":187},[166,353,201],{"class":187},[166,355,356,358,360],{"class":168,"line":204},[166,357,207],{"class":194},[166,359,198],{"class":187},[166,361,201],{"class":187},[166,363,364,366,368,370,372,374],{"class":168,"line":214},[166,365,217],{"class":194},[166,367,198],{"class":187},[166,369,222],{"class":187},[166,371,256],{"class":225},[166,373,229],{"class":187},[166,375,232],{"class":187},[166,377,378,381,383,385,388,390],{"class":168,"line":235},[166,379,380],{"class":194},"      host",[166,382,198],{"class":187},[166,384,222],{"class":187},[166,386,387],{"class":225},"localhost",[166,389,229],{"class":187},[166,391,232],{"class":187},[166,393,394,397,399,403],{"class":168,"line":241},[166,395,396],{"class":194},"      port",[166,398,198],{"class":187},[166,400,402],{"class":401},"sbssI"," 6379",[166,404,232],{"class":187},[166,406,407],{"class":168,"line":247},[166,408,238],{"class":187},[166,410,412],{"class":168,"line":411},8,[166,413,244],{"class":187},[166,415,417,419],{"class":168,"line":416},9,[166,418,250],{"class":187},[166,420,253],{"class":183},[422,423,426],"callout",{"color":424,"icon":425},"info","i-lucide-info",[117,427,428,429,433],{},"See the ",[138,430,432],{"href":140,"rel":431},[142],"Nitro storage documentation"," for all available drivers and their options.",[130,435,269],{"id":436},"cross-server-sync",[117,438,439,440,442],{},"When running multiple server instances behind a load balancer, use the ",[121,441,256],{}," option to broadcast state changes across instances via Redis pub\u002Fsub. Every connected client sees up-to-date values regardless of which instance they are connected to.",[117,444,273,445,277],{},[121,446,276],{},[279,448,449,461,473],{},[157,450,451],{"className":283,"code":284,"filename":285,"language":286,"meta":162,"style":162},[121,452,453],{"__ignoreMap":162},[166,454,455,457,459],{"class":168,"line":169},[166,456,285],{"class":293},[166,458,296],{"class":225},[166,460,299],{"class":225},[157,462,463],{"className":283,"code":302,"filename":303,"language":286,"meta":162,"style":162},[121,464,465],{"__ignoreMap":162},[166,466,467,469,471],{"class":168,"line":169},[166,468,303],{"class":293},[166,470,312],{"class":225},[166,472,299],{"class":225},[157,474,475],{"className":283,"code":317,"filename":318,"language":286,"meta":162,"style":162},[121,476,477],{"__ignoreMap":162},[166,478,479,481,483],{"class":168,"line":169},[166,480,318],{"class":293},[166,482,296],{"class":225},[166,484,299],{"class":225},[157,486,488],{"className":159,"code":487,"filename":127,"language":161,"meta":162,"style":162},"export default defineNuxtConfig({\n  nuxtRealtime: {\n    redis: {\n      host: 'localhost',\n      port: 6379,\n    },\n  },\n})\n",[121,489,490,502,510,519,533,543,547,551],{"__ignoreMap":162},[166,491,492,494,496,498,500],{"class":168,"line":169},[166,493,173],{"class":172},[166,495,176],{"class":172},[166,497,180],{"class":179},[166,499,184],{"class":183},[166,501,188],{"class":187},[166,503,504,506,508],{"class":168,"line":191},[166,505,195],{"class":194},[166,507,198],{"class":187},[166,509,201],{"class":187},[166,511,512,515,517],{"class":168,"line":204},[166,513,514],{"class":194},"    redis",[166,516,198],{"class":187},[166,518,201],{"class":187},[166,520,521,523,525,527,529,531],{"class":168,"line":214},[166,522,380],{"class":194},[166,524,198],{"class":187},[166,526,222],{"class":187},[166,528,387],{"class":225},[166,530,229],{"class":187},[166,532,232],{"class":187},[166,534,535,537,539,541],{"class":168,"line":235},[166,536,396],{"class":194},[166,538,198],{"class":187},[166,540,402],{"class":401},[166,542,232],{"class":187},[166,544,545],{"class":168,"line":241},[166,546,238],{"class":187},[166,548,549],{"class":168,"line":247},[166,550,244],{"class":187},[166,552,553,555],{"class":168,"line":411},[166,554,250],{"class":187},[166,556,253],{"class":183},[117,558,559],{},"Or use a connection URL:",[157,561,563],{"className":159,"code":562,"filename":127,"language":161,"meta":162,"style":162},"export default defineNuxtConfig({\n  nuxtRealtime: {\n    redis: {\n      url: process.env.REDIS_URL,\n    },\n  },\n})\n",[121,564,565,577,585,593,615,619,623],{"__ignoreMap":162},[166,566,567,569,571,573,575],{"class":168,"line":169},[166,568,173],{"class":172},[166,570,176],{"class":172},[166,572,180],{"class":179},[166,574,184],{"class":183},[166,576,188],{"class":187},[166,578,579,581,583],{"class":168,"line":191},[166,580,195],{"class":194},[166,582,198],{"class":187},[166,584,201],{"class":187},[166,586,587,589,591],{"class":168,"line":204},[166,588,514],{"class":194},[166,590,198],{"class":187},[166,592,201],{"class":187},[166,594,595,598,600,603,605,608,610,613],{"class":168,"line":214},[166,596,597],{"class":194},"      url",[166,599,198],{"class":187},[166,601,602],{"class":183}," process",[166,604,128],{"class":187},[166,606,607],{"class":183},"env",[166,609,128],{"class":187},[166,611,612],{"class":183},"REDIS_URL",[166,614,232],{"class":187},[166,616,617],{"class":168,"line":235},[166,618,238],{"class":187},[166,620,621],{"class":168,"line":241},[166,622,244],{"class":187},[166,624,625,627],{"class":168,"line":247},[166,626,250],{"class":187},[166,628,253],{"class":183},[117,630,631,632,635],{},"For Redis Cluster, use ",[121,633,634],{},"cluster"," instead:",[157,637,639],{"className":159,"code":638,"filename":127,"language":161,"meta":162,"style":162},"export default defineNuxtConfig({\n  nuxtRealtime: {\n    redis: {\n      cluster: [{ host: 'redis-1', port: 6379 }, { host: 'redis-2', port: 6379 }],\n    },\n  },\n})\n",[121,640,641,653,661,669,737,741,745],{"__ignoreMap":162},[166,642,643,645,647,649,651],{"class":168,"line":169},[166,644,173],{"class":172},[166,646,176],{"class":172},[166,648,180],{"class":179},[166,650,184],{"class":183},[166,652,188],{"class":187},[166,654,655,657,659],{"class":168,"line":191},[166,656,195],{"class":194},[166,658,198],{"class":187},[166,660,201],{"class":187},[166,662,663,665,667],{"class":168,"line":204},[166,664,514],{"class":194},[166,666,198],{"class":187},[166,668,201],{"class":187},[166,670,671,674,676,679,682,685,687,689,692,694,697,700,702,704,707,710,712,714,716,719,721,723,725,727,729,732,735],{"class":168,"line":214},[166,672,673],{"class":194},"      cluster",[166,675,198],{"class":187},[166,677,678],{"class":183}," [",[166,680,681],{"class":187},"{",[166,683,684],{"class":194}," host",[166,686,198],{"class":187},[166,688,222],{"class":187},[166,690,691],{"class":225},"redis-1",[166,693,229],{"class":187},[166,695,696],{"class":187},",",[166,698,699],{"class":194}," port",[166,701,198],{"class":187},[166,703,402],{"class":401},[166,705,706],{"class":187}," },",[166,708,709],{"class":187}," {",[166,711,684],{"class":194},[166,713,198],{"class":187},[166,715,222],{"class":187},[166,717,718],{"class":225},"redis-2",[166,720,229],{"class":187},[166,722,696],{"class":187},[166,724,699],{"class":194},[166,726,198],{"class":187},[166,728,402],{"class":401},[166,730,731],{"class":187}," }",[166,733,734],{"class":183},"]",[166,736,232],{"class":187},[166,738,739],{"class":168,"line":235},[166,740,238],{"class":187},[166,742,743],{"class":168,"line":241},[166,744,244],{"class":187},[166,746,747,749],{"class":168,"line":247},[166,748,250],{"class":187},[166,750,253],{"class":183},[149,752,754],{"id":753},"redis-options","Redis options",[756,757,758,774],"table",{},[759,760,761],"thead",{},[762,763,764,768,771],"tr",{},[765,766,767],"th",{},"Option",[765,769,770],{},"Type",[765,772,773],{},"Description",[775,776,777,800,820,842,862,885,906,920,935],"tbody",{},[762,778,779,785,790],{},[780,781,782],"td",{},[121,783,784],{},"host",[780,786,787],{},[121,788,789],{},"string",[780,791,792,793,796,797,128],{},"Redis host. Ignored when ",[121,794,795],{},"url"," is set. Defaults to ",[121,798,799],{},"'localhost'",[762,801,802,807,812],{},[780,803,804],{},[121,805,806],{},"port",[780,808,809],{},[121,810,811],{},"number",[780,813,814,815,796,817,128],{},"Redis port. Ignored when ",[121,816,795],{},[121,818,819],{},"6379",[762,821,822,826,830],{},[780,823,824],{},[121,825,795],{},[780,827,828],{},[121,829,789],{},[780,831,832,833,836,837,839,840,128],{},"Redis connection URL (e.g. ",[121,834,835],{},"redis:\u002F\u002Flocalhost:6379","). Takes priority over ",[121,838,784],{},"\u002F",[121,841,806],{},[762,843,844,848,853],{},[780,845,846],{},[121,847,634],{},[780,849,850],{},[121,851,852],{},"ClusterNode[]",[780,854,855,856,839,858,839,860,128],{},"Cluster nodes. Takes priority over ",[121,857,795],{},[121,859,784],{},[121,861,806],{},[762,863,864,869,874],{},[780,865,866],{},[121,867,868],{},"clusterOptions",[780,870,871],{},[121,872,873],{},"ClusterOptions",[780,875,876,877,880,881,884],{},"Options passed to the ioredis cluster client (e.g. ",[121,878,879],{},"redisOptions",", ",[121,882,883],{},"scaleReads",").",[762,886,887,892,896],{},[780,888,889],{},[121,890,891],{},"password",[780,893,894],{},[121,895,789],{},[780,897,898,899,901,902,905],{},"Redis password. Ignored when ",[121,900,634],{}," is set — use ",[121,903,904],{},"clusterOptions.redisOptions.password"," instead.",[762,907,908,913,917],{},[780,909,910],{},[121,911,912],{},"db",[780,914,915],{},[121,916,811],{},[780,918,919],{},"Redis database index.",[762,921,922,927,932],{},[780,923,924],{},[121,925,926],{},"tls",[780,928,929],{},[121,930,931],{},"object",[780,933,934],{},"TLS options passed to ioredis.",[762,936,937,942,946],{},[780,938,939],{},[121,940,941],{},"base",[780,943,944],{},[121,945,789],{},[780,947,948],{},"Key prefix for all stored values.",[422,950,953],{"color":951,"icon":952},"warning","i-lucide-triangle-alert",[117,954,955,956,958,959,961,962,964],{},"The ",[121,957,256],{}," and ",[121,960,132],{}," options are mutually exclusive. When both are set, ",[121,963,256],{}," takes precedence.",[130,966,968],{"id":967},"engineio-server-options","Engine.IO Server Options",[117,970,971,972,975,976,979,980,983],{},"Pass options to the underlying Engine.IO server via ",[121,973,974],{},"socketio.serverOptions",". These map to ",[121,977,978],{},"engine.io","'s ",[121,981,982],{},"ServerOptions"," (Socket.IO transport-layer options).",[157,985,987],{"className":159,"code":986,"filename":127,"language":161,"meta":162,"style":162},"export default defineNuxtConfig({\n  nuxtRealtime: {\n    socketio: {\n      serverUrl: 'https:\u002F\u002Frealtime.example.com',\n      serverOptions: {\n        cors: {\n          origin: ['https:\u002F\u002Fmyapp.com'],\n          credentials: true,\n        },\n        maxHttpBufferSize: 1e6, \u002F\u002F 1 MB\n      },\n    },\n  },\n})\n",[121,988,989,1001,1009,1018,1034,1043,1052,1072,1085,1090,1107,1113,1118,1123],{"__ignoreMap":162},[166,990,991,993,995,997,999],{"class":168,"line":169},[166,992,173],{"class":172},[166,994,176],{"class":172},[166,996,180],{"class":179},[166,998,184],{"class":183},[166,1000,188],{"class":187},[166,1002,1003,1005,1007],{"class":168,"line":191},[166,1004,195],{"class":194},[166,1006,198],{"class":187},[166,1008,201],{"class":187},[166,1010,1011,1014,1016],{"class":168,"line":204},[166,1012,1013],{"class":194},"    socketio",[166,1015,198],{"class":187},[166,1017,201],{"class":187},[166,1019,1020,1023,1025,1027,1030,1032],{"class":168,"line":214},[166,1021,1022],{"class":194},"      serverUrl",[166,1024,198],{"class":187},[166,1026,222],{"class":187},[166,1028,1029],{"class":225},"https:\u002F\u002Frealtime.example.com",[166,1031,229],{"class":187},[166,1033,232],{"class":187},[166,1035,1036,1039,1041],{"class":168,"line":235},[166,1037,1038],{"class":194},"      serverOptions",[166,1040,198],{"class":187},[166,1042,201],{"class":187},[166,1044,1045,1048,1050],{"class":168,"line":241},[166,1046,1047],{"class":194},"        cors",[166,1049,198],{"class":187},[166,1051,201],{"class":187},[166,1053,1054,1057,1059,1061,1063,1066,1068,1070],{"class":168,"line":247},[166,1055,1056],{"class":194},"          origin",[166,1058,198],{"class":187},[166,1060,678],{"class":183},[166,1062,229],{"class":187},[166,1064,1065],{"class":225},"https:\u002F\u002Fmyapp.com",[166,1067,229],{"class":187},[166,1069,734],{"class":183},[166,1071,232],{"class":187},[166,1073,1074,1077,1079,1083],{"class":168,"line":411},[166,1075,1076],{"class":194},"          credentials",[166,1078,198],{"class":187},[166,1080,1082],{"class":1081},"sfNiH"," true",[166,1084,232],{"class":187},[166,1086,1087],{"class":168,"line":416},[166,1088,1089],{"class":187},"        },\n",[166,1091,1093,1096,1098,1101,1103],{"class":168,"line":1092},10,[166,1094,1095],{"class":194},"        maxHttpBufferSize",[166,1097,198],{"class":187},[166,1099,1100],{"class":401}," 1e6",[166,1102,696],{"class":187},[166,1104,1106],{"class":1105},"sHwdD"," \u002F\u002F 1 MB\n",[166,1108,1110],{"class":168,"line":1109},11,[166,1111,1112],{"class":187},"      },\n",[166,1114,1116],{"class":168,"line":1115},12,[166,1117,238],{"class":187},[166,1119,1121],{"class":168,"line":1120},13,[166,1122,244],{"class":187},[166,1124,1126,1128],{"class":168,"line":1125},14,[166,1127,250],{"class":187},[166,1129,253],{"class":183},[422,1131,1132],{"color":424,"icon":425},[117,1133,1134,1135,1138],{},"CORS is only needed when ",[121,1136,1137],{},"socketio.serverUrl"," points at a different origin than your app. Same-origin connections work without it.",[130,1140,1142],{"id":1141},"key-cleanup","Key Cleanup",[117,1144,1145],{},"Nuxt Realtime automatically removes unused storage keys through a lease-based cleanup system. When no client has subscribed to a key for longer than the idle threshold, the key is deleted.",[117,1147,1148],{},"This is enabled by default with sensible defaults:",[756,1150,1151,1162],{},[759,1152,1153],{},[762,1154,1155,1157,1160],{},[765,1156,767],{},[765,1158,1159],{},"Default",[765,1161,773],{},[775,1163,1164,1180,1195],{},[762,1165,1166,1171,1177],{},[780,1167,1168],{},[121,1169,1170],{},"heartbeatInterval",[780,1172,1173,1176],{},[121,1174,1175],{},"30_000"," ms",[780,1178,1179],{},"How often clients send a heartbeat to keep their keys alive",[762,1181,1182,1187,1192],{},[780,1183,1184],{},[121,1185,1186],{},"cleanupInterval",[780,1188,1189,1176],{},[121,1190,1191],{},"300_000",[780,1193,1194],{},"How often the server scans for and removes expired keys",[762,1196,1197,1202,1207],{},[780,1198,1199],{},[121,1200,1201],{},"idleThreshold",[780,1203,1204,1176],{},[121,1205,1206],{},"3_600_000",[780,1208,1209],{},"How long a key must be idle before it is removed",[149,1211,1213],{"id":1212},"customizing-cleanup","Customizing cleanup",[157,1215,1217],{"className":159,"code":1216,"filename":127,"language":161,"meta":162,"style":162},"export default defineNuxtConfig({\n  nuxtRealtime: {\n    cleanup: {\n      heartbeatInterval: 30_000,   \u002F\u002F 30s\n      cleanupInterval: 300_000,    \u002F\u002F 5 min\n      idleThreshold: 3_600_000,    \u002F\u002F 1 hour\n    },\n  },\n})\n",[121,1218,1219,1231,1239,1248,1263,1278,1293,1297,1301],{"__ignoreMap":162},[166,1220,1221,1223,1225,1227,1229],{"class":168,"line":169},[166,1222,173],{"class":172},[166,1224,176],{"class":172},[166,1226,180],{"class":179},[166,1228,184],{"class":183},[166,1230,188],{"class":187},[166,1232,1233,1235,1237],{"class":168,"line":191},[166,1234,195],{"class":194},[166,1236,198],{"class":187},[166,1238,201],{"class":187},[166,1240,1241,1244,1246],{"class":168,"line":204},[166,1242,1243],{"class":194},"    cleanup",[166,1245,198],{"class":187},[166,1247,201],{"class":187},[166,1249,1250,1253,1255,1258,1260],{"class":168,"line":214},[166,1251,1252],{"class":194},"      heartbeatInterval",[166,1254,198],{"class":187},[166,1256,1257],{"class":401}," 30_000",[166,1259,696],{"class":187},[166,1261,1262],{"class":1105},"   \u002F\u002F 30s\n",[166,1264,1265,1268,1270,1273,1275],{"class":168,"line":235},[166,1266,1267],{"class":194},"      cleanupInterval",[166,1269,198],{"class":187},[166,1271,1272],{"class":401}," 300_000",[166,1274,696],{"class":187},[166,1276,1277],{"class":1105},"    \u002F\u002F 5 min\n",[166,1279,1280,1283,1285,1288,1290],{"class":168,"line":241},[166,1281,1282],{"class":194},"      idleThreshold",[166,1284,198],{"class":187},[166,1286,1287],{"class":401}," 3_600_000",[166,1289,696],{"class":187},[166,1291,1292],{"class":1105},"    \u002F\u002F 1 hour\n",[166,1294,1295],{"class":168,"line":247},[166,1296,238],{"class":187},[166,1298,1299],{"class":168,"line":411},[166,1300,244],{"class":187},[166,1302,1303,1305],{"class":168,"line":416},[166,1304,250],{"class":187},[166,1306,253],{"class":183},[149,1308,1310],{"id":1309},"disabling-cleanup","Disabling cleanup",[117,1312,1313,1314,1317],{},"Set ",[121,1315,1316],{},"cleanup: false"," to opt out entirely. Useful when you manage storage lifecycle yourself or your storage driver handles expiry natively (e.g. Redis TTLs).",[157,1319,1321],{"className":159,"code":1320,"filename":127,"language":161,"meta":162,"style":162},"export default defineNuxtConfig({\n  nuxtRealtime: {\n    cleanup: false,\n  },\n})\n",[121,1322,1323,1335,1343,1354,1358],{"__ignoreMap":162},[166,1324,1325,1327,1329,1331,1333],{"class":168,"line":169},[166,1326,173],{"class":172},[166,1328,176],{"class":172},[166,1330,180],{"class":179},[166,1332,184],{"class":183},[166,1334,188],{"class":187},[166,1336,1337,1339,1341],{"class":168,"line":191},[166,1338,195],{"class":194},[166,1340,198],{"class":187},[166,1342,201],{"class":187},[166,1344,1345,1347,1349,1352],{"class":168,"line":204},[166,1346,1243],{"class":194},[166,1348,198],{"class":187},[166,1350,1351],{"class":1081}," false",[166,1353,232],{"class":187},[166,1355,1356],{"class":168,"line":214},[166,1357,244],{"class":187},[166,1359,1360,1362],{"class":168,"line":235},[166,1361,250],{"class":187},[166,1363,253],{"class":183},[1365,1366,1367],"style",{},"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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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":162,"searchDepth":169,"depth":191,"links":1369},[1370,1374,1377,1378],{"id":132,"depth":191,"text":133,"children":1371},[1372,1373],{"id":151,"depth":204,"text":152},{"id":256,"depth":204,"text":257},{"id":436,"depth":191,"text":269,"children":1375},[1376],{"id":753,"depth":204,"text":754},{"id":967,"depth":191,"text":968},{"id":1141,"depth":191,"text":1142,"children":1379},[1380,1381],{"id":1212,"depth":204,"text":1213},{"id":1309,"depth":204,"text":1310},"Configure storage, Redis, Socket.IO, and key cleanup for Nuxt Realtime.","md",null,{},{"icon":21},{"title":18,"description":1382},"Py8bLja2OmLtaeD4_cBMnO-WrXgVrrZCeCLcmWJeeu0",[1390,1392],{"title":13,"path":14,"stem":15,"description":1391,"icon":16,"children":-1},"Install Nuxt Realtime in your Nuxt application.",{"title":23,"path":24,"stem":25,"description":1393,"icon":26,"children":-1},"Quick overview of the Nuxt Realtime composables.",1787657973111]