Hello, Retomus
Let’s build your first machine and hook it up to a React component in just a few steps.
1. Install Retomus
npm install retomus
2. Create a Minimal Machine
import { createRetomus, createMachineConfig } from 'retomus';
const retomus = createRetomus();
const counterMachine = retomus.createMachine(
  createMachineConfig({
    id: 'counter',
    status: ['idle', 'active'],
    actions: ['increment', 'decrement', 'reset'],
    transitions: {
      idle: {
        increment: 'active',
        decrement: 'active',
      },
      active: {
        increment: 'active',
        decrement: 'active',
        reset: 'idle',
      },
    },
    actionHandlers: {
      increment: ({ ctx, done }) => {
        ctx.state.count++;
        done();
      },
      decrement: ({ ctx, done }) => {
        ctx.state.count--;
        done();
      },
      reset: ({ ctx, done }) => {
        ctx.state.count = 0;
        done();
      },
    },
    initialStatus: {
      status: 'idle',
    },
    ctx: {
      state: { count: 0 },
    },
  }),
);
3. Use in a Component
import React, { CSSProperties } from 'react';
const CounterComponent = ({ counterMachine }) => {
  const count = counterMachine.useState('count');
  const status = counterMachine.useStatus();
  const increment = counterMachine.useAction('increment');
  const decrement = counterMachine.useAction('decrement');
  const reset = counterMachine.useAction('reset');
  return (
    <div style={styles.container}>
      <h2>Status: {status}</h2>
      <p>Count: {count}</p>
      <div style={styles.buttonGroup}>
        <button onClick={increment}>increment</button>
        <button onClick={decrement}>decrement</button>
        <button onClick={reset}>reset</button>
      </div>
    </div>
  );
};
const styles: { container: CSSProperties; buttonGroup: CSSProperties } = {
  container: {
    display: 'flex',
    flexDirection: 'column',
    alignItems: 'center',
    justifyContent: 'center',
    gap: '1rem',
  },
  buttonGroup: {
    display: 'flex',
    justifyContent: 'center',
    gap: '1rem',
  },
};
4. Wrap Your App
import { RetomusWrapper } from 'retomus';
const App = () => (
  <RetomusWrapper>
    <CounterComponent counterMachine={counterMachine} />
  </RetomusWrapper>
);
Completion!
Status: idle
Count: 0
✅ What You Learned
- How to define and create a state machine
 - How to hook machine state/actions into React
 - How to trigger transitions and update values