@actyx/pond
v3.4.1
Published
Actyx Pond
Downloads
344
Readme
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