[{"data":1,"prerenderedAt":1009},["ShallowReactive",2],{"docs:/docs/concepts/rooms":3},{"id":4,"title":5,"body":6,"description":1002,"extension":1003,"meta":1004,"navigation":64,"path":1005,"seo":1006,"stem":1007,"__hash__":1008},"docs/docs/concepts/rooms.md","Rooms",{"type":7,"value":8,"toc":990},"minimark",[9,13,17,22,25,441,445,450,465,469,472,483,488,702,717,721,858,862,873,876,898,906,910,921,925,939,943,969,973,986],[10,11,5],"h1",{"id":12},"rooms",[14,15,16],"p",{},"Rooms provide logical namespaces for organizing topics within your application.",[18,19,21],"h2",{"id":20},"what-are-rooms","What are Rooms?",[14,23,24],{},"Rooms are containers that group related topics together. They help organize your messaging structure and provide isolation between different contexts (e.g., different game lobbies, chat channels, or user spaces).",[26,27,28,225,299],"code-tabs",{},[29,30,36],"pre",{"className":31,"code":32,"filename":33,"language":34,"meta":35,"style":35},"language-typescript shiki shiki-themes github-light github-dark","import { NoLag } from '@nolag/js-sdk'\n\nconst client = NoLag('your_access_token')\nawait client.connect()\n\n// Set up app and room\nconst room = client.setApp('my-app').setRoom('game-lobby')\n\n// Subscribe to topics within this room\nroom.subscribe('chat')\nroom.subscribe('player-updates')\n\n// Messages are scoped to this room\nroom.emit('chat', { text: 'Hello lobby!' })\n","TypeScript","typescript","",[37,38,39,59,66,92,107,112,119,152,157,163,179,193,198,204],"code",{"__ignoreMap":35},[40,41,44,48,52,55],"span",{"class":42,"line":43},"line",1,[40,45,47],{"class":46},"szBVR","import",[40,49,51],{"class":50},"sVt8B"," { NoLag } ",[40,53,54],{"class":46},"from",[40,56,58],{"class":57},"sZZnC"," '@nolag/js-sdk'\n",[40,60,62],{"class":42,"line":61},2,[40,63,65],{"emptyLinePlaceholder":64},true,"\n",[40,67,69,72,76,79,83,86,89],{"class":42,"line":68},3,[40,70,71],{"class":46},"const",[40,73,75],{"class":74},"sj4cs"," client",[40,77,78],{"class":46}," =",[40,80,82],{"class":81},"sScJk"," NoLag",[40,84,85],{"class":50},"(",[40,87,88],{"class":57},"'your_access_token'",[40,90,91],{"class":50},")\n",[40,93,95,98,101,104],{"class":42,"line":94},4,[40,96,97],{"class":46},"await",[40,99,100],{"class":50}," client.",[40,102,103],{"class":81},"connect",[40,105,106],{"class":50},"()\n",[40,108,110],{"class":42,"line":109},5,[40,111,65],{"emptyLinePlaceholder":64},[40,113,115],{"class":42,"line":114},6,[40,116,118],{"class":117},"sJ8bj","// Set up app and room\n",[40,120,122,124,127,129,131,134,136,139,142,145,147,150],{"class":42,"line":121},7,[40,123,71],{"class":46},[40,125,126],{"class":74}," room",[40,128,78],{"class":46},[40,130,100],{"class":50},[40,132,133],{"class":81},"setApp",[40,135,85],{"class":50},[40,137,138],{"class":57},"'my-app'",[40,140,141],{"class":50},").",[40,143,144],{"class":81},"setRoom",[40,146,85],{"class":50},[40,148,149],{"class":57},"'game-lobby'",[40,151,91],{"class":50},[40,153,155],{"class":42,"line":154},8,[40,156,65],{"emptyLinePlaceholder":64},[40,158,160],{"class":42,"line":159},9,[40,161,162],{"class":117},"// Subscribe to topics within this room\n",[40,164,166,169,172,174,177],{"class":42,"line":165},10,[40,167,168],{"class":50},"room.",[40,170,171],{"class":81},"subscribe",[40,173,85],{"class":50},[40,175,176],{"class":57},"'chat'",[40,178,91],{"class":50},[40,180,182,184,186,188,191],{"class":42,"line":181},11,[40,183,168],{"class":50},[40,185,171],{"class":81},[40,187,85],{"class":50},[40,189,190],{"class":57},"'player-updates'",[40,192,91],{"class":50},[40,194,196],{"class":42,"line":195},12,[40,197,65],{"emptyLinePlaceholder":64},[40,199,201],{"class":42,"line":200},13,[40,202,203],{"class":117},"// Messages are scoped to this room\n",[40,205,207,209,212,214,216,219,222],{"class":42,"line":206},14,[40,208,168],{"class":50},[40,210,211],{"class":81},"emit",[40,213,85],{"class":50},[40,215,176],{"class":57},[40,217,218],{"class":50},", { text: ",[40,220,221],{"class":57},"'Hello lobby!'",[40,223,224],{"class":50}," })\n",[29,226,231],{"className":227,"code":228,"filename":229,"language":230,"meta":35,"style":35},"language-python shiki shiki-themes github-light github-dark","from nolag import NoLag\n\nclient = NoLag('your_access_token')\nawait client.connect()\n\n# Set up app and room\nroom = client.set_app('my-app').set_room('game-lobby')\n\n# Subscribe to topics within this room\nawait room.subscribe('chat')\nawait room.subscribe('player-updates')\n\n# Messages are scoped to this room\nawait room.emit('chat', {'text': 'Hello lobby!'})\n","Python","python",[37,232,233,238,242,247,252,256,261,266,270,275,280,285,289,294],{"__ignoreMap":35},[40,234,235],{"class":42,"line":43},[40,236,237],{},"from nolag import NoLag\n",[40,239,240],{"class":42,"line":61},[40,241,65],{"emptyLinePlaceholder":64},[40,243,244],{"class":42,"line":68},[40,245,246],{},"client = NoLag('your_access_token')\n",[40,248,249],{"class":42,"line":94},[40,250,251],{},"await client.connect()\n",[40,253,254],{"class":42,"line":109},[40,255,65],{"emptyLinePlaceholder":64},[40,257,258],{"class":42,"line":114},[40,259,260],{},"# Set up app and room\n",[40,262,263],{"class":42,"line":121},[40,264,265],{},"room = client.set_app('my-app').set_room('game-lobby')\n",[40,267,268],{"class":42,"line":154},[40,269,65],{"emptyLinePlaceholder":64},[40,271,272],{"class":42,"line":159},[40,273,274],{},"# Subscribe to topics within this room\n",[40,276,277],{"class":42,"line":165},[40,278,279],{},"await room.subscribe('chat')\n",[40,281,282],{"class":42,"line":181},[40,283,284],{},"await room.subscribe('player-updates')\n",[40,286,287],{"class":42,"line":195},[40,288,65],{"emptyLinePlaceholder":64},[40,290,291],{"class":42,"line":200},[40,292,293],{},"# Messages are scoped to this room\n",[40,295,296],{"class":42,"line":206},[40,297,298],{},"await room.emit('chat', {'text': 'Hello lobby!'})\n",[29,300,305],{"className":301,"code":302,"filename":303,"language":304,"meta":35,"style":35},"language-go shiki shiki-themes github-light github-dark","package main\n\nimport (\n    \"fmt\"\n\n    nolag \"github.com/NoLagApp/go-sdk\"\n)\n\nfunc main() {\n    client := nolag.New(\"your_access_token\")\n    client.Connect()\n\n    // Set up app and room\n    room := client.SetApp(\"my-app\").SetRoom(\"game-lobby\")\n\n    // Subscribe to topics within this room\n    room.Subscribe(\"chat\", func(data any, meta nolag.MessageMeta) {\n        fmt.Println(\"Chat:\", data)\n    })\n    room.Subscribe(\"player-updates\", func(data any, meta nolag.MessageMeta) {\n        fmt.Println(\"Player update:\", data)\n    })\n\n    // Messages are scoped to this room\n    room.Emit(\"chat\", map[string]string{\"text\": \"Hello lobby!\"})\n}\n","Go","go",[37,306,307,312,316,321,326,330,335,339,343,348,353,358,362,367,372,377,383,389,395,401,407,413,418,423,429,435],{"__ignoreMap":35},[40,308,309],{"class":42,"line":43},[40,310,311],{},"package main\n",[40,313,314],{"class":42,"line":61},[40,315,65],{"emptyLinePlaceholder":64},[40,317,318],{"class":42,"line":68},[40,319,320],{},"import (\n",[40,322,323],{"class":42,"line":94},[40,324,325],{},"    \"fmt\"\n",[40,327,328],{"class":42,"line":109},[40,329,65],{"emptyLinePlaceholder":64},[40,331,332],{"class":42,"line":114},[40,333,334],{},"    nolag \"github.com/NoLagApp/go-sdk\"\n",[40,336,337],{"class":42,"line":121},[40,338,91],{},[40,340,341],{"class":42,"line":154},[40,342,65],{"emptyLinePlaceholder":64},[40,344,345],{"class":42,"line":159},[40,346,347],{},"func main() {\n",[40,349,350],{"class":42,"line":165},[40,351,352],{},"    client := nolag.New(\"your_access_token\")\n",[40,354,355],{"class":42,"line":181},[40,356,357],{},"    client.Connect()\n",[40,359,360],{"class":42,"line":195},[40,361,65],{"emptyLinePlaceholder":64},[40,363,364],{"class":42,"line":200},[40,365,366],{},"    // Set up app and room\n",[40,368,369],{"class":42,"line":206},[40,370,371],{},"    room := client.SetApp(\"my-app\").SetRoom(\"game-lobby\")\n",[40,373,375],{"class":42,"line":374},15,[40,376,65],{"emptyLinePlaceholder":64},[40,378,380],{"class":42,"line":379},16,[40,381,382],{},"    // Subscribe to topics within this room\n",[40,384,386],{"class":42,"line":385},17,[40,387,388],{},"    room.Subscribe(\"chat\", func(data any, meta nolag.MessageMeta) {\n",[40,390,392],{"class":42,"line":391},18,[40,393,394],{},"        fmt.Println(\"Chat:\", data)\n",[40,396,398],{"class":42,"line":397},19,[40,399,400],{},"    })\n",[40,402,404],{"class":42,"line":403},20,[40,405,406],{},"    room.Subscribe(\"player-updates\", func(data any, meta nolag.MessageMeta) {\n",[40,408,410],{"class":42,"line":409},21,[40,411,412],{},"        fmt.Println(\"Player update:\", data)\n",[40,414,416],{"class":42,"line":415},22,[40,417,400],{},[40,419,421],{"class":42,"line":420},23,[40,422,65],{"emptyLinePlaceholder":64},[40,424,426],{"class":42,"line":425},24,[40,427,428],{},"    // Messages are scoped to this room\n",[40,430,432],{"class":42,"line":431},25,[40,433,434],{},"    room.Emit(\"chat\", map[string]string{\"text\": \"Hello lobby!\"})\n",[40,436,438],{"class":42,"line":437},26,[40,439,440],{},"}\n",[18,442,444],{"id":443},"room-types","Room Types",[446,447,449],"h3",{"id":448},"static-rooms","Static Rooms",[14,451,452,453,456,457,460,461,464],{},"Defined in your app configuration via the dashboard. These rooms exist permanently and are ideal for fixed channels like ",[37,454,455],{},"general",", ",[37,458,459],{},"announcements",", or ",[37,462,463],{},"support",".",[446,466,468],{"id":467},"dynamic-rooms","Dynamic Rooms",[14,470,471],{},"Created programmatically via the REST API for user-specific or session-specific namespaces. Dynamic rooms must be created server-side before clients can connect to them.",[473,474,476],"callout",{"type":475},"warning",[14,477,478,482],{},[479,480,481],"strong",{},"Important:"," Rooms cannot be created via WebSocket connections. You must first create the room and grant actor access using the REST API, then clients can connect via WebSocket.",[484,485,487],"h4",{"id":486},"step-1-create-room-via-api","Step 1: Create Room via API",[26,489,490,600,652],{},[29,491,493],{"className":31,"code":492,"filename":33,"language":34,"meta":35,"style":35},"import { NoLagApi } from '@nolag/js-sdk'\n\nconst api = new NoLagApi('your_api_key')\n\n// Create a dynamic room - inherits topics from app config\nconst room = await api.rooms.create(appId, {\n  name: `game-${gameId}`\n})\n\nconsole.log('Created room:', room.roomId)\n",[37,494,495,506,510,532,536,541,561,575,580,584],{"__ignoreMap":35},[40,496,497,499,502,504],{"class":42,"line":43},[40,498,47],{"class":46},[40,500,501],{"class":50}," { NoLagApi } ",[40,503,54],{"class":46},[40,505,58],{"class":57},[40,507,508],{"class":42,"line":61},[40,509,65],{"emptyLinePlaceholder":64},[40,511,512,514,517,519,522,525,527,530],{"class":42,"line":68},[40,513,71],{"class":46},[40,515,516],{"class":74}," api",[40,518,78],{"class":46},[40,520,521],{"class":46}," new",[40,523,524],{"class":81}," NoLagApi",[40,526,85],{"class":50},[40,528,529],{"class":57},"'your_api_key'",[40,531,91],{"class":50},[40,533,534],{"class":42,"line":94},[40,535,65],{"emptyLinePlaceholder":64},[40,537,538],{"class":42,"line":109},[40,539,540],{"class":117},"// Create a dynamic room - inherits topics from app config\n",[40,542,543,545,547,549,552,555,558],{"class":42,"line":114},[40,544,71],{"class":46},[40,546,126],{"class":74},[40,548,78],{"class":46},[40,550,551],{"class":46}," await",[40,553,554],{"class":50}," api.rooms.",[40,556,557],{"class":81},"create",[40,559,560],{"class":50},"(appId, {\n",[40,562,563,566,569,572],{"class":42,"line":121},[40,564,565],{"class":50},"  name: ",[40,567,568],{"class":57},"`game-${",[40,570,571],{"class":50},"gameId",[40,573,574],{"class":57},"}`\n",[40,576,577],{"class":42,"line":154},[40,578,579],{"class":50},"})\n",[40,581,582],{"class":42,"line":159},[40,583,65],{"emptyLinePlaceholder":64},[40,585,586,589,592,594,597],{"class":42,"line":165},[40,587,588],{"class":50},"console.",[40,590,591],{"class":81},"log",[40,593,85],{"class":50},[40,595,596],{"class":57},"'Created room:'",[40,598,599],{"class":50},", room.roomId)\n",[29,601,603],{"className":227,"code":602,"filename":229,"language":230,"meta":35,"style":35},"from nolag import NoLagApi, RoomCreate\n\napi = NoLagApi('your_api_key')\n\n# Create a dynamic room - inherits topics from app config\nroom = await api.rooms.create(app_id, RoomCreate(\n    name=f'game-{game_id}'\n))\n\nprint('Created room:', room.room_id)\n",[37,604,605,610,614,619,623,628,633,638,643,647],{"__ignoreMap":35},[40,606,607],{"class":42,"line":43},[40,608,609],{},"from nolag import NoLagApi, RoomCreate\n",[40,611,612],{"class":42,"line":61},[40,613,65],{"emptyLinePlaceholder":64},[40,615,616],{"class":42,"line":68},[40,617,618],{},"api = NoLagApi('your_api_key')\n",[40,620,621],{"class":42,"line":94},[40,622,65],{"emptyLinePlaceholder":64},[40,624,625],{"class":42,"line":109},[40,626,627],{},"# Create a dynamic room - inherits topics from app config\n",[40,629,630],{"class":42,"line":114},[40,631,632],{},"room = await api.rooms.create(app_id, RoomCreate(\n",[40,634,635],{"class":42,"line":121},[40,636,637],{},"    name=f'game-{game_id}'\n",[40,639,640],{"class":42,"line":154},[40,641,642],{},"))\n",[40,644,645],{"class":42,"line":159},[40,646,65],{"emptyLinePlaceholder":64},[40,648,649],{"class":42,"line":165},[40,650,651],{},"print('Created room:', room.room_id)\n",[29,653,655],{"className":301,"code":654,"filename":303,"language":304,"meta":35,"style":35},"import nolag \"github.com/NoLagApp/go-sdk\"\n\napi := nolag.NewAPI(\"your_api_key\")\n\n// Create a dynamic room - inherits topics from app config\nroom, err := api.Rooms.Create(ctx, appID, nolag.RoomCreate{\n    Name: fmt.Sprintf(\"game-%s\", gameID),\n})\n\nfmt.Println(\"Created room:\", room.RoomID)\n",[37,656,657,662,666,671,675,679,684,689,693,697],{"__ignoreMap":35},[40,658,659],{"class":42,"line":43},[40,660,661],{},"import nolag \"github.com/NoLagApp/go-sdk\"\n",[40,663,664],{"class":42,"line":61},[40,665,65],{"emptyLinePlaceholder":64},[40,667,668],{"class":42,"line":68},[40,669,670],{},"api := nolag.NewAPI(\"your_api_key\")\n",[40,672,673],{"class":42,"line":94},[40,674,65],{"emptyLinePlaceholder":64},[40,676,677],{"class":42,"line":109},[40,678,540],{},[40,680,681],{"class":42,"line":114},[40,682,683],{},"room, err := api.Rooms.Create(ctx, appID, nolag.RoomCreate{\n",[40,685,686],{"class":42,"line":121},[40,687,688],{},"    Name: fmt.Sprintf(\"game-%s\", gameID),\n",[40,690,691],{"class":42,"line":154},[40,692,579],{},[40,694,695],{"class":42,"line":159},[40,696,65],{"emptyLinePlaceholder":64},[40,698,699],{"class":42,"line":165},[40,700,701],{},"fmt.Println(\"Created room:\", room.RoomID)\n",[473,703,705],{"type":704},"info",[14,706,707,710,711,716],{},[479,708,709],{},"Access control:"," Actor access and permissions for rooms are managed through the ",[712,713,715],"a",{"href":714},"/docs/concepts/acl","NoLag Dashboard or ACL configuration",", not programmatically via the SDK's REST client.",[484,718,720],{"id":719},"step-2-connect-via-websocket","Step 2: Connect via WebSocket",[26,722,723,791,816],{},[29,724,726],{"className":31,"code":725,"filename":33,"language":34,"meta":35,"style":35},"// After room is created via API, connect to it via WebSocket\nconst gameRoom = client.setApp('my-app').setRoom(`game-${gameId}`)\ngameRoom.subscribe('moves')\ngameRoom.subscribe('chat')\n",[37,727,728,733,765,779],{"__ignoreMap":35},[40,729,730],{"class":42,"line":43},[40,731,732],{"class":117},"// After room is created via API, connect to it via WebSocket\n",[40,734,735,737,740,742,744,746,748,750,752,754,756,758,760,763],{"class":42,"line":61},[40,736,71],{"class":46},[40,738,739],{"class":74}," gameRoom",[40,741,78],{"class":46},[40,743,100],{"class":50},[40,745,133],{"class":81},[40,747,85],{"class":50},[40,749,138],{"class":57},[40,751,141],{"class":50},[40,753,144],{"class":81},[40,755,85],{"class":50},[40,757,568],{"class":57},[40,759,571],{"class":50},[40,761,762],{"class":57},"}`",[40,764,91],{"class":50},[40,766,767,770,772,774,777],{"class":42,"line":68},[40,768,769],{"class":50},"gameRoom.",[40,771,171],{"class":81},[40,773,85],{"class":50},[40,775,776],{"class":57},"'moves'",[40,778,91],{"class":50},[40,780,781,783,785,787,789],{"class":42,"line":94},[40,782,769],{"class":50},[40,784,171],{"class":81},[40,786,85],{"class":50},[40,788,176],{"class":57},[40,790,91],{"class":50},[29,792,794],{"className":227,"code":793,"filename":229,"language":230,"meta":35,"style":35},"# After room is created via API, connect to it via WebSocket\ngame_room = client.set_app('my-app').set_room(f'game-{game_id}')\nawait game_room.subscribe('moves')\nawait game_room.subscribe('chat')\n",[37,795,796,801,806,811],{"__ignoreMap":35},[40,797,798],{"class":42,"line":43},[40,799,800],{},"# After room is created via API, connect to it via WebSocket\n",[40,802,803],{"class":42,"line":61},[40,804,805],{},"game_room = client.set_app('my-app').set_room(f'game-{game_id}')\n",[40,807,808],{"class":42,"line":68},[40,809,810],{},"await game_room.subscribe('moves')\n",[40,812,813],{"class":42,"line":94},[40,814,815],{},"await game_room.subscribe('chat')\n",[29,817,819],{"className":301,"code":818,"filename":303,"language":304,"meta":35,"style":35},"// After room is created via API, connect to it via WebSocket\ngameRoom := client.SetApp(\"my-app\").SetRoom(fmt.Sprintf(\"game-%s\", gameID))\ngameRoom.Subscribe(\"moves\", func(data any, meta nolag.MessageMeta) {\n    fmt.Println(\"Move:\", data)\n})\ngameRoom.Subscribe(\"chat\", func(data any, meta nolag.MessageMeta) {\n    fmt.Println(\"Chat:\", data)\n})\n",[37,820,821,825,830,835,840,844,849,854],{"__ignoreMap":35},[40,822,823],{"class":42,"line":43},[40,824,732],{},[40,826,827],{"class":42,"line":61},[40,828,829],{},"gameRoom := client.SetApp(\"my-app\").SetRoom(fmt.Sprintf(\"game-%s\", gameID))\n",[40,831,832],{"class":42,"line":68},[40,833,834],{},"gameRoom.Subscribe(\"moves\", func(data any, meta nolag.MessageMeta) {\n",[40,836,837],{"class":42,"line":94},[40,838,839],{},"    fmt.Println(\"Move:\", data)\n",[40,841,842],{"class":42,"line":109},[40,843,579],{},[40,845,846],{"class":42,"line":114},[40,847,848],{},"gameRoom.Subscribe(\"chat\", func(data any, meta nolag.MessageMeta) {\n",[40,850,851],{"class":42,"line":121},[40,852,853],{},"    fmt.Println(\"Chat:\", data)\n",[40,855,856],{"class":42,"line":154},[40,857,579],{},[18,859,861],{"id":860},"public-vs-private-rooms","Public vs Private Rooms",[14,863,864,865,868,869,872],{},"By default, rooms are ",[479,866,867],{},"public",", meaning any actor with access to the app can connect to them. The moment you attach one or more actors to a room, that room becomes ",[479,870,871],{},"private",". Only the attached actors can access it.",[14,874,875],{},"This means access control is built into room assignment rather than requiring separate permission rules. A few examples:",[877,878,879,886,892],"ul",{},[880,881,882,885],"li",{},[479,883,884],{},"Notifications:"," attach a user to their own room, and only they receive their notifications",[880,887,888,891],{},[479,889,890],{},"Team chat:"," attach team members to a shared room, and outsiders can't join",[880,893,894,897],{},[479,895,896],{},"Device telemetry:"," attach a device and its owner to a room, isolating the data stream",[473,899,900],{"type":704},[14,901,902,905],{},[479,903,904],{},"No actors attached = public."," At least one actor attached = private. There is no toggle; the presence of actor assignments is what makes a room private.",[18,907,909],{"id":908},"topic-inheritance","Topic Inheritance",[14,911,912,913,916,917,920],{},"Every room inherits the topics defined on its parent app. When you create a chat app with ",[37,914,915],{},"messages"," and ",[37,918,919],{},"_typing"," topics, every room in that app, whether static or dynamic, automatically has both topics available. You configure topics once at the app level and they scale to thousands of rooms.",[18,922,924],{"id":923},"topic-resolution","Topic Resolution",[14,926,927,928,931,932,935,936,464],{},"Topics within a room are namespaced automatically. When you subscribe to ",[37,929,930],{},"chat"," in room ",[37,933,934],{},"game-lobby",", the full topic path is ",[37,937,938],{},"my-app/game-lobby/chat",[18,940,942],{"id":941},"use-cases","Use Cases",[877,944,945,951,957,963],{},[880,946,947,950],{},[479,948,949],{},"Game lobbies"," - Each game session gets its own room",[880,952,953,956],{},[479,954,955],{},"Chat channels"," - Separate rooms for different conversations",[880,958,959,962],{},[479,960,961],{},"User spaces"," - Private rooms for user-specific notifications",[880,964,965,968],{},[479,966,967],{},"Multi-tenant apps"," - Isolate data between organizations",[18,970,972],{"id":971},"next-steps","Next Steps",[877,974,975,981],{},[880,976,977],{},[712,978,980],{"href":979},"/docs/concepts/topics","Learn about Topics",[880,982,983],{},[712,984,985],{"href":714},"Set up Access Control",[987,988,989],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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":35,"searchDepth":61,"depth":61,"links":991},[992,993,997,998,999,1000,1001],{"id":20,"depth":61,"text":21},{"id":443,"depth":61,"text":444,"children":994},[995,996],{"id":448,"depth":68,"text":449},{"id":467,"depth":68,"text":468},{"id":860,"depth":61,"text":861},{"id":908,"depth":61,"text":909},{"id":923,"depth":61,"text":924},{"id":941,"depth":61,"text":942},{"id":971,"depth":61,"text":972},"Learn about NoLag rooms for organizing topics and managing message namespaces.","md",{},"/docs/concepts/rooms",{"title":5,"description":1002},"docs/concepts/rooms","NWph9gfMIR0B8U4TTOlrlbGk_LjBO-uExWXnGIC93TA",1788160343076]