@actyx/pond
TypeScript icon, indicating that this package has built-in type declarations

3.4.1 • Public • Published

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) => {
            state.push(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) => {
        console.log(state)
    })

})()

Recommended VSCode plugins

  • ESLint for live source code linting

Package Sidebar

Install

npm i @actyx/pond

Weekly Downloads

184

Version

3.4.1

License

GPL-2.0-only

Unpacked Size

4.96 MB

Total Files

2402

Last publish

Collaborators

  • kelerchian
  • roland.kuhn
  • ostollmann