https://github.com/tochemey/goakt
[Go] Fast and Distributed Actor framework using protocol buffers as message for Golang
https://github.com/tochemey/goakt
actor-framework actor-model actor-system actors actorsystem cloud-computing concurrent-programming distributed distributed-system distributed-systems erlang-otp event-sourcing framework go go-actor golang golang-library high-performance proto protocol-buffers
Last synced: 2 months ago
JSON representation
[Go] Fast and Distributed Actor framework using protocol buffers as message for Golang
- Host: GitHub
- URL: https://github.com/tochemey/goakt
- Owner: Tochemey
- License: mit
- Created: 2022-11-06T20:54:14.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-04-01T07:55:36.000Z (about 1 year ago)
- Last Synced: 2025-04-01T12:54:58.505Z (about 1 year ago)
- Topics: actor-framework, actor-model, actor-system, actors, actorsystem, cloud-computing, concurrent-programming, distributed, distributed-system, distributed-systems, erlang-otp, event-sourcing, framework, go, go-actor, golang, golang-library, high-performance, proto, protocol-buffers
- Language: Go
- Homepage: https://tochemey.gitbook.io/goakt
- Size: 3.23 MB
- Stars: 231
- Watchers: 5
- Forks: 17
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: contributing.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: code_of_conduct.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README

Distributed Actor framework for Go
Distributed [Go](https://go.dev/) actor framework to build a reactive and distributed system in Go with typed actor messages.
GoAkt is highly scalable and available when running in cluster mode. It comes with the necessary features require to
build a distributed actor-based system without sacrificing performance and reliability. With GoAkt, you can instantly create a fast, scalable, distributed system
across a cluster of computers.
If you are not familiar with the actor model, the blog post from Brian Storti [here](https://www.brianstorti.com/the-actor-model/) is an excellent and short introduction to the actor model.
Also, check the reference section at the end of the post for more material regarding the actor model.
> **Version & branches**
>
> - **v3** — Protocol buffers for actor messages. Branch: [`release/3.14`](https://github.com/Tochemey/goakt/tree/release/3.14).
> - **v4** — Typed messages with `any`, unified APIs, pluggable serializers (Proto/CBOR), and config-only remoting. See [CHANGELOG.md](./CHANGELOG.md) for migration; [Docs](https://docs.goakt.dev/) for API reference.
## Features
| Feature | Description |
|---------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Actor Model** | Build concurrent and distributed systems using the actor model with typed messages. |
| **Messaging** | Tell/Ask APIs for fire-and-forget or request/response flows. |
| **Reentrancy** | Reentrancy-enabled async request messaging with configurable modes and per-call overrides. |
| **Supervision** | One-for-one/one-for-all strategies, directives, and retry windows for fault tolerance. |
| **Remoting** | Seamless communication between actors across nodes over TCP. |
| **Context Propagation** | Pluggable context propagation for request-scoped metadata. |
| **Clustering** | Multiple discovery backends (Consul, etcd, Kubernetes, NATS, mDNS, static). |
| **Location Transparency** | Interact with actors without needing to know their physical location. |
| **Relocation** | Automatic actor relocation on node failure with configurable policies. |
| **Cluster Singletons** | Run a single instance across the cluster with guardian-based lifecycle. |
| **Grains** | Virtual actors capabilities. |
| **Passivation** | Automatically stop idle actors and reclaim resources. |
| **Routers** | Routing strategies such as round robin, random, and fan-out. |
| **Scheduling** | Timers and delayed messaging built into the runtime. |
| **Stashing & Mailboxes** | Stash buffers and customizable mailboxes (bounded/unbounded, priority). |
| **Dependency Injection** | Attach runtime dependencies to actors at spawn time. |
| **Observability** | OpenTelemetry metrics, event stream, and dead letters. |
| **Extensions** | Pluggable APIs for cross-cutting capabilities. |
| **Data Center** | Multi-datacenter support with DC-transparent messaging, pluggable control plane (NATS JetStream, Etcd), DC-aware placement, and cross-DC actor/grain communication. |
| **Distributed Data** | Built-in CRDTs (GCounter, PNCounter, LWWRegister, MVRegister, ORSet, ORMap, Flag) with delta-based replication and anti-entropy synchronization. Configurable coordination levels, key subscriptions, tombstone-based deletion, BoltDB snapshots, and role-based replication scoping. |
| **Reactive Streams** | Actor-backed, backpressure-aware stream processing with a composable DSL. Rich sources, transformations (map, filter, flatMap, batch, throttle, scan, parallel map), sinks, fan-out/fan-in, graph topologies, error/overflow strategies, stage fusion, and built-in metrics/tracing. |
## Installation
```bash
# v3.x.x — stable, used in production
go get github.com/tochemey/goakt/v3
# v4.x.x — production ready
go get github.com/tochemey/goakt/v4
```
## Documentations
- **v4**: [v4](https://docs.goakt.dev)
- **v3**: [v3](https://tochemey.gitbook.io/goakt)
## Examples
Kindly check out the [examples](https://github.com/Tochemey/goakt-examples)' repository.
## Support
GoAkt is free and open source. If you need priority support on complex topics or request new features, please consider [sponsorship](https://github.com/sponsors/Tochemey).
## Security
Applications using this library should routinely upgrade their **Go version** and refresh **dependencies** as needed to mitigate security vulnerabilities. **GoAkt** will make a best effort to keep dependencies current and perform vulnerability checks whenever necessary.
## Community
You can join these groups and chat to discuss and ask GoAkt related questions on:
[](https://github.com/Tochemey/goakt/discussions)
[](https://github.com/Tochemey/goakt/issues)
## Contribution
We welcome contributions—bug fixes, new features, and documentation improvements. Before diving in, read the [Architecture Document](./arch/ARCHITECTURE.md) to understand the codebase. We use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) and [Earthly](https://earthly.dev/get-earthly) for builds.
See [contributing.md](./CONTRIBUTING.md) for prerequisites, setup, and the full contribution workflow.
## In Production
This framework is used in production by the following projects/companies:
- [Baki Money](https://www.baki.money/): AI-powered Expense Tracking platform that turns receipts into stories...
- [Event Processor](https://www.v-app.io/iot-builder-3/): Clustered Complex Event Processor (CEP) for IoT data streams.
## Feedback
Kindly use this [issue](https://github.com/Tochemey/goakt/issues/948) to give us your feedback that can help us enhance the framework.
## Benchmark
One can find the benchmark tests here: [Benchmark](./benchmark/)
## Architecture
One can find the architecture documents here: [Architecture](./architecture/)
## Sponsors
