Actyx Pond

Usage no npm install needed!

<script type="module">
  import actyxPond from 'https://cdn.skypack.dev/@actyx/pond';


Actyx Pond Framework

An open-source Typescript/Javascript framework for implementing distributed state-machines which are automatically kept in sync across a swarm of interconnected devices. The Actyx Pond requires Actyx to be running on each device.

The key features of Actyx Pond are:

  • Distributed event-sourcing for great information replication facilities and declarative information consumption
  • Partition tolerance with an eventually consistent programming model for arbitrary business logic
  • Eventual consistency by using a state machine time-travel algorithm to agree on global state

This package builds on the Actyx SDK.

Example usage

import { Pond, Tag, Fish, FishId } from '@actyx/pond'
(async () => {

    // Connect to the local Actyx process
    const pond = await Pond.default({
        appId: 'com.example.app',
        displayName: 'Example App',
        version: '1.0.0'

    const chatTag = Tag<string>('ChatMessage');
    // A fish is a state machine
    const ChatFish: Fish<string[], string> = {
        fishId: FishId.of('chat', 'MyChatFish', 0),
        initialState: [],
        onEvent: (state, event) => {
            return state;
        where: chatTag,

    // Example event emission; this can actually
    // happen on any node running Actyx
    setInterval(() => {
        pond.emit(chatTag, 'a chat message')
    }, 2_000)

    // Observe time-travelling state machine
    pond.observe(ChatFish, (state) => {


Recommended VSCode plugins

  • ESLint for live source code linting