[{"data":1,"prerenderedAt":716},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:YRuou7cdbGaEfRyxoQgEHxKb8L3pl3Xr63mdMhXTz1Y":195,"content-page-surround:docs:YRuou7cdbGaEfRyxoQgEHxKb8L3pl3Xr63mdMhXTz1Y":704,"i-lucide:file-json":709,"i-lucide:clipboard":714},[4,54,74],{"title":5,"page":6,"canonicalKey":7,"locale":8,"id":9,"draft":6,"icon":10,"sidebar":11,"children":12},"Guides",false,"1","en","content:en:1.docs:1.guides:.navigation.yml","lucide:route","section",[13,19,26,33,40,47],{"title":14,"id":15,"canonicalKey":16,"locale":8,"draft":6,"icon":17,"path":18},"Install Guild Wars on Mac","content:en:1.docs:1.guides:1.install.md","1\u002F1","lucide:download","\u002Fdocs\u002Fguides\u002Finstall",{"title":20,"id":21,"canonicalKey":22,"locale":8,"draft":6,"navigation":23,"icon":24,"path":25},"Accounts & mobile linking","content:en:1.docs:1.guides:2.accounts.md","1\u002F2",{"title":20},"lucide:key-round","\u002Fdocs\u002Fguides\u002Faccounts",{"title":27,"id":28,"canonicalKey":29,"locale":8,"draft":6,"navigation":30,"icon":31,"path":32},"Play on Mac: options","content:en:1.docs:1.guides:3.play-guild-wars-on-mac.md","1\u002F3",{"title":27},"lucide:scale","\u002Fdocs\u002Fguides\u002Fplay-guild-wars-on-mac",{"title":34,"id":35,"canonicalKey":36,"locale":8,"draft":6,"navigation":37,"icon":38,"path":39},"Performance","content:en:1.docs:1.guides:4.performance.md","1\u002F4",{"title":34},"lucide:gauge","\u002Fdocs\u002Fguides\u002Fperformance",{"title":41,"id":42,"canonicalKey":43,"locale":8,"draft":6,"navigation":44,"icon":45,"path":46},"Templates","content:en:1.docs:1.guides:5.templates.md","1\u002F5",{"title":41},"lucide:bookmark","\u002Fdocs\u002Fguides\u002Ftemplates",{"title":48,"id":49,"canonicalKey":50,"locale":8,"draft":6,"navigation":51,"icon":52,"path":53},"Troubleshooting","content:en:1.docs:1.guides:6.troubleshooting.md","1\u002F6",{"title":48},"lucide:wrench","\u002Fdocs\u002Fguides\u002Ftroubleshooting",{"title":55,"page":6,"canonicalKey":56,"locale":8,"id":57,"draft":6,"icon":58,"sidebar":59,"children":60},"Project","2","content:en:1.docs:2.project:.navigation.yml","lucide:shield-check","group",[61,67],{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":6,"navigation":65,"icon":58,"path":66},"Safety & account risk","content:en:1.docs:2.project:1.safety.md","2\u002F1",{"title":62},"\u002Fdocs\u002Fproject\u002Fsafety",{"title":68,"id":69,"canonicalKey":70,"locale":8,"draft":6,"navigation":71,"icon":72,"path":73},"About & credits","content:en:1.docs:2.project:2.about.md","2\u002F2",{"title":68},"lucide:users","\u002Fdocs\u002Fproject\u002Fabout",{"title":75,"page":6,"canonicalKey":76,"locale":8,"id":77,"draft":6,"icon":78,"sidebar":11,"children":79},"For ArenaNet","3","content:en:1.docs:3.upstream:.navigation.yml","lucide:send",[80,87,94,120,146,158,177],{"title":81,"id":82,"canonicalKey":83,"locale":8,"draft":6,"navigation":84,"icon":85,"path":86},"Introduction","content:en:1.docs:3.upstream:1.introduction.md","3\u002F1",{"title":81},"lucide:book-open-check","\u002Fdocs\u002Fupstream\u002Fintroduction",{"title":88,"id":89,"canonicalKey":90,"locale":8,"draft":6,"navigation":91,"icon":92,"path":93},"Request summary","content:en:1.docs:3.upstream:2.request-summary.md","3\u002F2",{"title":88},"lucide:list-checks","\u002Fdocs\u002Fupstream\u002Frequest-summary",{"title":95,"page":6,"canonicalKey":96,"locale":8,"id":97,"draft":6,"icon":98,"sidebar":59,"children":99},"File system","3\u002F3","content:en:1.docs:3.upstream:3.filesystem:.navigation.yml","lucide:folder-x",[100,106,113],{"title":101,"id":102,"canonicalKey":103,"locale":8,"draft":6,"navigation":104,"icon":98,"path":105},"File routines (UR-01…04)","content:en:1.docs:3.upstream:3.filesystem:1.unimplemented-routines.md","3\u002F3\u002F1",{"title":101},"\u002Fdocs\u002Fupstream\u002Ffilesystem\u002Funimplemented-routines",{"title":107,"id":108,"canonicalKey":109,"locale":8,"draft":6,"navigation":110,"icon":111,"path":112},"RemoveExtension (UR-05)","content:en:1.docs:3.upstream:3.filesystem:2.path-remove-extension.md","3\u002F3\u002F2",{"title":107},"lucide:scissors","\u002Fdocs\u002Fupstream\u002Ffilesystem\u002Fpath-remove-extension",{"title":114,"id":115,"canonicalKey":116,"locale":8,"draft":6,"navigation":117,"icon":118,"path":119},"File::Open mode (UR-06)","content:en:1.docs:3.upstream:3.filesystem:3.file-open-mode.md","3\u002F3\u002F3",{"title":114},"lucide:file-plus-2","\u002Fdocs\u002Fupstream\u002Ffilesystem\u002Ffile-open-mode",{"title":121,"page":6,"canonicalKey":122,"locale":8,"id":123,"draft":6,"icon":124,"sidebar":59,"children":125},"Input","3\u002F4","content:en:1.docs:3.upstream:4.input:.navigation.yml","lucide:mouse-pointer-click",[126,132,139],{"title":127,"id":128,"canonicalKey":129,"locale":8,"draft":6,"navigation":130,"icon":124,"path":131},"Double-click (UR-07)","content:en:1.docs:3.upstream:4.input:1.double-click-flag.md","3\u002F4\u002F1",{"title":127},"\u002Fdocs\u002Fupstream\u002Finput\u002Fdouble-click-flag",{"title":133,"id":134,"canonicalKey":135,"locale":8,"draft":6,"navigation":136,"icon":137,"path":138},"Key labels (UR-08)","content:en:1.docs:3.upstream:4.input:2.key-labels.md","3\u002F4\u002F2",{"title":133},"lucide:keyboard","\u002Fdocs\u002Fupstream\u002Finput\u002Fkey-labels",{"title":140,"id":141,"canonicalKey":142,"locale":8,"draft":6,"navigation":143,"icon":144,"path":145},"Cursor re-test (UR-09)","content:en:1.docs:3.upstream:4.input:3.cursor-re-evaluation.md","3\u002F4\u002F3",{"title":140},"lucide:pointer","\u002Fdocs\u002Fupstream\u002Finput\u002Fcursor-re-evaluation",{"title":147,"page":6,"canonicalKey":148,"locale":8,"id":149,"draft":6,"icon":150,"sidebar":59,"children":151},"Runtime","3\u002F5","content:en:1.docs:3.upstream:5.runtime:.navigation.yml","lucide:cpu",[152],{"title":153,"id":154,"canonicalKey":155,"locale":8,"draft":6,"navigation":156,"icon":150,"path":157},"Heap maximum (UR-10)","content:en:1.docs:3.upstream:5.runtime:1.heap-maximum.md","3\u002F5\u002F1",{"title":153},"\u002Fdocs\u002Fupstream\u002Fruntime\u002Fheap-maximum",{"title":159,"page":6,"canonicalKey":160,"locale":8,"id":161,"draft":6,"icon":162,"sidebar":59,"children":163},"Interface proposals","3\u002F6","content:en:1.docs:3.upstream:6.proposals:.navigation.yml","lucide:plug",[164,171],{"title":165,"id":166,"canonicalKey":167,"locale":8,"draft":6,"navigation":168,"icon":169,"path":170},"Build identity (UR-11)","content:en:1.docs:3.upstream:6.proposals:1.build-identification.md","3\u002F6\u002F1",{"title":165},"lucide:fingerprint","\u002Fdocs\u002Fupstream\u002Fproposals\u002Fbuild-identification",{"title":172,"id":173,"canonicalKey":174,"locale":8,"draft":6,"navigation":175,"icon":162,"path":176},"Host interface (UR-12)","content:en:1.docs:3.upstream:6.proposals:2.platform-host-interface.md","3\u002F6\u002F2",{"title":172},"\u002Fdocs\u002Fupstream\u002Fproposals\u002Fplatform-host-interface",{"title":178,"page":6,"canonicalKey":179,"locale":8,"id":180,"draft":6,"icon":181,"sidebar":59,"children":182},"Reference","3\u002F7","content:en:1.docs:3.upstream:7.reference:.navigation.yml","lucide:microscope",[183,189],{"title":184,"id":185,"canonicalKey":186,"locale":8,"draft":6,"navigation":187,"icon":52,"path":188},"Our workarounds","content:en:1.docs:3.upstream:7.reference:1.our-workarounds.md","3\u002F7\u002F1",{"title":184},"\u002Fdocs\u002Fupstream\u002Freference\u002Four-workarounds",{"title":190,"id":191,"canonicalKey":192,"locale":8,"draft":6,"navigation":193,"icon":181,"path":194},"Verification method","content:en:1.docs:3.upstream:7.reference:2.verification-method.md","3\u002F7\u002F2",{"title":190},"\u002Fdocs\u002Fupstream\u002Freference\u002Fverification-method",{"title":196,"ref":197,"description":198,"icon":162,"updated":199,"navigation":200,"body":201,"type":689,"id":173,"canonicalKey":174,"draft":6,"partial":6,"locale":8,"collection":690,"navigationFile":6,"file":691,"route":697,"resolution":701},"UR-12: a small platform-host interface","docs\u002Fupstream\u002Fproposals\u002Fplatform-host-interface","A proposal for three optional Module hooks that let a platform host render a native cursor. This is not a modification interface, and it exposes no game state.","2026-08-04",{"title":172},{"type":202,"children":203,"toc":673},"root",[204,212,217,228,250,257,262,267,273,286,293,427,432,437,443,484,489,495,576,581,587,592,598,651,657,662,668],{"type":205,"tag":206,"props":207,"children":208},"element","p",{},[209],{"type":210,"value":211},"text","This request doesn't correct a defect either. It proposes a small interface.",{"type":205,"tag":206,"props":213,"children":214},{},[215],{"type":210,"value":216},"The Emscripten client already has a platform layer — on Windows it talks to\nWin32, on the web to the browser. A native host is a third platform, and today\nit has no supported way to do platform work.",{"type":205,"tag":206,"props":218,"children":219},{},[220,226],{"type":205,"tag":221,"props":222,"children":223},"strong",{},[224],{"type":210,"value":225},"Fix:",{"type":210,"value":227}," high effort, relative to everything else in this section — the change\ntouches the platform layer's cursor path and needs a decision about the\ninterface shape. Medium blast radius: the interface is optional, so nothing\nchanges for hosts that don't use it, but the risk sits in the cursor path,\nwhich every player uses.",{"type":205,"tag":229,"props":230,"children":232},"warning",{"title":231},"What this proposal is not",[233,245],{"type":205,"tag":206,"props":234,"children":235},{},[236,238,243],{"type":210,"value":237},"This is ",{"type":205,"tag":221,"props":239,"children":240},{},[241],{"type":210,"value":242},"not",{"type":210,"value":244}," a modification interface, a plugin API, or an add-on system.\nIt exposes no game state, no packets, no account data, and no gameplay\noperation, and it can't change what the client does. It carries presentation\ninformation out of the client, and platform capability in.",{"type":205,"tag":206,"props":246,"children":247},{},[248],{"type":210,"value":249},"An official way to read party or agent data would be a different product\ndecision, and we don't raise it here.",{"type":205,"tag":251,"props":252,"children":254},"h2",{"id":253},"the-problem-this-solves",[255],{"type":210,"value":256},"The problem this solves",{"type":205,"tag":206,"props":258,"children":259},{},[260],{"type":210,"value":261},"Our host renders a native macOS cursor. That removes one frame of latency and\nkeeps the pointer correct while the game thread is busy. To do it, the host\nhas to know which cursor the client wants to show — information the client\nholds in memory, which we currently read through a table of memory addresses.",{"type":205,"tag":206,"props":263,"children":264},{},[265],{"type":210,"value":266},"That table is the least stable thing we own. Every client build moves it, and\nwhen we can't re-measure it, the feature stops until we ship an update. The\nsame applies to any future platform work: a native file dialog, native text\ninput, native window state.",{"type":205,"tag":251,"props":268,"children":270},{"id":269},"the-proposal",[271],{"type":210,"value":272},"The proposal",{"type":205,"tag":206,"props":274,"children":275},{},[276,278,284],{"type":210,"value":277},"Emscripten modules already take host callbacks through the ",{"type":205,"tag":279,"props":280,"children":281},"code",{},[282],{"type":210,"value":283},"Module",{"type":210,"value":285}," object. We\npropose three optional entries. When the host doesn't supply an entry, the\nclient keeps its current behaviour exactly.",{"type":205,"tag":287,"props":288,"children":290},"h3",{"id":289},"the-proposal-_1-cursor-notification",[291],{"type":210,"value":292},"1. Cursor notification",{"type":205,"tag":294,"props":295,"children":299},"pre",{"language":296,"class":297,"tabindex":298},"js","shiki shiki-themes light-plus dark-plus dark:dark-plus","0",[300],{"type":205,"tag":279,"props":301,"children":303},{"class":302},"language-js",[304,316,318,364,365,373,374,382,383,391,392,400,401,409,410,418,419],{"type":205,"tag":305,"props":306,"children":309},"span",{"class":307,"style":308},"line","display: inline",[310],{"type":205,"tag":305,"props":311,"children":313},{"style":312},"color:#008000;--shiki-dark:#6A9955",[314],{"type":210,"value":315},"\u002F\u002F Optional. The client calls this when the active cursor changes.",{"type":210,"value":317},"\n",{"type":205,"tag":305,"props":319,"children":320},{"class":307,"style":308},[321,326,332,338,343,349,354,359],{"type":205,"tag":305,"props":322,"children":324},{"style":323},"color:#001080;--shiki-dark:#9CDCFE",[325],{"type":210,"value":283},{"type":205,"tag":305,"props":327,"children":329},{"style":328},"color:#000000;--shiki-dark:#D4D4D4",[330],{"type":210,"value":331},".",{"type":205,"tag":305,"props":333,"children":335},{"style":334},"color:#795E26;--shiki-dark:#DCDCAA",[336],{"type":210,"value":337},"platformCursorChanged",{"type":205,"tag":305,"props":339,"children":340},{"style":328},[341],{"type":210,"value":342}," = ",{"type":205,"tag":305,"props":344,"children":346},{"style":345},"color:#0000FF;--shiki-dark:#569CD6",[347],{"type":210,"value":348},"function",{"type":205,"tag":305,"props":350,"children":351},{"style":328},[352],{"type":210,"value":353}," (",{"type":205,"tag":305,"props":355,"children":356},{"style":323},[357],{"type":210,"value":358},"cursor",{"type":205,"tag":305,"props":360,"children":361},{"style":328},[362],{"type":210,"value":363},") {",{"type":210,"value":317},{"type":205,"tag":305,"props":366,"children":367},{"class":307,"style":308},[368],{"type":205,"tag":305,"props":369,"children":370},{"style":312},[371],{"type":210,"value":372},"  \u002F\u002F cursor.kind    : \"hidden\" | \"standard\" | \"custom\"",{"type":210,"value":317},{"type":205,"tag":305,"props":375,"children":376},{"class":307,"style":308},[377],{"type":205,"tag":305,"props":378,"children":379},{"style":312},[380],{"type":210,"value":381},"  \u002F\u002F cursor.id      : a stable small integer for a standard cursor",{"type":210,"value":317},{"type":205,"tag":305,"props":384,"children":385},{"class":307,"style":308},[386],{"type":205,"tag":305,"props":387,"children":388},{"style":312},[389],{"type":210,"value":390},"  \u002F\u002F cursor.width   : pixels, for a custom cursor",{"type":210,"value":317},{"type":205,"tag":305,"props":393,"children":394},{"class":307,"style":308},[395],{"type":205,"tag":305,"props":396,"children":397},{"style":312},[398],{"type":210,"value":399},"  \u002F\u002F cursor.height  : pixels, for a custom cursor",{"type":210,"value":317},{"type":205,"tag":305,"props":402,"children":403},{"class":307,"style":308},[404],{"type":205,"tag":305,"props":405,"children":406},{"style":312},[407],{"type":210,"value":408},"  \u002F\u002F cursor.pixels  : Uint8Array, RGBA, width * height * 4",{"type":210,"value":317},{"type":205,"tag":305,"props":411,"children":412},{"class":307,"style":308},[413],{"type":205,"tag":305,"props":414,"children":415},{"style":312},[416],{"type":210,"value":417},"  \u002F\u002F cursor.hotspotX, cursor.hotspotY : pixels",{"type":210,"value":317},{"type":205,"tag":305,"props":420,"children":421},{"class":307,"style":308},[422],{"type":205,"tag":305,"props":423,"children":424},{"style":328},[425],{"type":210,"value":426},"};",{"type":205,"tag":206,"props":428,"children":429},{},[430],{"type":210,"value":431},"The client calls this whenever it changes the cursor, and the host sets the\nnative cursor. Without the function defined, the client draws the cursor as it\ndoes today.",{"type":205,"tag":206,"props":433,"children":434},{},[435],{"type":210,"value":436},"This single hook replaces twelve memory addresses in our tables.",{"type":205,"tag":287,"props":438,"children":440},{"id":439},"the-proposal-_2-cursor-query",[441],{"type":210,"value":442},"2. Cursor query",{"type":205,"tag":294,"props":444,"children":445},{"language":296,"class":297,"tabindex":298},[446],{"type":205,"tag":279,"props":447,"children":448},{"class":302},[449,457,458],{"type":205,"tag":305,"props":450,"children":451},{"class":307,"style":308},[452],{"type":205,"tag":305,"props":453,"children":454},{"style":312},[455],{"type":210,"value":456},"\u002F\u002F Optional. The host may ask for the current cursor at any time.",{"type":210,"value":317},{"type":205,"tag":305,"props":459,"children":460},{"class":307,"style":308},[461,465,469,474,479],{"type":205,"tag":305,"props":462,"children":463},{"style":323},[464],{"type":210,"value":283},{"type":205,"tag":305,"props":466,"children":467},{"style":328},[468],{"type":210,"value":331},{"type":205,"tag":305,"props":470,"children":471},{"style":334},[472],{"type":210,"value":473},"platformGetCursor",{"type":205,"tag":305,"props":475,"children":476},{"style":328},[477],{"type":210,"value":478},"(); ",{"type":205,"tag":305,"props":480,"children":481},{"style":312},[482],{"type":210,"value":483},"\u002F\u002F returns the same object as above",{"type":205,"tag":206,"props":485,"children":486},{},[487],{"type":210,"value":488},"Useful after a window focus change, when the host has to restore the cursor\nwithout a change event.",{"type":205,"tag":287,"props":490,"children":492},{"id":491},"the-proposal-_3-a-capability-declaration",[493],{"type":210,"value":494},"3. A capability declaration",{"type":205,"tag":294,"props":496,"children":497},{"language":296,"class":297,"tabindex":298},[498],{"type":205,"tag":279,"props":499,"children":500},{"class":302},[501,509,510,531,532,550,551,568,569],{"type":205,"tag":305,"props":502,"children":503},{"class":307,"style":308},[504],{"type":205,"tag":305,"props":505,"children":506},{"style":312},[507],{"type":210,"value":508},"\u002F\u002F Optional. The host declares what it can do.",{"type":210,"value":317},{"type":205,"tag":305,"props":511,"children":512},{"class":307,"style":308},[513,517,521,526],{"type":205,"tag":305,"props":514,"children":515},{"style":323},[516],{"type":210,"value":283},{"type":205,"tag":305,"props":518,"children":519},{"style":328},[520],{"type":210,"value":331},{"type":205,"tag":305,"props":522,"children":523},{"style":323},[524],{"type":210,"value":525},"platformCapabilities",{"type":205,"tag":305,"props":527,"children":528},{"style":328},[529],{"type":210,"value":530}," = {",{"type":210,"value":317},{"type":205,"tag":305,"props":533,"children":534},{"class":307,"style":308},[535,540,545],{"type":205,"tag":305,"props":536,"children":537},{"style":323},[538],{"type":210,"value":539},"  nativeCursor:",{"type":205,"tag":305,"props":541,"children":542},{"style":345},[543],{"type":210,"value":544}," true",{"type":205,"tag":305,"props":546,"children":547},{"style":328},[548],{"type":210,"value":549},",",{"type":210,"value":317},{"type":205,"tag":305,"props":552,"children":553},{"class":307,"style":308},[554,559,564],{"type":205,"tag":305,"props":555,"children":556},{"style":323},[557],{"type":210,"value":558},"  nativeFileDialog:",{"type":205,"tag":305,"props":560,"children":561},{"style":345},[562],{"type":210,"value":563}," false",{"type":205,"tag":305,"props":565,"children":566},{"style":328},[567],{"type":210,"value":549},{"type":210,"value":317},{"type":205,"tag":305,"props":570,"children":571},{"class":307,"style":308},[572],{"type":205,"tag":305,"props":573,"children":574},{"style":328},[575],{"type":210,"value":426},{"type":205,"tag":206,"props":577,"children":578},{},[579],{"type":210,"value":580},"The client reads this once at startup and can then skip work the host takes\nover — for the cursor, its own cursor draw.",{"type":205,"tag":251,"props":582,"children":584},{"id":583},"why-a-callback-and-not-an-export",[585],{"type":210,"value":586},"Why a callback and not an export",{"type":205,"tag":206,"props":588,"children":589},{},[590],{"type":210,"value":591},"We considered an exported function that the host polls each frame. A callback\nis better for both sides: the client knows when the cursor changes and a poll\ndoesn't, it costs nothing while nothing changes, and it needs no memory\naddresses at all.",{"type":205,"tag":251,"props":593,"children":595},{"id":594},"acceptance-criteria",[596],{"type":210,"value":597},"Acceptance criteria",{"type":205,"tag":599,"props":600,"children":601},"ul",{},[602,615,620,625,636,641],{"type":205,"tag":603,"props":604,"children":605},"li",{},[606,608,613],{"type":210,"value":607},"With no ",{"type":205,"tag":279,"props":609,"children":610},{},[611],{"type":210,"value":612},"Module.platformCursorChanged",{"type":210,"value":614}," defined, the client behaves exactly\nas it does today. No extra call occurs.",{"type":205,"tag":603,"props":616,"children":617},{},[618],{"type":210,"value":619},"With the function defined, the client calls it once per cursor change, and\nnot more.",{"type":205,"tag":603,"props":621,"children":622},{},[623],{"type":210,"value":624},"The call carries enough information to draw the cursor without a read of\nclient memory.",{"type":205,"tag":603,"props":626,"children":627},{},[628,630,635],{"type":210,"value":629},"A hidden cursor produces one call with ",{"type":205,"tag":279,"props":631,"children":632},{},[633],{"type":210,"value":634},"kind: \"hidden\"",{"type":210,"value":331},{"type":205,"tag":603,"props":637,"children":638},{},[639],{"type":210,"value":640},"The call does not occur inside a frame-critical path, or it costs less than\n0.1 ms.",{"type":205,"tag":603,"props":642,"children":643},{},[644,649],{"type":205,"tag":279,"props":645,"children":646},{},[647],{"type":210,"value":648},"platformGetCursor()",{"type":210,"value":650}," returns the current cursor at any time after startup.",{"type":205,"tag":251,"props":652,"children":654},{"id":653},"what-this-replaces-on-our-side",[655],{"type":210,"value":656},"What this replaces on our side",{"type":205,"tag":206,"props":658,"children":659},{},[660],{"type":210,"value":661},"Our host keeps a table of memory addresses for each certified client build.\nTwelve of those entries describe the cursor: the active art pointer, the\nsoftware model, the show count, the colour buffer, and the texture-chain\noffsets. With this interface all twelve go away, our companion component reads\nnothing for the cursor feature, and the most fragile part of the project\ndisappears with it.",{"type":205,"tag":251,"props":663,"children":665},{"id":664},"priority",[666],{"type":210,"value":667},"Priority",{"type":205,"tag":206,"props":669,"children":670},{},[671],{"type":210,"value":672},"Last on purpose — every defect in this section matters more than this\nproposal. And if the full interface is too much, the cursor notification alone\n(item 1) gives most of the value; items 2 and 3 can wait.",{"title":674,"searchDepth":675,"depth":675,"links":676},"",4,[677,679,685,686,687,688],{"id":253,"depth":678,"text":256},2,{"id":269,"depth":678,"text":272,"children":680},[681,683,684],{"id":289,"depth":682,"text":292},3,{"id":439,"depth":682,"text":442},{"id":491,"depth":682,"text":494},{"id":583,"depth":678,"text":586},{"id":594,"depth":678,"text":597},{"id":653,"depth":678,"text":656},{"id":664,"depth":678,"text":667},"markdown","docs",{"source":692,"path":693,"stem":694,"dir":695,"extension":696},"content","en\u002F1.docs\u002F3.upstream\u002F6.proposals\u002F2.platform-host-interface.md","en\u002F1.docs\u002F3.upstream\u002F6.proposals\u002F2.platform-host-interface","proposals","md",{"requestedPath":176,"resolvedPath":176,"alternates":698},[699],{"locale":8,"path":176,"source":700},"variant",{"requested":702,"resolved":703,"usedFallback":6},{"locale":8},{"locale":8},{"previous":705,"next":707},{"title":165,"id":166,"canonicalKey":167,"locale":8,"draft":6,"navigation":706,"path":170},{"title":165},{"title":184,"id":185,"canonicalKey":186,"locale":8,"draft":6,"navigation":708,"path":188},{"title":184},{"left":710,"top":710,"width":711,"height":711,"rotate":710,"vFlip":6,"hFlip":6,"body":712,"hidden":713},0,24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"\u002F>\u003Cpath d=\"M14 2v4a2 2 0 0 0 2 2h4m-10 4a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1a1 1 0 0 1 1 1v1a1 1 0 0 0 1 1m4 0a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1a1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1\"\u002F>\u003C\u002Fg>",true,{"left":710,"top":710,"width":711,"height":711,"rotate":710,"vFlip":6,"hFlip":6,"body":715},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1786362929567]