# @wmfs/statebox

> Orchestrate Node functions using Amazon States Language

Latest version **1.126.0** (published 2026-11-06) · MIT license · 0 weekly downloads

## Install

```sh
npm install @wmfs/statebox
pnpm add @wmfs/statebox
yarn add @wmfs/statebox
bun add @wmfs/statebox
```

## Health

**Score 55/100 (C)** — status: active.

Positive: no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads; no types; no esm support.

## Facts

| | |
|---|---|
| Version | 1.126.0 |
| Published | 2026-11-06 |
| First published | 2018-06-12 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 9 |
| Unpacked size | 421.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 45 |
| Author | West Midlands Fire Service |
| Maintainers | wmfsbot |
| Keywords | tymly, package, fsm, finite, state machines, aws |

## Links

- npm: https://www.npmjs.com/package/@wmfs/statebox
- Repository: https://github.com/wmfs/statebox
- Homepage: https://github.com/wmfs/statebox#readme
- Issues: https://github.com/wmfs/statebox/issues
- npm.io page: https://npm.io/package/@wmfs/statebox

## Dependencies (9)

- [uuid](https://npm.io/package/uuid.md) 14.0.3
- [debug](https://npm.io/package/debug.md) 4.4.3
- [luxon](https://npm.io/package/luxon.md) 3.7.2
- [dottie](https://npm.io/package/dottie.md) 2.0.7
- [lodash](https://npm.io/package/lodash.md) 4.18.1
- [jsonpath](https://npm.io/package/jsonpath.md) 1.3.0
- [tokenizr](https://npm.io/package/tokenizr.md) ^2.0.0
- [@hapi/boom](https://npm.io/package/@hapi/boom.md) 10.0.1
- [@wmfs/asl-choice-processor](https://npm.io/package/@wmfs/asl-choice-processor.md) 1.26.0

## Alternatives

- [monaco-yaml](https://npm.io/package/monaco-yaml.md) — 420.1K weekly downloads
- [@crewx/workflow](https://npm.io/package/@crewx/workflow.md) — 3.1K weekly downloads
- [yaml-cat](https://npm.io/package/yaml-cat.md) — 38 weekly downloads
- [nunjucks-in-yaml](https://npm.io/package/nunjucks-in-yaml.md) — 9 weekly downloads
- [shopify-symlinks](https://npm.io/package/shopify-symlinks.md) — 3 weekly downloads

## Recent versions

- 1.126.0 (latest) — 2026-11-06
- 1.125.0 — 2026-11-05
- 1.124.0 — 2026-11-03
- 1.123.0 — 2026-11-02
- 1.122.0 — 2026-11-02
- 1.121.0 — 2026-10-30
- 1.120.1 — 2026-08-13
- 1.120.0 — 2025-11-25
- 1.119.0 — 2025-07-23
- 1.118.0 — 2025-07-10
- 1.117.0 — 2025-05-14
- 1.116.0 — 2025-04-01
- 1.115.0 — 2025-03-31
- 1.114.0 — 2025-02-20
- 1.113.0 — 2025-01-10
- … 149 more at https://npm.io/package/@wmfs/statebox/versions

## README

![Statebox Logo](/images/statebox-logo.png)

[![Tymly Package](https://img.shields.io/badge/tymly-package-blue.svg)](https://tymly.io/)
[![npm (scoped)](https://img.shields.io/npm/v/@wmfs/statebox.svg)](https://www.npmjs.com/package/@wmfs/statebox)
[![CircleCI](https://circleci.com/gh/wmfs/statebox.svg?style=svg)](https://circleci.com/gh/wmfs/statebox)
[![codecov](https://codecov.io/gh/wmfs/statebox/branch/master/graph/badge.svg)](https://codecov.io/gh/wmfs/statebox)
[![CodeFactor](https://www.codefactor.io/repository/github/wmfs/statebox/badge)](https://www.codefactor.io/repository/github/wmfs/statebox)
[![Dependabot badge](https://img.shields.io/badge/Dependabot-active-brightgreen.svg)](https://dependabot.com/)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)
[![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/wmfs/tymly/blob/master/packages/pg-concat/LICENSE)


> Orchestrate Node functions using [Amazon States Language](https://states-language.net/spec.html)

## Useful links

* [AWS Step Functions](https://aws.amazon.com/step-functions/) - overview of Amazon States Language, use cases, etc
* [statelint](https://npmjs.com/package/@wmfs/statelint) - a validator for Amazon States Language JSON files
* https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html
* https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html

## <a name='install'></a>Install
```bash
$ npm install @wmfs/statebox --save
```

## <a name='usage'></a>Usage

```javascript
const Statebox = require('@wmfs/statebox')
const statebox = new Statebox({})

const main = async

function() {

  // STEP 1:
  // Create some 'module' resources (i.e. Javascript
  // classes with 'run' and optional 'init' methods)
  // that state machines can then refer to...
  // -------------------------------------------------
  await statebox.ready
  statebox.createModuleResources({
    // Simple module to add two numbers together
    add: class Add {
      run(event, context) {
        context.sendTaskSuccess(event.number1 + event.number2)
      }
    },
    // Simple module to subtract one number from another
    subtract: class Subtract {
      // Init methods are optional, but all allow
      // resource-instances to be configured...
      init(resourceConfig, env, callback) {
        callback(null)
      }
      run(event, context) {
        context.sendTaskSuccess(event.number1 - event.number2)
      }
    }
  })

  // STEP 2:
  // Next create a new 'calculator' state
  // machine using Amazon States Language...
  // ---------------------------------------
  await statebox.createStateMachines({
      'calculator': {
        Comment: 'A simple calculator',
        StartAt: 'OperatorChoice',
        States: {
          OperatorChoice: {
            Type: 'Choice',
            Choices: [{
              Variable: '$.operator',
              StringEquals: '+',
              Next: 'Add'
            }, {
              Variable: '$.operator',
              StringEquals: '-',
              Next: 'Subtract'
            }]
          },
          Add: {
            Type: 'Task',
            InputPath: '$.numbers',
            Resource: 'module:add', // See createModuleResources()
            ResultPath: '$.result',
            End: true
          },
          Subtract: {
            Type: 'Task',
            InputPath: '$.numbers',
            Resource: 'module:subtract',
            ResultPath: '$.result',
            End: true
          }
        }
      }
    }, {}, // 'env': An environment/context/sandbox
  )

  // STEP 3:
  // Start a new execution on a state machine
  // ----------------------------------------
  const executionDescription = await statebox.startExecution({
      numbers: {
        number1: 3,
        number2: 2
      },
      operator: '-'
    }, // input
    'calculator', // state machine name
    {} // options
  )

  // STEP 4:
  // Look at the results...
  // ----------------------
  console.log(executionDescription)
  //  Result object
  //  -------------
  // {
  //   executionName: '...',
  //   ctx: {
  //     numbers': {
  //       number1: 3,
  //       number2: 2
  //     },
  //     operator: '-',
  //     result: 1 <--- The important bit :-)
  //   },
  //   currentStateName:'Subtract',
  //   currentResource:'module:subtract',
  //   stateMachineName:'calculator',
  //   startDate: '2018-09-03T21:58:04.287Z'
  // }
}

if (require.main === module) {
  main();
}
```

## <a name='test'></a>Testing

```bash
$ npm test
```

## <a name='license'></a>License
[MIT](https://github.com/wmfs/tymly/packages/statebox/blob/master/LICENSE)

---
_Source: https://npm.io/package/@wmfs/statebox · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
