Hi HN, we're Thomas and Olivier from Terse (https://www.useterse.ai/) We've built Durable Actors, an open-source alternative to Cloudflare's Durable Objects.
A Durable Object/Actor is a tiny server that handles one request at a time and has its own SQLite database. There's exactly one of each in the world and it is addressed by name.
This is the perfect primitive for deploying multiplayer agents. Each agent can have its own Durable Actor, and each user can connect to that Actor via websocket. This is fully horizontally scalable. Your users can deploy and share agents at will without putting pressure on a central DB or websocket server.
Durable Actors are also great for coordinating agents within a system. Since only one request is handled at a time, you can protect critical data such as a CRM and allow multiple agents to run concurrently without worrying about data races.
The only alternative to this is Cloudflare's Durable Objects. However, there is extreme lock in (they pull you into D1, R2 + workers as well) and it wasn't originally built for agentic workfloads when it was released 5 years ago.
Some notable projects built on Durable Objects include RampInspect, OpenInspect as well as the multiplayer frameworks Liveblocks and PartyKit. You can now build these kinds of projects on Durable Actors.
Durable Actors is a version of DO that is built for concurrent agentic workloads. It is fully open source (MIT License) and includes a helm chart for you to easily self-host.
Some key features:
- Configurable compute: Specify CPU, RAM, data residency, idle-timeouts all in a decorator
- No outer worker: We generate a type-safe client that you can just plug into your existing tech stack.
- (coming soon, like today) Export SQLite table via CLI + MCP for exposing OLTP logs to your agent to help you debug.
And our Performance Numbers (all p95):
- Durable write: 85.6ms
- Stateful Read (data in sqlite): 2.14ms
- Actor Warm up: 334ms
Here is a little counter demo so you can see the latency yourself: https://demo.useterse.ai/
Would love your feedback!
How do you compare to Azure Durable Functions, Temporal, AWS Lambda Durable Functions?
Can't Durable Entities meet the same use cases?
EDIT: Of course I am not talking about the difference in OSS vs not. Rather I'm interested in the difference in use cases and capabilities. Some of the aforementioned have ways to run things locally as well, though they are designed as distributed cloud-based PaaS services.
This looks really nice! How would you compare it to Rivet? I think they were also originally pitched as an open source version of durable objects: https://rivet.dev/actors/compare/rivet-actors-vs-cloudflare-...
Also are you able to self-host this outside of GCP (from the docs it seems like it is locked to GCP but I'm not that familiar with it so maybe not)?
100ms for a write - not usable for anything beyond toys.
I mean we have https://github.com/denoland/celld - with a known good open source history. Durable writes there are as low as 1ms.
Looks great but one of the common problems with the virtual actor model is state query. It's all well and good to have nice separated state dbs but for most use cases that means further double up on storing the state again in another database that can query it. I don't think anyone has come up with a nice solution for this problem without using a loose document database, but even then actors can change their schema.
Perhaps emitting versioned domain events transactionally with the actor state is an option without prescribing an exact solution.