[{"data":1,"prerenderedAt":813},["ShallowReactive",2],{"navigation":3,"reference-navigation":62,"\u002Fdocs\u002Fbundle-developer\u002Flayout":365,"\u002Fdocs\u002Fbundle-developer\u002Flayout-surround":808},[4,22,26,30,34,38,42,46,50,54,58],{"title":5,"path":6,"stem":7,"children":8},"Bundle Developer","\u002Fdocs\u002Fbundle-developer","1.docs\u002F1.bundle-developer\u002Findex",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Terminology","\u002Fdocs\u002Fbundle-developer\u002Fterminology","1.docs\u002F1.bundle-developer\u002F1.terminology",{"title":15,"path":16,"stem":17},"Prerequisites","\u002Fdocs\u002Fbundle-developer\u002Fprerequisites","1.docs\u002F1.bundle-developer\u002F2.prerequisites",{"title":19,"path":20,"stem":21},"Bundle Layout","\u002Fdocs\u002Fbundle-developer\u002Flayout","1.docs\u002F1.bundle-developer\u002F3.layout",{"title":23,"path":24,"stem":25},"Custom Registry Developer Guide","\u002Fdocs\u002Fcustom-registries","1.docs\u002Fcustom-registries",{"title":27,"path":28,"stem":29},"Defining Bundle Entities","\u002Fdocs\u002Fdefining-bundle-entities","1.docs\u002Fdefining-bundle-entities",{"title":31,"path":32,"stem":33},"Defining Bundle Sounds","\u002Fdocs\u002Fdefining-bundle-sounds","1.docs\u002Fdefining-bundle-sounds",{"title":35,"path":36,"stem":37},"Defining Bundle Tile Transitions","\u002Fdocs\u002Fdefining-bundle-tile-transitions","1.docs\u002Fdefining-bundle-tile-transitions",{"title":39,"path":40,"stem":41},"Defining Bundle Tiles","\u002Fdocs\u002Fdefining-bundle-tiles","1.docs\u002Fdefining-bundle-tiles",{"title":43,"path":44,"stem":45},"Defining Bundle Visuals","\u002Fdocs\u002Fdefining-bundle-visuals","1.docs\u002Fdefining-bundle-visuals",{"title":47,"path":48,"stem":49},"Bundle Event System Developer Guide","\u002Fdocs\u002Fevent-system","1.docs\u002Fevent-system",{"title":51,"path":52,"stem":53},"Getting Started with Selene Bundles","\u002Fdocs\u002Fgetting-started-bundles","1.docs\u002Fgetting-started-bundles",{"title":55,"path":56,"stem":57},"Making Resource Packs","\u002Fdocs\u002Fmaking-resource-packs","1.docs\u002Fmaking-resource-packs",{"title":59,"path":60,"stem":61},"Bundle Network API Developer Guide","\u002Fdocs\u002Fnetwork-apis","1.docs\u002Fnetwork-apis",[63,212,253],{"title":64,"path":65,"stem":66,"children":67,"page":121},"Modules","\u002Freference\u002Fmodules","2.reference\u002F1.modules",[68,122,167],{"title":69,"path":70,"stem":71,"children":72,"page":121},"Common","\u002Freference\u002Fmodules\u002Fcommon","2.reference\u002F1.modules\u002F1.common",[73,77,81,85,89,93,97,101,105,109,113,117],{"title":74,"path":75,"stem":76},"debug","\u002Freference\u002Fmodules\u002Fcommon\u002Fdebug","2.reference\u002F1.modules\u002F1.common\u002Fdebug",{"title":78,"path":79,"stem":80},"mathx","\u002Freference\u002Fmodules\u002Fcommon\u002Fmathx","2.reference\u002F1.modules\u002F1.common\u002Fmathx",{"title":82,"path":83,"stem":84},"os","\u002Freference\u002Fmodules\u002Fcommon\u002Fos","2.reference\u002F1.modules\u002F1.common\u002Fos",{"title":86,"path":87,"stem":88},"package","\u002Freference\u002Fmodules\u002Fcommon\u002Fpackage","2.reference\u002F1.modules\u002F1.common\u002Fpackage",{"title":90,"path":91,"stem":92},"selene.grid","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.grid","2.reference\u002F1.modules\u002F1.common\u002Fselene.grid",{"title":94,"path":95,"stem":96},"selene.http","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.http","2.reference\u002F1.modules\u002F1.common\u002Fselene.http",{"title":98,"path":99,"stem":100},"selene.i18n","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.i18n","2.reference\u002F1.modules\u002F1.common\u002Fselene.i18n",{"title":102,"path":103,"stem":104},"selene.registries","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.registries","2.reference\u002F1.modules\u002F1.common\u002Fselene.registries",{"title":106,"path":107,"stem":108},"selene.resources","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.resources","2.reference\u002F1.modules\u002F1.common\u002Fselene.resources",{"title":110,"path":111,"stem":112},"selene.schedules","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.schedules","2.reference\u002F1.modules\u002F1.common\u002Fselene.schedules",{"title":114,"path":115,"stem":116},"stringx","\u002Freference\u002Fmodules\u002Fcommon\u002Fstringx","2.reference\u002F1.modules\u002F1.common\u002Fstringx",{"title":118,"path":119,"stem":120},"tablex","\u002Freference\u002Fmodules\u002Fcommon\u002Ftablex","2.reference\u002F1.modules\u002F1.common\u002Ftablex",false,{"title":123,"path":124,"stem":125,"children":126,"page":121},"Server","\u002Freference\u002Fmodules\u002Fserver","2.reference\u002F1.modules\u002F2.server",[127,131,135,139,143,147,151,155,159,163],{"title":128,"path":129,"stem":130},"selene.attributes","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.attributes","2.reference\u002F1.modules\u002F2.server\u002Fselene.attributes",{"title":132,"path":133,"stem":134},"selene.config","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.config","2.reference\u002F1.modules\u002F2.server\u002Fselene.config",{"title":136,"path":137,"stem":138},"selene.dimensions","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.dimensions","2.reference\u002F1.modules\u002F2.server\u002Fselene.dimensions",{"title":140,"path":141,"stem":142},"selene.entities","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.entities","2.reference\u002F1.modules\u002F2.server\u002Fselene.entities",{"title":144,"path":145,"stem":146},"selene.map","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.map","2.reference\u002F1.modules\u002F2.server\u002Fselene.map",{"title":148,"path":149,"stem":150},"selene.network","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.network","2.reference\u002F1.modules\u002F2.server\u002Fselene.network",{"title":152,"path":153,"stem":154},"selene.players","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.players","2.reference\u002F1.modules\u002F2.server\u002Fselene.players",{"title":156,"path":157,"stem":158},"selene.saves","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.saves","2.reference\u002F1.modules\u002F2.server\u002Fselene.saves",{"title":160,"path":161,"stem":162},"selene.server","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.server","2.reference\u002F1.modules\u002F2.server\u002Fselene.server",{"title":164,"path":165,"stem":166},"selene.sounds","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.sounds","2.reference\u002F1.modules\u002F2.server\u002Fselene.sounds",{"title":168,"path":169,"stem":170,"children":171,"page":121},"Client","\u002Freference\u002Fmodules\u002Fclient","2.reference\u002F1.modules\u002F3.client",[172,176,179,183,187,190,194,197,200,204,208],{"title":173,"path":174,"stem":175},"selene.camera","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.camera","2.reference\u002F1.modules\u002F3.client\u002Fselene.camera",{"title":140,"path":177,"stem":178},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.entities","2.reference\u002F1.modules\u002F3.client\u002Fselene.entities",{"title":180,"path":181,"stem":182},"selene.game","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.game","2.reference\u002F1.modules\u002F3.client\u002Fselene.game",{"title":184,"path":185,"stem":186},"selene.input","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.input","2.reference\u002F1.modules\u002F3.client\u002Fselene.input",{"title":144,"path":188,"stem":189},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.map","2.reference\u002F1.modules\u002F3.client\u002Fselene.map",{"title":191,"path":192,"stem":193},"selene.movement.grid","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.movement.grid","2.reference\u002F1.modules\u002F3.client\u002Fselene.movement.grid",{"title":148,"path":195,"stem":196},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.network","2.reference\u002F1.modules\u002F3.client\u002Fselene.network",{"title":164,"path":198,"stem":199},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.sounds","2.reference\u002F1.modules\u002F3.client\u002Fselene.sounds",{"title":201,"path":202,"stem":203},"selene.textures","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.textures","2.reference\u002F1.modules\u002F3.client\u002Fselene.textures",{"title":205,"path":206,"stem":207},"selene.ui.lml","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.ui.lml","2.reference\u002F1.modules\u002F3.client\u002Fselene.ui.lml",{"title":209,"path":210,"stem":211},"selene.visuals","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.visuals","2.reference\u002F1.modules\u002F3.client\u002Fselene.visuals",{"title":213,"path":214,"stem":215,"children":216,"page":121},"Data","\u002Freference\u002Fdata","2.reference\u002F2.data",[217,241],{"title":69,"path":218,"stem":219,"children":220,"page":121},"\u002Freference\u002Fdata\u002Fcommon","2.reference\u002F2.data\u002F1.common",[221,225,229,233,237],{"title":222,"path":223,"stem":224},"Component Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fcomponentdefinition","2.reference\u002F2.data\u002F1.common\u002FComponentDefinition",{"title":226,"path":227,"stem":228},"Entity Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fentitydefinition","2.reference\u002F2.data\u002F1.common\u002FEntityDefinition",{"title":230,"path":231,"stem":232},"Sound Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fsounddefinition","2.reference\u002F2.data\u002F1.common\u002FSoundDefinition",{"title":234,"path":235,"stem":236},"Tile Definition","\u002Freference\u002Fdata\u002Fcommon\u002Ftiledefinition","2.reference\u002F2.data\u002F1.common\u002FTileDefinition",{"title":238,"path":239,"stem":240},"Transition Definition","\u002Freference\u002Fdata\u002Fcommon\u002Ftransitiondefinition","2.reference\u002F2.data\u002F1.common\u002FTransitionDefinition",{"title":168,"path":242,"stem":243,"children":244,"page":121},"\u002Freference\u002Fdata\u002Fclient","2.reference\u002F2.data\u002F3.client",[245,249],{"title":246,"path":247,"stem":248},"Audio Definition","\u002Freference\u002Fdata\u002Fclient\u002Faudiodefinition","2.reference\u002F2.data\u002F3.client\u002FAudioDefinition",{"title":250,"path":251,"stem":252},"Visual Definition","\u002Freference\u002Fdata\u002Fclient\u002Fvisualdefinition","2.reference\u002F2.data\u002F3.client\u002FVisualDefinition",{"title":254,"path":255,"stem":256,"children":257,"page":121},"Classes","\u002Freference\u002Fclasses","2.reference\u002F3.classes",[258,286,318],{"title":69,"path":259,"stem":260,"children":261,"page":121},"\u002Freference\u002Fclasses\u002Fcommon","2.reference\u002F3.classes\u002F1.common",[262,266,270,274,278,282],{"title":263,"path":264,"stem":265},"Coordinate","\u002Freference\u002Fclasses\u002Fcommon\u002Fcoordinate","2.reference\u002F3.classes\u002F1.common\u002FCoordinate",{"title":267,"path":268,"stem":269},"CustomRegistryObject","\u002Freference\u002Fclasses\u002Fcommon\u002Fcustomregistryobject","2.reference\u002F3.classes\u002F1.common\u002FCustomRegistryObject",{"title":271,"path":272,"stem":273},"LuaReference","\u002Freference\u002Fclasses\u002Fcommon\u002Fluareference","2.reference\u002F3.classes\u002F1.common\u002FLuaReference",{"title":275,"path":276,"stem":277},"Observable","\u002Freference\u002Fclasses\u002Fcommon\u002Fobservable","2.reference\u002F3.classes\u002F1.common\u002FObservable",{"title":279,"path":280,"stem":281},"RegistryObject","\u002Freference\u002Fclasses\u002Fcommon\u002Fregistryobject","2.reference\u002F3.classes\u002F1.common\u002FRegistryObject",{"title":283,"path":284,"stem":285},"Signal","\u002Freference\u002Fclasses\u002Fcommon\u002Fsignal","2.reference\u002F3.classes\u002F1.common\u002FSignal",{"title":123,"path":287,"stem":288,"children":289,"page":121},"\u002Freference\u002Fclasses\u002Fserver","2.reference\u002F3.classes\u002F2.server",[290,294,298,302,306,310,314],{"title":291,"path":292,"stem":293},"Dimension","\u002Freference\u002Fclasses\u002Fserver\u002Fdimension","2.reference\u002F3.classes\u002F2.server\u002FDimension",{"title":295,"path":296,"stem":297},"Entity","\u002Freference\u002Fclasses\u002Fserver\u002Fentity","2.reference\u002F3.classes\u002F2.server\u002FEntity",{"title":299,"path":300,"stem":301},"LoginQueueEntry","\u002Freference\u002Fclasses\u002Fserver\u002Floginqueueentry","2.reference\u002F3.classes\u002F2.server\u002FLoginQueueEntry",{"title":303,"path":304,"stem":305},"MapTree","\u002Freference\u002Fclasses\u002Fserver\u002Fmaptree","2.reference\u002F3.classes\u002F2.server\u002FMapTree",{"title":307,"path":308,"stem":309},"Player","\u002Freference\u002Fclasses\u002Fserver\u002Fplayer","2.reference\u002F3.classes\u002F2.server\u002FPlayer",{"title":311,"path":312,"stem":313},"ScopedChunkView","\u002Freference\u002Fclasses\u002Fserver\u002Fscopedchunkview","2.reference\u002F3.classes\u002F2.server\u002FScopedChunkView",{"title":315,"path":316,"stem":317},"TransientTile","\u002Freference\u002Fclasses\u002Fserver\u002Ftransienttile","2.reference\u002F3.classes\u002F2.server\u002FTransientTile",{"title":168,"path":319,"stem":320,"children":321,"page":121},"\u002Freference\u002Fclasses\u002Fclient","2.reference\u002F3.classes\u002F3.client",[322,326,330,334,337,341,345,349,353,357,361],{"title":323,"path":324,"stem":325},"Actor","\u002Freference\u002Fclasses\u002Fclient\u002Factor","2.reference\u002F3.classes\u002F3.client\u002FActor",{"title":327,"path":328,"stem":329},"Drawable","\u002Freference\u002Fclasses\u002Fclient\u002Fdrawable","2.reference\u002F3.classes\u002F3.client\u002FDrawable",{"title":331,"path":332,"stem":333},"DrawableVisual2D","\u002Freference\u002Fclasses\u002Fclient\u002Fdrawablevisual2d","2.reference\u002F3.classes\u002F3.client\u002FDrawableVisual2D",{"title":295,"path":335,"stem":336},"\u002Freference\u002Fclasses\u002Fclient\u002Fentity","2.reference\u002F3.classes\u002F3.client\u002FEntity",{"title":338,"path":339,"stem":340},"IsoVisualComponent","\u002Freference\u002Fclasses\u002Fclient\u002Fisovisualcomponent","2.reference\u002F3.classes\u002F3.client\u002FIsoVisualComponent",{"title":342,"path":343,"stem":344},"LuaTexture","\u002Freference\u002Fclasses\u002Fclient\u002Fluatexture","2.reference\u002F3.classes\u002F3.client\u002FLuaTexture",{"title":346,"path":347,"stem":348},"Skin","\u002Freference\u002Fclasses\u002Fclient\u002Fskin","2.reference\u002F3.classes\u002F3.client\u002FSkin",{"title":350,"path":351,"stem":352},"TextFieldTextFieldClickListener","\u002Freference\u002Fclasses\u002Fclient\u002Ftextfield.textfieldclicklistener","2.reference\u002F3.classes\u002F3.client\u002FTextField.TextFieldClickListener",{"title":354,"path":355,"stem":356},"Tile","\u002Freference\u002Fclasses\u002Fclient\u002Ftile","2.reference\u002F3.classes\u002F3.client\u002FTile",{"title":358,"path":359,"stem":360},"Visual2D","\u002Freference\u002Fclasses\u002Fclient\u002Fvisual2d","2.reference\u002F3.classes\u002F3.client\u002FVisual2D",{"title":362,"path":363,"stem":364},"Visual2DComponent","\u002Freference\u002Fclasses\u002Fclient\u002Fvisual2dcomponent","2.reference\u002F3.classes\u002F3.client\u002FVisual2DComponent",{"id":366,"title":19,"body":367,"description":802,"extension":803,"meta":804,"navigation":805,"path":20,"seo":806,"stem":21,"__hash__":807},"docs\u002F1.docs\u002F1.bundle-developer\u002F3.layout.md",{"type":368,"value":369,"toc":794},"minimark",[370,375,379,390,393,466,470,473,495,498,527,531,534,561,568,572,579,625,628,632,639,724,727,731,734,751,754,787,790],[371,372,374],"h2",{"id":373},"minimal-server-tested-bundle","Minimal server-tested bundle",[376,377,378],"p",{},"This is the smallest practical layout for a bundle you want to load through the server runtime:",[380,381,387],"pre",{"className":382,"code":384,"language":385,"meta":386},[383],"language-text","bundles\u002F\n  example.bundle\u002F\n    bundle.json\n    server\u002F\n      init.lua\n","text","",[388,389,384],"code",{"__ignoreMap":386},[376,391,392],{},"Example manifest:",[380,394,398],{"className":395,"code":396,"language":397,"meta":386,"style":386},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"example.bundle\",\n  \"description\": \"Minimal server bundle\",\n  \"entrypoints\": [\n    \"server\u002Finit.lua\"\n  ]\n}\n","json",[388,399,400,409,426,439,448,454,460],{"__ignoreMap":386},[401,402,405],"span",{"class":403,"line":404},"line",1,[401,406,408],{"class":407},"sVt8B","{\n",[401,410,412,416,419,423],{"class":403,"line":411},2,[401,413,415],{"class":414},"sj4cs","  \"name\"",[401,417,418],{"class":407},": ",[401,420,422],{"class":421},"sZZnC","\"example.bundle\"",[401,424,425],{"class":407},",\n",[401,427,429,432,434,437],{"class":403,"line":428},3,[401,430,431],{"class":414},"  \"description\"",[401,433,418],{"class":407},[401,435,436],{"class":421},"\"Minimal server bundle\"",[401,438,425],{"class":407},[401,440,442,445],{"class":403,"line":441},4,[401,443,444],{"class":414},"  \"entrypoints\"",[401,446,447],{"class":407},": [\n",[401,449,451],{"class":403,"line":450},5,[401,452,453],{"class":421},"    \"server\u002Finit.lua\"\n",[401,455,457],{"class":403,"line":456},6,[401,458,459],{"class":407},"  ]\n",[401,461,463],{"class":403,"line":462},7,[401,464,465],{"class":407},"}\n",[371,467,469],{"id":468},"runtime-folder-conventions","Runtime folder conventions",[376,471,472],{},"Selene consistently distinguishes three script roots:",[474,475,476,483,489],"ul",{},[477,478,479,482],"li",{},[388,480,481],{},"common\u002F",": shared across runtimes",[477,484,485,488],{},[388,486,487],{},"server\u002F",": server-only",[477,490,491,494],{},[388,492,493],{},"client\u002F",": client-only",[376,496,497],{},"Those roots affect more than execution:",[474,499,500,503,510,524],{},[477,501,502],{},"Entrypoint filters decide which files may run in each runtime",[477,504,505,506,509],{},"Script hot reload watches ",[388,507,508],{},"common"," plus the active runtime root",[477,511,512,513,516,517,520,521],{},"Messages are loaded from ",[388,514,515],{},"client\u002Fi18n",", ",[388,518,519],{},"common\u002Fi18n",", and ",[388,522,523],{},"server\u002Fi18n",[477,525,526],{},"Bundle data and assets are watched by path under bundle-owned runtime directories",[371,528,530],{"id":529},"lua-module-naming","Lua module naming",[376,532,533],{},"Selene maps Lua files to module names like this:",[474,535,536,545,553],{},[477,537,538,541,542],{},[388,539,540],{},"init.lua"," becomes ",[388,543,544],{},"\u003Cbundle-name>",[477,546,547,541,550],{},[388,548,549],{},"common\u002Ffoo.lua",[388,551,552],{},"\u003Cbundle-name>.common.foo",[477,554,555,541,558],{},[388,556,557],{},"server\u002Fworld\u002Fspawn.lua",[388,559,560],{},"\u003Cbundle-name>.server.world.spawn",[376,562,563,564,567],{},"That naming matters when you use ",[388,565,566],{},"require(...)"," and when Selene reloads Lua state.",[371,569,571],{"id":570},"dependencies-and-load-order","Dependencies and load order",[376,573,574,575,578],{},"Declare bundle dependencies explicitly in ",[388,576,577],{},"bundle.json",":",[380,580,582],{"className":395,"code":581,"language":397,"meta":386,"style":386},"{\n  \"name\": \"example.bundle\",\n  \"dependencies\": [\n    \"base.bundle\",\n    \"ui.bundle\"\n  ]\n}\n",[388,583,584,588,598,605,612,617,621],{"__ignoreMap":386},[401,585,586],{"class":403,"line":404},[401,587,408],{"class":407},[401,589,590,592,594,596],{"class":403,"line":411},[401,591,415],{"class":414},[401,593,418],{"class":407},[401,595,422],{"class":421},[401,597,425],{"class":407},[401,599,600,603],{"class":403,"line":428},[401,601,602],{"class":414},"  \"dependencies\"",[401,604,447],{"class":407},[401,606,607,610],{"class":403,"line":441},[401,608,609],{"class":421},"    \"base.bundle\"",[401,611,425],{"class":407},[401,613,614],{"class":403,"line":450},[401,615,616],{"class":421},"    \"ui.bundle\"\n",[401,618,619],{"class":403,"line":456},[401,620,459],{"class":407},[401,622,623],{"class":403,"line":462},[401,624,465],{"class":407},[376,626,627],{},"Selene resolves dependencies before loading dependent bundles. If a required bundle is missing, the runtime aborts loading rather than partially enabling the bundle set.",[371,629,631],{"id":630},"preload-layout","Preload layout",[376,633,634,635,638],{},"Use ",[388,636,637],{},"preloads"," when you want a stable Lua module name that is available before entrypoints run:",[380,640,642],{"className":395,"code":641,"language":397,"meta":386,"style":386},"{\n  \"name\": \"example.bundle\",\n  \"preloads\": {\n    \"example.shared\": \"common\u002Fshared.lua\",\n    \"example.legacy\": {\n      \"file\": \"common\u002Flegacy.lua\",\n      \"encoding\": \"UTF-8\"\n    }\n  }\n}\n",[388,643,644,648,658,666,678,685,697,707,713,719],{"__ignoreMap":386},[401,645,646],{"class":403,"line":404},[401,647,408],{"class":407},[401,649,650,652,654,656],{"class":403,"line":411},[401,651,415],{"class":414},[401,653,418],{"class":407},[401,655,422],{"class":421},[401,657,425],{"class":407},[401,659,660,663],{"class":403,"line":428},[401,661,662],{"class":414},"  \"preloads\"",[401,664,665],{"class":407},": {\n",[401,667,668,671,673,676],{"class":403,"line":441},[401,669,670],{"class":414},"    \"example.shared\"",[401,672,418],{"class":407},[401,674,675],{"class":421},"\"common\u002Fshared.lua\"",[401,677,425],{"class":407},[401,679,680,683],{"class":403,"line":450},[401,681,682],{"class":414},"    \"example.legacy\"",[401,684,665],{"class":407},[401,686,687,690,692,695],{"class":403,"line":456},[401,688,689],{"class":414},"      \"file\"",[401,691,418],{"class":407},[401,693,694],{"class":421},"\"common\u002Flegacy.lua\"",[401,696,425],{"class":407},[401,698,699,702,704],{"class":403,"line":462},[401,700,701],{"class":414},"      \"encoding\"",[401,703,418],{"class":407},[401,705,706],{"class":421},"\"UTF-8\"\n",[401,708,710],{"class":403,"line":709},8,[401,711,712],{"class":407},"    }\n",[401,714,716],{"class":403,"line":715},9,[401,717,718],{"class":407},"  }\n",[401,720,722],{"class":403,"line":721},10,[401,723,465],{"class":407},[376,725,726],{},"This is useful when your bundle wants to expose modules under names that do not map directly to the default file-to-module convention.",[371,728,730],{"id":729},"server-and-client-wiring","Server and client wiring",[376,732,733],{},"Server-side wiring is name-based:",[380,735,739],{"className":736,"code":737,"language":738,"meta":386,"style":386},"language-properties shiki shiki-themes github-light github-dark","bundles_path=..\u002F..\u002Fbundles\nbundles=example.bundle\n","properties",[388,740,741,746],{"__ignoreMap":386},[401,742,743],{"class":403,"line":404},[401,744,745],{},"bundles_path=..\u002F..\u002Fbundles\n",[401,747,748],{"class":403,"line":411},[401,749,750],{},"bundles=example.bundle\n",[376,752,753],{},"Client-side wiring is path-based:",[380,755,759],{"className":756,"code":757,"language":758,"meta":386,"style":386},"language-bash shiki shiki-themes github-light github-dark","java -jar selene-client.jar \\\n  --bundle example.bundle \u002Fabsolute\u002Fpath\u002Fto\u002Fexample.bundle\n","bash",[388,760,761,776],{"__ignoreMap":386},[401,762,763,767,770,773],{"class":403,"line":404},[401,764,766],{"class":765},"sScJk","java",[401,768,769],{"class":414}," -jar",[401,771,772],{"class":421}," selene-client.jar",[401,774,775],{"class":414}," \\\n",[401,777,778,781,784],{"class":403,"line":411},[401,779,780],{"class":414},"  --bundle",[401,782,783],{"class":421}," example.bundle",[401,785,786],{"class":421}," \u002Fabsolute\u002Fpath\u002Fto\u002Fexample.bundle\n",[376,788,789],{},"That difference is easy to miss. The same bundle directory can be valid for both runtimes, but the server and client do not discover it the same way.",[791,792,793],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":386,"searchDepth":411,"depth":411,"links":795},[796,797,798,799,800,801],{"id":373,"depth":411,"text":374},{"id":468,"depth":411,"text":469},{"id":529,"depth":411,"text":530},{"id":570,"depth":411,"text":571},{"id":630,"depth":411,"text":631},{"id":729,"depth":411,"text":730},"Structure bundle directories and manifest fields the way Selene expects them.","md",{},true,{"title":19,"description":802},"TI0uQ3laS3J8tH3qHUR5k9HTtbvL58FBmRzwzKWmWQI",[809,811],{"title":15,"path":16,"stem":17,"description":810,"children":-1},"Confirm the running server or client can see your bundle and that the manifest points at the right files.",{"title":23,"path":24,"stem":25,"description":812,"children":-1},"Define custom bundle-backed registries, populate them from JSON, and query them from Lua.",1792747966456]