[{"data":1,"prerenderedAt":504},["ShallowReactive",2],{"project-38473743":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":46,"what":47,"said":88,"maker_in_thread":188,"shape":201,"grid":206,"attempts":465,"same_week":466,"maker_shows":39,"maker_hidden":496,"reader_version":497,"card":498},"38473743","PowerSync","Bi-directional sync between Postgres and SQLite","title","Show HN: Bi-directional sync between Postgres and SQLite","https:\u002F\u002Fpowersync.com","powersync.com","matharmin",1701353605,2023,356,105,107,3109,4,"legend","infrastructure","database sync engine","library",[24,25,26,27],"postgres sqlite sync","offline-first","bidirectional sync","local-first","curious",0.131,{"positive":31,"neutral":32,"mixed":33,"critical":34},6,33,0,2,41,{"idea":37,"execution":40,"docs":41,"design":42,"pricing":43},{"positive":38,"critical":39},3,1,{"positive":34,"critical":33},{"positive":39,"critical":33},{"positive":33,"critical":39},{"positive":33,"critical":33},[38,38,33,38,38,33,45,38,39,33,45,33,45,38,33,38,33,33,33,33,45,38,39,38,38,38,38,45,33,38,33,38,38,38,38,38,38,33,33,38],5,"Hi HN,\n\nToday we’re launching PowerSync, a Postgres\u003C>SQLite bi-directional sync engine that enables an offline-first app architecture. It currently supports Flutter, React Native and web (JavaScript) using Wasm SQLite in the browser, with more client SDKs on the way.\n\nConrad and I (Ralf) have been working on our sync engine since 2009, originally as part of a full-stack app platform. That version of the system is still used in production worldwide and we’ve learnt a lot from its use cases and scaling. About a year ago we started on spinning off PowerSync as a standalone product that is designe",{"problem":48,"audience":54,"pricing":59,"motivation":60,"time_to_build":59,"stack":64,"openness":85,"stage":86,"team_size":87},{"value":49,"source":50,"evidence":51},"Keeping Postgres and local SQLite databases in sync for offline-first apps","maker",[52],{"id":53},"post",{"value":55,"source":56,"evidence":57},"App developers building offline-first apps","inferred",[58],{"id":53},null,{"value":61,"source":50,"evidence":62},"Spin off a sync engine used for over a decade in the JourneyApps platform as a stack-agnostic product",[63],{"id":53},[65,69,73,77,81],{"value":66,"source":50,"evidence":67},"Postgres",[68],{"id":53},{"value":70,"source":50,"evidence":71},"SQLite (Wasm in browser)",[72],{"id":53},{"value":74,"source":50,"evidence":75},"Flutter",[76],{"id":53},{"value":78,"source":50,"evidence":79},"React Native",[80],{"id":53},{"value":82,"source":50,"evidence":83},"JavaScript",[84],{"id":53},"unknown","launched","company",{"praise":89,"objections":102,"requests":120,"questions":139,"alternatives":165},[90,98],{"value":91,"source":92,"evidence":93},"Docs are detailed and well thought out","commenter",[94],{"id":95,"by":96,"text":97},"38485269","sgt","Well done on the launch! I have been using PowerSync for several months already ( although our own app hasn't quite reached production yet, due to other reasons). Very happy with…",{"value":99,"source":92,"evidence":100},"Builds on a decade of sync experience",[101],{"id":95,"by":96,"text":97},[103,114],{"value":104,"source":92,"evidence":105},"Unclear how writes that conflict on the server are handled when offline",[106,110],{"id":107,"by":108,"text":109},"38481685","vlovich123","Since the company seems to be answering questions I’ll give a few that come up for me. Congrats on the launch btw. In the given design, am I understanding correctly that this…",{"id":111,"by":112,"text":113},"38481475","langarus","Great concept! What if the user is offline, makes updates to the local\u002Fembedded DB, but when it gets online there's an issue in syncing that prevents updating the postgress with…",{"value":115,"source":50,"evidence":116},"Possibly more latency than real-time systems",[117],{"id":118,"by":11,"text":119},"38486856","> How similar is this to MeteorJs minimongo collections? > Does this provide an architecture where a client subscribes to a collection and the server keeps track of which data…",[121,128],{"value":122,"source":92,"evidence":123},"Capacitor SDK timeline",[124],{"id":125,"by":126,"text":127},"38508373","davidlorean1985","I'm excited for the Capacitor SDK that's on the roadmap. Any rough ballpark estimate of when that might be available? I haven't used Capacitor but I will soon. Is it possible to…",{"value":129,"source":92,"evidence":130},"Self-hosting option and clarity on pricing",[131,135],{"id":132,"by":133,"text":134},"38481309","andyferris","I couldn’t tell whether I could integrate my SQLite app with my own Postgres database? E.g. is it free to self host, and the paid services are a convenience? Or the cloud hostage…",{"id":136,"by":137,"text":138},"38486609","mariopt","This seems really interesting and I do have some questions: How similar is this to MeteorJs minimongo collections? Does this provide an architecture where a client subscribes to…",[140,147,154],{"value":141,"source":92,"evidence":142},"How primary keys are handled across clients",[143],{"id":144,"by":145,"text":146},"38485230","ricg","How do you handle primary keys? Wouldn't auto-incrementing integers lead to duplicate keys since clients are not aware of each other? For the To Do app example, let's say two…",{"value":148,"source":92,"evidence":149},"How timestamps are mapped to SQLite",[150],{"id":151,"by":152,"text":153},"38480612","metadat","I dig it, super cool idea! What about timestamps, though? SQLite doesn't support them.. does it end up being restricted to the lowest common denominator between the two databases…",{"value":155,"source":92,"evidence":156},"How it compares to ElectricSQL",[157,161],{"id":158,"by":159,"text":160},"38484031","m9t","This looks interesting! How does this compare to ElectricSQL[1]? Next to not using CRDTs. [1] https:\u002F\u002Felectric-sql.com\u002F",{"id":162,"by":163,"text":164},"38486620","belalw","Looks a lot like a light version of ElectricSQL (https:\u002F\u002Fgithub.com\u002Felectric-sql\u002Felectric). Why should I use PowerSync instead?",[166,170,177,184],{"value":167,"source":92,"evidence":168},"ElectricSQL",[169],{"id":158,"by":159,"text":160},{"value":171,"source":92,"evidence":172},"SymmetricDS",[173],{"id":174,"by":175,"text":176},"38487397","smartmic","Let me throw SymmetricDS into the ring: https:\u002F\u002Fsymmetricds.org\u002F In my opinion it is quite underestimated giving its various cross platform and cross product sync capabilities.…",{"value":178,"source":92,"evidence":179},"MongoDB Realm \u002F Atlas Device Sync",[180],{"id":181,"by":182,"text":183},"38499352","ochiba","Thanks for the additional info. As another commenter mentioned, since you are using MongoDB, it may be worth looking into MongoDB Realm \u002F Atlas Device Sync.",{"value":185,"source":92,"evidence":186},"Meteor minimongo",[187],{"id":136,"by":137,"text":138},{"comments":189,"answered":190,"key":191},11,8,[192,195,198],{"id":193,"text":194},"38482922","> Also, for the replication piece is the SQLite bit actually important or could you actually support arbitrary backends and SQLite is just convenient? Eg could you support…",{"id":196,"text":197},"38488844","Thanks for the link, I haven't come across SymmetricDS before. The list of supported databases is impressive. It appears to be primarily aimed at server-to-server replication. It…",{"id":199,"text":200},"38484253","Thanks for chiming in! ElectricSQL is great - we see it come up a lot in discussions since on the surface it solves the same problems (syncing between Postgres and SQLite),…",{"commenters":202,"max_depth":203,"maker_replies":189,"first_comment_mins":204,"lifespan_hours":205},52,9,541,183,[207,209,211,214,215,217,218,221,224,225,229,232,233,236,239,241,243,247,249,251,252,256,259,262,265,268,271,274,276,278,281,284,288,291,292,295,298,301,304,306,308,311,314,316,318,320,322,324,326,329,331,333,335,339,340,343,346,348,353,355,356,358,360,363,365,369,371,374,377,379,381,385,387,391,393,395,397,399,402,404,406,409,411,413,415,418,420,424,426,428,431,433,437,439,441,443,447,449,452,454,456,459,463],[107,33,38,208,108,33],"project\u002Fneutral\u002Fidea",[210,33,38,208,182,33],"38481961",[212,33,38,213,108,33],"38482249","project\u002Fneutral\u002Fexecution",[193,33,33,208,11,39],[174,39,33,216,175,33],"other\u002Fneutral\u002Fnone",[196,39,33,216,11,39],[219,39,33,216,220,33],"38488847","srameshc",[222,39,33,216,223,33],"38493111","accra4rx",[158,34,38,208,159,33],[226,34,38,227,228,33],"38484142","project\u002Fneutral\u002Fnone","prawnstar",[230,34,38,208,231,33],"38484180","thruflo",[199,34,33,216,11,39],[234,34,33,216,235,33],"38509334","Fire-Dragon-DoL",[237,34,33,216,238,33],"38552776","Anticlockwise",[240,34,33,216,231,33],"38553467",[242,34,33,216,238,33],"38565559",[244,38,45,245,246,33],"38481753","project\u002Fpositive\u002Fidea","alfor",[248,38,38,227,182,33],"38482097",[250,38,38,227,246,33],"38491113",[181,38,33,216,182,33],[253,38,39,254,255,33],"38482310","project\u002Fcritical\u002Fidea","bongodongobob",[257,38,33,216,258,33],"38484264","jddj",[260,38,33,216,261,33],"38482380","maxfurman",[263,38,33,216,264,33],"38482781","kobieps",[266,38,33,216,267,33],"38483887","jinjin2",[269,38,33,216,270,33],"38488965","redwood",[272,38,38,227,273,33],"38483082","halfcat",[95,18,45,275,96,33],"project\u002Fpositive\u002Fdocs",[277,18,33,216,228,33],"38485392",[279,45,33,216,280,33],"38481219","chaostheory",[282,45,33,216,283,33],"38481624","amit9gupta",[285,45,45,286,287,33],"38485727","project\u002Fpositive\u002Fexecution","jpbtavares",[289,45,33,216,290,33],"38484574","whilenot-dev",[151,31,38,213,152,33],[293,31,33,216,294,33],"38480646","saurik",[296,31,33,216,297,33],"38480741","simonw",[299,31,33,216,300,33],"38481198","bch",[302,31,33,216,303,33],"38481667","o11c",[305,31,33,216,264,33],"38482717",[307,31,33,216,294,33],"38485852",[309,31,38,310,182,33],"38480868","project\u002Fneutral\u002Fdesign",[312,31,33,216,313,33],"38482632","zlg_codes",[315,31,33,216,11,39],"38482875",[317,31,33,216,108,33],"38483156",[319,31,33,216,313,33],"38483304",[321,31,33,216,108,33],"38484329",[323,31,33,216,11,39],"38483478",[325,31,33,216,108,33],"38484355",[327,31,33,216,328,33],"38485667","joking",[330,31,33,216,108,33],"38490022",[332,31,33,216,11,39],"38485742",[334,31,33,216,313,33],"38492586",[336,337,45,245,338,33],"38481129",7,"farmeroy",[125,190,45,286,126,33],[341,190,38,213,342,33],"38514471","rkistner",[344,203,38,208,345,33],"38480627","random_kris",[347,203,38,208,182,33],"38480913",[349,350,39,351,352,33],"38481451",10,"project\u002Fcritical\u002Fdesign","JCharante",[354,350,33,216,182,33],"38481690",[136,189,38,208,137,33],[118,189,33,357,11,39],"maker\u002Fneutral\u002Fnone",[144,359,38,310,145,33],12,[361,359,38,362,228,33],"38485413","project\u002Fneutral\u002Fdocs",[364,359,33,310,11,39],"38485440",[366,367,38,227,368,33],"38481074",13,"carstenhag",[370,367,38,208,182,33],"38481155",[372,367,33,373,352,33],"38481432","commenter\u002Fneutral\u002Fidea",[375,367,33,376,182,33],"38481721","commenter\u002Fneutral\u002Fnone",[111,378,38,213,112,33],14,[380,378,38,213,182,33],"38481669",[382,383,45,245,384,33],"38481260",15,"bullebak",[386,383,33,216,264,33],"38483008",[388,383,33,389,390,33],"38485205","other\u002Fneutral\u002Fidea","jmnicolas",[392,383,33,389,264,33],"38486238",[394,383,33,376,390,33],"38490316",[162,396,38,208,163,33],16,[398,396,38,362,182,33],"38486668",[400,396,33,216,401,33],"38487283","jadbox",[403,396,33,216,182,33],"38487472",[405,396,33,216,231,33],"38487683",[132,407,38,408,133,33],17,"project\u002Fneutral\u002Fpricing",[410,407,38,227,182,33],"38481402",[412,407,38,408,133,33],"38481544",[414,407,38,408,182,33],"38481638",[416,407,38,408,417,33],"38489965","alterhuman",[419,407,38,408,182,33],"38499397",[421,422,33,389,423,33],"38482540",18,"fractalnetworks",[425,422,33,216,264,33],"38482759",[427,422,33,216,423,33],"38482971",[429,430,38,310,246,33],"38481786",19,[432,430,33,376,182,33],"38482027",[434,435,38,208,436,33],"38485442",20,"mediumsmart",[438,435,33,208,11,39],"38485861",[440,435,38,357,436,33],"38486093",[442,435,33,213,11,39],"38486132",[444,445,33,216,446,33],"38481397",21,"johng",[448,445,33,216,182,33],"38481483",[450,445,33,216,451,33],"38481587","unixhero",[453,445,33,216,182,33],"38482835",[455,445,33,216,451,33],"38486478",[457,445,33,216,458,33],"38486122","rgrieselhuber",[460,461,38,227,462,33],"38485195",22,"dkarras",[464,461,33,227,11,39],"38485487",[],[467,472,477,482,487,492],{"id":468,"name":469,"points":470,"category":471},"38531759","Beeper Mini",1521,"consumer_social",{"id":473,"name":474,"points":475,"category":476},"38531604","How did I get here",659,"dev_tools",{"id":478,"name":479,"points":480,"category":481},"38506166","Plantarium",439,"creative",{"id":483,"name":484,"points":485,"category":486},"38487199","Unsloth",385,"ai",{"id":488,"name":489,"points":490,"category":491},"38472333","Paper Tactics",303,"games",{"id":493,"name":494,"points":495,"category":481},"38509173","MAIM",229,false,"v2",{"id":499,"name":5,"line":6,"ai":496,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":500,"top":18,"kw":501,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":502,"url":9,"mix":503,"praise":91,"objection":104,"sub":21},38473743,0.13,[24,25,26,27],"3303305310505303000053133335030333333003",[31,32,33,34],1794036645434]