[{"data":1,"prerenderedAt":243},["ShallowReactive",2],{"project-23921220":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":35,"aspects":36,"strip":42,"post_text":44,"what":45,"said":88,"maker_in_thread":149,"shape":158,"grid":161,"attempts":202,"same_week":207,"maker_shows":150,"maker_hidden":235,"reader_version":236,"card":237},"23921220","Biff","Self-hosted Firebase alternative for Clojure","title","Show HN: Biff – Self-hosted Firebase alternative for Clojure","https:\u002F\u002Ffindka.com\u002Fbiff\u002F","findka.com","jacobobryant",1595449730,2020,103,19,631,3028,21,"notable","dev_tools","web framework","library",[24,25,26,27,28],"clojure","firebase alternative","self-hosted","crux","realtime subscriptions","curious",0.144,{"positive":32,"neutral":33,"mixed":34,"critical":34},3,8,0,11,{"docs":37,"design":38,"execution":40,"idea":41},{"positive":34,"critical":34},{"positive":39,"critical":34},1,{"positive":34,"critical":34},{"positive":34,"critical":34},[34,32,34,43,34,32,34,43,32,34,32,34,32,34,32,32,32,34,43],5,null,{"problem":46,"audience":57,"pricing":44,"motivation":62,"time_to_build":44,"stack":66,"openness":85,"stage":86,"team_size":87},{"value":47,"source":48,"evidence":49},"Firebase has limits for Clojure backends, such as ephemeral Node backend and weak query and rule engines","maker",[50,53],{"id":51,"by":11,"text":52},"23921225","Hi, Biff author here. There's background info + comparison to Firebase in the link, but to briefly summarize: I've been doing Clojure web dev for a while but hadn't found a setup…",{"id":54,"by":55,"text":56},"23922321","stopachka","Very interesting! I think the biggest weak points of firebase are a. a weak query engine (as soon as you reach non-trivial complexity you end up having to de-normalize data) and…",{"value":58,"source":59,"evidence":60},"Clojure web developers","inferred",[61],{"id":51,"by":11,"text":52},{"value":63,"source":48,"evidence":64},"Wanted a Clojure setup like Firebase with query subscriptions, and a Rails-like framework for Clojure",[65],{"id":51,"by":11,"text":52},[67,71,75,79],{"value":68,"source":48,"evidence":69},"Clojure",[70],{"id":51,"by":11,"text":52},{"value":72,"source":48,"evidence":73},"ClojureScript",[74],{"id":51,"by":11,"text":52},{"value":76,"source":48,"evidence":77},"Crux database",[78],{"id":51,"by":11,"text":52},{"value":80,"source":48,"evidence":81},"Materialize (planned integration)",[82],{"id":83,"by":11,"text":84},"23922429","Thanks! I'm also looking forward to finishing the Materialize[1] integration I've been working on (currently blocked while I wait for them to release some features). Although…","open_source","launched","solo",{"praise":89,"objections":103,"requests":104,"questions":109,"alternatives":124},[90,99],{"value":91,"source":92,"evidence":93},"Good design and well-explained key decisions","commenter",[94,98],{"id":95,"by":96,"text":97},"23924059","raphar","I could not find this info in the docs or the faq: Is Biff suitable for a Javascript front end? is there an API for a plain JS frontend to use Biff? (I like clojure backends with…",{"id":54,"by":55,"text":56},{"value":100,"source":92,"evidence":101},"Addresses Firebase's weak query and rule engines",[102],{"id":54,"by":55,"text":56},[],[105],{"value":106,"source":92,"evidence":107},"A plain JavaScript frontend API for Biff",[108],{"id":95,"by":96,"text":97},[110,114,120],{"value":111,"source":92,"evidence":112},"Whether Biff suits a plain JS frontend",[113],{"id":95,"by":96,"text":97},{"value":115,"source":92,"evidence":116},"How the rule engine knows entity types on Crux",[117],{"id":118,"by":55,"text":119},"23922687","Cool! Two noob qs: 1. Would love to learn a bit more about how the rule engine works. From what I understand crux in essence only gives you key->blob semantics. How do you know…",{"value":121,"source":92,"evidence":122},"Why datalog subscriptions are hard",[123],{"id":118,"by":55,"text":119},[125,129,136,142],{"value":126,"source":48,"evidence":127},"Firebase",[128],{"id":51,"by":11,"text":52},{"value":130,"source":92,"evidence":131},"Prismatic",[132],{"id":133,"by":134,"text":135},"23922408","djKianoosh","Interesting... side question, Are you trying to make Findka something like the old Prismatic?",{"value":137,"source":48,"evidence":138},"Datomic",[139],{"id":140,"by":11,"text":141},"23922057","Crux was a pretty straightforward choice. Didn't really consider any non-datalog DBs. I've used Datomic quite a bit, but preferred crux since it's open source, has filesystem…",{"value":143,"source":92,"evidence":144},"Datahike",[145],{"id":146,"by":147,"text":148},"23921942","dorian-graph","Looks interesting! Was Crux an easy choice? Did you consider any other databases (non-Datalog)? Or Datahike?",{"comments":150,"answered":151,"key":152},7,4,[153,154,157],{"id":51,"text":52},{"id":155,"text":156},"23924111","Thanks! I haven't used a plain JS backend with it myself, but I think that would work well (the majority of Biff is backend code anyway). I haven't exposed a JS api, but doing so…",{"id":83,"text":84},{"commenters":150,"max_depth":159,"maker_replies":150,"first_comment_mins":34,"lifespan_hours":160},6,10,[162,164,166,168,170,171,173,175,178,181,184,186,187,189,191,193,196,198,200],[51,34,34,163,11,39],"project\u002Fpositive\u002Fidea",[95,34,32,165,96,34],"project\u002Fneutral\u002Fdocs",[155,34,34,167,11,39],"project\u002Fneutral\u002Fexecution",[54,39,43,169,55,34],"project\u002Fpositive\u002Fdesign",[83,39,34,167,11,39],[118,39,32,172,55,34],"project\u002Fneutral\u002Fdesign",[174,39,34,167,11,39],"23922760",[176,39,43,177,55,34],"23923410","maker\u002Fpositive\u002Fnone",[179,39,32,167,180,34],"23922779","refset",[182,39,34,183,55,34],"23923407","commenter\u002Fneutral\u002Fnone",[146,185,32,172,147,34],2,[140,185,34,172,11,39],[188,185,32,172,147,34],"23922543",[190,185,34,167,11,39],"23922646",[192,185,32,167,147,34],"23922768",[194,185,32,167,195,34],"23924622","ribelo",[133,32,32,197,134,34],"project\u002Fneutral\u002Fidea",[199,32,34,163,11,39],"23922452",[201,32,43,177,134,34],"23922984",[203,206],{"id":204,"t":205,"points":159,"comments":34},"23492466",1591903612,{"id":4,"t":12,"points":14,"comments":15},[208,212,217,222,226,231],{"id":209,"name":210,"points":211,"category":20},"23896856","3D Book Image CSS Generator",638,{"id":213,"name":214,"points":215,"category":216},"23920987","css-sweeper",390,"games",{"id":218,"name":219,"points":220,"category":221},"23880071","Simple Ops",280,"infrastructure",{"id":223,"name":224,"points":225,"category":20},"23865900","css-media-vars",248,{"id":227,"name":228,"points":229,"category":230},"23921478","React Guitar",242,"languages",{"id":232,"name":233,"points":234,"category":20},"23895540","uuid-readable",154,false,"v2",{"id":238,"name":5,"line":6,"ai":235,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":239,"top":18,"kw":240,"maker":11,"domain":10,"tier":19,"attempts":185,"strip":241,"url":9,"mix":242,"praise":91,"objection":-1,"sub":21},23921220,0.14,[24,25,26,27,28],"0305030530303033305",[32,33,34,34],1794036593678]