[{"data":1,"prerenderedAt":1843},["ShallowReactive",2],{"cycle-doc-design-c130-research\u002Fcomparison.md":3},{"cycle":4,"project":7,"path":10,"title":11,"toc":12,"ast":17},{"id":5,"title":6},"c130","Native App (program)",{"id":8,"label":9},"design","Design","research\u002Fcomparison.md","Comparison: GPUI Kit, Native Shell, Tauri, Electron, the web UI",[13,14,15,16],"The five options","qmap in the native app (D8)","Open questions","Sources",{"type":18,"children":19},"root",[20,34,40,896,901,908,933,938,943,1238,1248,1253,1289,1294],{"type":21,"tag":22,"props":23,"children":24},"element","p",{},[25,32],{"type":21,"tag":26,"props":27,"children":28},"strong",{},[29],{"type":30,"value":31},"text","Use this file to",{"type":30,"value":33}," check D2 against the alternatives on our criteria, and to judge the qmap trade-offs D8 asked for. The first table compares the five ways to put a UI on the endpoint. The second costs the four ways to show qmap from the native app. Numbers carry their metric and source; the vendors measure different things, so compare within a row with care and never across vendors as if equal. Every source was read on 2026-11-09.",{"type":21,"tag":35,"props":36,"children":38},"h2",{"id":37},"the-five-options",[39],{"type":30,"value":13},{"type":21,"tag":41,"props":42,"children":43},"table",{},[44,83],{"type":21,"tag":45,"props":46,"children":47},"thead",{},[48],{"type":21,"tag":49,"props":50,"children":51},"tr",{},[52,58,63,68,73,78],{"type":21,"tag":53,"props":54,"children":55},"th",{},[56],{"type":30,"value":57},"Criterion",{"type":21,"tag":53,"props":59,"children":60},{},[61],{"type":30,"value":62},"GPUI Kit",{"type":21,"tag":53,"props":64,"children":65},{},[66],{"type":30,"value":67},"Native Shell",{"type":21,"tag":53,"props":69,"children":70},{},[71],{"type":30,"value":72},"Tauri 2",{"type":21,"tag":53,"props":74,"children":75},{},[76],{"type":30,"value":77},"Electron",{"type":21,"tag":53,"props":79,"children":80},{},[81],{"type":30,"value":82},"Web UI in the browser",{"type":21,"tag":84,"props":85,"children":86},"tbody",{},[87,178,228,292,370,431,507,573,631,733,789,824,860],{"type":21,"tag":49,"props":88,"children":89},{},[90,99,126,136,153,168],{"type":21,"tag":91,"props":92,"children":93},"td",{},[94],{"type":21,"tag":26,"props":95,"children":96},{},[97],{"type":30,"value":98},"Idle memory",{"type":21,"tag":91,"props":100,"children":101},{},[102,104,110,112,117,119,124],{"type":30,"value":103},"No published hello figure. A gpui-kit 0.8 app peaked at 72.7 MB on Windows in Longbridge's bench (quotes workload) ",{"type":21,"tag":105,"props":106,"children":107},"span",{},[108],{"type":30,"value":109},"1",{"type":30,"value":111},". Zed publishes no idle RSS; review sites report 142 to 222 MB idle with no method stated ",{"type":21,"tag":105,"props":113,"children":114},{},[115],{"type":30,"value":116},"34",{"type":30,"value":118},". Discord's early GPUI build: about 290 MB with two accounts, one screenshot ",{"type":21,"tag":105,"props":120,"children":121},{},[122],{"type":30,"value":123},"35",{"type":30,"value":125},".",{"type":21,"tag":91,"props":127,"children":128},{},[129,131],{"type":30,"value":130},"macOS ~20 MB footprint \u002F 89 MB resident (TSX); Windows ~15 MB private working set; Linux GTK ~79 MB private \u002F 166 MB resident ",{"type":21,"tag":105,"props":132,"children":133},{},[134],{"type":30,"value":135},"2",{"type":21,"tag":91,"props":137,"children":138},{},[139,141,146,148],{"type":30,"value":140},"Hello world ~389 MB mprof peak on Linux CI (WebKitGTK) ",{"type":21,"tag":105,"props":142,"children":143},{},[144],{"type":30,"value":145},"3",{"type":30,"value":147},"; ~172 MB for six WKWebView windows on macOS ",{"type":21,"tag":105,"props":149,"children":150},{},[151],{"type":30,"value":152},"4",{"type":21,"tag":91,"props":154,"children":155},{},[156,158,162,164],{"type":30,"value":157},"Hello world ~476 MB mprof peak on Linux CI (2023) ",{"type":21,"tag":105,"props":159,"children":160},{},[161],{"type":30,"value":145},{"type":30,"value":163},"; ~409 MB for six windows on macOS ",{"type":21,"tag":105,"props":165,"children":166},{},[167],{"type":30,"value":152},{"type":21,"tag":91,"props":169,"children":170},{},[171,173],{"type":30,"value":172},"One tab: ~76 MB RSS for a static page, ~280 to 380 MB for a web app (Chromium 148, vendor measurement) ",{"type":21,"tag":105,"props":174,"children":175},{},[176],{"type":30,"value":177},"5",{"type":21,"tag":49,"props":179,"children":180},{},[181,189,199,208,213,218],{"type":21,"tag":91,"props":182,"children":183},{},[184],{"type":21,"tag":26,"props":185,"children":186},{},[187],{"type":30,"value":188},"Idle CPU",{"type":21,"tag":91,"props":190,"children":191},{},[192,194],{"type":30,"value":193},"Redraws on notify. Upstream GPUI's animations are costly (a spinner: 85 % of a core); GPUI Fast exists to fix that (11 %) ",{"type":21,"tag":105,"props":195,"children":196},{},[197],{"type":30,"value":198},"6",{"type":21,"tag":91,"props":200,"children":201},{},[202,204],{"type":30,"value":203},"2 to 5 % on a gallery page at rest (macOS); Direct2D redraws on the main thread, Windows runs hotter ",{"type":21,"tag":105,"props":205,"children":206},{},[207],{"type":30,"value":135},{"type":21,"tag":91,"props":209,"children":210},{},[211],{"type":30,"value":212},"Webview-dependent; unmeasured",{"type":21,"tag":91,"props":214,"children":215},{},[216],{"type":30,"value":217},"Chromium; unmeasured",{"type":21,"tag":91,"props":219,"children":220},{},[221,223],{"type":30,"value":222},"A tab; a Three.js scene must render on demand or it spins the fans ",{"type":21,"tag":105,"props":224,"children":225},{},[226],{"type":30,"value":227},"7",{"type":21,"tag":49,"props":229,"children":230},{},[231,239,249,258,277,287],{"type":21,"tag":91,"props":232,"children":233},{},[234],{"type":21,"tag":26,"props":235,"children":236},{},[237],{"type":30,"value":238},"Binary \u002F installer",{"type":21,"tag":91,"props":240,"children":241},{},[242,244],{"type":30,"value":243},"Hello app unmeasured. Zed 1.27 dmg 88 MB, exe 58 MB, whole editor ",{"type":21,"tag":105,"props":245,"children":246},{},[247],{"type":30,"value":248},"8",{"type":21,"tag":91,"props":250,"children":251},{},[252,254],{"type":30,"value":253},"6 to 12 MB zipped hello; 12 to 29 MB executable ",{"type":21,"tag":105,"props":255,"children":256},{},[257],{"type":30,"value":135},{"type":21,"tag":91,"props":259,"children":260},{},[261,263,270,272],{"type":30,"value":262},"2.8 to 3.0 MB bench binary; 8.6 MB ",{"type":21,"tag":264,"props":265,"children":267},"code",{"className":266},[],[268],{"type":30,"value":269},".app",{"type":30,"value":271}," scaffold; \"less than 600 KB\" is the claim [3][4]",{"type":21,"tag":105,"props":273,"children":274},{},[275],{"type":30,"value":276},"9",{"type":21,"tag":91,"props":278,"children":279},{},[280,282],{"type":30,"value":281},"Runtime zip 121 to 158 MB; \"most apps are >100MB\" ",{"type":21,"tag":105,"props":283,"children":284},{},[285],{"type":30,"value":286},"10",{"type":21,"tag":91,"props":288,"children":289},{},[290],{"type":30,"value":291},"0; the agent already ships",{"type":21,"tag":49,"props":293,"children":294},{},[295,303,317,333,349,365],{"type":21,"tag":91,"props":296,"children":297},{},[298],{"type":21,"tag":26,"props":299,"children":300},{},[301],{"type":30,"value":302},"Tray on 3 OSes",{"type":21,"tag":91,"props":304,"children":305},{},[306,308,315],{"type":30,"value":307},"Absent from the kit; a crate is added (see ",{"type":21,"tag":309,"props":310,"children":312},"a",{"href":311},"\u002Fcycles\u002Fdesign\u002Fc130\u002Fdoc\u002Fresearch\u002Fplatform",[313],{"type":30,"value":314},"platform.md",{"type":30,"value":316},")",{"type":21,"tag":91,"props":318,"children":319},{},[320,326,328],{"type":21,"tag":264,"props":321,"children":323},{"className":322},[],[324],{"type":30,"value":325},"main",{"type":30,"value":327}," only, TSX only ",{"type":21,"tag":105,"props":329,"children":330},{},[331],{"type":30,"value":332},"11",{"type":21,"tag":91,"props":334,"children":335},{},[336,342,344],{"type":21,"tag":264,"props":337,"children":339},{"className":338},[],[340],{"type":30,"value":341},"tray-icon",{"type":30,"value":343}," feature; \"Linux: Tray events are not emitted\" ",{"type":21,"tag":105,"props":345,"children":346},{},[347],{"type":30,"value":348},"12",{"type":21,"tag":91,"props":350,"children":351},{},[352,358,360],{"type":21,"tag":264,"props":353,"children":355},{"className":354},[],[356],{"type":30,"value":357},"Tray",{"type":30,"value":359}," on all three; Linux via StatusNotifierItem ",{"type":21,"tag":105,"props":361,"children":362},{},[363],{"type":30,"value":364},"13",{"type":21,"tag":91,"props":366,"children":367},{},[368],{"type":30,"value":369},"n\u002Fa",{"type":21,"tag":49,"props":371,"children":372},{},[373,381,386,400,410,426],{"type":21,"tag":91,"props":374,"children":375},{},[376],{"type":21,"tag":26,"props":377,"children":378},{},[379],{"type":30,"value":380},"Notifications",{"type":21,"tag":91,"props":382,"children":383},{},[384],{"type":30,"value":385},"Absent",{"type":21,"tag":91,"props":387,"children":388},{},[389,394,396],{"type":21,"tag":264,"props":390,"children":392},{"className":391},[],[393],{"type":30,"value":325},{"type":30,"value":395}," only; macOS needs a signed bundle ",{"type":21,"tag":105,"props":397,"children":398},{},[399],{"type":30,"value":332},{"type":21,"tag":91,"props":401,"children":402},{},[403,405],{"type":30,"value":404},"Plugin; Windows installed apps only; no action buttons on desktop ",{"type":21,"tag":105,"props":406,"children":407},{},[408],{"type":30,"value":409},"14",{"type":21,"tag":91,"props":411,"children":412},{},[413,419,421],{"type":21,"tag":264,"props":414,"children":416},{"className":415},[],[417],{"type":30,"value":418},"Notification",{"type":30,"value":420},"; unsigned macOS binaries fail ",{"type":21,"tag":105,"props":422,"children":423},{},[424],{"type":30,"value":425},"15",{"type":21,"tag":91,"props":427,"children":428},{},[429],{"type":30,"value":430},"Web Notifications API",{"type":21,"tag":49,"props":432,"children":433},{},[434,442,455,477,487,503],{"type":21,"tag":91,"props":435,"children":436},{},[437],{"type":21,"tag":26,"props":438,"children":439},{},[440],{"type":30,"value":441},"Auto-update",{"type":21,"tag":91,"props":443,"children":444},{},[445,447,453],{"type":30,"value":446},"Absent; ",{"type":21,"tag":264,"props":448,"children":450},{"className":449},[],[451],{"type":30,"value":452},"qupdate",{"type":30,"value":454}," exists in qcontrol",{"type":21,"tag":91,"props":456,"children":457},{},[458,463,465,471,473],{"type":21,"tag":264,"props":459,"children":461},{"className":460},[],[462],{"type":30,"value":325},{"type":30,"value":464}," only, ",{"type":21,"tag":264,"props":466,"children":468},{"className":467},[],[469],{"type":30,"value":470},"nsh\u002Fupdater",{"type":30,"value":472}," ",{"type":21,"tag":105,"props":474,"children":475},{},[476],{"type":30,"value":332},{"type":21,"tag":91,"props":478,"children":479},{},[480,482],{"type":30,"value":481},"Updater plugin, signed manifests; mac, NSIS, MSI, AppImage ",{"type":21,"tag":105,"props":483,"children":484},{},[485],{"type":30,"value":486},"16",{"type":21,"tag":91,"props":488,"children":489},{},[490,496,498],{"type":21,"tag":264,"props":491,"children":493},{"className":492},[],[494],{"type":30,"value":495},"autoUpdater",{"type":30,"value":497}," mac and Windows; \"Linux has no built-in auto-updater\" ",{"type":21,"tag":105,"props":499,"children":500},{},[501],{"type":30,"value":502},"17",{"type":21,"tag":91,"props":504,"children":505},{},[506],{"type":30,"value":369},{"type":21,"tag":49,"props":508,"children":509},{},[510,518,529,543,553,568],{"type":21,"tag":91,"props":511,"children":512},{},[513],{"type":21,"tag":26,"props":514,"children":515},{},[516],{"type":30,"value":517},"Deep links",{"type":21,"tag":91,"props":519,"children":520},{},[521,523],{"type":30,"value":522},"Absent; GPUI has ",{"type":21,"tag":264,"props":524,"children":526},{"className":525},[],[527],{"type":30,"value":528},"on_open_urls",{"type":21,"tag":91,"props":530,"children":531},{},[532,537,539],{"type":21,"tag":264,"props":533,"children":535},{"className":534},[],[536],{"type":30,"value":325},{"type":30,"value":538}," only, all three OSes ",{"type":21,"tag":105,"props":540,"children":541},{},[542],{"type":30,"value":332},{"type":21,"tag":91,"props":544,"children":545},{},[546,548],{"type":30,"value":547},"Plugin; macOS needs an installed bundle; Linux\u002FWindows need single-instance too ",{"type":21,"tag":105,"props":549,"children":550},{},[551],{"type":30,"value":552},"18",{"type":21,"tag":91,"props":554,"children":555},{},[556,562,563],{"type":21,"tag":264,"props":557,"children":559},{"className":558},[],[560],{"type":30,"value":561},"setAsDefaultProtocolClient",{"type":30,"value":472},{"type":21,"tag":105,"props":564,"children":565},{},[566],{"type":30,"value":567},"19",{"type":21,"tag":91,"props":569,"children":570},{},[571],{"type":30,"value":572},"Browser URL",{"type":21,"tag":49,"props":574,"children":575},{},[576,584,589,594,604,627],{"type":21,"tag":91,"props":577,"children":578},{},[579],{"type":21,"tag":26,"props":580,"children":581},{},[582],{"type":30,"value":583},"Single instance \u002F autostart",{"type":21,"tag":91,"props":585,"children":586},{},[587],{"type":30,"value":588},"Absent; crates exist",{"type":21,"tag":91,"props":590,"children":591},{},[592],{"type":30,"value":593},"Partial \u002F not found",{"type":21,"tag":91,"props":595,"children":596},{},[597,599],{"type":30,"value":598},"Plugins, desktop only (D-Bus on Linux) ",{"type":21,"tag":105,"props":600,"children":601},{},[602],{"type":30,"value":603},"20",{"type":21,"tag":91,"props":605,"children":606},{},[607,613,615,621,623],{"type":21,"tag":264,"props":608,"children":610},{"className":609},[],[611],{"type":30,"value":612},"requestSingleInstanceLock",{"type":30,"value":614},"; ",{"type":21,"tag":264,"props":616,"children":618},{"className":617},[],[619],{"type":30,"value":620},"setLoginItemSettings",{"type":30,"value":622}," mac and Windows only ",{"type":21,"tag":105,"props":624,"children":625},{},[626],{"type":30,"value":567},{"type":21,"tag":91,"props":628,"children":629},{},[630],{"type":30,"value":369},{"type":21,"tag":49,"props":632,"children":633},{},[634,642,674,697,712,728],{"type":21,"tag":91,"props":635,"children":636},{},[637],{"type":21,"tag":26,"props":638,"children":639},{},[640],{"type":30,"value":641},"Agent fluency",{"type":21,"tag":91,"props":643,"children":644},{},[645,651,653,659,661,667,669],{"type":21,"tag":264,"props":646,"children":648},{"className":647},[],[649],{"type":30,"value":650},"llms.txt",{"type":30,"value":652}," 47 KB, ",{"type":21,"tag":264,"props":654,"children":656},{"className":655},[],[657],{"type":30,"value":658},"llms-full.txt",{"type":30,"value":660}," 4.7 MB, a ",{"type":21,"tag":264,"props":662,"children":664},{"className":663},[],[665],{"type":30,"value":666},"\u002Fskills",{"type":30,"value":668}," page; small training corpus; two GPUI version lines to confuse ",{"type":21,"tag":105,"props":670,"children":671},{},[672],{"type":30,"value":673},"21",{"type":21,"tag":91,"props":675,"children":676},{},[677,682,684,690,692],{"type":21,"tag":264,"props":678,"children":680},{"className":679},[],[681],{"type":30,"value":650},{"type":30,"value":683}," 58 KB, ",{"type":21,"tag":264,"props":685,"children":687},{"className":686},[],[688],{"type":30,"value":689},"AGENTS.md",{"type":30,"value":691},", skills; three weeks old, absent from training data ",{"type":21,"tag":105,"props":693,"children":694},{},[695],{"type":30,"value":696},"22",{"type":21,"tag":91,"props":698,"children":699},{},[700,705,707],{"type":21,"tag":264,"props":701,"children":703},{"className":702},[],[704],{"type":30,"value":650},{"type":30,"value":706}," 2.8 KB; large corpus ",{"type":21,"tag":105,"props":708,"children":709},{},[710],{"type":30,"value":711},"23",{"type":21,"tag":91,"props":713,"children":714},{},[715,717,722,723],{"type":30,"value":716},"Largest corpus; no ",{"type":21,"tag":264,"props":718,"children":720},{"className":719},[],[721],{"type":30,"value":650},{"type":30,"value":472},{"type":21,"tag":105,"props":724,"children":725},{},[726],{"type":30,"value":727},"24",{"type":21,"tag":91,"props":729,"children":730},{},[731],{"type":30,"value":732},"Vue and Nuxt: huge corpus; our bible and layer",{"type":21,"tag":49,"props":734,"children":735},{},[736,744,754,764,774,784],{"type":21,"tag":91,"props":737,"children":738},{},[739],{"type":21,"tag":26,"props":740,"children":741},{},[742],{"type":30,"value":743},"Accessibility",{"type":21,"tag":91,"props":745,"children":746},{},[747,749],{"type":30,"value":748},"AccessKit in GPUI since 2026-05-27, off by default in Zed; the kit claims roles, states and actions tested; no GPUI app known to work with a screen reader ",{"type":21,"tag":105,"props":750,"children":751},{},[752],{"type":30,"value":753},"25",{"type":21,"tag":91,"props":755,"children":756},{},[757,759],{"type":30,"value":758},"Native assistive tech on mobile; documented gaps on Windows and Linux; AccessKit on the GPUI target ",{"type":21,"tag":105,"props":760,"children":761},{},[762],{"type":30,"value":763},"26",{"type":21,"tag":91,"props":765,"children":766},{},[767,769],{"type":30,"value":768},"Inherits the webview; tracking issue open since 2019 ",{"type":21,"tag":105,"props":770,"children":771},{},[772],{"type":30,"value":773},"27",{"type":21,"tag":91,"props":775,"children":776},{},[777,779],{"type":30,"value":778},"Chromium's tree, enabled when assistive tech is detected ",{"type":21,"tag":105,"props":780,"children":781},{},[782],{"type":30,"value":783},"28",{"type":21,"tag":91,"props":785,"children":786},{},[787],{"type":30,"value":788},"The browser's",{"type":21,"tag":49,"props":790,"children":791},{},[792,800,805,810,815,819],{"type":21,"tag":91,"props":793,"children":794},{},[795],{"type":21,"tag":26,"props":796,"children":797},{},[798],{"type":30,"value":799},"Brand reach",{"type":21,"tag":91,"props":801,"children":802},{},[803],{"type":30,"value":804},"Every pixel is ours; themes by semantic tokens",{"type":21,"tag":91,"props":806,"children":807},{},[808],{"type":30,"value":809},"Tailwind 4 or typed styles over native views; no token system; no backdrop filter on Linux or GPUI",{"type":21,"tag":91,"props":811,"children":812},{},[813],{"type":30,"value":814},"Full CSS",{"type":21,"tag":91,"props":816,"children":817},{},[818],{"type":30,"value":814},{"type":21,"tag":91,"props":820,"children":821},{},[822],{"type":30,"value":823},"Full CSS; the layer as is",{"type":21,"tag":49,"props":825,"children":826},{},[827,835,840,845,850,855],{"type":21,"tag":91,"props":828,"children":829},{},[830],{"type":21,"tag":26,"props":831,"children":832},{},[833],{"type":30,"value":834},"Time to V1",{"type":21,"tag":91,"props":836,"children":837},{},[838],{"type":30,"value":839},"Rust; a new framework for us; the pages must be re-expressed",{"type":21,"tag":91,"props":841,"children":842},{},[843],{"type":30,"value":844},"TSX plus Rust; weekly API breaks",{"type":21,"tag":91,"props":846,"children":847},{},[848],{"type":30,"value":849},"Rust shell plus our Vue pages nearly unchanged",{"type":21,"tag":91,"props":851,"children":852},{},[853],{"type":30,"value":854},"Our Vue pages unchanged; the heaviest result",{"type":21,"tag":91,"props":856,"children":857},{},[858],{"type":30,"value":859},"Nothing to build; the thing Tyler wants to stop shipping",{"type":21,"tag":49,"props":861,"children":862},{},[863,871,876,881,886,891],{"type":21,"tag":91,"props":864,"children":865},{},[866],{"type":21,"tag":26,"props":867,"children":868},{},[869],{"type":30,"value":870},"Languages",{"type":21,"tag":91,"props":872,"children":873},{},[874],{"type":30,"value":875},"Rust",{"type":21,"tag":91,"props":877,"children":878},{},[879],{"type":30,"value":880},"TSX (QuickJS) and Rust",{"type":21,"tag":91,"props":882,"children":883},{},[884],{"type":30,"value":885},"Rust and web",{"type":21,"tag":91,"props":887,"children":888},{},[889],{"type":30,"value":890},"JS\u002FTS",{"type":21,"tag":91,"props":892,"children":893},{},[894],{"type":30,"value":895},"Vue\u002FTS",{"type":21,"tag":22,"props":897,"children":898},{},[899],{"type":30,"value":900},"Reading the table against the decision: the two web-wrapper rows keep our pages but cost a Chromium or a WebKit process per window, which is the argument that moved the dashboard out of the sensor in the first place. Native Shell's at-rest numbers are small on macOS and Windows but its desktop features are unreleased and its API moves weekly. GPUI Kit has no published footprint for a small app at all; the c131 spike measures that with strobe before anything is promised (R7).",{"type":21,"tag":902,"props":903,"children":905},"h3",{"id":904},"what-the-measurements-do-not-say",[906],{"type":30,"value":907},"What the measurements do not say",{"type":21,"tag":909,"props":910,"children":911},"ul",{},[912,918,923,928],{"type":21,"tag":913,"props":914,"children":915},"li",{},[916],{"type":30,"value":917},"No idle RSS of a one-window GPUI Kit app exists anywhere public. The 72.7 MB above is a peak under load on Windows.",{"type":21,"tag":913,"props":919,"children":920},{},[921],{"type":30,"value":922},"Tauri's and Electron's figures are mprof peaks during startup on Linux CI, not idle, and the Electron data point is from 2023.",{"type":21,"tag":913,"props":924,"children":925},{},[926],{"type":30,"value":927},"The six-window macOS figures come from one blog post, one run.",{"type":21,"tag":913,"props":929,"children":930},{},[931],{"type":30,"value":932},"Memory metrics differ per OS: footprint, private working set, private dirty, RSS, PSS. Record the metric with every number we publish.",{"type":21,"tag":35,"props":934,"children":936},{"id":935},"qmap-in-the-native-app-d8",[937],{"type":30,"value":14},{"type":21,"tag":22,"props":939,"children":940},{},[941],{"type":30,"value":942},"qmap is Vue and Three.js in the web control plane: pawns, rugs and flows in an isometric scene. D8 keeps it a link in V1; Mark asked for the trade-offs laid out so he can judge which matter. Four options, costed from what the web gives.",{"type":21,"tag":41,"props":944,"children":945},{},[946,982],{"type":21,"tag":45,"props":947,"children":948},{},[949],{"type":21,"tag":49,"props":950,"children":951},{},[952,957,962,967,972,977],{"type":21,"tag":53,"props":953,"children":954},{},[955],{"type":30,"value":956},"Option",{"type":21,"tag":53,"props":958,"children":959},{},[960],{"type":30,"value":961},"Memory",{"type":21,"tag":53,"props":963,"children":964},{},[965],{"type":30,"value":966},"CPU",{"type":21,"tag":53,"props":968,"children":969},{},[970],{"type":30,"value":971},"What the person loses",{"type":21,"tag":53,"props":973,"children":974},{},[975],{"type":30,"value":976},"Build cost",{"type":21,"tag":53,"props":978,"children":979},{},[980],{"type":30,"value":981},"Notes",{"type":21,"tag":84,"props":983,"children":984},{},[985,1032,1099,1172],{"type":21,"tag":49,"props":986,"children":987},{},[988,998,1008,1017,1022,1027],{"type":21,"tag":91,"props":989,"children":990},{},[991,996],{"type":21,"tag":26,"props":992,"children":993},{},[994],{"type":30,"value":995},"1. Link out",{"type":30,"value":997}," to the control plane in the browser",{"type":21,"tag":91,"props":999,"children":1000},{},[1001,1003,1007],{"type":30,"value":1002},"0 in the app; one tab in the browser (~76 to 380 MB RSS by page type ",{"type":21,"tag":105,"props":1004,"children":1005},{},[1006],{"type":30,"value":177},{"type":30,"value":316},{"type":21,"tag":91,"props":1009,"children":1010},{},[1011,1013],{"type":30,"value":1012},"0 in the app; the tab's, which depends on whether qmap renders on demand ",{"type":21,"tag":105,"props":1014,"children":1015},{},[1016],{"type":30,"value":227},{"type":21,"tag":91,"props":1018,"children":1019},{},[1020],{"type":30,"value":1021},"App context (selection, filters) unless carried in the URL; a single window; offline; an auth hand-off from app session to browser session",{"type":21,"tag":91,"props":1023,"children":1024},{},[1025],{"type":30,"value":1026},"Lowest: a URL with state",{"type":21,"tag":91,"props":1028,"children":1029},{},[1030],{"type":30,"value":1031},"The conservative V1 (ruled 2026-11-09)",{"type":21,"tag":49,"props":1033,"children":1034},{},[1035,1045,1060,1065,1070,1075],{"type":21,"tag":91,"props":1036,"children":1037},{},[1038,1043],{"type":21,"tag":26,"props":1039,"children":1040},{},[1041],{"type":30,"value":1042},"2. Webview embed",{"type":30,"value":1044}," inside the GPUI window",{"type":21,"tag":91,"props":1046,"children":1047},{},[1048,1050,1054,1056],{"type":30,"value":1049},"A WKWebView \u002F WebView2 \u002F WebKitGTK process per view. No clean idle figure exists; proxies: ~29 MB per WKWebView window (six-window total divided, an estimate) ",{"type":21,"tag":105,"props":1051,"children":1052},{},[1053],{"type":30,"value":152},{"type":30,"value":1055},"; nsh's Windows gallery grew ~280 MB after opening WebView2 (estimate) ",{"type":21,"tag":105,"props":1057,"children":1058},{},[1059],{"type":30,"value":135},{"type":21,"tag":91,"props":1061,"children":1062},{},[1063],{"type":30,"value":1064},"The scene's, continuous unless on demand; GPU memory for Three.js",{"type":21,"tag":91,"props":1066,"children":1067},{},[1068],{"type":30,"value":1069},"Little context (host-to-page messaging exists in wry, not verified for the kit's wrapper); offline unless the build is bundled and served over a custom protocol; the agent's token must be injected",{"type":21,"tag":91,"props":1071,"children":1072},{},[1073],{"type":30,"value":1074},"Low to moderate, on an experimental crate",{"type":21,"tag":91,"props":1076,"children":1077},{},[1078,1084,1086,1092,1094],{"type":21,"tag":264,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":30,"value":1083},"gpui-webview",{"type":30,"value":1085}," 0.9.1 is in the kit repo, \"still a experimental\": WKWebView on macOS, WebView2 on Windows, WebKitGTK on Linux X11 only, Wayland unsupported; without ",{"type":21,"tag":264,"props":1087,"children":1089},{"className":1088},[],[1090],{"type":30,"value":1091},"gpui-fast",{"type":30,"value":1093}," the view \"cannot be clipped\" and covers menus and dialogs; on Windows it covers them regardless ",{"type":21,"tag":105,"props":1095,"children":1096},{},[1097],{"type":30,"value":1098},"29",{"type":21,"tag":49,"props":1100,"children":1101},{},[1102,1112,1117,1122,1127,1132],{"type":21,"tag":91,"props":1103,"children":1104},{},[1105,1110],{"type":21,"tag":26,"props":1106,"children":1107},{},[1108],{"type":30,"value":1109},"3. Native render",{"type":30,"value":1111}," in GPUI",{"type":21,"tag":91,"props":1113,"children":1114},{},[1115],{"type":30,"value":1116},"The app's own; no second process",{"type":21,"tag":91,"props":1118,"children":1119},{},[1120],{"type":30,"value":1121},"0 at rest (GPUI redraws on notify); pulses and orbit cost frames while animating",{"type":21,"tag":91,"props":1123,"children":1124},{},[1125],{"type":30,"value":1126},"Parity with the web qmap: two implementations to keep aligned; Three.js features (camera orbit, pulses) rebuilt",{"type":21,"tag":91,"props":1128,"children":1129},{},[1130],{"type":30,"value":1131},"High: a second renderer for pawns, rugs, flows, hit-testing, hover, zoom and pan",{"type":21,"tag":91,"props":1133,"children":1134},{},[1135,1137,1143,1145,1151,1152,1157,1159,1165,1167],{"type":30,"value":1136},"GPUI exposes ",{"type":21,"tag":264,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":30,"value":1142},"canvas(prepaint, paint)",{"type":30,"value":1144}," and ",{"type":21,"tag":264,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":30,"value":1150},"paint_quad \u002F paint_path \u002F paint_image \u002F paint_svg",{"type":30,"value":472},{"type":21,"tag":105,"props":1153,"children":1154},{},[1155],{"type":30,"value":1156},"30",{"type":30,"value":1158},"; an isometric 2.5-D scene fits those (no perspective, no lighting). No public API hands a wgpu or Metal texture into GPUI's draw list on all three OSes; only a macOS ",{"type":21,"tag":264,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":30,"value":1164},"surface",{"type":30,"value":1166}," with a CVPixelBuffer is visible ",{"type":21,"tag":105,"props":1168,"children":1169},{},[1170],{"type":30,"value":1171},"31",{"type":21,"tag":49,"props":1173,"children":1174},{},[1175,1185,1197,1202,1207,1233],{"type":21,"tag":91,"props":1176,"children":1177},{},[1178,1183],{"type":21,"tag":26,"props":1179,"children":1180},{},[1181],{"type":30,"value":1182},"4. Opt-in local web app",{"type":30,"value":1184},": the Nuxt build bundled, served locally, opened in the browser on demand",{"type":21,"tag":91,"props":1186,"children":1187},{},[1188,1190,1195],{"type":30,"value":1189},"A tab while open; the server is the agent's own Rust HTTP stack (no extra process) or a bundled Node (~20 to 26 MB RSS baseline for Node alone ",{"type":21,"tag":105,"props":1191,"children":1192},{},[1193],{"type":30,"value":1194},"32",{"type":30,"value":1196},"; Nitro more, unmeasured)",{"type":21,"tag":91,"props":1198,"children":1199},{},[1200],{"type":30,"value":1201},"A tab while open; 0 when closed",{"type":21,"tag":91,"props":1203,"children":1204},{},[1205],{"type":30,"value":1206},"A single window; in-app context (same URL-state fix as option 1). Gains offline and a local loopback token",{"type":21,"tag":91,"props":1208,"children":1209},{},[1210,1212,1218,1220,1226,1228],{"type":30,"value":1211},"Low: ",{"type":21,"tag":264,"props":1213,"children":1215},{"className":1214},[],[1216],{"type":30,"value":1217},"nuxt generate",{"type":30,"value":1219}," output embedded in the agent plus a loopback route; Tauri documents the same pattern as its ",{"type":21,"tag":264,"props":1221,"children":1223},{"className":1222},[],[1224],{"type":30,"value":1225},"localhost",{"type":30,"value":1227}," plugin ",{"type":21,"tag":105,"props":1229,"children":1230},{},[1231],{"type":30,"value":1232},"33",{"type":21,"tag":91,"props":1234,"children":1235},{},[1236],{"type":30,"value":1237},"Mark's \"optional secondary web app\" from the initial prompt. The person opts in, so the cost is theirs to accept",{"type":21,"tag":22,"props":1239,"children":1240},{},[1241,1246],{"type":21,"tag":26,"props":1242,"children":1243},{},[1244],{"type":30,"value":1245},"How to weigh them.",{"type":30,"value":1247}," Options 1 and 4 keep the app's own footprint at zero and move the cost to a browser the person opened on purpose; 4 adds offline and keeps the control plane out of the loop, for a small build. Option 2 puts a browser engine inside the app's process tree on every launch where qmap is open, on a crate its authors call experimental, with Linux Wayland out. Option 3 is the only one that is truly native and truly cheap at rest, and the only one that costs a second implementation. If the native app ever needs a topology view of this one machine (which harnesses talk to which MCP servers), option 3 at small scale is the honest candidate; for the org-wide view, 1 or 4. The spike can measure 2 cheaply if Mark wants a number rather than a proxy; it cannot measure usage, which is why D8 stayed conservative.",{"type":21,"tag":35,"props":1249,"children":1251},{"id":1250},"open-questions",[1252],{"type":30,"value":15},{"type":21,"tag":1254,"props":1255,"children":1256},"ol",{},[1257,1262,1267,1279,1284],{"type":21,"tag":913,"props":1258,"children":1259},{},[1260],{"type":30,"value":1261},"The idle RSS, CPU and binary size of a one-window GPUI Kit hello app on the three OSes. Only the spike answers this.",{"type":21,"tag":913,"props":1263,"children":1264},{},[1265],{"type":30,"value":1266},"The idle memory of an empty WKWebView \u002F WebView2 \u002F WebKitGTK inside a GPUI window, with the metric stated.",{"type":21,"tag":913,"props":1268,"children":1269},{},[1270,1272,1277],{"type":30,"value":1271},"Whether ",{"type":21,"tag":264,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":30,"value":1083},{"type":30,"value":1278}," exposes host-to-page messaging and whether WebGL content works inside it on each OS.",{"type":21,"tag":913,"props":1280,"children":1281},{},[1282],{"type":30,"value":1283},"Whether qmap renders on demand today or runs a continuous loop; this decides the tab's CPU in options 1, 2 and 4.",{"type":21,"tag":913,"props":1285,"children":1286},{},[1287],{"type":30,"value":1288},"Whether any GPUI app is usable with VoiceOver or NVDA; this is the accessibility row's real answer.",{"type":21,"tag":35,"props":1290,"children":1292},{"id":1291},"sources",[1293],{"type":30,"value":16},{"type":21,"tag":1254,"props":1295,"children":1296},{},[1297,1309,1320,1361,1372,1391,1402,1413,1424,1450,1468,1498,1507,1516,1525,1534,1543,1552,1561,1570,1586,1621,1638,1649,1660,1685,1701,1710,1719,1745,1761,1777,1788,1806,1825],{"type":21,"tag":913,"props":1298,"children":1299},{},[1300,1307],{"type":21,"tag":309,"props":1301,"children":1305},{"href":1302,"rel":1303},"https:\u002F\u002Fgithub.com\u002Flongbridge\u002Fnsh-perf-bench",[1304],"nofollow",[1306],{"type":30,"value":1302},{"type":30,"value":1308}," — Windows 11, gpui-kit 0.8.0 on gpui-fast 0.1.10, PresentMon, median of 3, 2026-10-22; \"simplified UI, so it isn't a like-for-like UI comparison\"",{"type":21,"tag":913,"props":1310,"children":1311},{},[1312,1318],{"type":21,"tag":309,"props":1313,"children":1316},{"href":1314,"rel":1315},"https:\u002F\u002Fnsh.dev\u002Fdocs\u002Fperformance-report.md",[1304],[1317],{"type":30,"value":1314},{"type":30,"value":1319}," — nsh's own release-build figures; metric named per OS",{"type":21,"tag":913,"props":1321,"children":1322},{},[1323,1329,1331,1337,1339,1345,1347,1353,1355],{"type":21,"tag":309,"props":1324,"children":1327},{"href":1325,"rel":1326},"https:\u002F\u002Ftauri-apps.github.io\u002Fbenchmark_results\u002F",[1304],[1328],{"type":30,"value":1325},{"type":30,"value":1330}," (",{"type":21,"tag":264,"props":1332,"children":1334},{"className":1333},[],[1335],{"type":30,"value":1336},"tauri-recent-linux.json",{"type":30,"value":1338},", ",{"type":21,"tag":264,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":30,"value":1344},"electron-recent.json",{"type":30,"value":1346},") — hyperfine and mprof on GitHub Actions ",{"type":21,"tag":264,"props":1348,"children":1350},{"className":1349},[],[1351],{"type":30,"value":1352},"ubuntu-latest",{"type":30,"value":1354},"; method in ",{"type":21,"tag":309,"props":1356,"children":1359},{"href":1357,"rel":1358},"https:\u002F\u002Fraw.githubusercontent.com\u002Ftauri-apps\u002Ftauri-docs\u002Fv1\u002Fdocs\u002Freferences\u002Fbenchmarks.md",[1304],[1360],{"type":30,"value":1357},{"type":21,"tag":913,"props":1362,"children":1363},{},[1364,1370],{"type":21,"tag":309,"props":1365,"children":1368},{"href":1366,"rel":1367},"https:\u002F\u002Fwww.gethopp.app\u002Fblog\u002Ftauri-vs-electron",[1304],[1369],{"type":30,"value":1366},{"type":30,"value":1371}," — macOS, six windows, one run, 2025-04-09",{"type":21,"tag":913,"props":1373,"children":1374},{},[1375,1381,1383,1389],{"type":21,"tag":309,"props":1376,"children":1379},{"href":1377,"rel":1378},"https:\u002F\u002Fwww.superchargebrowser.com\u002Flibrary\u002Fchrome-ram-usage-per-tab-2026.md",[1304],[1380],{"type":30,"value":1377},{"type":30,"value":1382}," — Chromium 148, Linux ",{"type":21,"tag":264,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":30,"value":1388},"smaps_rollup",{"type":30,"value":1390},", clean profile; a tab-suspender vendor, low trust but the only stated metric",{"type":21,"tag":913,"props":1392,"children":1393},{},[1394,1400],{"type":21,"tag":309,"props":1395,"children":1398},{"href":1396,"rel":1397},"https:\u002F\u002Fraw.githubusercontent.com\u002Flongbridge\u002Fgpui-fast\u002Fmain\u002FREADME.md",[1304],[1399],{"type":30,"value":1396},{"type":30,"value":1401}," — Linux, release, 144 Hz, mean of two runs",{"type":21,"tag":913,"props":1403,"children":1404},{},[1405,1411],{"type":21,"tag":309,"props":1406,"children":1409},{"href":1407,"rel":1408},"https:\u002F\u002Fr3f.docs.pmnd.rs\u002Fadvanced\u002Fscaling-performance",[1304],[1410],{"type":30,"value":1407},{"type":30,"value":1412}," — on-demand rendering guidance",{"type":21,"tag":913,"props":1414,"children":1415},{},[1416,1422],{"type":21,"tag":309,"props":1417,"children":1420},{"href":1418,"rel":1419},"https:\u002F\u002Fapi.github.com\u002Frepos\u002Fzed-industries\u002Fzed\u002Freleases\u002Flatest",[1304],[1421],{"type":30,"value":1418},{"type":30,"value":1423}," — Zed 1.27.0, 2026-11-04",{"type":21,"tag":913,"props":1425,"children":1426},{},[1427,1433,1434,1440,1442,1448],{"type":21,"tag":309,"props":1428,"children":1431},{"href":1429,"rel":1430},"https:\u002F\u002Ftauri.app\u002F",[1304],[1432],{"type":30,"value":1429},{"type":30,"value":1144},{"type":21,"tag":309,"props":1435,"children":1438},{"href":1436,"rel":1437},"https:\u002F\u002Fv2.tauri.app\u002Fstart\u002F",[1304],[1439],{"type":30,"value":1436},{"type":30,"value":1441}," — the \"600 KB\" claim; ",{"type":21,"tag":309,"props":1443,"children":1446},{"href":1444,"rel":1445},"https:\u002F\u002Fv2.tauri.app\u002Fconcept\u002Fsize\u002F",[1304],[1447],{"type":30,"value":1444},{"type":30,"value":1449}," gives no number",{"type":21,"tag":913,"props":1451,"children":1452},{},[1453,1459,1460,1466],{"type":21,"tag":309,"props":1454,"children":1457},{"href":1455,"rel":1456},"https:\u002F\u002Fwww.electronjs.org\u002Fdocs\u002Flatest\u002Fwhy-electron",[1304],[1458],{"type":30,"value":1455},{"type":30,"value":614},{"type":21,"tag":309,"props":1461,"children":1464},{"href":1462,"rel":1463},"https:\u002F\u002Fapi.github.com\u002Frepos\u002Felectron\u002Felectron\u002Freleases\u002Flatest",[1304],[1465],{"type":30,"value":1462},{"type":30,"value":1467}," — Electron 45.2.3, 2026-11-04",{"type":21,"tag":913,"props":1469,"children":1470},{},[1471,1477,1478,1484,1485,1491,1493],{"type":21,"tag":309,"props":1472,"children":1475},{"href":1473,"rel":1474},"https:\u002F\u002Fnsh.dev\u002Fversions\u002Fmain\u002Fmodules\u002Fnsh-desktop.md",[1304],[1476],{"type":30,"value":1473},{"type":30,"value":614},{"type":21,"tag":309,"props":1479,"children":1482},{"href":1480,"rel":1481},"https:\u002F\u002Fnsh.dev\u002Fversions\u002Fmain\u002Fdocs\u002Fapp-updates",[1304],[1483],{"type":30,"value":1480},{"type":30,"value":614},{"type":21,"tag":309,"props":1486,"children":1489},{"href":1487,"rel":1488},"https:\u002F\u002Fraw.githubusercontent.com\u002Flongbridge\u002Fnsh\u002Fmain\u002Fwebsite\u002Fmodules\u002Fnsh.md",[1304],[1490],{"type":30,"value":1487},{"type":30,"value":1492}," — unreleased ",{"type":21,"tag":264,"props":1494,"children":1496},{"className":1495},[],[1497],{"type":30,"value":325},{"type":21,"tag":913,"props":1499,"children":1500},{},[1501],{"type":21,"tag":309,"props":1502,"children":1505},{"href":1503,"rel":1504},"https:\u002F\u002Fv2.tauri.app\u002Flearn\u002Fsystem-tray\u002F",[1304],[1506],{"type":30,"value":1503},{"type":21,"tag":913,"props":1508,"children":1509},{},[1510],{"type":21,"tag":309,"props":1511,"children":1514},{"href":1512,"rel":1513},"https:\u002F\u002Fwww.electronjs.org\u002Fdocs\u002Flatest\u002Fapi\u002Ftray",[1304],[1515],{"type":30,"value":1512},{"type":21,"tag":913,"props":1517,"children":1518},{},[1519],{"type":21,"tag":309,"props":1520,"children":1523},{"href":1521,"rel":1522},"https:\u002F\u002Fv2.tauri.app\u002Fplugin\u002Fnotification\u002F",[1304],[1524],{"type":30,"value":1521},{"type":21,"tag":913,"props":1526,"children":1527},{},[1528],{"type":21,"tag":309,"props":1529,"children":1532},{"href":1530,"rel":1531},"https:\u002F\u002Fwww.electronjs.org\u002Fdocs\u002Flatest\u002Fapi\u002Fnotification",[1304],[1533],{"type":30,"value":1530},{"type":21,"tag":913,"props":1535,"children":1536},{},[1537],{"type":21,"tag":309,"props":1538,"children":1541},{"href":1539,"rel":1540},"https:\u002F\u002Fv2.tauri.app\u002Fplugin\u002Fupdater\u002F",[1304],[1542],{"type":30,"value":1539},{"type":21,"tag":913,"props":1544,"children":1545},{},[1546],{"type":21,"tag":309,"props":1547,"children":1550},{"href":1548,"rel":1549},"https:\u002F\u002Fwww.electronjs.org\u002Fdocs\u002Flatest\u002Fapi\u002Fauto-updater",[1304],[1551],{"type":30,"value":1548},{"type":21,"tag":913,"props":1553,"children":1554},{},[1555],{"type":21,"tag":309,"props":1556,"children":1559},{"href":1557,"rel":1558},"https:\u002F\u002Fv2.tauri.app\u002Fplugin\u002Fdeep-linking\u002F",[1304],[1560],{"type":30,"value":1557},{"type":21,"tag":913,"props":1562,"children":1563},{},[1564],{"type":21,"tag":309,"props":1565,"children":1568},{"href":1566,"rel":1567},"https:\u002F\u002Fwww.electronjs.org\u002Fdocs\u002Flatest\u002Fapi\u002Fapp",[1304],[1569],{"type":30,"value":1566},{"type":21,"tag":913,"props":1571,"children":1572},{},[1573,1579,1580],{"type":21,"tag":309,"props":1574,"children":1577},{"href":1575,"rel":1576},"https:\u002F\u002Fv2.tauri.app\u002Fplugin\u002Fsingle-instance\u002F",[1304],[1578],{"type":30,"value":1575},{"type":30,"value":614},{"type":21,"tag":309,"props":1581,"children":1584},{"href":1582,"rel":1583},"https:\u002F\u002Fv2.tauri.app\u002Fplugin\u002Fautostart\u002F",[1304],[1585],{"type":30,"value":1582},{"type":21,"tag":913,"props":1587,"children":1588},{},[1589,1595,1597,1603,1605,1611,1613,1619],{"type":21,"tag":309,"props":1590,"children":1593},{"href":1591,"rel":1592},"https:\u002F\u002Fgpui-kit.com\u002Fllms.txt",[1304],[1594],{"type":30,"value":1591},{"type":30,"value":1596}," (47,730 B); ",{"type":21,"tag":309,"props":1598,"children":1601},{"href":1599,"rel":1600},"https:\u002F\u002Fgpui-kit.com\u002Fllms-full.txt",[1304],[1602],{"type":30,"value":1599},{"type":30,"value":1604}," (4,737,688 B); gpui-kit pins ",{"type":21,"tag":264,"props":1606,"children":1608},{"className":1607},[],[1609],{"type":30,"value":1610},"gpui-pre 0.3.12",{"type":30,"value":1612}," while docs.rs ",{"type":21,"tag":264,"props":1614,"children":1616},{"className":1615},[],[1617],{"type":30,"value":1618},"gpui",{"type":30,"value":1620}," is 0.2.2",{"type":21,"tag":913,"props":1622,"children":1623},{},[1624,1630,1632],{"type":21,"tag":309,"props":1625,"children":1628},{"href":1626,"rel":1627},"https:\u002F\u002Fnsh.dev\u002Fllms.txt",[1304],[1629],{"type":30,"value":1626},{"type":30,"value":1631}," (58,776 B); ",{"type":21,"tag":309,"props":1633,"children":1636},{"href":1634,"rel":1635},"https:\u002F\u002Fgithub.com\u002Flongbridge\u002Fnsh",[1304],[1637],{"type":30,"value":1634},{"type":21,"tag":913,"props":1639,"children":1640},{},[1641,1647],{"type":21,"tag":309,"props":1642,"children":1645},{"href":1643,"rel":1644},"https:\u002F\u002Fv2.tauri.app\u002Fllms.txt",[1304],[1646],{"type":30,"value":1643},{"type":30,"value":1648}," (2,798 B)",{"type":21,"tag":913,"props":1650,"children":1651},{},[1652,1658],{"type":21,"tag":309,"props":1653,"children":1656},{"href":1654,"rel":1655},"https:\u002F\u002Fwww.electronjs.org\u002Fllms.txt",[1304],[1657],{"type":30,"value":1654},{"type":30,"value":1659}," returns 404",{"type":21,"tag":913,"props":1661,"children":1662},{},[1663,1669,1671,1677,1679],{"type":21,"tag":309,"props":1664,"children":1667},{"href":1665,"rel":1666},"https:\u002F\u002Fgithub.com\u002Fzed-industries\u002Fzed\u002Fpull\u002F56065",[1304],[1668],{"type":30,"value":1665},{"type":30,"value":1670}," (merged 2026-05-27); ",{"type":21,"tag":309,"props":1672,"children":1675},{"href":1673,"rel":1674},"https:\u002F\u002Fgithub.com\u002Fzed-industries\u002Fzed\u002Fissues\u002F41138",[1304],[1676],{"type":30,"value":1673},{"type":30,"value":1678}," (\"Zed doesn't support screen readers\", maintainer, 2025-10-28); ",{"type":21,"tag":309,"props":1680,"children":1683},{"href":1681,"rel":1682},"https:\u002F\u002Fgpui-kit.com",[1304],[1684],{"type":30,"value":1681},{"type":21,"tag":913,"props":1686,"children":1687},{},[1688,1694,1695],{"type":21,"tag":309,"props":1689,"children":1692},{"href":1690,"rel":1691},"https:\u002F\u002Fnsh.dev\u002Fdocs\u002Faccessibility.md",[1304],[1693],{"type":30,"value":1690},{"type":30,"value":614},{"type":21,"tag":309,"props":1696,"children":1699},{"href":1697,"rel":1698},"https:\u002F\u002Fnsh.dev\u002Fdocs\u002Fgpui.md",[1304],[1700],{"type":30,"value":1697},{"type":21,"tag":913,"props":1702,"children":1703},{},[1704],{"type":21,"tag":309,"props":1705,"children":1708},{"href":1706,"rel":1707},"https:\u002F\u002Fgithub.com\u002Ftauri-apps\u002Ftauri\u002Fissues\u002F207",[1304],[1709],{"type":30,"value":1706},{"type":21,"tag":913,"props":1711,"children":1712},{},[1713],{"type":21,"tag":309,"props":1714,"children":1717},{"href":1715,"rel":1716},"https:\u002F\u002Fwww.electronjs.org\u002Fdocs\u002Flatest\u002Ftutorial\u002Faccessibility",[1304],[1718],{"type":30,"value":1715},{"type":21,"tag":913,"props":1720,"children":1721},{},[1722,1728,1729,1735,1737,1743],{"type":21,"tag":309,"props":1723,"children":1726},{"href":1724,"rel":1725},"https:\u002F\u002Fraw.githubusercontent.com\u002Flongbridge\u002Fgpui-kit\u002Fmain\u002Fcrates\u002Fwebview\u002FREADME.md",[1304],[1727],{"type":30,"value":1724},{"type":30,"value":614},{"type":21,"tag":309,"props":1730,"children":1733},{"href":1731,"rel":1732},"https:\u002F\u002Fdocs.rs\u002Fcrate\u002Fgpui-webview\u002Flatest",[1304],[1734],{"type":30,"value":1731},{"type":30,"value":1736}," — ",{"type":21,"tag":264,"props":1738,"children":1740},{"className":1739},[],[1741],{"type":30,"value":1742},"lb-wry 0.53.3",{"type":30,"value":1744},", Longbridge's wry fork",{"type":21,"tag":913,"props":1746,"children":1747},{},[1748,1754,1755],{"type":21,"tag":309,"props":1749,"children":1752},{"href":1750,"rel":1751},"https:\u002F\u002Fdocs.rs\u002Fgpui\u002Flatest\u002Fgpui\u002Ffn.canvas.html",[1304],[1753],{"type":30,"value":1750},{"type":30,"value":614},{"type":21,"tag":309,"props":1756,"children":1759},{"href":1757,"rel":1758},"https:\u002F\u002Fdocs.rs\u002Fgpui\u002Flatest\u002Fgpui\u002Fstruct.Window.html",[1304],[1760],{"type":30,"value":1757},{"type":21,"tag":913,"props":1762,"children":1763},{},[1764,1770,1771],{"type":21,"tag":309,"props":1765,"children":1768},{"href":1766,"rel":1767},"https:\u002F\u002Fdocs.rs\u002Fgpui\u002Flatest\u002Fgpui\u002Ffn.surface.html",[1304],[1769],{"type":30,"value":1766},{"type":30,"value":614},{"type":21,"tag":309,"props":1772,"children":1775},{"href":1773,"rel":1774},"https:\u002F\u002Fraw.githubusercontent.com\u002Fzed-industries\u002Fzed\u002Fmain\u002Fcrates\u002Fgpui\u002FCargo.toml",[1304],[1776],{"type":30,"value":1773},{"type":21,"tag":913,"props":1778,"children":1779},{},[1780,1786],{"type":21,"tag":309,"props":1781,"children":1784},{"href":1782,"rel":1783},"https:\u002F\u002Fcirosantilli.com\u002Fjavascript-memory-usage-benchmark",[1304],[1785],{"type":30,"value":1782},{"type":30,"value":1787}," — Node 16, idle loop and hello script, not an HTTP server",{"type":21,"tag":913,"props":1789,"children":1790},{},[1791,1797,1799,1804],{"type":21,"tag":309,"props":1792,"children":1795},{"href":1793,"rel":1794},"https:\u002F\u002Fraw.githubusercontent.com\u002Ftauri-apps\u002Fplugins-workspace\u002Fv2\u002FREADME.md",[1304],[1796],{"type":30,"value":1793},{"type":30,"value":1798}," — the ",{"type":21,"tag":264,"props":1800,"children":1802},{"className":1801},[],[1803],{"type":30,"value":1225},{"type":30,"value":1805}," plugin",{"type":21,"tag":913,"props":1807,"children":1808},{},[1809,1815,1817,1823],{"type":21,"tag":309,"props":1810,"children":1813},{"href":1811,"rel":1812},"https:\u002F\u002Fwww.devtoolreviews.com\u002Freviews\u002Fzed-editor-review-2026",[1304],[1814],{"type":30,"value":1811},{"type":30,"value":1816}," (180 MB idle, dated 2026-02-27, updated 2026-10-21); ",{"type":21,"tag":309,"props":1818,"children":1821},{"href":1819,"rel":1820},"https:\u002F\u002Ftechnewsdaily.com\u002Fnews\u002Fhow-to-get-started-with-zeds-2026-multiplayer-code-editor\u002F",[1304],[1822],{"type":30,"value":1819},{"type":30,"value":1824}," (222 MB) — secondary, see claims.md",{"type":21,"tag":913,"props":1826,"children":1827},{},[1828,1834,1835,1841],{"type":21,"tag":309,"props":1829,"children":1832},{"href":1830,"rel":1831},"https:\u002F\u002Fwww.heise.de\u002Fen\u002Fnews\u002FDiscord-is-rebuilding-in-Rust-leaving-React-and-Electron-behind-11516113.html",[1304],[1833],{"type":30,"value":1830},{"type":30,"value":614},{"type":21,"tag":309,"props":1836,"children":1839},{"href":1837,"rel":1838},"https:\u002F\u002Fdev.to\u002Fjamilxt\u002Felectron-vs-gpui-what-discords-290-mb-rust-rewrite-can-and-cannot-prove-34b6",[1304],[1840],{"type":30,"value":1837},{"type":30,"value":1842}," — the 2026-11-04 announcement, see claims.md",1794599292058]