[{"data":1,"prerenderedAt":336},["ShallowReactive",2],{"project-35881963":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":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":44,"post_text":47,"what":48,"said":81,"maker_in_thread":177,"shape":186,"grid":190,"attempts":297,"same_week":298,"maker_shows":32,"maker_hidden":328,"reader_version":329,"card":330},"35881963","Fir","Build progressively enhanced reactive HTML apps using Go and Alpine.js","title","Show HN: Build progressively enhanced reactive HTML apps using Go and Alpine.js","https:\u002F\u002Flivefir.fly.dev\u002F","livefir.fly.dev","realrocker",1683677032,2023,127,43,494,3109,16,"notable","dev_tools","web app framework toolkit","library",[24,25,26,27,28],"go","alpine.js","reactive html","html templates","progressive enhancement","roasted",-0.267,{"positive":32,"neutral":33,"mixed":34,"critical":35},2,8,0,10,20,{"idea":38,"docs":39,"design":40,"performance":41,"execution":43},{"positive":32,"critical":32},{"positive":34,"critical":34},{"positive":34,"critical":32},{"positive":34,"critical":42},3,{"positive":34,"critical":42},[42,34,45,34,42,34,34,34,34,34,34,45,34,42,45,42,42,34,34,34,34,34,34,34,34,42,45,34,34,45,34,45,42,46,45,45,45,34,34,42],1,5,"Fir leverages Golang’s standard library html\u002Ftemplate package and a bit of alpinejs to allow building reactive UIs. You start with plain old html and use alpinejs to enhance it to bring no-page-reload interactivity to web apps.\n\nThe Fir toolkit is designed for Go developers with moderate html\u002Fcss & js skills who want to progressively build reactive web apps without mastering complex web frameworks. It includes a Go library and an Alpine.js plugin.\n\nHow it works ?\n\nOn receiving user-interactions the fir server re-renders html templates and sends it over the wire where the fir client library sel",{"problem":49,"audience":55,"pricing":59,"motivation":60,"time_to_build":59,"stack":66,"openness":79,"stage":80,"team_size":79},{"value":50,"source":51,"evidence":52},"Building reactive web UIs without mastering complex JavaScript frameworks","maker",[53],{"id":54},"post",{"value":56,"source":51,"evidence":57},"Go developers with moderate HTML\u002FCSS and JS skills",[58],{"id":54},null,{"value":61,"source":51,"evidence":62},"Longer-term project evolving from the earlier gomodest experiment",[63],{"id":64,"by":11,"text":65},"35882360","It is intended as a longer-term project originating from the previous experiment: https:\u002F\u002Fgithub.com\u002Fadnaan\u002Fgomodest. You are right, a better selection criteria for the target…",[67,71,75],{"value":68,"source":51,"evidence":69},"Go",[70],{"id":54},{"value":72,"source":51,"evidence":73},"Alpine.js",[74],{"id":54},{"value":76,"source":51,"evidence":77},"html\u002Ftemplate",[78],{"id":54},"unknown","beta",{"praise":82,"objections":95,"requests":129,"questions":143,"alternatives":157},[83],{"value":84,"source":85,"evidence":86},"Good approach for Go developers who want less JS","commenter",[87,91],{"id":88,"by":89,"text":90},"35882425","husarcik","This is exactly what I need! I use Laravel mostly (with htmx and alpine) but wanted to build some stuff in Go. Thank you for your work!",{"id":92,"by":93,"text":94},"35882437","earthboundkid","Yes! This is the project I’ve been waiting for.",[96,103,118],{"value":97,"source":85,"evidence":98},"Adds unnecessary complexity compared with HTMX or Alpine alone",[99],{"id":100,"by":101,"text":102},"35882716","Art9681","I think this is adding unnecessary complexity. One of the reasons developers gravitate towards a framework like Alpine or HTMX is to write less JS and go back to enjoying HTML.…",{"value":104,"source":85,"evidence":105},"Site is slow and fails under load",[106,110,114],{"id":107,"by":108,"text":109},"35882280","hyeomans","Hope this is constructive feedback: I’m located in México and it takes around 20 seconds to load.",{"id":111,"by":112,"text":113},"35882298","mtlynch","I think it's just getting the HN hug of death. I'm in the US on fiber and seeing timeouts and 30+ second load times.",{"id":115,"by":116,"text":117},"35882315","ryanolsonx","The hug of death doesn't bode well for the approach.",{"value":119,"source":85,"evidence":120},"Demo counter behaves confusingly with shared state",[121,125],{"id":122,"by":123,"text":124},"35882473","whiddershins","The second example counter is jumping around instead of incrementing\u002Fdecrementing by 1. Is state being shared between users or somesuch? Or is it because I first clicked the full…",{"id":126,"by":127,"text":128},"35884254","tobr","It’s a rather confusing demo. If that’s the intended behavior, I think you need to think of a less surprising use of it that can be understood as a demo, and perhaps even comes…",[130,137],{"value":131,"source":85,"evidence":132},"Comparison with HTMX in docs",[133],{"id":134,"by":135,"text":136},"35882319","fshr","Interesting stuff; is this intended to be an experiment or a longer-term project? I think a straight-forward comparison of Fir and things like HTMX (htmx.org) would be a good…",{"value":138,"source":51,"evidence":139},"Better guides and documentation",[140],{"id":141,"by":11,"text":142},"35882323","This example has most of the scenarios you have called out: https:\u002F\u002Fgithub.com\u002Flivefir\u002Ffir\u002Ftree\u002Fmain\u002Fexamples\u002Ffira. Fir aims to limit itself to rendering templates on the server…",[144,151],{"value":145,"source":85,"evidence":146},"How complex cases like nested components and form validation are handled",[147],{"id":148,"by":149,"text":150},"35882288","ajd1988","The idea of using Go and Alpine.js together for building reactive web apps seems promising. As you mentioned, Fir is targeting devs with moderate HTML\u002FCSS & JS skills. How does…",{"value":152,"source":85,"evidence":153},"What problem it solves versus plain net\u002Fhttp or Gin\u002FFiber with Alpine",[154],{"id":155,"by":101,"text":156},"35882646","I'm building a platform using GoFiber + AlpineJS and it's wonderful. I have to go through the Fir project because I'm trying to figure out what problem it solves. Wouldn't it be…",[158,166,173],{"value":159,"source":85,"evidence":160},"HTMX",[161,165],{"id":162,"by":163,"text":164},"35882715","quickthrower2","I wonder if it slow because of the locking, because other than that it shouldn't use much resources to run this. Anyway I am lazy, so I would probably just use HTMX boosting: ```…",{"id":134,"by":135,"text":136},{"value":167,"source":85,"evidence":168},"templ",[169],{"id":170,"by":171,"text":172},"35886318","lormayna","Have you tried this: https:\u002F\u002Ftempl.guide\u002F ? This is a very simple and clean Go templating library.",{"value":174,"source":85,"evidence":175},"pushup",[176],{"id":100,"by":101,"text":102},{"comments":178,"answered":179,"key":180},9,4,[181,182,185],{"id":141,"text":142},{"id":183,"text":184},"35882777","Hey. I have checked out pushup before. Its great. I guess I am taking a niche approach which not many would find useful. To clarify: What is adding more complexity? alpinejs ?",{"id":64,"text":65},{"commenters":187,"max_depth":46,"maker_replies":178,"first_comment_mins":188,"lifespan_hours":189},28,44,70,[191,193,195,197,199,201,202,206,207,210,214,216,218,221,225,228,229,231,233,236,239,241,244,247,249,252,254,258,262,263,265,268,272,274,277,280,283,286,287,288,290,292,294],[148,34,42,192,149,34],"project\u002Fneutral\u002Fidea",[141,34,34,194,11,45],"maker\u002Fneutral\u002Fdocs",[100,34,45,196,101,34],"project\u002Fcritical\u002Fidea",[183,34,34,198,11,45],"maker\u002Fneutral\u002Fidea",[134,45,42,200,135,34],"project\u002Fneutral\u002Fdocs",[64,45,34,198,11,45],[203,32,34,204,205,34],"35885903","other\u002Fneutral\u002Fnone","kindofabigdeal",[170,32,34,204,171,34],[208,32,34,204,209,34],"35887184","austinpena",[211,32,34,212,213,34],"35887379","other\u002Fneutral\u002Fdesign","jakelazaroff",[215,32,34,204,163,34],"35896608",[122,42,45,217,123,34],"project\u002Fcritical\u002Fdesign",[219,42,34,220,11,45],"35882487","project\u002Fneutral\u002Fdesign",[222,42,42,223,224,34],"35884046","project\u002Fneutral\u002Fnone","quaintdev",[226,42,42,223,227,34],"35884247","Noishe",[126,42,45,217,127,34],[230,42,42,220,123,34],"35885837",[162,179,42,232,163,34],"project\u002Fneutral\u002Fperformance",[234,179,34,235,11,45],"35882732","maker\u002Fneutral\u002Fperformance",[237,179,34,204,238,34],"35883566","mcspiff",[240,179,34,204,163,34],"35884448",[242,46,34,204,243,34],"35883197","examplary_cable",[245,46,34,204,246,34],"35885733","TigerTeamX",[248,46,34,204,243,34],"35896571",[250,46,34,204,251,34],"35922451","RamblingCTO",[253,46,34,204,243,34],"35923089",[255,256,42,223,257,34],"35886875",6,"msolberg",[259,260,34,204,261,34],"35884686",7,"cyneox",[155,33,45,196,101,34],[264,33,34,192,11,45],"35882723",[266,178,34,204,267,34],"35882953","drusepth",[269,35,45,270,271,34],"35884091","project\u002Fcritical\u002Fexecution","cloudking",[273,35,34,220,11,45],"35884406",[275,35,45,270,276,34],"35884936","janeway",[278,35,42,220,279,34],"35885080","el_oni",[88,281,46,282,89,34],11,"project\u002Fpositive\u002Fidea",[107,284,45,285,108,34],12,"project\u002Fcritical\u002Fperformance",[111,284,45,285,112,34],[115,284,45,285,116,34],[289,284,34,235,11,45],"35882368",[291,284,34,235,11,45],"35882305",[92,293,46,282,93,34],13,[295,296,45,270,251,34],"35884481",14,[],[299,304,309,314,319,324],{"id":300,"name":301,"points":302,"category":303},"35826540","Grasp",266,"web_saas",{"id":305,"name":306,"points":307,"category":308},"35861209","SineRider",181,"games",{"id":310,"name":311,"points":312,"category":313},"35831177","The HN Recap",177,"productivity",{"id":315,"name":316,"points":317,"category":318},"35821748","GPT-JSON",174,"ai",{"id":320,"name":321,"points":322,"category":323},"35864661","Cptn.io",139,"infrastructure",{"id":325,"name":326,"points":327,"category":313},"35846667","Git",124,false,"v2",{"id":331,"name":5,"line":6,"ai":328,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":332,"top":18,"kw":333,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":334,"url":9,"mix":335,"praise":84,"objection":97,"sub":21},35881963,-0.27,[24,25,26,27,28],"3010300000010313300000000310010135111003",[32,33,34,35],1794036635271]