[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-46ee9b4965eebef4-asm-js-predicted-js-s-demise-wasm-partially-delive-summary":3,"summaries-facets-categories":76,"summary-related-46ee9b4965eebef4-asm-js-predicted-js-s-demise-wasm-partially-delive-summary":3661},{"id":4,"title":5,"ai":6,"body":13,"categories":51,"created_at":53,"date_modified":53,"description":54,"extension":55,"faq":53,"featured":56,"kicker_label":53,"meta":57,"navigation":58,"path":59,"published_at":60,"question":53,"scraped_at":61,"seo":62,"sitemap":63,"source_id":64,"source_name":65,"source_type":66,"source_url":67,"stem":68,"tags":69,"thumbnail_url":53,"tldr":73,"tweet":53,"unknown_tags":74,"__hash__":75},"summaries\u002Fsummaries\u002F46ee9b4965eebef4-asm-js-predicted-js-s-demise-wasm-partially-delive-summary.md","Asm.js Predicted JS's Demise – Wasm Partially Delivers",{"provider":7,"model":8,"input_tokens":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",5305,1615,15930,0.00184615,{"type":14,"value":15,"toc":44},"minimark",[16,21,30,34,37,41],[17,18,20],"h2",{"id":19},"asmjs-unlocks-high-performance-non-js-code-in-browsers","Asm.js Unlocks High-Performance Non-JS Code in Browsers",[22,23,24,25,29],"p",{},"Asm.js, a strict typed subset of JavaScript acting as web assembly, allows compiling C\u002FC++ or other languages directly to browser-executable code. Every operation explicitly coerces types (e.g., ",[26,27,28],"code",{},"function square(x) { x = +x; return x * x; }"," becomes a single mul instruction via JIT optimization). This enabled demos like Unreal Engine 3 running at playable frame rates (not 60 FPS) in Firefox in 2013, outperforming pure JS in Chrome. Bundles reached 3MB, feasible despite slower internet and VMs then, proving you could run complex apps like games without native JS. Gary Bernhardt demonstrated Chrome (compiled to Asm.js) running inside Firefox via Wine and X Windows shims, all from C – showing 'if it compiles to C, it runs in the browser.' The core claim: Asm.js lets developers ditch JS for preferred languages while still targeting JS engines, dooming JS dominance.",[17,31,33],{"id":32},"_2025-prediction-massive-app-ports-fall-short-due-to-ai","2025 Prediction: Massive App Ports Fall Short Due to AI",[22,35,36],{},"Bernhardt predicted 2025 as peak Asm.js adoption with 'thick, extremely large applications' ported to it, frustrated developers fleeing JS pains (e.g., Brendan Eich's 10-day creation lore). Reality diverged: No massive war (as charted), but COVID and AI code generation eased JS frustrations, reducing migration urgency. Asm.js evolved into WebAssembly (Wasm), now at version 3.0 with garbage collection, better exceptions, JS string builtins, custom text annotations, and deterministic profiling – making it viable beyond early clunkiness.",[17,38,40],{"id":39},"wasm-gains-traction-in-production-despite-js-persistence","Wasm Gains Traction in Production Despite JS Persistence",[22,42,43],{},"Wasm enables Rust, C++, Go (and experimentally Python) in Cloudflare Workers for serverless backends, bypassing JS. Notable apps like Figma use it. Hosting providers embrace it, hinting at Bernhardt's wild 'metal' vision: Embed JS VM in kernel for ring-0\u002F3 isolation, compiling all software to Asm\u002FWasm. While kernel-level remains far-fetched, Wasm's inroads validate the 'JS kills JS' thesis partially – blame AI for stalling full replacement by automating JS workarounds.",{"title":45,"searchDepth":46,"depth":46,"links":47},"",2,[48,49,50],{"id":19,"depth":46,"text":20},{"id":32,"depth":46,"text":33},{"id":39,"depth":46,"text":40},[52],"Software Engineering",null,"Birth and death: https:\u002F\u002Fwww.destroyallsoftware.com\u002Ftalks\u002Fthe-birth-and-death-of-javascript\n\nbecome an engineer, not just a slop cannon.  Check out https:\u002F\u002Fboot.dev\u002Fprime! And get 25% off. \n\nhttps:\u002F\u002Ftwitch.tv\u002FThePrimeagen - I Stream on Twitch\n\nhttps:\u002F\u002Ftwitter.com\u002Fterminaldotshop - Want to order coffee over SSH?\nssh terminal.shop\n\nBecome Backend Dev: https:\u002F\u002Fboot.dev\u002Fprime\n(plus i make courses for them)\n\nThis is also the best way to support me is to support yourself becoming a better backend engineer.  \n\nGreat News?  Want me to research and create video????: https:\u002F\u002Fwww.reddit.com\u002Fr\u002FThePrimeagen\n\nKinesis Advantage 360: https:\u002F\u002Fbit.ly\u002FPrime-Kinesis","md",false,{},true,"\u002Fsummaries\u002F46ee9b4965eebef4-asm-js-predicted-js-s-demise-wasm-partially-delive-summary","2026-03-31 12:00:41","2026-04-03 21:18:26",{"title":5,"description":54},{"loc":59},"46ee9b4965eebef4","The PrimeTime","video","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ceH0IT-OBCw","summaries\u002F46ee9b4965eebef4-asm-js-predicted-js-s-demise-wasm-partially-delive-summary",[70,71,72],"frontend","coding","wasm","Gary Bernhardt's 2014 talk foresaw JavaScript killing itself via Asm.js, a typed subset enabling any language in browsers; Wasm advances this but AI code generation has delayed full adoption.",[72],"IKCDMlQrZE5eeyf2Lb7FKlX88Ham2VN4JOhuCDMQI6U",[77,80,83,86,89,92,94,96,98,100,102,104,107,109,111,113,115,117,119,121,123,125,128,131,133,135,137,139,141,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,401,403,405,407,409,411,413,415,417,419,421,423,425,427,429,431,433,435,437,439,441,443,445,447,449,451,453,455,457,459,461,463,465,467,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691,693,695,697,699,701,703,705,707,709,711,713,715,717,719,721,723,725,727,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,767,769,771,773,775,777,779,781,783,785,787,789,791,793,795,797,799,801,803,805,807,809,811,813,815,817,819,821,823,825,827,829,831,833,835,837,839,841,843,845,847,849,851,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919,921,923,925,927,929,931,933,935,937,939,941,943,945,947,949,951,953,955,957,959,961,963,965,967,969,971,973,975,977,979,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169,3171,3173,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329,3331,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659],{"categories":78},[79],"Developer Productivity",{"categories":81},[82],"Business & SaaS",{"categories":84},[85],"AI & LLMs",{"categories":87},[88],"AI Automation",{"categories":90},[91],"Product Strategy",{"categories":93},[85],{"categories":95},[79],{"categories":97},[82],{"categories":99},[],{"categories":101},[85],{"categories":103},[],{"categories":105},[106],"AI News & Trends",{"categories":108},[88],{"categories":110},[106],{"categories":112},[88],{"categories":114},[88],{"categories":116},[85],{"categories":118},[85],{"categories":120},[106],{"categories":122},[85],{"categories":124},[],{"categories":126},[127],"Design & Frontend",{"categories":129},[130],"Data Science & Visualization",{"categories":132},[106],{"categories":134},[],{"categories":136},[52],{"categories":138},[85],{"categories":140},[88],{"categories":142},[143],"Marketing & Growth",{"categories":145},[85],{"categories":147},[88],{"categories":149},[],{"categories":151},[],{"categories":153},[127],{"categories":155},[88],{"categories":157},[79],{"categories":159},[127],{"categories":161},[85],{"categories":163},[88],{"categories":165},[106],{"categories":167},[],{"categories":169},[],{"categories":171},[88],{"categories":173},[52],{"categories":175},[],{"categories":177},[82],{"categories":179},[],{"categories":181},[],{"categories":183},[88],{"categories":185},[88],{"categories":187},[85],{"categories":189},[],{"categories":191},[52],{"categories":193},[],{"categories":195},[],{"categories":197},[],{"categories":199},[85],{"categories":201},[143],{"categories":203},[127],{"categories":205},[127],{"categories":207},[85],{"categories":209},[88],{"categories":211},[85],{"categories":213},[85],{"categories":215},[88],{"categories":217},[88],{"categories":219},[130],{"categories":221},[106],{"categories":223},[88],{"categories":225},[143],{"categories":227},[88],{"categories":229},[91],{"categories":231},[],{"categories":233},[88],{"categories":235},[],{"categories":237},[88],{"categories":239},[52],{"categories":241},[127],{"categories":243},[85],{"categories":245},[],{"categories":247},[],{"categories":249},[88],{"categories":251},[],{"categories":253},[85],{"categories":255},[],{"categories":257},[79],{"categories":259},[52],{"categories":261},[82],{"categories":263},[106],{"categories":265},[85],{"categories":267},[],{"categories":269},[85],{"categories":271},[],{"categories":273},[52],{"categories":275},[130],{"categories":277},[],{"categories":279},[85],{"categories":281},[127],{"categories":283},[],{"categories":285},[127],{"categories":287},[88],{"categories":289},[],{"categories":291},[88],{"categories":293},[106],{"categories":295},[82],{"categories":297},[85],{"categories":299},[],{"categories":301},[88],{"categories":303},[85],{"categories":305},[91],{"categories":307},[],{"categories":309},[85],{"categories":311},[88],{"categories":313},[88],{"categories":315},[],{"categories":317},[130],{"categories":319},[85],{"categories":321},[],{"categories":323},[79],{"categories":325},[82],{"categories":327},[85],{"categories":329},[88],{"categories":331},[52],{"categories":333},[85],{"categories":335},[],{"categories":337},[],{"categories":339},[85],{"categories":341},[],{"categories":343},[127],{"categories":345},[],{"categories":347},[85],{"categories":349},[],{"categories":351},[88],{"categories":353},[85],{"categories":355},[127],{"categories":357},[],{"categories":359},[85],{"categories":361},[85],{"categories":363},[82],{"categories":365},[88],{"categories":367},[85],{"categories":369},[127],{"categories":371},[88],{"categories":373},[],{"categories":375},[],{"categories":377},[106],{"categories":379},[],{"categories":381},[85],{"categories":383},[82,143],{"categories":385},[],{"categories":387},[85],{"categories":389},[],{"categories":391},[],{"categories":393},[85],{"categories":395},[],{"categories":397},[85],{"categories":399},[400],"DevOps & Cloud",{"categories":402},[],{"categories":404},[106],{"categories":406},[127],{"categories":408},[],{"categories":410},[106],{"categories":412},[106],{"categories":414},[85],{"categories":416},[143],{"categories":418},[],{"categories":420},[82],{"categories":422},[],{"categories":424},[85,400],{"categories":426},[85],{"categories":428},[85],{"categories":430},[88],{"categories":432},[85,52],{"categories":434},[130],{"categories":436},[85],{"categories":438},[143],{"categories":440},[88],{"categories":442},[88],{"categories":444},[],{"categories":446},[88],{"categories":448},[85,82],{"categories":450},[],{"categories":452},[127],{"categories":454},[127],{"categories":456},[],{"categories":458},[],{"categories":460},[106],{"categories":462},[],{"categories":464},[79],{"categories":466},[52],{"categories":468},[85],{"categories":470},[127],{"categories":472},[88],{"categories":474},[52],{"categories":476},[106],{"categories":478},[127],{"categories":480},[],{"categories":482},[85],{"categories":484},[85],{"categories":486},[85],{"categories":488},[106],{"categories":490},[79],{"categories":492},[85],{"categories":494},[88],{"categories":496},[400],{"categories":498},[127],{"categories":500},[88],{"categories":502},[],{"categories":504},[],{"categories":506},[127],{"categories":508},[106],{"categories":510},[130],{"categories":512},[],{"categories":514},[85],{"categories":516},[85],{"categories":518},[82],{"categories":520},[85],{"categories":522},[85],{"categories":524},[106],{"categories":526},[],{"categories":528},[88],{"categories":530},[52],{"categories":532},[],{"categories":534},[85],{"categories":536},[85],{"categories":538},[88],{"categories":540},[],{"categories":542},[],{"categories":544},[85],{"categories":546},[],{"categories":548},[82],{"categories":550},[88],{"categories":552},[],{"categories":554},[79],{"categories":556},[85],{"categories":558},[82],{"categories":560},[106],{"categories":562},[],{"categories":564},[],{"categories":566},[],{"categories":568},[106],{"categories":570},[106],{"categories":572},[],{"categories":574},[],{"categories":576},[82],{"categories":578},[],{"categories":580},[],{"categories":582},[79],{"categories":584},[],{"categories":586},[143],{"categories":588},[88],{"categories":590},[82],{"categories":592},[88],{"categories":594},[52],{"categories":596},[],{"categories":598},[91],{"categories":600},[127],{"categories":602},[52],{"categories":604},[85],{"categories":606},[88],{"categories":608},[82],{"categories":610},[85],{"categories":612},[],{"categories":614},[],{"categories":616},[52],{"categories":618},[130],{"categories":620},[91],{"categories":622},[88],{"categories":624},[85],{"categories":626},[],{"categories":628},[400],{"categories":630},[],{"categories":632},[88],{"categories":634},[],{"categories":636},[],{"categories":638},[85],{"categories":640},[127],{"categories":642},[143],{"categories":644},[88],{"categories":646},[],{"categories":648},[79],{"categories":650},[],{"categories":652},[106],{"categories":654},[85,400],{"categories":656},[106],{"categories":658},[85],{"categories":660},[82],{"categories":662},[85],{"categories":664},[],{"categories":666},[82],{"categories":668},[],{"categories":670},[52],{"categories":672},[127],{"categories":674},[106],{"categories":676},[130],{"categories":678},[79],{"categories":680},[85],{"categories":682},[52],{"categories":684},[],{"categories":686},[],{"categories":688},[91],{"categories":690},[],{"categories":692},[85],{"categories":694},[],{"categories":696},[127],{"categories":698},[127],{"categories":700},[127],{"categories":702},[],{"categories":704},[],{"categories":706},[106],{"categories":708},[88],{"categories":710},[85],{"categories":712},[85],{"categories":714},[85],{"categories":716},[82],{"categories":718},[85],{"categories":720},[],{"categories":722},[52],{"categories":724},[52],{"categories":726},[82],{"categories":728},[],{"categories":730},[85],{"categories":732},[85],{"categories":734},[82],{"categories":736},[106],{"categories":738},[143],{"categories":740},[88],{"categories":742},[],{"categories":744},[127],{"categories":746},[],{"categories":748},[85],{"categories":750},[],{"categories":752},[82],{"categories":754},[88],{"categories":756},[],{"categories":758},[400],{"categories":760},[130],{"categories":762},[52],{"categories":764},[143],{"categories":766},[52],{"categories":768},[88],{"categories":770},[],{"categories":772},[],{"categories":774},[88],{"categories":776},[79],{"categories":778},[88],{"categories":780},[91],{"categories":782},[82],{"categories":784},[],{"categories":786},[85],{"categories":788},[91],{"categories":790},[85],{"categories":792},[85],{"categories":794},[143],{"categories":796},[127],{"categories":798},[88],{"categories":800},[],{"categories":802},[],{"categories":804},[400],{"categories":806},[52],{"categories":808},[],{"categories":810},[88],{"categories":812},[85],{"categories":814},[127,85],{"categories":816},[79],{"categories":818},[],{"categories":820},[85],{"categories":822},[79],{"categories":824},[127],{"categories":826},[88],{"categories":828},[52],{"categories":830},[],{"categories":832},[85],{"categories":834},[],{"categories":836},[79],{"categories":838},[],{"categories":840},[88],{"categories":842},[91],{"categories":844},[85],{"categories":846},[85],{"categories":848},[127],{"categories":850},[88],{"categories":852},[400],{"categories":854},[127],{"categories":856},[88],{"categories":858},[85],{"categories":860},[85],{"categories":862},[85],{"categories":864},[106],{"categories":866},[],{"categories":868},[91],{"categories":870},[88],{"categories":872},[127],{"categories":874},[88],{"categories":876},[52],{"categories":878},[127],{"categories":880},[88],{"categories":882},[106],{"categories":884},[],{"categories":886},[85],{"categories":888},[127],{"categories":890},[85],{"categories":892},[79],{"categories":894},[106],{"categories":896},[85],{"categories":898},[143],{"categories":900},[85],{"categories":902},[85],{"categories":904},[88],{"categories":906},[88],{"categories":908},[85],{"categories":910},[88],{"categories":912},[127],{"categories":914},[85],{"categories":916},[],{"categories":918},[],{"categories":920},[52],{"categories":922},[],{"categories":924},[79],{"categories":926},[400],{"categories":928},[],{"categories":930},[79],{"categories":932},[82],{"categories":934},[143],{"categories":936},[],{"categories":938},[82],{"categories":940},[],{"categories":942},[],{"categories":944},[],{"categories":946},[],{"categories":948},[],{"categories":950},[85],{"categories":952},[88],{"categories":954},[400],{"categories":956},[79],{"categories":958},[85],{"categories":960},[52],{"categories":962},[91],{"categories":964},[85],{"categories":966},[143],{"categories":968},[85],{"categories":970},[85],{"categories":972},[85],{"categories":974},[85,79],{"categories":976},[52],{"categories":978},[52],{"categories":980},[127],{"categories":982},[85],{"categories":984},[],{"categories":986},[],{"categories":988},[],{"categories":990},[52],{"categories":992},[130],{"categories":994},[106],{"categories":996},[127],{"categories":998},[],{"categories":1000},[85],{"categories":1002},[85],{"categories":1004},[],{"categories":1006},[],{"categories":1008},[88],{"categories":1010},[85],{"categories":1012},[82],{"categories":1014},[],{"categories":1016},[79],{"categories":1018},[85],{"categories":1020},[79],{"categories":1022},[85],{"categories":1024},[52],{"categories":1026},[143],{"categories":1028},[85,127],{"categories":1030},[106],{"categories":1032},[127],{"categories":1034},[],{"categories":1036},[400],{"categories":1038},[127],{"categories":1040},[88],{"categories":1042},[],{"categories":1044},[],{"categories":1046},[],{"categories":1048},[],{"categories":1050},[52],{"categories":1052},[88],{"categories":1054},[88],{"categories":1056},[400],{"categories":1058},[85],{"categories":1060},[85],{"categories":1062},[85],{"categories":1064},[],{"categories":1066},[127],{"categories":1068},[],{"categories":1070},[],{"categories":1072},[88],{"categories":1074},[],{"categories":1076},[],{"categories":1078},[143],{"categories":1080},[143],{"categories":1082},[88],{"categories":1084},[],{"categories":1086},[85],{"categories":1088},[85],{"categories":1090},[52],{"categories":1092},[127],{"categories":1094},[127],{"categories":1096},[88],{"categories":1098},[79],{"categories":1100},[85],{"categories":1102},[127],{"categories":1104},[127],{"categories":1106},[88],{"categories":1108},[88],{"categories":1110},[85],{"categories":1112},[],{"categories":1114},[],{"categories":1116},[85],{"categories":1118},[88],{"categories":1120},[106],{"categories":1122},[52],{"categories":1124},[79],{"categories":1126},[85],{"categories":1128},[],{"categories":1130},[88],{"categories":1132},[88],{"categories":1134},[],{"categories":1136},[79],{"categories":1138},[85],{"categories":1140},[79],{"categories":1142},[79],{"categories":1144},[],{"categories":1146},[],{"categories":1148},[88],{"categories":1150},[88],{"categories":1152},[85],{"categories":1154},[85],{"categories":1156},[106],{"categories":1158},[130],{"categories":1160},[91],{"categories":1162},[106],{"categories":1164},[127],{"categories":1166},[],{"categories":1168},[106],{"categories":1170},[],{"categories":1172},[],{"categories":1174},[],{"categories":1176},[],{"categories":1178},[52],{"categories":1180},[130],{"categories":1182},[],{"categories":1184},[85],{"categories":1186},[85],{"categories":1188},[130],{"categories":1190},[52],{"categories":1192},[],{"categories":1194},[],{"categories":1196},[88],{"categories":1198},[106],{"categories":1200},[106],{"categories":1202},[88],{"categories":1204},[79],{"categories":1206},[85,400],{"categories":1208},[],{"categories":1210},[127],{"categories":1212},[79],{"categories":1214},[88],{"categories":1216},[127],{"categories":1218},[],{"categories":1220},[88],{"categories":1222},[88],{"categories":1224},[85],{"categories":1226},[143],{"categories":1228},[52],{"categories":1230},[127],{"categories":1232},[],{"categories":1234},[88],{"categories":1236},[85],{"categories":1238},[88],{"categories":1240},[88],{"categories":1242},[88],{"categories":1244},[143],{"categories":1246},[88],{"categories":1248},[85],{"categories":1250},[],{"categories":1252},[143],{"categories":1254},[106],{"categories":1256},[88],{"categories":1258},[],{"categories":1260},[],{"categories":1262},[85],{"categories":1264},[88],{"categories":1266},[106],{"categories":1268},[88],{"categories":1270},[],{"categories":1272},[],{"categories":1274},[],{"categories":1276},[88],{"categories":1278},[],{"categories":1280},[],{"categories":1282},[130],{"categories":1284},[85],{"categories":1286},[130],{"categories":1288},[106],{"categories":1290},[85],{"categories":1292},[85],{"categories":1294},[88],{"categories":1296},[85],{"categories":1298},[],{"categories":1300},[],{"categories":1302},[400],{"categories":1304},[],{"categories":1306},[],{"categories":1308},[79],{"categories":1310},[],{"categories":1312},[],{"categories":1314},[],{"categories":1316},[],{"categories":1318},[52],{"categories":1320},[106],{"categories":1322},[143],{"categories":1324},[82],{"categories":1326},[85],{"categories":1328},[85],{"categories":1330},[82],{"categories":1332},[],{"categories":1334},[127],{"categories":1336},[88],{"categories":1338},[82],{"categories":1340},[85],{"categories":1342},[85],{"categories":1344},[79],{"categories":1346},[],{"categories":1348},[79],{"categories":1350},[85],{"categories":1352},[143],{"categories":1354},[88],{"categories":1356},[106],{"categories":1358},[82],{"categories":1360},[85],{"categories":1362},[88],{"categories":1364},[],{"categories":1366},[85],{"categories":1368},[79],{"categories":1370},[85],{"categories":1372},[],{"categories":1374},[106],{"categories":1376},[85],{"categories":1378},[],{"categories":1380},[82],{"categories":1382},[85],{"categories":1384},[],{"categories":1386},[],{"categories":1388},[],{"categories":1390},[85],{"categories":1392},[],{"categories":1394},[400],{"categories":1396},[85],{"categories":1398},[],{"categories":1400},[85],{"categories":1402},[85],{"categories":1404},[85],{"categories":1406},[85,400],{"categories":1408},[85],{"categories":1410},[85],{"categories":1412},[127],{"categories":1414},[88],{"categories":1416},[],{"categories":1418},[88],{"categories":1420},[85],{"categories":1422},[85],{"categories":1424},[85],{"categories":1426},[79],{"categories":1428},[79],{"categories":1430},[52],{"categories":1432},[127],{"categories":1434},[88],{"categories":1436},[],{"categories":1438},[85],{"categories":1440},[106],{"categories":1442},[85],{"categories":1444},[82],{"categories":1446},[],{"categories":1448},[400],{"categories":1450},[127],{"categories":1452},[127],{"categories":1454},[88],{"categories":1456},[106],{"categories":1458},[88],{"categories":1460},[85],{"categories":1462},[],{"categories":1464},[85],{"categories":1466},[],{"categories":1468},[],{"categories":1470},[85],{"categories":1472},[85],{"categories":1474},[85],{"categories":1476},[88],{"categories":1478},[85],{"categories":1480},[],{"categories":1482},[130],{"categories":1484},[88],{"categories":1486},[],{"categories":1488},[],{"categories":1490},[85],{"categories":1492},[106],{"categories":1494},[],{"categories":1496},[127],{"categories":1498},[400],{"categories":1500},[106],{"categories":1502},[52],{"categories":1504},[52],{"categories":1506},[106],{"categories":1508},[106],{"categories":1510},[400],{"categories":1512},[],{"categories":1514},[106],{"categories":1516},[85],{"categories":1518},[79],{"categories":1520},[106],{"categories":1522},[],{"categories":1524},[130],{"categories":1526},[106],{"categories":1528},[52],{"categories":1530},[106],{"categories":1532},[400],{"categories":1534},[85],{"categories":1536},[85],{"categories":1538},[],{"categories":1540},[82],{"categories":1542},[],{"categories":1544},[],{"categories":1546},[85],{"categories":1548},[85],{"categories":1550},[85],{"categories":1552},[85],{"categories":1554},[],{"categories":1556},[130],{"categories":1558},[79],{"categories":1560},[],{"categories":1562},[85],{"categories":1564},[85],{"categories":1566},[400],{"categories":1568},[400],{"categories":1570},[],{"categories":1572},[88],{"categories":1574},[106],{"categories":1576},[106],{"categories":1578},[85],{"categories":1580},[88],{"categories":1582},[],{"categories":1584},[127],{"categories":1586},[85],{"categories":1588},[85],{"categories":1590},[],{"categories":1592},[],{"categories":1594},[400],{"categories":1596},[85],{"categories":1598},[52],{"categories":1600},[82],{"categories":1602},[85],{"categories":1604},[],{"categories":1606},[88],{"categories":1608},[79],{"categories":1610},[79],{"categories":1612},[],{"categories":1614},[85],{"categories":1616},[127],{"categories":1618},[88],{"categories":1620},[],{"categories":1622},[85],{"categories":1624},[85],{"categories":1626},[88],{"categories":1628},[],{"categories":1630},[88],{"categories":1632},[52],{"categories":1634},[],{"categories":1636},[85],{"categories":1638},[],{"categories":1640},[85],{"categories":1642},[],{"categories":1644},[85],{"categories":1646},[85],{"categories":1648},[],{"categories":1650},[85],{"categories":1652},[106],{"categories":1654},[85],{"categories":1656},[85],{"categories":1658},[79],{"categories":1660},[85],{"categories":1662},[106],{"categories":1664},[88],{"categories":1666},[],{"categories":1668},[85],{"categories":1670},[143],{"categories":1672},[],{"categories":1674},[],{"categories":1676},[],{"categories":1678},[79],{"categories":1680},[106],{"categories":1682},[88],{"categories":1684},[85],{"categories":1686},[127],{"categories":1688},[88],{"categories":1690},[],{"categories":1692},[88],{"categories":1694},[],{"categories":1696},[85],{"categories":1698},[88],{"categories":1700},[85],{"categories":1702},[],{"categories":1704},[85],{"categories":1706},[85],{"categories":1708},[106],{"categories":1710},[127],{"categories":1712},[88],{"categories":1714},[127],{"categories":1716},[82],{"categories":1718},[],{"categories":1720},[],{"categories":1722},[85],{"categories":1724},[79],{"categories":1726},[106],{"categories":1728},[],{"categories":1730},[],{"categories":1732},[52],{"categories":1734},[127],{"categories":1736},[],{"categories":1738},[85],{"categories":1740},[],{"categories":1742},[143],{"categories":1744},[85],{"categories":1746},[400],{"categories":1748},[52],{"categories":1750},[],{"categories":1752},[88],{"categories":1754},[85],{"categories":1756},[88],{"categories":1758},[88],{"categories":1760},[85],{"categories":1762},[],{"categories":1764},[79],{"categories":1766},[85],{"categories":1768},[82],{"categories":1770},[52],{"categories":1772},[127],{"categories":1774},[],{"categories":1776},[],{"categories":1778},[],{"categories":1780},[88],{"categories":1782},[127],{"categories":1784},[106],{"categories":1786},[85],{"categories":1788},[106],{"categories":1790},[127],{"categories":1792},[],{"categories":1794},[127],{"categories":1796},[106],{"categories":1798},[82],{"categories":1800},[85],{"categories":1802},[106],{"categories":1804},[143],{"categories":1806},[],{"categories":1808},[],{"categories":1810},[130],{"categories":1812},[85,52],{"categories":1814},[106],{"categories":1816},[85],{"categories":1818},[88],{"categories":1820},[88],{"categories":1822},[85],{"categories":1824},[],{"categories":1826},[52],{"categories":1828},[85],{"categories":1830},[130],{"categories":1832},[88],{"categories":1834},[143],{"categories":1836},[400],{"categories":1838},[],{"categories":1840},[79],{"categories":1842},[88],{"categories":1844},[88],{"categories":1846},[52],{"categories":1848},[85],{"categories":1850},[85],{"categories":1852},[],{"categories":1854},[],{"categories":1856},[],{"categories":1858},[400],{"categories":1860},[106],{"categories":1862},[85],{"categories":1864},[85],{"categories":1866},[85],{"categories":1868},[],{"categories":1870},[130],{"categories":1872},[82],{"categories":1874},[],{"categories":1876},[88],{"categories":1878},[400],{"categories":1880},[],{"categories":1882},[127],{"categories":1884},[127],{"categories":1886},[],{"categories":1888},[52],{"categories":1890},[127],{"categories":1892},[85],{"categories":1894},[],{"categories":1896},[106],{"categories":1898},[85],{"categories":1900},[127],{"categories":1902},[88],{"categories":1904},[106],{"categories":1906},[],{"categories":1908},[88],{"categories":1910},[127],{"categories":1912},[85],{"categories":1914},[],{"categories":1916},[85],{"categories":1918},[85],{"categories":1920},[400],{"categories":1922},[106],{"categories":1924},[130],{"categories":1926},[130],{"categories":1928},[],{"categories":1930},[],{"categories":1932},[],{"categories":1934},[88],{"categories":1936},[52],{"categories":1938},[52],{"categories":1940},[],{"categories":1942},[],{"categories":1944},[85],{"categories":1946},[],{"categories":1948},[88],{"categories":1950},[85],{"categories":1952},[],{"categories":1954},[85],{"categories":1956},[82],{"categories":1958},[85],{"categories":1960},[143],{"categories":1962},[88],{"categories":1964},[85],{"categories":1966},[52],{"categories":1968},[106],{"categories":1970},[88],{"categories":1972},[],{"categories":1974},[106],{"categories":1976},[88],{"categories":1978},[88],{"categories":1980},[],{"categories":1982},[82],{"categories":1984},[88],{"categories":1986},[],{"categories":1988},[85],{"categories":1990},[79],{"categories":1992},[106],{"categories":1994},[400],{"categories":1996},[88],{"categories":1998},[88],{"categories":2000},[79],{"categories":2002},[85],{"categories":2004},[],{"categories":2006},[],{"categories":2008},[127],{"categories":2010},[85,82],{"categories":2012},[],{"categories":2014},[79],{"categories":2016},[130],{"categories":2018},[85],{"categories":2020},[52],{"categories":2022},[85],{"categories":2024},[88],{"categories":2026},[85],{"categories":2028},[85],{"categories":2030},[106],{"categories":2032},[88],{"categories":2034},[],{"categories":2036},[],{"categories":2038},[88],{"categories":2040},[85],{"categories":2042},[400],{"categories":2044},[],{"categories":2046},[85],{"categories":2048},[88],{"categories":2050},[],{"categories":2052},[85],{"categories":2054},[143],{"categories":2056},[130],{"categories":2058},[88],{"categories":2060},[85],{"categories":2062},[400],{"categories":2064},[],{"categories":2066},[85],{"categories":2068},[143],{"categories":2070},[127],{"categories":2072},[85],{"categories":2074},[],{"categories":2076},[143],{"categories":2078},[106],{"categories":2080},[85],{"categories":2082},[85],{"categories":2084},[79],{"categories":2086},[],{"categories":2088},[],{"categories":2090},[127],{"categories":2092},[85],{"categories":2094},[130],{"categories":2096},[143],{"categories":2098},[143],{"categories":2100},[106],{"categories":2102},[],{"categories":2104},[],{"categories":2106},[85],{"categories":2108},[],{"categories":2110},[85,52],{"categories":2112},[106],{"categories":2114},[88],{"categories":2116},[52],{"categories":2118},[85],{"categories":2120},[79],{"categories":2122},[],{"categories":2124},[],{"categories":2126},[79],{"categories":2128},[143],{"categories":2130},[85],{"categories":2132},[],{"categories":2134},[127,85],{"categories":2136},[400],{"categories":2138},[79],{"categories":2140},[],{"categories":2142},[82],{"categories":2144},[82],{"categories":2146},[85],{"categories":2148},[52],{"categories":2150},[88],{"categories":2152},[106],{"categories":2154},[143],{"categories":2156},[127],{"categories":2158},[85],{"categories":2160},[85],{"categories":2162},[85],{"categories":2164},[79],{"categories":2166},[85],{"categories":2168},[88],{"categories":2170},[106],{"categories":2172},[],{"categories":2174},[],{"categories":2176},[130],{"categories":2178},[52],{"categories":2180},[85],{"categories":2182},[127],{"categories":2184},[130],{"categories":2186},[85],{"categories":2188},[85],{"categories":2190},[88],{"categories":2192},[88],{"categories":2194},[85,82],{"categories":2196},[],{"categories":2198},[127],{"categories":2200},[],{"categories":2202},[85],{"categories":2204},[106],{"categories":2206},[79],{"categories":2208},[79],{"categories":2210},[88],{"categories":2212},[85],{"categories":2214},[82],{"categories":2216},[52],{"categories":2218},[143],{"categories":2220},[],{"categories":2222},[106],{"categories":2224},[85],{"categories":2226},[85],{"categories":2228},[106],{"categories":2230},[52],{"categories":2232},[85],{"categories":2234},[88],{"categories":2236},[106],{"categories":2238},[85],{"categories":2240},[127],{"categories":2242},[85],{"categories":2244},[85],{"categories":2246},[400],{"categories":2248},[91],{"categories":2250},[88],{"categories":2252},[85],{"categories":2254},[106],{"categories":2256},[88],{"categories":2258},[143],{"categories":2260},[85],{"categories":2262},[],{"categories":2264},[85],{"categories":2266},[],{"categories":2268},[],{"categories":2270},[],{"categories":2272},[82],{"categories":2274},[85],{"categories":2276},[88],{"categories":2278},[106],{"categories":2280},[106],{"categories":2282},[106],{"categories":2284},[106],{"categories":2286},[],{"categories":2288},[79],{"categories":2290},[88],{"categories":2292},[106],{"categories":2294},[79],{"categories":2296},[88],{"categories":2298},[85],{"categories":2300},[85,88],{"categories":2302},[88],{"categories":2304},[400],{"categories":2306},[106],{"categories":2308},[106],{"categories":2310},[88],{"categories":2312},[85],{"categories":2314},[],{"categories":2316},[106],{"categories":2318},[143],{"categories":2320},[79],{"categories":2322},[85],{"categories":2324},[85],{"categories":2326},[],{"categories":2328},[52],{"categories":2330},[],{"categories":2332},[79],{"categories":2334},[88],{"categories":2336},[106],{"categories":2338},[85],{"categories":2340},[106],{"categories":2342},[79],{"categories":2344},[106],{"categories":2346},[106],{"categories":2348},[],{"categories":2350},[82],{"categories":2352},[88],{"categories":2354},[106],{"categories":2356},[106],{"categories":2358},[106],{"categories":2360},[106],{"categories":2362},[106],{"categories":2364},[106],{"categories":2366},[106],{"categories":2368},[106],{"categories":2370},[106],{"categories":2372},[106],{"categories":2374},[130],{"categories":2376},[79],{"categories":2378},[85],{"categories":2380},[85],{"categories":2382},[],{"categories":2384},[85,79],{"categories":2386},[],{"categories":2388},[88],{"categories":2390},[106],{"categories":2392},[88],{"categories":2394},[85],{"categories":2396},[85],{"categories":2398},[85],{"categories":2400},[85],{"categories":2402},[85],{"categories":2404},[88],{"categories":2406},[82],{"categories":2408},[127],{"categories":2410},[106],{"categories":2412},[85],{"categories":2414},[],{"categories":2416},[],{"categories":2418},[88],{"categories":2420},[127],{"categories":2422},[85],{"categories":2424},[],{"categories":2426},[],{"categories":2428},[143],{"categories":2430},[85],{"categories":2432},[],{"categories":2434},[],{"categories":2436},[79],{"categories":2438},[82],{"categories":2440},[85],{"categories":2442},[82],{"categories":2444},[127],{"categories":2446},[],{"categories":2448},[106],{"categories":2450},[],{"categories":2452},[127],{"categories":2454},[85],{"categories":2456},[143],{"categories":2458},[],{"categories":2460},[143],{"categories":2462},[],{"categories":2464},[],{"categories":2466},[88],{"categories":2468},[],{"categories":2470},[82],{"categories":2472},[79],{"categories":2474},[127],{"categories":2476},[52],{"categories":2478},[],{"categories":2480},[],{"categories":2482},[85],{"categories":2484},[79],{"categories":2486},[143],{"categories":2488},[],{"categories":2490},[88],{"categories":2492},[88],{"categories":2494},[106],{"categories":2496},[85],{"categories":2498},[88],{"categories":2500},[85],{"categories":2502},[88],{"categories":2504},[85],{"categories":2506},[91],{"categories":2508},[106],{"categories":2510},[],{"categories":2512},[143],{"categories":2514},[52],{"categories":2516},[88],{"categories":2518},[],{"categories":2520},[85],{"categories":2522},[88],{"categories":2524},[82],{"categories":2526},[79],{"categories":2528},[85],{"categories":2530},[127],{"categories":2532},[52],{"categories":2534},[52],{"categories":2536},[85],{"categories":2538},[130],{"categories":2540},[85],{"categories":2542},[88],{"categories":2544},[82],{"categories":2546},[88],{"categories":2548},[85],{"categories":2550},[85],{"categories":2552},[88],{"categories":2554},[106],{"categories":2556},[],{"categories":2558},[79],{"categories":2560},[85],{"categories":2562},[88],{"categories":2564},[85],{"categories":2566},[85],{"categories":2568},[],{"categories":2570},[127],{"categories":2572},[82],{"categories":2574},[106],{"categories":2576},[85],{"categories":2578},[85],{"categories":2580},[127],{"categories":2582},[143],{"categories":2584},[130],{"categories":2586},[85],{"categories":2588},[106],{"categories":2590},[85],{"categories":2592},[88],{"categories":2594},[400],{"categories":2596},[85],{"categories":2598},[88],{"categories":2600},[130],{"categories":2602},[],{"categories":2604},[88],{"categories":2606},[52],{"categories":2608},[127],{"categories":2610},[85],{"categories":2612},[79],{"categories":2614},[82],{"categories":2616},[52],{"categories":2618},[],{"categories":2620},[88],{"categories":2622},[85],{"categories":2624},[],{"categories":2626},[106],{"categories":2628},[],{"categories":2630},[106],{"categories":2632},[85],{"categories":2634},[88],{"categories":2636},[88],{"categories":2638},[88],{"categories":2640},[],{"categories":2642},[],{"categories":2644},[85],{"categories":2646},[85],{"categories":2648},[],{"categories":2650},[127],{"categories":2652},[88],{"categories":2654},[143],{"categories":2656},[79],{"categories":2658},[],{"categories":2660},[],{"categories":2662},[106],{"categories":2664},[52],{"categories":2666},[85],{"categories":2668},[85],{"categories":2670},[85],{"categories":2672},[52],{"categories":2674},[106],{"categories":2676},[127],{"categories":2678},[85],{"categories":2680},[85],{"categories":2682},[85],{"categories":2684},[106],{"categories":2686},[85],{"categories":2688},[106],{"categories":2690},[88],{"categories":2692},[88],{"categories":2694},[52],{"categories":2696},[88],{"categories":2698},[85],{"categories":2700},[52],{"categories":2702},[127],{"categories":2704},[],{"categories":2706},[88],{"categories":2708},[],{"categories":2710},[],{"categories":2712},[],{"categories":2714},[82],{"categories":2716},[85],{"categories":2718},[88],{"categories":2720},[79],{"categories":2722},[88],{"categories":2724},[143],{"categories":2726},[],{"categories":2728},[88],{"categories":2730},[],{"categories":2732},[79],{"categories":2734},[88],{"categories":2736},[],{"categories":2738},[88],{"categories":2740},[85],{"categories":2742},[106],{"categories":2744},[85],{"categories":2746},[88],{"categories":2748},[106],{"categories":2750},[88],{"categories":2752},[52],{"categories":2754},[127],{"categories":2756},[79],{"categories":2758},[],{"categories":2760},[88],{"categories":2762},[127],{"categories":2764},[400],{"categories":2766},[106],{"categories":2768},[85],{"categories":2770},[127],{"categories":2772},[79],{"categories":2774},[],{"categories":2776},[88],{"categories":2778},[88],{"categories":2780},[85],{"categories":2782},[],{"categories":2784},[88],{"categories":2786},[91],{"categories":2788},[106],{"categories":2790},[88],{"categories":2792},[82],{"categories":2794},[],{"categories":2796},[85],{"categories":2798},[91],{"categories":2800},[85],{"categories":2802},[88],{"categories":2804},[106],{"categories":2806},[79],{"categories":2808},[400],{"categories":2810},[85],{"categories":2812},[85],{"categories":2814},[85],{"categories":2816},[106],{"categories":2818},[82],{"categories":2820},[85],{"categories":2822},[127],{"categories":2824},[106],{"categories":2826},[400],{"categories":2828},[85],{"categories":2830},[],{"categories":2832},[],{"categories":2834},[400],{"categories":2836},[130],{"categories":2838},[88],{"categories":2840},[88],{"categories":2842},[106],{"categories":2844},[85],{"categories":2846},[79],{"categories":2848},[127],{"categories":2850},[88],{"categories":2852},[85],{"categories":2854},[143],{"categories":2856},[85],{"categories":2858},[88],{"categories":2860},[],{"categories":2862},[85],{"categories":2864},[85],{"categories":2866},[106],{"categories":2868},[79],{"categories":2870},[],{"categories":2872},[85],{"categories":2874},[85],{"categories":2876},[52],{"categories":2878},[127],{"categories":2880},[85,88],{"categories":2882},[143,82],{"categories":2884},[85],{"categories":2886},[],{"categories":2888},[88],{"categories":2890},[],{"categories":2892},[52],{"categories":2894},[85],{"categories":2896},[106],{"categories":2898},[],{"categories":2900},[88],{"categories":2902},[],{"categories":2904},[127],{"categories":2906},[88],{"categories":2908},[79],{"categories":2910},[88],{"categories":2912},[85],{"categories":2914},[400],{"categories":2916},[143],{"categories":2918},[82],{"categories":2920},[82],{"categories":2922},[79],{"categories":2924},[79],{"categories":2926},[85],{"categories":2928},[88],{"categories":2930},[85],{"categories":2932},[85],{"categories":2934},[79],{"categories":2936},[85],{"categories":2938},[143],{"categories":2940},[106],{"categories":2942},[85],{"categories":2944},[88],{"categories":2946},[85],{"categories":2948},[],{"categories":2950},[52],{"categories":2952},[],{"categories":2954},[88],{"categories":2956},[79],{"categories":2958},[],{"categories":2960},[400],{"categories":2962},[85],{"categories":2964},[],{"categories":2966},[106],{"categories":2968},[88],{"categories":2970},[52],{"categories":2972},[85],{"categories":2974},[88],{"categories":2976},[52],{"categories":2978},[88],{"categories":2980},[106],{"categories":2982},[79],{"categories":2984},[106],{"categories":2986},[52],{"categories":2988},[85],{"categories":2990},[127],{"categories":2992},[85],{"categories":2994},[85],{"categories":2996},[85],{"categories":2998},[85],{"categories":3000},[88],{"categories":3002},[85],{"categories":3004},[88],{"categories":3006},[85],{"categories":3008},[79],{"categories":3010},[85],{"categories":3012},[88],{"categories":3014},[127],{"categories":3016},[79],{"categories":3018},[88],{"categories":3020},[127],{"categories":3022},[],{"categories":3024},[85],{"categories":3026},[85],{"categories":3028},[52],{"categories":3030},[],{"categories":3032},[88],{"categories":3034},[143],{"categories":3036},[85],{"categories":3038},[106],{"categories":3040},[143],{"categories":3042},[88],{"categories":3044},[82],{"categories":3046},[82],{"categories":3048},[85],{"categories":3050},[79],{"categories":3052},[],{"categories":3054},[85],{"categories":3056},[],{"categories":3058},[79],{"categories":3060},[85],{"categories":3062},[88],{"categories":3064},[88],{"categories":3066},[],{"categories":3068},[52],{"categories":3070},[52],{"categories":3072},[143],{"categories":3074},[127],{"categories":3076},[],{"categories":3078},[85],{"categories":3080},[79],{"categories":3082},[85],{"categories":3084},[52],{"categories":3086},[79],{"categories":3088},[106],{"categories":3090},[106],{"categories":3092},[],{"categories":3094},[106],{"categories":3096},[88],{"categories":3098},[127],{"categories":3100},[130],{"categories":3102},[85],{"categories":3104},[],{"categories":3106},[106],{"categories":3108},[52],{"categories":3110},[82],{"categories":3112},[85],{"categories":3114},[79],{"categories":3116},[400],{"categories":3118},[79],{"categories":3120},[],{"categories":3122},[],{"categories":3124},[106],{"categories":3126},[],{"categories":3128},[88],{"categories":3130},[88],{"categories":3132},[88],{"categories":3134},[],{"categories":3136},[85],{"categories":3138},[],{"categories":3140},[106],{"categories":3142},[79],{"categories":3144},[127],{"categories":3146},[85],{"categories":3148},[106],{"categories":3150},[106],{"categories":3152},[],{"categories":3154},[106],{"categories":3156},[79],{"categories":3158},[85],{"categories":3160},[],{"categories":3162},[88],{"categories":3164},[88],{"categories":3166},[79],{"categories":3168},[],{"categories":3170},[],{"categories":3172},[],{"categories":3174},[127],{"categories":3176},[88],{"categories":3178},[85],{"categories":3180},[],{"categories":3182},[],{"categories":3184},[],{"categories":3186},[127],{"categories":3188},[],{"categories":3190},[79],{"categories":3192},[],{"categories":3194},[],{"categories":3196},[127],{"categories":3198},[85],{"categories":3200},[106],{"categories":3202},[],{"categories":3204},[143],{"categories":3206},[106],{"categories":3208},[143],{"categories":3210},[85],{"categories":3212},[],{"categories":3214},[],{"categories":3216},[88],{"categories":3218},[],{"categories":3220},[],{"categories":3222},[88],{"categories":3224},[85],{"categories":3226},[],{"categories":3228},[88],{"categories":3230},[106],{"categories":3232},[143],{"categories":3234},[130],{"categories":3236},[88],{"categories":3238},[88],{"categories":3240},[],{"categories":3242},[],{"categories":3244},[],{"categories":3246},[106],{"categories":3248},[],{"categories":3250},[],{"categories":3252},[127],{"categories":3254},[79],{"categories":3256},[],{"categories":3258},[82],{"categories":3260},[143],{"categories":3262},[85],{"categories":3264},[52],{"categories":3266},[79],{"categories":3268},[130],{"categories":3270},[82],{"categories":3272},[52],{"categories":3274},[],{"categories":3276},[],{"categories":3278},[88],{"categories":3280},[79],{"categories":3282},[127],{"categories":3284},[79],{"categories":3286},[88],{"categories":3288},[400],{"categories":3290},[88],{"categories":3292},[],{"categories":3294},[85],{"categories":3296},[106],{"categories":3298},[52],{"categories":3300},[],{"categories":3302},[127],{"categories":3304},[106],{"categories":3306},[79],{"categories":3308},[88],{"categories":3310},[85],{"categories":3312},[82],{"categories":3314},[88,400],{"categories":3316},[88],{"categories":3318},[52],{"categories":3320},[85],{"categories":3322},[130],{"categories":3324},[143],{"categories":3326},[88],{"categories":3328},[],{"categories":3330},[88],{"categories":3332},[85],{"categories":3334},[82],{"categories":3336},[],{"categories":3338},[],{"categories":3340},[85],{"categories":3342},[130],{"categories":3344},[85],{"categories":3346},[],{"categories":3348},[106],{"categories":3350},[],{"categories":3352},[106],{"categories":3354},[52],{"categories":3356},[88],{"categories":3358},[85],{"categories":3360},[143],{"categories":3362},[52],{"categories":3364},[],{"categories":3366},[106],{"categories":3368},[85],{"categories":3370},[],{"categories":3372},[85],{"categories":3374},[88],{"categories":3376},[85],{"categories":3378},[88],{"categories":3380},[85],{"categories":3382},[85],{"categories":3384},[85],{"categories":3386},[85],{"categories":3388},[82],{"categories":3390},[],{"categories":3392},[91],{"categories":3394},[106],{"categories":3396},[85],{"categories":3398},[],{"categories":3400},[52],{"categories":3402},[85],{"categories":3404},[85],{"categories":3406},[88],{"categories":3408},[106],{"categories":3410},[85],{"categories":3412},[85],{"categories":3414},[82],{"categories":3416},[88],{"categories":3418},[127],{"categories":3420},[],{"categories":3422},[130],{"categories":3424},[85],{"categories":3426},[],{"categories":3428},[106],{"categories":3430},[143],{"categories":3432},[],{"categories":3434},[],{"categories":3436},[106],{"categories":3438},[106],{"categories":3440},[143],{"categories":3442},[79],{"categories":3444},[88],{"categories":3446},[88],{"categories":3448},[85],{"categories":3450},[82],{"categories":3452},[],{"categories":3454},[],{"categories":3456},[106],{"categories":3458},[130],{"categories":3460},[52],{"categories":3462},[88],{"categories":3464},[127],{"categories":3466},[130],{"categories":3468},[130],{"categories":3470},[],{"categories":3472},[106],{"categories":3474},[85],{"categories":3476},[85],{"categories":3478},[52],{"categories":3480},[],{"categories":3482},[106],{"categories":3484},[106],{"categories":3486},[106],{"categories":3488},[],{"categories":3490},[88],{"categories":3492},[85],{"categories":3494},[],{"categories":3496},[79],{"categories":3498},[82],{"categories":3500},[],{"categories":3502},[85],{"categories":3504},[85],{"categories":3506},[],{"categories":3508},[52],{"categories":3510},[],{"categories":3512},[],{"categories":3514},[],{"categories":3516},[],{"categories":3518},[85],{"categories":3520},[106],{"categories":3522},[],{"categories":3524},[],{"categories":3526},[85],{"categories":3528},[85],{"categories":3530},[85],{"categories":3532},[130],{"categories":3534},[85],{"categories":3536},[130],{"categories":3538},[],{"categories":3540},[130],{"categories":3542},[130],{"categories":3544},[400],{"categories":3546},[88],{"categories":3548},[52],{"categories":3550},[],{"categories":3552},[],{"categories":3554},[130],{"categories":3556},[52],{"categories":3558},[52],{"categories":3560},[52],{"categories":3562},[],{"categories":3564},[79],{"categories":3566},[52],{"categories":3568},[52],{"categories":3570},[79],{"categories":3572},[52],{"categories":3574},[82],{"categories":3576},[52],{"categories":3578},[52],{"categories":3580},[52],{"categories":3582},[130],{"categories":3584},[106],{"categories":3586},[106],{"categories":3588},[85],{"categories":3590},[52],{"categories":3592},[130],{"categories":3594},[400],{"categories":3596},[130],{"categories":3598},[130],{"categories":3600},[130],{"categories":3602},[],{"categories":3604},[82],{"categories":3606},[],{"categories":3608},[400],{"categories":3610},[52],{"categories":3612},[52],{"categories":3614},[52],{"categories":3616},[88],{"categories":3618},[106,82],{"categories":3620},[130],{"categories":3622},[],{"categories":3624},[],{"categories":3626},[130],{"categories":3628},[],{"categories":3630},[130],{"categories":3632},[106],{"categories":3634},[88],{"categories":3636},[],{"categories":3638},[52],{"categories":3640},[85],{"categories":3642},[127],{"categories":3644},[],{"categories":3646},[85],{"categories":3648},[],{"categories":3650},[106],{"categories":3652},[79],{"categories":3654},[130],{"categories":3656},[],{"categories":3658},[52],{"categories":3660},[106],[3662,3790,3930,4242],{"id":3663,"title":3664,"ai":3665,"body":3670,"categories":3762,"created_at":53,"date_modified":53,"description":45,"extension":55,"faq":53,"featured":56,"kicker_label":53,"meta":3763,"navigation":58,"path":3777,"published_at":53,"question":53,"scraped_at":3778,"seo":3779,"sitemap":3780,"source_id":3781,"source_name":3782,"source_type":3783,"source_url":3784,"stem":3785,"tags":3786,"thumbnail_url":53,"tldr":3787,"tweet":53,"unknown_tags":3788,"__hash__":3789},"summaries\u002Fsummaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary.md","5-Layer MVVM Keeps SwiftUI Apps Maintainable",{"provider":7,"model":8,"input_tokens":3666,"output_tokens":3667,"processing_time_ms":3668,"cost_usd":3669},5306,1690,8817,0.00139935,{"type":14,"value":3671,"toc":3757},[3672,3676,3711,3714,3718,3743,3746,3750],[17,3673,3675],{"id":3674},"layered-mvvm-separates-concerns-for-scalability","Layered MVVM Separates Concerns for Scalability",[22,3677,3678,3679,3682,3683,3686,3687,3690,3691,3694,3695,3698,3699,3702,3703,3706,3707,3710],{},"Build SwiftUI apps using a 'full layer cake' MVVM with five distinct layers to prevent Views from handling data or logic, resulting in boring, maintainable code. Models define pure data structures like ",[26,3680,3681],{},"Task"," (with title, notes, priority, category, due date, completion status), ",[26,3684,3685],{},"SubTask",", ",[26,3688,3689],{},"TaskPriority"," (Low\u002FMedium\u002FHigh), and ",[26,3692,3693],{},"TaskCategory","—no UI or persistence code. Repositories abstract storage via protocols like ",[26,3696,3697],{},"TaskRepositoryProtocol","; ",[26,3700,3701],{},"TaskRepository"," uses SwiftData's ",[26,3704,3705],{},"ModelContext"," but hides it from callers. Services handle cross-cutting utilities: date checks (e.g., 'is this today?'), greeting generation, formatting, settings, and notifications, avoiding bloated ViewModels. ViewModels (",[26,3708,3709],{},"@Observable",") manage screen state, fetch via repositories, process with services, and expose UI-ready data\u002Factions. Views render only, calling ViewModel methods without business rules.",[22,3712,3713],{},"This structure scales by keeping each layer single-responsibility: Views stay declarative, ViewModels testable, and data\u002Fpersistence swappable.",[17,3715,3717],{"id":3716},"dependency-injection-and-data-flow-enable-testing","Dependency Injection and Data Flow Enable Testing",[22,3719,3720,3721,3724,3725,3728,3729,3732,3733,3735,3736,3738,3739,3742],{},"Inject repositories and services at app launch via ",[26,3722,3723],{},"@Environment"," or root views—ViewModels never instantiate dependencies. Data flows unidirectionally: user actions trigger ViewModel methods (e.g., ",[26,3726,3727],{},"toggleComplete(task)","), which call ",[26,3730,3731],{},"repository.toggleComplete(task)"," updating ",[26,3734,3705],{},", then refresh observable state for Views. Protocols like ",[26,3737,3697],{}," allow faking for unit tests: swap ",[26,3740,3741],{},"FakeTaskRepository"," to test ViewModels without SwiftData, UI, or real persistence, verifying state changes and actions in isolation.",[22,3744,3745],{},"Trade-off: Adds upfront boilerplate but prevents God objects and eases refactoring as apps grow.",[17,3747,3749],{"id":3748},"demo-app-features-validate-architecture","Demo App Features Validate Architecture",[22,3751,3752,3753,3756],{},"The todo app showcases layers across screens. Today view displays due-today tasks with progress ring and personalized greeting (via Services). All Tasks lists with filters (All\u002FActive\u002FCompleted, by category) loaded by ViewModel. Add Task form sets priority\u002Fcategory\u002Fdue date\u002Ftime\u002Fsubtasks. Search queries tasks by name, showing matches with details. Settings manages profile, default priority, theme (System\u002FLight\u002FDark), notifications—all persisted via repository. UI uses Liquid Glass effects for polish. Run by opening ",[26,3754,3755],{},"IOSMvvCApp.xcodeproj"," in Xcode; MIT licensed.",{"title":45,"searchDepth":46,"depth":46,"links":3758},[3759,3760,3761],{"id":3674,"depth":46,"text":3675},{"id":3716,"depth":46,"text":3717},{"id":3748,"depth":46,"text":3749},[52],{"content_references":3764,"triage":3772},[3765],{"type":3766,"title":3767,"author":3768,"publisher":3769,"url":3770,"context":3771},"other","MVVM in SwiftUI: Build an iOS App That Stays Organized as It Grows","sanjaynelagadde1992","Medium","https:\u002F\u002Fmedium.com\u002F@sanjaynelagadde1992\u002Fmvvm-in-swiftui-build-an-ios-app-that-stays-organized-as-it-grows-a16e64d9eb3a","recommended",{"relevance":3773,"novelty":3774,"quality":3773,"actionability":3773,"composite":3775,"reasoning":3776},4,3,3.8,"Category: Design & Frontend. The article provides a structured approach to implementing MVVM in SwiftUI, addressing the audience's need for maintainable code and scalability, which is a common pain point for developers. It offers specific examples of how to structure code and implement dependency injection, making it actionable for developers looking to improve their app architecture.","\u002Fsummaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary","2026-04-16 02:56:11",{"title":3664,"description":45},{"loc":3777},"9166f90169a38f6e","__oneoff__","article","https:\u002F\u002Fgithub.com\u002Fsanjaynela\u002FIOSMvvCApp","summaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary",[71,70],"Implement MVVM as five layers—Models, Repositories, Services, ViewModels, Views—to isolate UI from data, logic, and persistence, enabling dependency injection and isolated ViewModel testing.",[],"P2RjZndIh2s04qnEiZcXtKRJ8CO0tytKe3mwjvwk198",{"id":3791,"title":3792,"ai":3793,"body":3798,"categories":3902,"created_at":53,"date_modified":53,"description":45,"extension":55,"faq":53,"featured":56,"kicker_label":53,"meta":3903,"navigation":58,"path":3916,"published_at":3917,"question":53,"scraped_at":3918,"seo":3919,"sitemap":3920,"source_id":3921,"source_name":3922,"source_type":3783,"source_url":3923,"stem":3924,"tags":3925,"thumbnail_url":53,"tldr":3927,"tweet":53,"unknown_tags":3928,"__hash__":3929},"summaries\u002Fsummaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary.md","TanStack Server Components: Opt-In Granularity Beats Next.js",{"provider":7,"model":8,"input_tokens":3794,"output_tokens":3795,"processing_time_ms":3796,"cost_usd":3797},7116,1537,11991,0.00216905,{"type":14,"value":3799,"toc":3897},[3800,3804,3819,3826,3830,3841,3844,3848,3851,3894],[17,3801,3803],{"id":3802},"opt-in-server-rendering-via-server-functions","Opt-In Server Rendering via Server Functions",[22,3805,3806,3807,3810,3811,3814,3815,3818],{},"Render React components on the server explicitly by wrapping them in ",[26,3808,3809],{},"renderServerComponent"," inside a server function, then fetch like JSON data. This runs server-only code (e.g., ",[26,3812,3813],{},"os.hostname()",", env vars) without changing your client-first app structure. Pass computed values as props to keep components pure and reusable on client or server. In a TanStack Start route loader, await the server function and use ",[26,3816,3817],{},"loaderData"," to render: the boundary stays clear since server logic lives solely in the function. Replace server components with JSON fetches seamlessly—no framework overhaul required, unlike Next.js's server-first tree where 'use client' opts out interactivity.",[22,3820,3821,3822,3825],{},"For multiple components, use ",[26,3823,3824],{},"Promise.all"," in one server function or return promises directly for streaming. Client-side, wrap in Suspense for skeletons: slow components load independently without blocking the page.",[17,3827,3829],{"id":3828},"composite-components-eliminate-server-controlled-client-trees","Composite Components Eliminate Server-Controlled Client Trees",[22,3831,3832,3833,3836,3837,3840],{},"Avoid nesting 'use client' components inside server renders, which muddies boundaries (e.g., tracing counter logic requires jumping files). Instead, return ",[26,3834,3835],{},"createCompositeComponent"," from server functions, defining slots for client content. Fetch the source in loaders, then render with ",[26,3838,3839],{},"\u003CComposite source={greetingSource}>","—server defines structure and data passthrough, but clients fill slots.",[22,3842,3843],{},"This keeps all client decisions in client code: server sees opaque slots, executes no client functions. Integrates with TanStack Query for caching\u002FCDN simplicity. Result: explicit server\u002Fclient separation, no 'use client' needed for slots.",[17,3845,3847],{"id":3846},"slot-patterns-for-flexible-client-integration","Slot Patterns for Flexible Client Integration",[22,3849,3850],{},"Use three slot types to inject client components without server knowledge of their identity:",[3852,3853,3854,3866,3876],"ul",{},[3855,3856,3857,3861,3862,3865],"li",{},[3858,3859,3860],"strong",{},"Children slots",": Pass ",[26,3863,3864],{},"{children}"," prop; server forwards anything provided (e.g., counter under greeting).",[3855,3867,3868,3871,3872,3875],{},[3858,3869,3870],{},"Render props",": Define function props (e.g., ",[26,3873,3874],{},"renderActions?: (postId: string, authorId: string) => ReactNode","). Server calls optionally with data (e.g., above post title); client provides function returning component. Opaque to server—runs client-side, avoids double-fetches (author data passes directly).",[3855,3877,3878,3881,3882,3885,3886,3889,3890,3893],{},[3858,3879,3880],{},"Component props",": Pass component directly (e.g., ",[26,3883,3884],{},"PostActions: Component\u003C{postId: string, authorId: string}>","). Server renders ",[26,3887,3888],{},"\u003CPostActions {...data} \u002F>"," as placeholder. Swap implementations client-side (e.g., ",[26,3891,3892],{},"FakePostActions"," works identically). Prefer render props if needing data transforms; component props for direct passthrough.",[22,3895,3896],{},"These solve real issues: targeted actions (like\u002Ffollow) without children dumping at bottom, data sharing without client refetching. Server provides data\u002Fslots; client handles rendering—reverses Next.js logic for better DX and modularity.",{"title":45,"searchDepth":46,"depth":46,"links":3898},[3899,3900,3901],{"id":3802,"depth":46,"text":3803},{"id":3828,"depth":46,"text":3829},{"id":3846,"depth":46,"text":3847},[52],{"content_references":3904,"triage":3914},[3905,3910],{"type":3906,"title":3907,"url":3908,"context":3909},"tool","TanStack Start Server Components Docs","https:\u002F\u002Ftanstack.com\u002Fstart\u002Flatest\u002Fdocs\u002Fframework\u002Freact\u002Fguide\u002Fserver-components","mentioned",{"type":3766,"title":3911,"url":3912,"context":3913},"TanStack React Server Components Announcement","https:\u002F\u002Ftanstack.com\u002Fblog\u002Freact-server-components","cited",{"relevance":3773,"novelty":3774,"quality":3773,"actionability":3773,"composite":3775,"reasoning":3915},"Category: Design & Frontend. The article discusses practical techniques for rendering React components on the server, addressing a specific pain point for developers looking to optimize their frontend architecture. It provides actionable insights on using `renderServerComponent` and `createCompositeComponent`, which can be directly applied in building AI-powered products.","\u002Fsummaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary","2026-04-20 22:30:20","2026-04-21 15:16:40",{"title":3792,"description":45},{"loc":3916},"44549f7a250bdc2f","Better Stack","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=pWxRvFFUHcY","summaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary",[70,71,3926],"software-engineering","Use renderServerComponent in server functions to render React components on the server granularly, like fetching JSON. Composite components with slots keep client boundaries clean without 'use client' directives.",[3926],"txEuohnvndBk3yN4LUpj-Ih9qNEyhx3iGFhMQ45h3_o",{"id":3931,"title":3932,"ai":3933,"body":3938,"categories":4216,"created_at":53,"date_modified":53,"description":45,"extension":55,"faq":53,"featured":56,"kicker_label":53,"meta":4217,"navigation":58,"path":4230,"published_at":53,"question":53,"scraped_at":4231,"seo":4232,"sitemap":4233,"source_id":4234,"source_name":3782,"source_type":3783,"source_url":4235,"stem":4236,"tags":4237,"thumbnail_url":53,"tldr":4239,"tweet":53,"unknown_tags":4240,"__hash__":4241},"summaries\u002Fsummaries\u002F6cd773fe2be8de1c-embed-servo-engine-in-rust-for-rendering-wasm-summary.md","Embed Servo Engine in Rust for Rendering & WASM",{"provider":7,"model":8,"input_tokens":3934,"output_tokens":3935,"processing_time_ms":3936,"cost_usd":3937},7047,1915,12763,0.00234425,{"type":14,"value":3939,"toc":4211},[3940,3944,3991,4041,4045,4148,4152],[17,3941,3943],{"id":3942},"core-api-build-servo-engine-and-webviews-for-rendering","Core API: Build Servo Engine and WebViews for Rendering",[22,3945,3946,3947,3950,3951,3954,3955,3958,3959,3962,3963,3966,3967,3970,3971,3974,3975,3978,3979,3982,3983,3986,3987,3990],{},"Start with ",[26,3948,3949],{},"ServoBuilder::default().opts(Opts).preferences(Preferences).event_loop_waker(EventLoopWaker).protocol_registry(ProtocolRegistry).build()"," to create a ",[26,3952,3953],{},"Servo"," handle. Pair it with ",[26,3956,3957],{},"RenderingContext"," implementations: ",[26,3960,3961],{},"SoftwareRenderingContext::new(PhysicalSize\u003Cu32>)"," for headless GPU-free rendering (ideal for CI\u002Fservers), or ",[26,3964,3965],{},"WindowRenderingContext"," with raw-window-handle for apps. Then ",[26,3968,3969],{},"WebViewBuilder::new(&servo, Rc\u003Cdyn RenderingContext>).url(Url).hidpi_scale_factor(Scale).delegate(Rc\u003Cdyn WebViewDelegate>).build()"," yields a clonable ",[26,3972,3973],{},"WebView",". Drive via ",[26,3976,3977],{},"servo.spin_event_loop()"," in a loop; hook ",[26,3980,3981],{},"WebViewDelegate::notify_load_status_changed(LoadStatus::Complete)"," post-load event for screenshots using ",[26,3984,3985],{},"RenderingContext::read_to_image(Box2D\u003Ci32, DevicePixel>) -> Option\u003CImageBuffer\u003CRgba\u003Cu8>, Vec\u003Cu8>>>",". This mirrors servoshell API but streamlined for embedders, handling input events, network intercepts via ",[26,3988,3989],{},"WebResourceLoad",", and custom protocols.",[22,3992,3993,3994,3997,3998,4001,4002,4005,4006,4009,4010,4013,4014,4017,4018,4021,4022,4025,4026,4029,4030,4033,4034,4001,4037,4040],{},"Trade-offs: SoftwareRenderingContext avoids GPU\u002FX11 (",[26,3995,3996],{},"apt-get install libegl1"," may help errors) but slower; call ",[26,3999,4000],{},"present()"," with ",[26,4003,4004],{},"PreserveBuffer::No"," before ",[26,4007,4008],{},"read_to_image","; wait for ",[26,4011,4012],{},"notify_new_frame_ready"," after ",[26,4015,4016],{},"LoadStatus::Complete"," to settle ",[26,4019,4020],{},"requestAnimationFrame",". Use ",[26,4023,4024],{},"Rc\u003CCell\u003Cbool>>"," or ",[26,4027,4028],{},"Arc\u003CAtomicBool>"," for load flags; set ",[26,4031,4032],{},"Preferences::network_http_proxy_uri = \"\"","; handle ",[26,4035,4036],{},"surfman::error::Error",[26,4038,4039],{},"anyhow::Context",".",[17,4042,4044],{"id":4043},"headless-screenshots-servo-shot-cli-in-150-lines","Headless Screenshots: servo-shot CLI in 150 Lines",[22,4046,4047,4050,4051,3686,4054,3686,4057,3686,4060,3686,4063,3686,4066,3686,4069,4072,4073,4076,4077,4080,4081,4083,4084,4001,4086,4089,4090,4092,4093,4096,4097,4100,4101,4104,4105,4108,4109,4112,4113,4116,4117,3686,4120,3686,4123,3686,4126,4129,4130,4133,4134,4137,4138,4083,4140,4143,4144,4147],{},[26,4048,4049],{},"servo-shot \u003Curl|html> [--width 1280] [--height 800] [--dpr 1.0] [--out shot.png]"," renders to PNG using only ",[26,4052,4053],{},"servo = \"0.1.0\"",[26,4055,4056],{},"clap",[26,4058,4059],{},"image",[26,4061,4062],{},"url",[26,4064,4065],{},"anyhow",[26,4067,4068],{},"dpi",[26,4070,4071],{},"euclid",". Flow: Init ",[26,4074,4075],{},"SoftwareRenderingContext"," from CLI sizes (",[26,4078,4079],{},"dpi::PhysicalSize\u003Cu32>","), build ",[26,4082,3953],{},"\u002F",[26,4085,3973],{},[26,4087,4088],{},"ShotDelegate"," waiting on ",[26,4091,4016],{},", loop ",[26,4094,4095],{},"spin_event_loop()"," until flag, ",[26,4098,4099],{},"ctx.read_to_image(full_rect)"," to ",[26,4102,4103],{},"image::save",". Produces ",[26,4106,4107],{},"sample.png"," from ",[26,4110,4111],{},"sample.html","; scales to 1920x1080@2x DPR. Build: ",[26,4114,4115],{},"cargo build --release"," after installing ",[26,4118,4119],{},"cmake",[26,4121,4122],{},"clang",[26,4124,4125],{},"llvm",[26,4127,4128],{},"pkg-config",". Avoids ",[26,4131,4132],{},"unsafe","; gotchas include no ",[26,4135,4136],{},"webview.paint()",", explicit ",[26,4139,4000],{},[26,4141,4142],{},"swap_buffers",", proxy unset, ",[26,4145,4146],{},"euclid::Size2D"," conversions.",[17,4149,4151],{"id":4150},"wasm-servo-sub-crates-for-browser-not-full-engine","WASM: Servo Sub-Crates for Browser, Not Full Engine",[22,4153,4154,4155,4100,4158,4083,4161,4164,4165,4168,4169,4172,4173,3686,4176,3686,4179,3686,4182,3686,4185,4187,4188,4191,4192,3698,4195,4198,4199,4202,4203,4206,4207,4210],{},"Full ",[26,4156,4157],{},"servo",[26,4159,4160],{},"wasm32-unknown-unknown",[26,4162,4163],{},"wasm32-wasi"," fails due to ",[26,4166,4167],{},"mozjs_sys",", SharedArrayBuffer, ",[26,4170,4171],{},"fetch()",". Instead, compile subsystems: ",[26,4174,4175],{},"html5ever",[26,4177,4178],{},"markup5ever_rcdom",[26,4180,4181],{},"selectors",[26,4183,4184],{},"cssparser",[26,4186,4062],{},". Demo ",[26,4189,4190],{},"html5ever-wasm-demo",": ",[26,4193,4194],{},"cargo build --release --target wasm32-unknown-unknown",[26,4196,4197],{},"wasm-bindgen --target web"," yields 454KB ",[26,4200,4201],{},"html5ever_wasm_demo_bg.wasm",", 8KB JS, 4KB HTML SPA. Parses textarea HTML into ",[26,4204,4205],{},"\u003Chtml>\u002F\u003Chead>\u002F\u003Cbody>\u002F\u003Ctbody>"," trees client-side. Serve via ",[26,4208,4209],{},"python3 -m http.server www 8000","; live at simonw.github.io\u002F...\u002Fwww\u002F. Enables !important CSS checkers, fetch-free parsers; stream full renderer via WebRTC if needed.",{"title":45,"searchDepth":46,"depth":46,"links":4212},[4213,4214,4215],{"id":3942,"depth":46,"text":3943},{"id":4043,"depth":46,"text":4044},{"id":4150,"depth":46,"text":4151},[52],{"content_references":4218,"triage":4227},[4219,4222,4224],{"type":3766,"title":4220,"url":4221,"context":3913},"Servo 0.1.0 Release","https:\u002F\u002Fservo.org\u002Fblog\u002F2026\u002F04\u002F13\u002Fservo-0.1.0-release\u002F",{"type":3906,"title":4157,"url":4223,"context":3909},"https:\u002F\u002Fdocs.rs\u002Fservo\u002F0.1.0",{"type":3766,"title":4225,"url":4226,"context":3909},"servoshell","https:\u002F\u002Fgithub.com\u002Fservo\u002Fservo",{"relevance":3774,"novelty":3774,"quality":3773,"actionability":3773,"composite":4228,"reasoning":4229},3.45,"Category: Software Engineering. The article provides a practical guide on embedding the Servo engine in Rust for rendering, which is relevant for developers looking to integrate rendering capabilities into their applications. It includes specific code examples and workflows, making it actionable for the audience.","\u002Fsummaries\u002F6cd773fe2be8de1c-embed-servo-engine-in-rust-for-rendering-wasm-summary","2026-04-15 15:35:09",{"title":3932,"description":45},{"loc":4230},"6cd773fe2be8de1c","https:\u002F\u002Fgithub.com\u002Fsimonw\u002Fresearch\u002Ftree\u002Fmain\u002Fservo-crate-exploration#readme","summaries\u002F6cd773fe2be8de1c-embed-servo-engine-in-rust-for-rendering-wasm-summary",[4238,71,72],"open-source","Servo v0.1.0 crate exposes browser engine as embeddable Rust lib; use SoftwareRenderingContext for headless screenshots (servo-shot CLI: 150 lines renders URL to PNG); sub-crates like html5ever compile to 454KB WASM for browser SPAs.",[72],"7ZFZAPE1BfEJ_1ZuFDtEBbLrlaQS4v7V8ugkXxgxuRA",{"id":4243,"title":4244,"ai":4245,"body":4250,"categories":4314,"created_at":53,"date_modified":53,"description":45,"extension":55,"faq":53,"featured":56,"kicker_label":53,"meta":4315,"navigation":58,"path":4320,"published_at":53,"question":53,"scraped_at":4321,"seo":4322,"sitemap":4323,"source_id":4324,"source_name":3782,"source_type":3783,"source_url":4306,"stem":4325,"tags":4326,"thumbnail_url":53,"tldr":4327,"tweet":53,"unknown_tags":4328,"__hash__":4329},"summaries\u002Fsummaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary.md","Servo html5ever Parser Runs in Browser via 465KB WASM",{"provider":7,"model":8,"input_tokens":4246,"output_tokens":4247,"processing_time_ms":4248,"cost_usd":4249},3583,1305,11684,0.0013466,{"type":14,"value":4251,"toc":4310},[4252,4256,4268,4279,4283,4286,4300],[17,4253,4255],{"id":4254},"compile-servo-sub-crates-to-wasm-for-browser-use","Compile Servo Sub-Crates to WASM for Browser Use",[22,4257,4258,4259,4261,4262,4264,4265,4267],{},"Servo's individual crates like ",[26,4260,4175],{}," (HTML5 parser) and ",[26,4263,4178],{}," (RC DOM builder) compile cleanly to WebAssembly at ~465 KB, enabling fully client-side execution without server roundtrips. This sidesteps the full ",[26,4266,4157],{}," crate's compilation blockers: SpiderMonkey JS engine, threading, and OpenGL dependencies. Result: a production-grade parser runs in any modern browser tab, producing a parse tree and normalized serialization from raw input.",[22,4269,4270,4271,4274,4275,4278],{},"To integrate, load the WASM module (shows 'loading wasm…' on init), feed it HTML strings, and query the output DOM. Handles real-world mess: input like ",[26,4272,4273],{},"\u003Cp>hello\u003Cb>world\u003C\u002Fp>\u003Ci>! \u003Cdiv>\u003Ctable>\u003Ctr>\u003Ctd>implicit tbody \u003Cp>unclosed\u003C\u002Fhtml>\u003C!-- parser adopts the mis-nested tags -->"," yields Servo's tolerant interpretation—implicit ",[26,4276,4277],{},"\u003Ctbody>",", tag adoption despite mis-nesting, and comment preservation.",[17,4280,4282],{"id":4281},"interactive-demo-reveals-parser-robustness","Interactive Demo Reveals Parser Robustness",[22,4284,4285],{},"Edit HTML live on the left pane; right pane updates with:",[3852,4287,4288,4294],{},[3855,4289,4290,4293],{},[3858,4291,4292],{},"Parse tree",": Full DOM structure as Servo sees it, exposing quirks like implicit table elements.",[3855,4295,4296,4299],{},[3858,4297,4298],{},"Normalized HTML",": Clean serialization matching Servo's output, stripping errors without losing intent.",[22,4301,4302,4303,4309],{},"This proves Servo components deliver browser fidelity in WASM—ideal for tools needing accurate parsing (linters, preprocessors, editors) without bundling a full engine. Trade-off: sticks to parser\u002FDOM only; no layout or rendering. Start with the demo at ",[4304,4305,4306],"a",{"href":4306,"rel":4307},"https:\u002F\u002Fsimonw.github.io\u002Fresearch\u002Fservo-crate-exploration\u002Fhtml5ever-wasm-demo\u002Fwww\u002F",[4308],"nofollow"," to test edge cases yourself.",{"title":45,"searchDepth":46,"depth":46,"links":4311},[4312,4313],{"id":4254,"depth":46,"text":4255},{"id":4281,"depth":46,"text":4282},[52],{"content_references":4316,"triage":4317},[],{"relevance":3774,"novelty":3774,"quality":3773,"actionability":3774,"composite":4318,"reasoning":4319},3.25,"Category: Design & Frontend. The article discusses compiling Servo's html5ever and markup5ever_rcdom crates to WebAssembly for client-side HTML parsing, which is relevant for frontend developers. It provides a practical demonstration of the parser's capabilities, but lacks detailed step-by-step integration guidance.","\u002Fsummaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary","2026-04-15 15:35:11",{"title":4244,"description":45},{"loc":4320},"6eb63cd73ca2db1a","summaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary",[70,4238,71],"Compile Servo's html5ever and markup5ever_rcdom crates to WebAssembly for client-side HTML parsing, handling malformed input like unclosed tags and mis-nesting—full Servo won't compile due to SpiderMonkey, threads, and GL dependencies.",[],"oN4TlOdOhmULZaf8-h-BOCMlw8b1gDvPnzF2Qf-KRoI"]