Show HN: Rivet Actors – Durable Objects build with Rust, FoundationDB, Isolates

Hello! We posted a Show HN for Rivet last year for our container orchestration project (https://news.ycombinator.com/item?id=37188659). In that time, a lot has changed that I think HN will find interesting.

Rivet is open-source actor infrastructure similar to Cloudflare's Durable Objects. Rivet itself already serves millions of MAU in production using our current container runtime – primarily for multiplayer games – and Rivet Actors are a new extension to support actor-like workloads. Rivet Actor's core primitives are RPC, state, and events.

Actors are powered by Rust, V8 isolates (supports Deno), and FoundationDB. An architecture diagram is available here for [1]. If you're not familiar with FoundationDB, you're overdue to watch Dave Rosenthal's talk [3]. (I firmly believe it's by far the best permissively licensed database; if only it had a well maintained SQL layer.)

Here's where Rivet's architecture gets fun – we don't rely on a traditional orchestrator like Kubernetes or Nomad for our runtime. Instead, our orchestrator is powered by an in-house actor-like workflow engine – similar to how FoundationDB is powered by their own actor library (Flow [4]) internally. It lets us reliably & efficiently build complex logic – like our orchestrator – that would normally be incredibly difficult to build correctly. For example, here's the logic that powers Rivet Actors themselves with complex mechanisms like retry upgrades, retry backoffs, and draining [2].

One of the reasons we built Rivet Actors is because we tried to replace most of our Redis-based realtime infrastructure with Durable Objects. The architecture allowed us to build realtime features much faster & efficiently, but the platform & APIs were needlessly rigid and difficult to use. Our goal is to build an actor-like platform that includes the bells and whistles required for developers to benefit from the actor model without the learning curve of tools like Erlang/OTP, Akka, or Orleans.

Rivet Actors provides a few key benefits in flexibility over Durable Objects:

- Open-source (Apache 2.0) – built to be self-hosted and deployed on-prem

- Provides observability out of the box, no Logpush required

- Rivet Actors support the Deno runtime, so NPM & JSR just works

- @rivet-gg/actor [5] framework provides RPC, state, and events out of the box for faster bootstrapping; you can modify and deploy it yourself

- Supports both V8 isolates & Docker-compatible containers so you can run any software you'd like, like Godot/Unity servers or video transcoding

- Also supports TCP & UDP (we run games!)

- Provides vanilla HTTP API for easy use with existing apps

- Full control over regions

There's plenty more that I don't have space to talk about. Give our docs a read if you'd like to learn more [6] or read about internal design decisions [7]. I'll be in the comments answering questions!

Cheers, Nathan

[1] https://github.com/rivet-gg/rivet?tab=readme-ov-file#diagram

[2] https://github.com/rivet-gg/rivet/blob/a3db31f3b5c351061d665...

[3] https://www.youtube.com/watch?v=9g84y_60VGM

[4] https://apple.github.io/foundationdb/flow.html

[5] https://jsr.io/@rivet-gg/actor/doc

[6] https://rivet.gg/docs

[7] https://rivet.gg/docs/internals/design-decisions


Comments URL: https://news.ycombinator.com/item?id=42472519

Points: 95

# Comments: 19