[{"data":1,"prerenderedAt":1513},["ShallowReactive",2],{"navigation":3,"\u002Fchangelog":252,"\u002Fchangelog-surround":1510},[4,89,128,171,213,217,248],{"title":5,"path":6,"stem":7,"children":8,"icon":88},"Guide","\u002Fguide","1.guide\u002F01.index",[9,10,14,18,22,26,30,34,38,42,73],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Install","\u002Fguide\u002Finstall","1.guide\u002F02.install",{"title":15,"path":16,"stem":17},"First widget","\u002Fguide\u002Ffirst-widget","1.guide\u002F03.first-widget",{"title":19,"path":20,"stem":21},"Concepts","\u002Fguide\u002Fconcepts","1.guide\u002F05.concepts",{"title":23,"path":24,"stem":25},"Apple data transport","\u002Fguide\u002Ftransport","1.guide\u002F06.transport",{"title":27,"path":28,"stem":29},"Doctor","\u002Fguide\u002Fdoctor","1.guide\u002F07.doctor",{"title":31,"path":32,"stem":33},"CLI","\u002Fguide\u002Fcli","1.guide\u002F08.cli",{"title":35,"path":36,"stem":37},"Core vs extended","\u002Fguide\u002Ftiers","1.guide\u002F09.tiers",{"title":39,"path":40,"stem":41},"Troubleshooting","\u002Fguide\u002Ftroubleshooting","1.guide\u002F10.troubleshooting",{"title":43,"path":44,"stem":45,"children":46,"icon":72},"Platform setup","\u002Fguide\u002Fsetup","1.guide\u002F12.setup\u002F1.index",[47,48,52,56,60,64,68],{"title":43,"path":44,"stem":45},{"title":49,"path":50,"stem":51},"Android setup","\u002Fguide\u002Fsetup\u002Fandroid","1.guide\u002F12.setup\u002F2.android",{"title":53,"path":54,"stem":55},"iOS setup","\u002Fguide\u002Fsetup\u002Fios","1.guide\u002F12.setup\u002F3.ios",{"title":57,"path":58,"stem":59},"macOS setup","\u002Fguide\u002Fsetup\u002Fmacos","1.guide\u002F12.setup\u002F4.macos",{"title":61,"path":62,"stem":63},"Windows setup","\u002Fguide\u002Fsetup\u002Fwindows","1.guide\u002F12.setup\u002F5.windows",{"title":65,"path":66,"stem":67},"Linux setup","\u002Fguide\u002Fsetup\u002Flinux","1.guide\u002F12.setup\u002F6.linux",{"title":69,"path":70,"stem":71},"Desktop webview","\u002Fguide\u002Fsetup\u002Fdesktop","1.guide\u002F12.setup\u002F7.desktop","i-lucide-monitor-smartphone",{"title":74,"icon":75,"path":76,"stem":77,"children":78,"page":87},"Recipes","i-lucide-chef-hat","\u002Fguide\u002Frecipes","1.guide\u002F13.recipes",[79,83],{"title":80,"path":81,"stem":82},"Multi-widget","\u002Fguide\u002Frecipes\u002Fmulti-widget","1.guide\u002F13.recipes\u002F4.multi-widget",{"title":84,"path":85,"stem":86},"Testing your widget","\u002Fguide\u002Frecipes\u002Ftesting","1.guide\u002F13.recipes\u002F5.testing",false,"i-lucide-rocket",{"title":90,"path":91,"stem":92,"children":93,"icon":127},"Elements","\u002Felements","2.elements\u002F1.index",[94,95,99,103,107,111,115,119,123],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Layout elements","\u002Felements\u002Flayout","2.elements\u002F2.layout",{"title":100,"path":101,"stem":102},"Text elements","\u002Felements\u002Ftext","2.elements\u002F3.text",{"title":104,"path":105,"stem":106},"Media elements","\u002Felements\u002Fmedia","2.elements\u002F4.media",{"title":108,"path":109,"stem":110},"Data elements","\u002Felements\u002Fdata","2.elements\u002F5.data",{"title":112,"path":113,"stem":114},"Interactive elements","\u002Felements\u002Finteractive","2.elements\u002F6.interactive",{"title":116,"path":117,"stem":118},"Spacing elements","\u002Felements\u002Fspacing","2.elements\u002F7.spacing",{"title":120,"path":121,"stem":122},"Style","\u002Felements\u002Fstyle","2.elements\u002F8.style",{"title":124,"path":125,"stem":126},"Colors","\u002Felements\u002Fcolors","2.elements\u002F9.colors","i-lucide-blocks",{"title":129,"path":130,"stem":131,"children":132,"icon":170},"Features","\u002Ffeatures","2.features\u002F01.index",[133,134,138,142,146,150,154,158,162,166],{"title":129,"path":130,"stem":131},{"title":135,"path":136,"stem":137},"Dynamic Island","\u002Ffeatures\u002Fdynamic-island","2.features\u002F02.dynamic-island",{"title":139,"path":140,"stem":141},"Interactive widgets","\u002Ffeatures\u002Finteractive","2.features\u002F03.interactive",{"title":143,"path":144,"stem":145},"Live activities","\u002Ffeatures\u002Flive-activities","2.features\u002F04.live-activities",{"title":147,"path":148,"stem":149},"Timelines and transitions","\u002Ffeatures\u002Ftimelines","2.features\u002F05.timelines",{"title":151,"path":152,"stem":153},"Remote data","\u002Ffeatures\u002Fremote-data","2.features\u002F06.remote-data",{"title":155,"path":156,"stem":157},"Widget updater","\u002Ffeatures\u002Fwidget-updater","2.features\u002F07.widget-updater",{"title":159,"path":160,"stem":161},"Instances","\u002Ffeatures\u002Finstances","2.features\u002F08.instances",{"title":163,"path":164,"stem":165},"Conditions, lists and templates","\u002Ffeatures\u002Fdynamic-content","2.features\u002F09.dynamic-content",{"title":167,"path":168,"stem":169},"Images","\u002Ffeatures\u002Fimages","2.features\u002F10.images","i-lucide-sparkles",{"title":172,"icon":173,"path":174,"stem":175,"children":176,"page":87},"API","i-lucide-file-code","\u002Fapi","3.api",[177,181,185,189,193,197,201,205,209],{"title":178,"path":179,"stem":180},"JavaScript API","\u002Fapi\u002Fjs","3.api\u002F1.js",{"title":182,"path":183,"stem":184},"JS reference","\u002Fapi\u002Freference","3.api\u002F2.reference",{"title":186,"path":187,"stem":188},"Rust API","\u002Fapi\u002Frust","3.api\u002F3.rust",{"title":190,"path":191,"stem":192},"Tauri commands","\u002Fapi\u002Fcommands","3.api\u002F4.commands",{"title":194,"path":195,"stem":196},"Plugin config","\u002Fapi\u002Fplugin-config","3.api\u002F5.plugin-config",{"title":198,"path":199,"stem":200},"Cargo features","\u002Fapi\u002Fcargo-features","3.api\u002F6.cargo-features",{"title":202,"path":203,"stem":204},"Environment variables","\u002Fapi\u002Fenv","3.api\u002F7.env",{"title":206,"path":207,"stem":208},"Permissions","\u002Fapi\u002Fpermissions","3.api\u002F8.permissions",{"title":210,"path":211,"stem":212},"JSON Schema","\u002Fapi\u002Fjson-schema","3.api\u002F9.json-schema",{"title":214,"path":215,"stem":216},"Showcase","\u002Fshowcase","4.showcase",{"title":218,"path":219,"stem":220,"children":221,"icon":247},"Contributing","\u002Fcontributing","5.contributing\u002F1.index",[222,223,227,231,235,239,243],{"title":218,"path":219,"stem":220},{"title":224,"path":225,"stem":226},"Development guide","\u002Fcontributing\u002Fdevelopment","5.contributing\u002F2.development",{"title":228,"path":229,"stem":230},"Render testing (config → geometry \u002F pixels)","\u002Fcontributing\u002Frender-testing","5.contributing\u002F3.render-testing",{"title":232,"path":233,"stem":234},"Visual stand (Level-2 pixels)","\u002Fcontributing\u002Fvisual-stand","5.contributing\u002F4.visual-stand",{"title":236,"path":237,"stem":238},"Linux harness (Docker)","\u002Fcontributing\u002Flinux-harness","5.contributing\u002F5.linux-harness",{"title":240,"path":241,"stem":242},"Windows surface split","\u002Fcontributing\u002Fwindows-surfaces","5.contributing\u002F6.windows-surfaces",{"title":244,"path":245,"stem":246},"Mutation testing","\u002Fcontributing\u002Fmutation-testing","5.contributing\u002F7.mutation-testing","i-lucide-git-pull-request",{"title":249,"path":250,"stem":251},"Changelog","\u002Fchangelog","6.changelog",{"id":253,"title":249,"body":254,"description":1503,"extension":1504,"generated":1505,"links":1506,"meta":1507,"navigation":1505,"path":250,"seo":1508,"stem":251,"__hash__":1509},"docs\u002F6.changelog.md",{"type":255,"value":256,"toc":1455},"minimark",[257,262,267,425,429,466,470,475,479,483,517,521,600,603,702,705,717,721,724,783,786,791,795,798,852,855,884,888,891,925,928,946,949,953,956,1013,1016,1038,1041,1062,1066,1070,1093,1097,1101,1148,1152,1217,1221,1224,1228,1311,1315,1345,1349,1392,1396,1408,1412,1442,1446],[258,259,261],"h2",{"id":260},"_080","0.8.0",[263,264,266],"h3",{"id":265},"added","Added",[268,269,270,293,300,342,357,382,403,413,416,422],"ul",{},[271,272,273,274,278,279,278,282,278,285,288,289,292],"li",{},"Live activities: ",[275,276,277],"code",{},"startActivity"," \u002F ",[275,280,281],{},"updateActivity",[275,283,284],{},"endActivity",[275,286,287],{},"listActivities",", templates with data-only updates (",[275,290,291],{},"registerActivityTemplate","), push tokens, state and content events. iOS Lock Screen and Dynamic Island, Android ongoing notifications.",[271,294,295,296,299],{},"Desktop Dynamic Island: a live activity as a pill at the camera notch on macOS, and the same pill on Windows and Linux (",[275,297,298],{},"activitySurface: \"island\"","); compact around the notch, expanded on hover.",[271,301,302,303,306,307,310,311,278,314,278,317,320,321,324,325,324,328,331,332,278,335,324,338,341],{},"Local state: ",[275,304,305],{},"state"," defaults and ",[275,308,309],{},"set"," on ",[275,312,313],{},"button",[275,315,316],{},"toggle",[275,318,319],{},"link"," (",[275,322,323],{},"\"$toggle\"",", ",[275,326,327],{},"\"$inc\"",[275,329,330],{},"\"$dec\"",") change the widget in place without the app; ",[275,333,334],{},"setWidgetState",[275,336,337],{},"getWidgetState",[275,339,340],{},"widget-state-changed"," event.",[271,343,344,345,348,349,352,353,356],{},"Data without the layout: ",[275,346,347],{},"setWidgetData(widgetId, data)"," with ",[275,350,351],{},"{{data.path}}"," bindings; ",[275,354,355],{},"source"," lets the widget fetch JSON from a URL itself.",[271,358,359,360,363,364,367,368,278,371,374,375,324,378,381],{},"Dynamic content: ",[275,361,362],{},"when"," conditions, ",[275,365,366],{},"repeat"," lists from arrays, reusable ",[275,369,370],{},"templates",[275,372,373],{},"use",", localized ",[275,376,377],{},"strings",[275,379,380],{},"requires"," for newer configs on older apps.",[271,383,384,385,388,389,392,393,324,396,324,399,402],{},"Scheduled entries (",[275,386,387],{},"entries: [{ at, small, … }]",") switched without the app, and the ",[275,390,391],{},"transition"," hint (",[275,394,395],{},"opacity",[275,397,398],{},"slide",[275,400,401],{},"numeric",").",[271,404,405,406,324,409,412],{},"Instances: one widget placed several times with its own config and data (",[275,407,408],{},"setWidgetInstances",[275,410,411],{},"getActiveWidgets",", Apple \"Edit Widget\" choice).",[271,414,415],{},"Android: widget scheduler, configuration activity, loading \u002F error \u002F preview layouts, Samsung widget info.",[271,417,418,421],{},[275,419,420],{},"getWidgetPushToken"," for widget push updates on iOS.",[271,423,424],{},"Docs: Features section with recordings, a standalone widget constructor page, animated home page.",[263,426,428],{"id":427},"changed","Changed",[268,430,431,434,437],{},[271,432,433],{},"The resolve contract (bindings, conditions, state) is shared and tested across Rust, TS, Swift and Kotlin (contract v3).",[271,435,436],{},"Windows Adaptive Cards: exact colours, unique ids, progress bars, shape and image sizes, ZStack sizing closer to the other renderers.",[271,438,439,440,324,443,446,447,450,451,453,454,278,457,324,460,453,462,465],{},"Element types (",[275,441,442],{},"ContentMode",[275,444,445],{},"ChartType",", …) are generated from the schema (",[275,448,449],{},"guest-js\u002Fgenerated","); ",[275,452,442],{}," adds ",[275,455,456],{},"stretch",[275,458,459],{},"center",[275,461,445],{},[275,463,464],{},"point",".",[263,467,469],{"id":468},"fixed","Fixed",[268,471,472],{},[271,473,474],{},"Rendering differences between platforms found by golden screenshots on iOS, Android, macOS, Windows, Linux and the desktop renderer.",[258,476,478],{"id":477},"_070","0.7.0",[263,480,482],{"id":481},"breaking","Breaking",[268,484,485,496,510],{},[271,486,487,488,491,492,495],{},"Rust: ",[275,489,490],{},"WidgetsPluginConfig::transport"," is ",[275,493,494],{},"Option\u003CTransportKind>"," (unset = platform default).",[271,497,498,499,502,503,506,507,465],{},"macOS: with ",[275,500,501],{},"transport"," unset the host writes into the widget extension's container (",[275,504,505],{},"widgetContainer","), not the App Group. Sandboxed Mac App Store hosts set ",[275,508,509],{},"\"transport\": \"appGroup\"",[271,511,512,513,516],{},"Android: ",[275,514,515],{},"WidgetActionReceiver"," removed (taps go through the action callback queue).",[263,518,520],{"id":519},"setup-is-simpler","Setup is simpler",[268,522,523,556,573,586],{},[271,524,525,526,529,530,533,534,324,537,539,540,542,543,545,546,549,550,533,553,465],{},"No ",[275,527,528],{},"plugins.widgets"," block needed: ",[275,531,532],{},"appGroup"," defaults to ",[275,535,536],{},"group.\u003Cidentifier>",[275,538,501],{}," to ",[275,541,505],{}," on macOS and ",[275,544,532],{}," on iOS. JS ",[275,547,548],{},"group"," is optional (defaults to the App Group), ",[275,551,552],{},"widgetId",[275,554,555],{},"\"default\"",[271,557,558,561,562,565,566,569,570,465],{},[275,559,560],{},"init-macos"," writes ",[275,563,564],{},"tauri.macos.conf.json"," (Linux \u002F Windows builds no longer run ",[275,567,568],{},"build-widget.sh","); the Swift package path is resolved on every build instead of baked into ",[275,571,572],{},"project.yml",[271,574,575,578,579,582,583,465],{},[275,576,577],{},"init-ios"," adds the widget extension target and the TauriWidgets package to ",[275,580,581],{},"gen\u002Fapple\u002Fproject.yml"," (XcodeGen) and keeps app entitlements: no manual Xcode steps. Widget code lives in ",[275,584,585],{},"src-tauri\u002Fios-widget",[271,587,588,591,592,595,596,599],{},[275,589,590],{},"init"," detects platforms from the host OS and ",[275,593,594],{},"gen\u002Fapple","; ",[275,597,598],{},"--platforms"," overrides.",[263,601,469],{"id":602},"fixed-1",[268,604,605,614,621,624,635,642,652,661,667,670,676,683],{},[271,606,607,608,611,612,465],{},"macOS: Developer ID builds showed \"No configuration\" (the sandboxed extension cannot open a ",[275,609,610],{},"group.*"," container without a provisioning profile). Default transport is now ",[275,613,505],{},[271,615,616,617,620],{},"Widget taps lost or delivered twice: cross-process lock on the Apple store; Android queues every tap and notifies a running app (",[275,618,619],{},"widget-action-pending","); Windows clears drained actions on disk.",[271,622,623],{},"iOS widget pinned to a stale copy in its own container.",[271,625,626,627,630,631,634],{},"Android: plugin commands off the UI thread (remote images loaded, no ",[275,628,629],{},"NetworkOnMainThreadException","); reload throttle removed; builds with AGP 9 \u002F Kotlin 2 apps from the current ",[275,632,633],{},"tauri android init","; button labels centered.",[271,636,637,638,641],{},"Images downsampled before decode (Swift, Android); image prefetch walks ",[275,639,640],{},"List.children",", caches failures, evicts old entries.",[271,643,644,647,648,651],{},[275,645,646],{},"set_widget_config"," no longer blocks the main thread; ",[275,649,650],{},"set_widget_config_from_path"," reads regular files up to 4 MB only.",[271,653,654,657,658,660],{},[275,655,656],{},"createWidgetWindow",": works without ",[275,659,548],{},", reuses a window with the same label.",[271,662,663,664,465],{},"Linux layer-shell window closes with ",[275,665,666],{},"closeWidgetWindow",[271,668,669],{},"Trace JSON fields are camelCase (matched the TS types).",[271,671,672,675],{},[275,673,674],{},"startWidgetUpdater",": several updaters per widget, throwing handlers no longer drop the batch.",[271,677,678,679,682],{},"Render library: several ",[275,680,681],{},"renderWidget"," hosts no longer share timers and handlers.",[271,684,685,686,689,690,693,694,697,698,701],{},"CLI: Windows data paths (Roaming), ",[275,687,688],{},"clean"," covers Linux and the macOS container, ",[275,691,692],{},"preview --open"," on Windows, runs from inside ",[275,695,696],{},"src-tauri",", reads ",[275,699,700],{},"tauri.conf.json5"," \u002F platform confs.",[263,703,428],{"id":704},"changed-1",[268,706,707],{},[271,708,709,710,713,714,402],{},"Docs site moved from VitePress to Nuxt (Nuxt UI + Nuxt Content), same URLs. JS reference, Tauri commands, permissions and changelog pages are generated from the sources at build time; diagrams are committed SVGs instead of client-side mermaid. Element anchors are now ",[275,711,712],{},"#vstack"," (was ",[275,715,716],{},"#el-vstack",[258,718,720],{"id":719},"_062","0.6.2",[263,722,469],{"id":723},"fixed-2",[268,725,726,740,756,773],{},[271,727,728,731,732,735,736,739],{},[275,729,730],{},"tauri-widgets --version"," reads ",[275,733,734],{},"package.json"," (was hardcoded ",[275,737,738],{},"0.5.0",")",[271,741,742,745,746,595,749,752,753],{},[275,743,744],{},"exports"," exposes ",[275,747,748],{},".\u002Fschemas\u002F*",[275,750,751],{},".\u002Frender"," has CJS + ",[275,754,755],{},"default",[271,757,758,760,761,278,764,767,768,278,770,772],{},[275,759,681],{}," no longer reads ",[275,762,763],{},"location.search",[275,765,766],{},"#root"," at import; ",[275,769,548],{},[275,771,552],{}," are session options",[271,774,775,778,779,782],{},[275,776,777],{},"tauri-widgets tools"," errors on npm installs (",[275,780,781],{},"scripts\u002F"," is not published)",[263,784,428],{"id":785},"changed-2",[268,787,788],{},[271,789,790],{},"npm package description covers all host platforms",[258,792,794],{"id":793},"_061","0.6.1",[263,796,469],{"id":797},"fixed-3",[268,799,800,823,837],{},[271,801,802,803,806,807,811,812,815,816,806,819,822],{},"Keep ",[275,804,805],{},"gtk"," ",[808,809,810],"strong",{},"0.18"," as a direct Linux dependency (layer-shell remap, GTK main-thread checks, CI ",[275,813,814],{},"libgtk-3-dev","). Do not bump to 0.19: ",[275,817,818],{},"gtk-sys",[275,820,821],{},"links = \"gtk-3\""," clashes with Tauri 2.",[271,824,825,826,829,830,833,834,402],{},"Guest ",[275,827,828],{},"@tauri-apps\u002Fapi"," range is ",[275,831,832],{},"^2"," again (wide Tauri 2 support; not ",[275,835,836],{},">=2.12.1",[271,838,839,840,843,844,847,848,851],{},"Playwright desktop tests pin ",[275,841,842],{},"locale"," + ",[275,845,846],{},"timezoneId"," so ",[275,849,850],{},"date-timer"," geometry does not depend on the host TZ.",[263,853,428],{"id":854},"changed-3",[268,856,857],{},[271,858,859,860,863,864,867,868,871,872,875,876,879,880,883],{},"Compatible lock\u002Ftooling bumps (Tauri 2.12.1, TypeScript 5.9, Playwright, Rollup, mermaid 12). TypeScript 7 skipped (",[275,861,862],{},"@rollup\u002Fplugin-typescript","). Breaking crates (",[275,865,866],{},"base64"," 0.23, ",[275,869,870],{},"resvg"," 0.48, ",[275,873,874],{},"schemars"," 1, ",[275,877,878],{},"ureq"," 3, ",[275,881,882],{},"x11rb"," 0.14) left on current majors.",[258,885,887],{"id":886},"_060","0.6.0",[263,889,266],{"id":890},"added-1",[268,892,893,902,905,916,922],{},[271,894,895,896,320,899,901],{},"JS render library: ",[275,897,898],{},"tauri-plugin-widgets-api\u002Frender",[275,900,681],{}," in a host div, no Tauri)",[271,903,904],{},"Docs widget constructor (schema inspector, click-to-insert outline, Up\u002FDown\u002FDuplicate)",[271,906,907,278,909,912,913,739],{},[275,908,650],{},[275,910,911],{},"setWidgetConfigFromPath"," (permission in ",[275,914,915],{},"widgets:default",[271,917,918,921],{},[275,919,920],{},"ListElement.children"," in generated TS \u002F schema (rich list rows)",[271,923,924],{},"Stress \u002F probe visual cases and light-theme goldens",[263,926,428],{"id":927},"changed-4",[268,929,930,940,943],{},[271,931,932,933,936,937,739],{},"Desktop ",[275,934,935],{},"widget-src"," split: library host vs chrome IIFE (",[275,938,939],{},"widget.html",[271,941,942],{},"Docs Playground\u002FConstructor render in-page; dropped iframe sandbox copy pipeline",[271,944,945],{},"VitePress 2 + mermaid renderer",[258,947,738],{"id":948},"_050",[950,951,952],"p",{},"Mega-refactor toward one IR SoT and aligned renderers.",[263,954,266],{"id":955},"added-2",[268,957,958,969,978,989,1003,1010],{},[271,959,960,961,964,965,968],{},"Host-side ",[275,962,963],{},"normalize()"," before store write (",[275,966,967],{},"textStyle",", semantic colors, stack spacing defaults, capability degradations)",[271,970,971,972,975,976],{},"Desktop widget sources as TypeScript (",[275,973,974],{},"widget-src\u002F",") bundled into ",[275,977,939],{},[271,979,980,981,984,985,988],{},"Consumer CLI (",[275,982,983],{},"tauri-widgets",") with ",[275,986,987],{},"tools"," proxy to maintainer stands",[271,990,991,992,995,996,999,1000],{},"Wire catalogs: Swift ",[275,993,994],{},"Generated\u002FWireCatalog.swift",", Android ",[275,997,998],{},"WireTypes.kt"," via ",[275,1001,1002],{},"gen-native",[271,1004,1005,1006,1009],{},"Measured ",[275,1007,1008],{},"schemas\u002Fcapabilities.coverage.json"," (CI; omitted from publish)",[271,1011,1012],{},"Light-theme visual cases (desktop \u002F iOS \u002F macOS)",[263,1014,428],{"id":1015},"changed-5",[268,1017,1018,1021,1035],{},[271,1019,1020],{},"Split renderers into layout\u002Ftext\u002Fmedia\u002Fdata\u002Finteractive\u002Fspacing groups (Android Glance, SwiftUI, Adaptive Cards, desktop HTML)",[271,1022,1023,1024,1027,1028,1031,1032],{},"Split ",[275,1025,1026],{},"guest-js"," into ",[275,1029,1030],{},"api\u002F*"," barrel; docs generator into ",[275,1033,1034],{},"scripts\u002F...\u002Fgenerate\u002F*",[271,1036,1037],{},"Publish packaging: npm schemas whitelist; crates.io excludes goldens\u002Fdocs\u002Fscripts (~10 MB → ~1.4 MB)",[263,1039,469],{"id":1040},"fixed-4",[268,1042,1043,1056],{},[271,1044,1045,1046,1049,1050,1049,1053,739],{},"Desktop theme resolution (",[275,1047,1048],{},"?theme="," → ",[275,1051,1052],{},"data-theme",[275,1054,1055],{},"matchMedia",[271,1057,1058,1059,739],{},"Android unit tests via JDK 17 wrapper (",[275,1060,1061],{},"scripts\u002Fsh\u002Fandroid-gradle.sh",[258,1063,1065],{"id":1064},"_043","0.4.3",[263,1067,1069],{"id":1068},"fixes","Fixes",[268,1071,1072],{},[271,1073,1074,1075,999,1078,1081,1082,1085,1086,1089,1090],{},"docs.rs build: stop passing ",[275,1076,1077],{},"--cfg docsrs",[275,1079,1080],{},"rustc-args"," (it infected dependencies and broke ",[275,1083,1084],{},"winnow"," on current nightly); detect docs.rs via ",[275,1087,1088],{},"DOCS_RS"," in ",[275,1091,1092],{},"build.rs",[258,1094,1096],{"id":1095},"_041","0.4.1",[263,1098,1100],{"id":1099},"breaking-apple-host-transport","Breaking (Apple host transport)",[268,1102,1103,1106,1124,1131,1141],{},[271,1104,1105],{},"macOS host no longer fan-outs writes across three channels at runtime",[271,1107,1108,1109,1112,1113,1115,1116,1115,1119,1115,1121],{},"Choose one driver in ",[275,1110,1111],{},"plugins.widgets.transport",": ",[275,1114,532],{}," | ",[275,1117,1118],{},"userDefaults",[275,1120,505],{},[275,1122,1123],{},"auto",[271,1125,1126,1127,1130],{},"Require ",[275,1128,1129],{},"plugins.widgets.appGroup","; wrong\u002Fmissing config fails plugin init (loud)",[271,1132,1133,1134,1137,1138,1140],{},"Override with ",[275,1135,1136],{},"WIDGET_TRANSPORT","; iOS accepts ",[275,1139,532],{}," only",[271,1142,1143,1144,1147],{},"Unchanged ",[275,1145,1146],{},"setItems"," values skip disk write \u002F nonce bump",[263,1149,1151],{"id":1150},"cleanup","Cleanup",[268,1153,1154,1169,1175,1197,1205],{},[271,1155,1156,1157,1160,1161,1164,1165,1168],{},"Removed Mac-side SVG Adaptive Cards compositor (",[275,1158,1159],{},"gen-windows-goldens",") and fake ",[275,1162,1163],{},"tests\u002Fgolden\u002Fwindows\u002F*.png","; keep ",[275,1166,1167],{},"tests\u002Fsnapshots\u002Fadaptive\u002F"," + PreviewHost for real WinUI3 pixels",[271,1170,1171,1174],{},[275,1172,1173],{},"rasterize"," no longer in default features (opt-in resvg)",[271,1176,1177,1178,278,1181,278,1184,278,1187,278,1190,1193,1194],{},"Dropped empty Cargo features ",[275,1179,1180],{},"windows",[275,1182,1183],{},"macos",[275,1185,1186],{},"ios",[275,1188,1189],{},"android",[275,1191,1192],{},"all-platforms"," — backends follow ",[275,1195,1196],{},"target_os",[271,1198,1199,1201,1202],{},[275,1200,805],{}," is optional under feature ",[275,1203,1204],{},"linux",[271,1206,1207,1208,324,1211,324,1214,739],{},"Removed dead Kotlin helpers (",[275,1209,1210],{},"sparkline",[275,1212,1213],{},"countRenderableChildren",[275,1215,1216],{},"maxRenderableItems",[258,1218,1220],{"id":1219},"_040","0.4.0",[950,1222,1223],{},"First public cut of the redesign (unpublished drafts were never released separately).",[263,1225,1227],{"id":1226},"breaking-data-identity-actions","Breaking (data \u002F identity \u002F actions)",[268,1229,1230,1246,1261,1267,1273,1286,1297,1304],{},[271,1231,1232,1233,310,1235,324,1238,324,1241,1243,1244],{},"Required ",[275,1234,552],{},[275,1236,1237],{},"setWidgetConfig",[275,1239,1240],{},"getWidgetConfig",[275,1242,674],{},", and built-in ",[275,1245,656],{},[271,1247,1248,1249,324,1252,324,1255,324,1258],{},"Storage keys: ",[275,1250,1251],{},"config:{widgetId}",[275,1253,1254],{},"pending_actions",[275,1256,1257],{},"__meta_nonce__",[275,1259,1260],{},"__meta_updated_at__",[271,1262,1263,1264],{},"Action envelope: ",[275,1265,1266],{},"{ action, payload?, ts, widgetId, group }",[271,1268,1269,1270],{},"iOS rejects groups that do not start with ",[275,1271,1272],{},"group.",[271,1274,1275,1278,1279,1282,1283,739],{},[275,1276,1277],{},"Option"," IR fields omit ",[275,1280,1281],{},"null"," on serialize (",[275,1284,1285],{},"skip_serializing_if",[271,1287,1288,1290,1291,491,1294],{},[275,1289,674],{}," default ",[275,1292,1293],{},"intervalMs",[808,1295,1296],{},"5000",[271,1298,1299,1300,1303],{},"No public Rust fluent ",[275,1301,1302],{},"builder"," module — author via JS \u002F serde JSON",[271,1305,1306,1307,1310],{},"Removed unused ",[275,1308,1309],{},"WidgetItem"," type",[263,1312,1314],{"id":1313},"ir-sot-dx","IR SoT \u002F DX",[268,1316,1317,1331,1338],{},[271,1318,1319,1320,1323,1324,1327,1328,739],{},"Rust ",[275,1321,1322],{},"models.rs"," is IR source of truth; TS types from ",[275,1325,1326],{},"IR_SPEC"," emitter (",[275,1329,1330],{},"pnpm codegen",[271,1332,1333,1334,1337],{},"Capability matrix (Core vs Extended) + ",[275,1335,1336],{},"validate_config"," warnings on config change",[271,1339,1340,1341,1344],{},"JSON Schema ",[275,1342,1343],{},"schemas\u002Fwidget-config.v1.json","; golden fixtures + core layout snapshots",[263,1346,1348],{"id":1347},"transport-platforms","Transport \u002F platforms",[268,1350,1351,1358,1373,1383],{},[271,1352,1353,1354,1357],{},"Config hash per ",[275,1355,1356],{},"(group, widgetId)","; Apple multi-transport fan-out + freshest-by-nonce read",[271,1359,1360,1361,1364,1365,1368,1369,1372],{},"iOS ",[275,1362,1363],{},"pollPendingActions","; mobile drains pending actions on ",[275,1366,1367],{},"Ready","\u002F",[275,1370,1371],{},"Resumed","; updater also polls",[271,1374,1375,1376,1378,1379,1382],{},"Android: live ",[275,1377,1237],{},", image preprocess, ",[275,1380,1381],{},"appWidgetId → widgetId"," mapping, targeted Glance sync",[271,1384,932,1385,1388,1389,739],{},[275,1386,1387],{},"poll_pending_actions","; transparent widget windows (macOS needs ",[275,1390,1391],{},"macos-private-api",[263,1393,1395],{"id":1394},"render-parity-selected","Render parity (selected)",[268,1397,1398,1405],{},[271,1399,1400,1401,1404],{},"Android: spacer flex, canvas density, gauge aspect, bar baseline, zstack alignment, capsule ",[275,1402,1403],{},"2s×s",", textStyle>fontSize, list caps",[271,1406,1407],{},"Swift\u002FHTML: vertical divider in hstack, text alignment, frame-before-background, zstack alignment, timer cleanup",[263,1409,1411],{"id":1410},"tooling","Tooling",[268,1413,1414,1428],{},[271,1415,1416,1417,1420,1421,1424,1425],{},"CI: ",[275,1418,1419],{},"cargo test --lib",", android\u002Fios ",[275,1422,1423],{},"cargo check --lib",", codegen drift, ",[275,1426,1427],{},"pnpm build",[271,1429,1430,1431,1434,1435,278,1438,1441],{},"Dropped library ",[275,1432,1433],{},"[profile.release]"," override; ",[275,1436,1437],{},"android\u002F.gradle",[275,1439,1440],{},"local.properties"," gitignored",[263,1443,1445],{"id":1444},"known-deferred","Known \u002F deferred",[268,1447,1448],{},[271,1449,1450,1451,1454],{},"macOS UserDefaults transport still write-mostly; ",[275,1452,1453],{},"{app_id}.widgetkit"," own-container hardcode; 500ms macOS action poller redesign",{"title":1456,"searchDepth":1457,"depth":1458,"links":1459},"",2,3,[1460,1465,1471,1475,1479,1483,1488,1491,1495],{"id":260,"depth":1457,"text":261,"children":1461},[1462,1463,1464],{"id":265,"depth":1458,"text":266},{"id":427,"depth":1458,"text":428},{"id":468,"depth":1458,"text":469},{"id":477,"depth":1457,"text":478,"children":1466},[1467,1468,1469,1470],{"id":481,"depth":1458,"text":482},{"id":519,"depth":1458,"text":520},{"id":602,"depth":1458,"text":469},{"id":704,"depth":1458,"text":428},{"id":719,"depth":1457,"text":720,"children":1472},[1473,1474],{"id":723,"depth":1458,"text":469},{"id":785,"depth":1458,"text":428},{"id":793,"depth":1457,"text":794,"children":1476},[1477,1478],{"id":797,"depth":1458,"text":469},{"id":854,"depth":1458,"text":428},{"id":886,"depth":1457,"text":887,"children":1480},[1481,1482],{"id":890,"depth":1458,"text":266},{"id":927,"depth":1458,"text":428},{"id":948,"depth":1457,"text":738,"children":1484},[1485,1486,1487],{"id":955,"depth":1458,"text":266},{"id":1015,"depth":1458,"text":428},{"id":1040,"depth":1458,"text":469},{"id":1064,"depth":1457,"text":1065,"children":1489},[1490],{"id":1068,"depth":1458,"text":1069},{"id":1095,"depth":1457,"text":1096,"children":1492},[1493,1494],{"id":1099,"depth":1458,"text":1100},{"id":1150,"depth":1458,"text":1151},{"id":1219,"depth":1457,"text":1220,"children":1496},[1497,1498,1499,1500,1501,1502],{"id":1226,"depth":1458,"text":1227},{"id":1313,"depth":1458,"text":1314},{"id":1347,"depth":1458,"text":1348},{"id":1394,"depth":1458,"text":1395},{"id":1410,"depth":1458,"text":1411},{"id":1444,"depth":1458,"text":1445},"All notable changes to tauri-plugin-widgets and tauri-plugin-widgets-api.","md",true,null,{},{"title":249,"description":1503},"3gAtEVim3KWnoQJ6S7TGQS5noh7bVKlwUHMBWPkGQOc",[1511,1506],{"title":244,"path":245,"stem":246,"description":1512,"children":-1},"Unit tests pass is not proof they check anything. Mutation testing changes the code (a \u003C\ninto \u003C=, a branch into true) and expects some test to fail; a mutant that survives\nmarks code no test watches. Fix the test, not the config.",1794660585744]