[{"data":1,"prerenderedAt":553},["ShallowReactive",2],{"project-43936097":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":44,"post_text":47,"what":48,"said":74,"maker_in_thread":164,"shape":175,"grid":179,"attempts":516,"same_week":517,"maker_shows":38,"maker_hidden":545,"reader_version":546,"card":547},"43936097","Aberdeen","An elegant approach to reactive UIs","title","Show HN: Aberdeen – An elegant approach to reactive UIs","https:\u002F\u002Faberdeenjs.org\u002F","aberdeenjs.org","vanviegen",1746794549,2025,224,129,278,3837,8,"notable","languages","ui framework","library",[24,25,26,27],"reactive ui","javascript framework","proxy reactivity","typescript ui","curious",-0.071,{"positive":31,"neutral":32,"mixed":33,"critical":34},7,26,3,11,47,{"idea":37,"design":39,"docs":40,"performance":42},{"positive":38,"critical":38},2,{"positive":33,"critical":18},{"positive":41,"critical":41},1,{"positive":43,"critical":43},0,[33,43,43,43,33,33,45,41,45,33,43,33,33,43,43,33,41,41,43,43,43,41,41,45,41,33,33,33,33,41,43,33,33,33,45,46,41,45,33,41],5,4,"Yes, another reactive UI framework for JavaScript. Bear with me, please... :-)\n\nI 'invented' the concept for this back in 2011, and it was used (as a proprietary lib) in various startups. Even though many similar open source libs have been released since, and boy have I tried a lot of them, none have been able to capture the elegance and DX of what we had back then. I might be biased though. :-)\n\nSo I started creating a cleaned-up, modern, TypeScript, open source implementation for the concept about five years ago. After many iterations, working on the project on and off, I'm finally happy wit",{"problem":49,"audience":55,"pricing":55,"motivation":56,"time_to_build":55,"stack":60,"openness":71,"stage":72,"team_size":73},{"value":50,"source":51,"evidence":52},"Writing reactive UIs that rerun only the DOM parts whose underlying data changed","maker",[53],{"id":54},"post",null,{"value":57,"source":51,"evidence":58},"Maker wants a modern, cleaned-up version of a proprietary library used in past startups",[59],{"id":54},[61,65],{"value":62,"source":51,"evidence":63},"TypeScript",[64],{"id":54},{"value":66,"source":51,"evidence":67},"JavaScript Proxy",[68],{"id":69,"by":11,"text":70},"43937303","Correct! As far as I know, Vue has always had its own HTML-based template engine, with special HTML attributes for conditions, loops, etc. Different trade-off. Since Vue 3, it…","open_source","launched","unknown",{"praise":75,"objections":84,"requests":106,"questions":124,"alternatives":141},[76],{"value":77,"source":78,"evidence":79},"Congratulations on 1.0 and nice small library","commenter",[80],{"id":81,"by":82,"text":83},"43937339","xiphias2","Congrats for reaching 1.0! Nice little library, but as it's signals based, it would be nice to make it compatible with the signals proposal…",[85,89,96],{"value":86,"source":78,"evidence":87},"Doesn't differentiate enough from other signals-based frameworks",[88],{"id":81,"by":82,"text":83},{"value":90,"source":78,"evidence":91},"Writing UI in JavaScript instead of HTML is less natural",[92],{"id":93,"by":94,"text":95},"43937270","jmull","> Express UIs naturally in JavaScript\u002FTypeScript I would disagree there. Conceptually, you're writing reactive HTML and CSS. I think it would be a lot more natural to express…",{"value":97,"source":78,"evidence":98},"Similar to Vue 0.x and Solid concepts",[99,103],{"id":100,"by":101,"text":102},"43936929","Etheryte","Conceptually, this sounds incredibly similar to what Vue was in the 0.x stage. Are you familiar with Vue perhaps? What would you say are the core conceptual differences? At a…",{"id":104,"by":11,"text":105},"43940144","Thanks! Yes, there's some similarity to Solid.js, but also two big differences: 1. A Solid.js signal contains a single atomic value that can be subscribed to, while an Aberdeen…",[107,111,117],{"value":108,"source":78,"evidence":109},"Compatibility with the TC39 signals proposal",[110],{"id":81,"by":82,"text":83},{"value":112,"source":78,"evidence":113},"Example of reusable widgets\u002Fcomponents",[114],{"id":115,"by":11,"text":116},"43937260","> I think it would be useful to have an example of how to make “widgets”, larger components with more complex behaviors that could be reused across many applications Yeah, that's…",{"value":118,"source":78,"evidence":119},"Why not JSX support",[120],{"id":121,"by":122,"text":123},"43936868","catlifeonmars","Why not JSX? There’s no real cost to making the API JSX compatible, from what I can tell, and tsc has builtin support for transpiling JSX. It would also make porting code a lot…",[125,134],{"value":126,"source":78,"evidence":127},"How does it compare to Vue, Mithril, and Solid",[128,129,133],{"id":100,"by":101,"text":102},{"id":130,"by":131,"text":132},"43937492","JSR_FDED","Very interesting. How would you say it compares to mithril.js?",{"id":104,"by":11,"text":105},{"value":135,"source":78,"evidence":136},"Can components hold local state passed to children",[137],{"id":138,"by":139,"text":140},"43941420","sesm","Can a component have some local state that is passed down to children? Or any data has to be in a proxy object that is outside of any components?",[142,146,150,154,158],{"value":143,"source":78,"evidence":144},"Vue",[145],{"id":100,"by":101,"text":102},{"value":147,"source":78,"evidence":148},"Svelte",[149],{"id":81,"by":82,"text":83},{"value":151,"source":78,"evidence":152},"Mithril",[153],{"id":130,"by":131,"text":132},{"value":155,"source":78,"evidence":156},"Solid.js",[157],{"id":104,"by":11,"text":105},{"value":159,"source":78,"evidence":160},"React",[161],{"id":162,"by":11,"text":163},"43938253","The problem is that JSX transpilers will put child nodes in an array, instead of in an anonymous function, meaning there is no easy way (without transpiler magic) to rerender…",{"comments":165,"answered":166,"key":167},33,16,[168,171,174],{"id":169,"text":170},"43938046","> Nice little library, but as it's signals based, it would be nice to make it compatible with the signals proposal (https:\u002F\u002Fgithub.com\u002Ftc39\u002Fproposal-signals) Based on the current…",{"id":172,"text":173},"43943847","That's indeed how Aberdeen works, except that the nested proxy objects are created on-demand, when first accessed. 'Nested signals' it is then. :-)",{"id":69,"text":70},{"commenters":176,"max_depth":18,"maker_replies":165,"first_comment_mins":177,"lifespan_hours":178},66,45,170,[180,182,184,188,190,194,198,200,203,205,208,212,214,216,218,220,221,225,226,230,234,237,240,242,244,247,250,254,256,257,259,262,265,266,268,270,273,276,279,283,285,287,290,293,295,298,300,303,306,309,311,314,318,320,325,328,330,333,336,338,341,344,346,349,352,353,355,357,359,362,364,368,370,372,375,379,381,385,388,390,394,396,400,402,406,408,412,414,417,419,423,426,431,433,435,439,441,445,449,451,453,455,459,461,463,467,471,472,475,477,481,483,488,492,493,496,498,501,505,508,512],[81,43,33,181,82,43],"project\u002Fmixed\u002Fidea",[169,43,43,183,11,41],"maker\u002Fneutral\u002Fidea",[185,43,33,186,187,43],"43943229","project\u002Fneutral\u002Fidea","MrJohz",[172,43,43,189,11,41],"project\u002Fneutral\u002Fexecution",[191,43,43,192,193,43],"43938808","other\u002Fneutral\u002Fnone","austin-cheney",[195,43,43,196,197,43],"43941839","commenter\u002Fneutral\u002Fnone","llbbdd",[199,43,43,196,193,43],"43942762",[201,43,43,196,202,43],"43953853","lylejantzi3rd",[204,43,43,192,193,43],"43957143",[206,43,43,192,207,43],"43938916","HWR_14",[209,43,43,210,211,43],"43943191","commenter\u002Fneutral\u002Fidea","boredtofears",[213,43,43,210,187,43],"43943261",[215,43,43,210,211,43],"43943474",[217,43,33,186,187,43],"43943778",[219,43,43,196,211,43],"43946723",[100,41,33,186,101,43],[222,41,33,223,224,43],"43937206","project\u002Fneutral\u002Fdesign","lucasacosta_",[69,41,43,223,11,41],[227,41,45,228,229,43],"43940853","project\u002Fpositive\u002Fdesign","dsego",[231,41,33,232,233,43],"43941422","project\u002Fmixed\u002Fdesign","pdfernhout",[235,41,43,236,11,41],"43941574","commenter\u002Fneutral\u002Fdesign",[238,41,41,239,233,43],"43941672","project\u002Fcritical\u002Fdesign",[241,41,43,223,11,41],"43941623",[243,41,33,223,233,43],"43941761",[245,41,43,246,11,41],"43943879","project\u002Fneutral\u002Fperformance",[248,41,33,249,224,43],"43963402","project\u002Fneutral\u002Fnone",[251,38,45,252,253,43],"43937164","project\u002Fpositive\u002Fdocs","tacitusarc",[115,38,43,255,11,41],"project\u002Fneutral\u002Fdocs",[121,33,33,223,122,43],[258,33,43,223,11,41],"43937210",[260,33,43,236,261,43],"43937239","CooCooCaCha",[263,33,43,236,264,43],"43937991","WorldMaker",[162,33,43,223,11,41],[267,33,33,223,264,43],"43938452",[269,33,43,236,187,43],"43943527",[271,33,43,236,272,43],"43938692","ibash",[274,33,43,236,275,43],"43940319","prothy",[277,33,33,223,278,43],"43938712","gavinray",[280,33,43,281,282,43],"43939757","other\u002Fneutral\u002Fdesign","i_dont_know_any",[284,33,43,281,282,43],"43939835",[286,33,43,228,11,41],"43940432",[288,33,43,281,289,43],"43941298","recursive",[291,33,43,236,292,43],"43937389","jitl",[294,33,43,236,264,43],"43937895",[296,33,43,236,297,43],"43938943","zelphirkalt",[299,33,43,236,264,43],"43939066",[301,33,43,236,302,43],"43939486","robertlagrant",[304,33,33,223,305,43],"43937465","90s_dev",[307,46,41,239,308,43],"43936697","phartenfeller",[310,46,43,223,11,41],"43936919",[312,46,43,192,313,43],"44005786","netdevphoenix",[315,45,41,316,317,43],"43936703","project\u002Fcritical\u002Fdocs","and0",[319,45,43,255,11,41],"43940522",[321,322,33,323,324,43],"43937703",6,"maker\u002Fneutral\u002Fnone","GordonS",[326,322,43,192,327,43],"43938462","test1235",[329,322,43,192,324,43],"43938602",[331,322,43,192,332,43],"43939906","alastairr",[334,322,43,192,335,43],"43939192","amiga386",[337,322,43,192,11,41],"43938868",[339,322,43,192,340,43],"43938998","johnofthesea",[342,322,43,192,343,43],"43939328","J_McQuade",[345,322,43,192,335,43],"43939160",[347,322,43,192,348,43],"43940540","ilikejam",[350,322,43,192,351,43],"43940704","vlod",[93,31,41,239,94,43],[354,31,43,223,11,41],"43937316",[356,31,41,239,94,43],"43938006",[358,31,43,223,11,41],"43938799",[360,18,33,223,361,43],"43936946","charles_f",[363,18,43,223,11,41],"43938441",[365,366,45,367,305,43],"43936965",9,"project\u002Fpositive\u002Fidea",[369,366,43,249,11,41],"43937348",[371,366,41,239,305,43],"43946315",[373,366,43,196,374,43],"43937524","throw10920",[376,366,41,377,378,43],"43942344","project\u002Fcritical\u002Fidea","soulofmischief",[380,366,43,192,305,43],"43945261",[382,383,33,186,384,43],"43936870",10,"satvikpendem",[386,34,33,186,387,43],"43936532","qudat",[389,34,43,323,11,41],"43936995",[391,392,33,246,393,43],"43936991",12,"omneity",[395,392,43,246,11,41],"43937156",[397,398,33,186,399,43],"43940331",13,"zendist",[401,398,43,323,11,41],"43940365",[403,404,33,249,405,43],"43936489",14,"pc86",[407,404,43,249,11,41],"43939416",[409,410,33,223,411,43],"43942844",15,"vijaybritto",[413,410,43,223,11,41],"43943904",[415,166,41,239,416,43],"43938457","bufferoverflow",[418,166,43,323,11,41],"43939333",[420,421,33,223,422,43],"43939773",17,"zareith",[424,421,43,425,11,41],"43940464","maker\u002Fneutral\u002Fdesign",[427,428,43,429,430,43],"43939941",18,"other\u002Fneutral\u002Fperformance","jdonaldson",[432,428,43,246,11,41],"43940156",[434,428,43,429,187,43],"43943599",[436,437,33,186,438,43],"43937022",19,"tgv",[440,437,43,323,11,41],"43940508",[442,443,33,186,444,43],"43937753",20,"krunchykat",[446,447,33,186,448,43],"43950731",21,"darkwinx",[138,450,33,186,139,43],22,[452,450,43,223,11,41],"43941512",[454,450,45,228,139,43],"43941559",[456,457,41,239,458,43],"43937183",23,"brap",[460,457,43,323,11,41],"43939700",[462,457,43,255,11,41],"43939842",[464,465,45,367,466,43],"43943036",24,"lerp-io",[468,469,45,228,470,43],"43947751",25,"para_parolu",[130,32,33,186,131,43],[473,32,33,186,474,43],"43938343","lhorie",[476,32,43,323,11,41],"43939695",[478,479,41,377,480,43],"43942734",27,"almosthere",[482,479,43,323,11,41],"43943907",[484,485,45,486,487,43],"43942693",28,"project\u002Fpositive\u002Fnone","ederross",[489,490,33,232,491,43],"43938665",29,"arnorhs",[104,490,43,183,11,41],[494,490,43,196,495,43],"43943337","gg2222",[497,490,33,186,187,43],"43943426",[499,490,43,500,11,41],"43944503","maker\u002Fneutral\u002Fperformance",[502,503,43,192,504,43],"43936662",30,"nsonha",[506,503,43,196,507,43],"43937014","Nekorosu",[509,510,43,192,511,43],"43937717",31,"gitroom",[513,514,41,239,515,43],"43942290",32,"wackget",[],[518,523,528,533,538,542],{"id":519,"name":520,"points":521,"category":522},"43935394","Hyvector",331,"dev_tools",{"id":524,"name":525,"points":526,"category":527},"43928118","qtap",259,"infrastructure",{"id":529,"name":530,"points":531,"category":532},"43975423","HelixDB",237,"data",{"id":534,"name":535,"points":536,"category":537},"43988381","Muscle-Mem",226,"ai",{"id":539,"name":540,"points":541,"category":537},"43964201","Airweave",176,{"id":543,"name":544,"points":541,"category":537},"43988533","Semantic Calculator",false,"v2",{"id":548,"name":5,"line":6,"ai":545,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":549,"top":18,"kw":550,"maker":11,"domain":10,"tier":19,"attempts":43,"strip":551,"url":9,"mix":552,"praise":77,"objection":86,"sub":21},43936097,-0.07,[24,25,26,27],"3000335153033003110001151333310333541531",[31,32,33,34],1794036674545]