[{"data":1,"prerenderedAt":410},["ShallowReactive",2],{"project-29978659":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":45,"post_text":47,"what":48,"said":87,"maker_in_thread":163,"shape":174,"grid":178,"attempts":371,"same_week":372,"maker_shows":18,"maker_hidden":402,"reader_version":403,"card":404},"29978659","Matrix-CRDT","real-time collaborative apps using Matrix as backend","title","Show HN: Matrix-CRDT – real-time collaborative apps using Matrix as backend","https:\u002F\u002Fgithub.com\u002FYousefED\u002FMatrix-CRDT","github.com","YousefED",1642512318,2022,320,72,122,2570,5,"legend","languages","crdt sync library","library",[24,25,26,27,28],"crdt","matrix protocol","yjs","real-time collaboration","local-first","loved",0.471,{"positive":32,"neutral":33,"mixed":34,"critical":35},16,14,0,2,32,{"idea":38,"docs":41,"performance":42,"execution":43,"design":44},{"positive":39,"critical":40},12,1,{"positive":40,"critical":34},{"positive":40,"critical":34},{"positive":40,"critical":34},{"positive":34,"critical":40},[18,46,18,34,34,34,18,46,18,18,18,34,34,18,46,46,34,40,46,46,34,18,18,34,34,34,34,18,18,46,34,46,46,18,34,34,34,18,46,18],3,"Hi HN! Matrix-CRDT connects the worlds of Yjs [1] (a proven, high performance CRDT) with that of Matrix.org [2].\n\nIt started as an experiment, asking myself; can we store \"state updates of a datastore\" in Matrix instead of chat messages? Now, I'm convinced it's actually a really powerful combination to develop real-time, collaborative software.\n\nI'm using it for a new project and so far didn't have to write a backend yet. Matrix takes care of a lot of stuff: Authentication, E2EE, federation, hosting, etc. - so I can focus on the client.\n\nI love the ideas of Local First [3] software. Personally",{"problem":49,"audience":55,"pricing":64,"motivation":65,"time_to_build":64,"stack":69,"openness":84,"stage":85,"team_size":86},{"value":50,"source":51,"evidence":52},"Syncing shared state for real-time collaborative apps without writing a backend","maker",[53],{"id":54},"post",{"value":56,"source":57,"evidence":58},"Developers building real-time collaborative, local-first apps","inferred",[59,60],{"id":54},{"id":61,"by":62,"text":63},"29979500","samwillis","Awesome project! I have said it before and I will say it again, I think this year is going to be the year of Yjs. The ecosystem around it is brilliant and I believe it will…",null,{"value":66,"source":51,"evidence":67},"Experiment asking whether datastore state updates could live in Matrix instead of chat messages",[68],{"id":54},[70,74,78],{"value":71,"source":51,"evidence":72},"Yjs",[73],{"id":54},{"value":75,"source":51,"evidence":76},"Matrix",[77],{"id":54},{"value":79,"source":51,"evidence":80},"TipTap",[81],{"id":82,"by":11,"text":83},"29980012","Thanks! And definitely agree, can 100% recommend TipTap!","open_source","beta","unknown",{"praise":88,"objections":109,"requests":124,"questions":138,"alternatives":147},[89,98],{"value":90,"source":91,"evidence":92},"Yjs ecosystem is excellent and CRDTs can decentralize software","commenter",[93,94],{"id":61,"by":62,"text":63},{"id":95,"by":96,"text":97},"29986504","klabb3","> Personally, I'm convinced the technologies in this ecosystem (CRDTs, etc) are really powerful and can do more to decentralize software than many web3 technologies that…",{"value":99,"source":91,"evidence":100},"Matrix is a good fit as a graph sync protocol for federated apps",[101,105],{"id":102,"by":103,"text":104},"29981115","robto","See, this is what I keep going on about to my friends - Matrix is actually a graph syncing protocol, not an instant messaging protocol, and is a great way to build federated…",{"id":106,"by":107,"text":108},"29979963","ath92","Amazing work. I think there's a whole host of apps that just store some small amount of data for each user that could work entirely on something like this. Some nice things: -…",[110,117],{"value":111,"source":91,"evidence":112},"Deleted or redacted data remains in the event chain forever",[113],{"id":114,"by":115,"text":116},"29980545","jeroenhd","This is an interesting use of the Matrix protocol. I like the many creative ways Matrix is being used outside the chat space, where its predominant use lies. However, I have…",{"value":118,"source":91,"evidence":119},"Would create another CRDT incompatible with existing ecosystem",[120],{"id":121,"by":122,"text":123},"29982457","kevinjahns","What I dislike about these attempts is that you will just end up with yet another CRDT implementation that is incompatible with the existing ecosystem (editors, drawing apps,…",[125,132],{"value":126,"source":91,"evidence":127},"Python equivalent of the library",[128],{"id":129,"by":130,"text":131},"29979898","toyg","I wish this was available for Python. Does anybody know what the Py-equivalent would be (if there is one)?",{"value":133,"source":91,"evidence":134},"Offline support when built directly on Matrix events",[135],{"id":136,"by":11,"text":137},"29989082","The downside of building this directly on Matrix events is that I don’t think it would work offline, right? (Until p2p matrix gets more common, that is). My biased suggestion…",[139,143],{"value":140,"source":91,"evidence":141},"How E2EE key exchange behaves when a server goes down or account moves",[142],{"id":114,"by":115,"text":116},{"value":144,"source":91,"evidence":145},"Performance impact on server with large documents",[146],{"id":114,"by":115,"text":116},[148,152,159],{"value":149,"source":51,"evidence":150},"SyncedStore",[151],{"id":54},{"value":153,"source":91,"evidence":154},"Matrix state resolution",[155],{"id":156,"by":157,"text":158},"29979752","infogulch","I recall that matrix itself has some CRDT-like data structure to transmit messages. If that's accurate, could you map some of the functionality of yjs directly into native matrix…",{"value":160,"source":91,"evidence":161},"PouchDB",[162],{"id":61,"by":62,"text":63},{"comments":164,"answered":165,"key":166},11,7,[167,168,171],{"id":136,"text":137},{"id":169,"text":170},"29989035","Thanks! Personally, I’m looking forward to stronger \u002F cleaner (TypeScript) sdks with for example easier auth and e2ee key management. I heard this is on their roadmap for this…",{"id":172,"text":173},"29981554","Thanks for the questions! - If you'd enable E2EE for the Matrix client that you pass to Matrix-CRDT, key management is covered in the same way that Matrix does it normally. If…",{"commenters":175,"max_depth":165,"maker_replies":164,"first_comment_mins":176,"lifespan_hours":177},43,57,44,[179,181,185,189,192,194,198,200,203,206,208,211,212,213,215,218,220,224,227,228,229,232,234,237,239,242,245,249,251,253,255,257,259,261,264,267,269,271,274,277,280,284,287,290,292,294,297,300,303,305,310,313,316,319,322,325,329,331,333,335,337,341,343,345,348,350,353,356,361,363,365,367],[102,34,18,180,103,34],"project\u002Fpositive\u002Fidea",[182,34,34,183,184,34],"29984061","commenter\u002Fneutral\u002Fnone","mxuribe",[186,34,46,187,188,34],"29984614","project\u002Fneutral\u002Fidea","all2",[190,34,18,191,103,34],"29985374","project\u002Fpositive\u002Fdocs",[136,34,34,193,11,40],"maker\u002Fneutral\u002Fexecution",[195,34,34,196,197,34],"29987817","other\u002Fneutral\u002Fnone","eddieroger",[199,34,34,183,188,34],"29996922",[201,34,34,196,202,34],"29990237","chrismorgan",[204,34,34,196,205,34],"29997514","Arathorn",[207,34,34,196,202,34],"30002192",[209,34,34,196,210,34],"29991432","mab122",[95,40,18,180,96,34],[169,40,34,196,11,40],[114,35,46,214,115,34],"project\u002Fneutral\u002Fnone",[216,35,18,217,122,34],"29980963","project\u002Fpositive\u002Fperformance",[172,35,34,219,11,40],"maker\u002Fneutral\u002Fnone",[221,35,18,222,223,34],"29985287","maker\u002Fpositive\u002Fnone","alexisread",[225,35,46,226,205,34],"29988458","project\u002Fneutral\u002Fexecution",[61,46,18,180,62,34],[82,46,34,222,11,40],[230,46,34,196,231,34],"29981684","hanspagel",[233,46,34,196,62,34],"29981980",[235,46,34,196,236,34],"29986910","thruflo",[106,238,18,180,107,34],4,[240,238,34,241,11,40],"29980167","project\u002Fpositive\u002Fprivacy",[243,18,18,180,244,34],"29980574","JanisIO",[246,18,40,247,248,34],"29985851","project\u002Fcritical\u002Fdesign","sunbum",[156,250,46,187,157,34],6,[252,250,34,214,11,40],"29979911",[254,250,34,196,205,34],"29981441",[121,250,40,256,122,34],"project\u002Fcritical\u002Fidea",[258,250,46,187,157,34],"29983512",[260,250,46,187,122,34],"29984708",[262,250,34,196,263,34],"29986098","josephg",[265,250,34,196,266,34],"29988234","ItsMonkk",[268,250,46,187,205,34],"29988401",[270,250,34,196,205,34],"29988414",[272,250,18,180,273,34],"30006844","southerntofu",[275,250,46,226,276,34],"29984737","pkulak",[278,165,18,180,279,34],"29980791","octopoc",[281,282,18,180,283,34],"29980123",8,"kukabynd",[285,282,34,196,286,34],"29980673","noman-land",[288,282,34,196,289,34],"29981809","tinco",[291,282,34,196,286,34],"29982240",[293,282,34,196,289,34],"29983189",[295,282,34,196,296,34],"29983494","opan",[298,282,34,196,299,34],"29983410","heartbeats",[301,282,34,196,302,34],"29987048","DarylZero",[304,282,34,196,299,34],"29993067",[306,307,18,308,309,34],"29980052",9,"project\u002Fpositive\u002Fexecution","maelito",[311,312,18,180,286,34],"29980450",10,[314,164,46,187,315,34],"29980993","Cthulhu_",[317,164,46,187,318,34],"29982120","er4hn",[320,39,34,196,321,34],"29981276","panick21_",[323,39,34,196,324,34],"29981736","dunham",[326,327,46,214,328,34],"29983371",13,"outside1234",[330,327,34,196,11,40],"29983668",[332,327,34,183,328,34],"29984278",[334,33,46,187,328,34],"29983556",[336,33,34,187,11,40],"29983710",[338,339,18,180,340,34],"29984745",15,"lgas",[342,32,34,196,328,34],"29984436",[344,32,34,219,11,40],"29984662",[346,32,34,183,347,34],"29985329","DenseComet",[349,32,34,219,11,40],"29985585",[351,32,34,196,352,34],"29986663","trenchgun",[354,32,18,180,355,34],"29986242","brunoqc",[357,358,46,359,360,34],"29982498",17,"project\u002Fneutral\u002Fdesign","pixel_tracing",[362,358,34,359,11,40],"29982613",[129,364,46,214,130,34],18,[366,364,34,196,62,34],"29979994",[368,369,18,180,370,34],"29984495",19,"hammyhavoc",[],[373,378,383,388,393,398],{"id":374,"name":375,"points":376,"category":377},"29921419","Looptap",1241,"games",{"id":379,"name":380,"points":381,"category":382},"29923736","Login with HN",436,"security_privacy",{"id":384,"name":385,"points":386,"category":387},"29924666","Animatize",379,"creative",{"id":389,"name":390,"points":391,"category":392},"29938520","RootMy.TV",361,"hardware",{"id":394,"name":395,"points":396,"category":397},"29959129","My 486 Server",255,"infrastructure",{"id":399,"name":400,"points":401,"category":387},"29921137","Brutalita",243,false,"v2",{"id":405,"name":5,"line":6,"ai":402,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":406,"top":18,"kw":407,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":408,"url":9,"mix":409,"praise":90,"objection":111,"sub":21},29978659,0.47,[24,25,26,27,28],"5350005355500533013305500005530335000535",[32,33,34,35],1794036615860]