Distributed Go 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 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: The stable release (v3.x) uses protocol buffers for actor messages. v4.0.0 (in development on
main) introduces typed messages withanyβunified APIs, pluggable serializers (Proto/CBOR), and config-only remoting. See CHANGELOG_V400.md for the full roadmap and migration guide; Docs for API reference. Bug fixes for v3.x are onrelease/v3.14.
- 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 (SpawnOn with WithDataCenter), and cross-DC actor/grain communication.
# v3.x β stable, used in production
go get github.com/tochemey/goakt/v3
# v4.0.0 β usable in production; heavy testing and refactoring ongoing
go get github.com/tochemey/goakt/v4Kindly check out the examples' repository.
GoAkt is free and open source. If you need priority support on complex topics or request new features, please consider sponsorship.
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.
You can join these groups and chat to discuss and ask GoAkt related questions on:
We welcome contributionsβbug fixes, new features, and documentation improvements. Before diving in, read the Architecture Document to understand the codebase. We use Conventional Commits and Earthly for builds.
See contributing.md for prerequisites, setup, and the full contribution workflow.
This framework is used in production by the following projects/companies:
- Baki Money: AI-powered Expense Tracking platform that turns receipts into stories...
- Event Processor: Clustered Complex Event Processor (CEP) for IoT data streams.
Kindly use this issue to give us your feedback that can help us enhance the framework.
One can find the benchmark tests here: Benchmark
