[{"data":1,"prerenderedAt":267},["ShallowReactive",2],{"project-47197003":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":41,"post_text":43,"what":44,"said":84,"maker_in_thread":182,"shape":191,"grid":194,"attempts":229,"same_week":230,"maker_shows":183,"maker_hidden":259,"reader_version":260,"card":261},"47197003","SQLite for Rivet Actors","one database per agent, tenant, or document","title","Show HN: SQLite for Rivet Actors – one database per agent, tenant, or document","https:\u002F\u002Fgithub.com\u002Frivet-dev\u002Frivet","github.com","NathanFlurry",1772295118,2026,45,16,1308,4366,30,"shown","infrastructure","actor runtime","library",[24,25,26,27,28],"sqlite","actor model","durable objects","multi-tenant database","per-tenant isolation","mixed",-0.079,{"positive":32,"neutral":33,"mixed":34,"critical":33},2,3,1,9,{"performance":37,"idea":38,"docs":40},{"positive":34,"critical":34},{"positive":39,"critical":32},0,{"positive":34,"critical":39},[42,39,33,39,33,39,33,39,42,39,33,39,39,34,34,39,34],5,"Hey HN! We posted Rivet Actors here previously [1] as an open-source alternative to Cloudflare Durable Objects.\n\nToday we've released SQLite storage for actors (Apache 2.0).\n\nEvery actor gets its own SQLite database. This means you can have millions of independent databases: one for each agent, tenant, user, or document.\n\nUseful for:\n\n- AI agents: per-agent DB for message history, state, embeddings\n\n- Multi-tenant SaaS: real per-tenant isolation, no RLS hacks\n\n- Collaborative documents: each document gets its own database with built-in multiplayer\n\n- Per-user databases: isolated, scales horizo",{"problem":45,"audience":51,"pricing":59,"motivation":60,"time_to_build":59,"stack":64,"openness":81,"stage":82,"team_size":83},{"value":46,"source":47,"evidence":48},"Isolating data per agent, tenant, user or document without rigid shared schemas","maker",[49],{"id":50},"post",{"value":52,"source":53,"evidence":54},"Developers building AI agents, multi-tenant SaaS and collaborative apps","inferred",[55,56],{"id":50},{"id":57,"by":11,"text":58},"47198651","Hey! This is a common question. In our experience, most apps don't need cross-tenant queries outside of BI. For example, think about the apps you use on a daily basis: Linear,…",null,{"value":61,"source":47,"evidence":62},"Open-source alternative to Cloudflare Durable Objects",[63],{"id":50},[65,69,73,77],{"value":66,"source":47,"evidence":67},"SQLite",[68],{"id":50},{"value":70,"source":47,"evidence":71},"FoundationDB",[72],{"id":50},{"value":74,"source":47,"evidence":75},"Postgres",[76],{"id":50},{"value":78,"source":47,"evidence":79},"React",[80],{"id":50},"open_source","launched","company",{"praise":85,"objections":105,"requests":131,"questions":145,"alternatives":162},[86,98],{"value":87,"source":88,"evidence":89},"Open-source alternative to Durable Objects is welcome","commenter",[90,94],{"id":91,"by":92,"text":93},"47198762","siliconc0w","Really interesting to see these new compute paradigms. I haven't built anything on Durable Objects yet but I can see the appeal and I'd prefer an OSS option. SqliteDB per tenant…",{"id":95,"by":96,"text":97},"47198702","ZeroAurora","I love the idea of DOs and I'm happy to see an OSS implementation. Would it be interesting to write about comparisons against Cloudflare Durable Object to the project README?…",{"value":99,"source":88,"evidence":100},"Production use is working well with responsive team",[101],{"id":102,"by":103,"text":104},"47198419","fastball","We recently replaced an isolated feature built on Durable Objects with Rivet Actors, to allow for much better interop with the rest of our infra (which is built on AWS\u002FVercel),…",[106,117,124],{"value":107,"source":88,"evidence":108},"Migrations across thousands of databases at different schema versions are risky",[109,113],{"id":110,"by":111,"text":112},"47218997","mickelsamuel","The lazy migration tradeoff would keep me up at night. Thousands of databases at different schema versions running simultaneously — your app code needs to handle every version in…",{"id":114,"by":115,"text":116},"47205887","o175","The lazy migration design is clever for the common case, but I keep getting stuck on what happens when a migration isn't just \"add a column.\" If you need to backfill a derived…",{"value":118,"source":88,"evidence":119},"One SQLite per entity may be less efficient than one database with logical separation",[120],{"id":121,"by":122,"text":123},"47198385","nudpiedo","I get where you come from, but really needs it to be a whole SQLite instance per database? Wouldn’t be more efficient just logic separation in a larger DB? Better usage of…",{"value":125,"source":88,"evidence":126},"Cross-database queries are hard without a shared database",[127],{"id":128,"by":129,"text":130},"47198118","swaminarayan","“sqlite per actor” feels like very clean actor level isolation. the part I am more curious about is how you recommend handling cross actor queries.",[132,139],{"value":133,"source":88,"evidence":134},"Comparison with Cloudflare Durable Objects in the README",[135,136],{"id":95,"by":96,"text":97},{"id":137,"by":96,"text":138},"47207386","Theory, performance, self-host option, estimated cost, etc. And I see you can deploy rivet on Cloudflare DOs. What situation does it help when we can just use wrangler? By the…",{"value":140,"source":47,"evidence":141},"Cross-actor query engine",[142],{"id":143,"by":11,"text":144},"47198187","We built everything with this architecture internally already at Rivet. It's less common than you might expect to have to query cross-DB in practice. However, we are planning on…",[146,151,158],{"value":147,"source":88,"evidence":148},"How cross-actor queries are handled",[149,150],{"id":128,"by":129,"text":130},{"id":143,"by":11,"text":144},{"value":152,"source":88,"evidence":153},"How preemptive scheduling and fairness work",[154],{"id":155,"by":156,"text":157},"47203608","malkosta","How do you intend to conquer the preemptive scheduler? System-wide fairness and preventing starvation are essencial steps for this to work well.",{"value":159,"source":88,"evidence":160},"What advantage Rivet gives over wrangler on Cloudflare",[161],{"id":137,"by":96,"text":138},[163,168,172,178],{"value":164,"source":88,"evidence":165},"Cloudflare Durable Objects",[166,167],{"id":95,"by":96,"text":97},{"id":91,"by":92,"text":93},{"value":169,"source":88,"evidence":170},"Turso",[171],{"id":50},{"value":173,"source":88,"evidence":174},"Erlang\u002FOTP and Elixir",[175],{"id":176,"by":156,"text":177},"47198975","It’s crazy how pretty much every tool people post to support AI systems is already in Erlang\u002FOTP or in elixir standard libraries.",{"value":179,"source":88,"evidence":180},"Postgres with schema-per-tenant",[181],{"id":110,"by":111,"text":112},{"comments":183,"answered":32,"key":184},6,[185,188,190],{"id":186,"text":187},"47198678","Cheers!",{"id":189,"text":187},"47199072",{"id":143,"text":144},{"commenters":35,"max_depth":33,"maker_replies":183,"first_comment_mins":192,"lifespan_hours":193},93,47,[195,197,199,201,203,205,206,207,210,213,216,218,220,222,224,226,227],[102,39,42,196,103,39],"project\u002Fpositive\u002Fperformance",[186,39,39,198,11,34],"maker\u002Fpositive\u002Fnone",[91,34,33,200,92,39],"project\u002Fmixed\u002Fidea",[189,34,39,202,11,34],"maker\u002Fneutral\u002Fnone",[128,32,33,204,129,39],"project\u002Fneutral\u002Fidea",[143,32,39,204,11,34],[114,33,33,204,115,39],[208,33,39,209,103,39],"47209908","commenter\u002Fneutral\u002Fidea",[95,211,42,212,96,39],4,"project\u002Fpositive\u002Fdocs",[214,211,39,215,11,34],"47198976","maker\u002Fneutral\u002Fdocs",[137,211,33,217,96,39],"project\u002Fneutral\u002Fdocs",[176,42,39,219,156,39],"other\u002Fneutral\u002Fidea",[221,42,39,204,11,34],"47199067",[155,42,34,223,156,39],"project\u002Fcritical\u002Fperformance",[121,183,34,225,122,39],"project\u002Fcritical\u002Fidea",[57,183,39,209,11,34],[110,228,34,225,111,39],7,[],[231,236,241,245,250,254],{"id":232,"name":233,"points":234,"category":235},"47224295","I built a sub-500ms latency voice agent from scratch",570,"ai",{"id":237,"name":238,"points":239,"category":240},"47164270","Terminal Phone",322,"security_privacy",{"id":242,"name":243,"points":244,"category":235},"47195123","Now I Get It",305,{"id":246,"name":247,"points":248,"category":249},"47220809","Govbase",219,"productivity",{"id":251,"name":252,"points":253,"category":235},"47212576","Timber",207,{"id":255,"name":256,"points":257,"category":258},"47180083","RetroTick",195,"dev_tools",false,"v2",{"id":262,"name":5,"line":6,"ai":259,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":263,"top":18,"kw":264,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":265,"url":9,"mix":266,"praise":87,"objection":107,"sub":21},47197003,-0.08,[24,25,26,27,28],"50303030503001101",[32,33,34,33],1794036694748]