Baahu

🐘 (fast) state machine-based UI framework
Alternatives To Baahu
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Xstate23,1316,706474a day ago140September 09, 2022239mitTypeScript
State machines and statecharts for the modern web.
Usestatemachine2,260
6 months ago10mitTypeScript
The <1 kb state machine hook for React
Microstates1,31499a year ago88September 08, 202056mitJavaScript
Composable state primitives for JavaScript
Little State Machine1,269
2 months ago8mitTypeScript
📠 React custom hook for persist state management
Machinery470
110 days ago16November 16, 201910apache-2.0Elixir
State machine thin layer for structs
Beedle370
4 months agon,ullmitJavaScript
A tiny library inspired by Redux & Vuex to help you manage state in your JavaScript apps
Python Statemachine366126 days ago15January 23, 20202mitPython
Python Finite State Machines made easy.
Redux Machine338133 years ago18December 13, 20175JavaScript
A tiny library (12 lines) for creating state machines in Redux apps
Pvm335
14 years ago22April 23, 20193mitPHP
Build workflows, activities, BPMN like processes, or state machines with PVM.
Xstate Viz328
4 months ago83mitTypeScript
Visualizer for XState machines
Alternatives To Baahu
Select To Compare


Alternative Project Comparisons
Readme

Baahu


read the documentation Coverage Status gzip size brotli size GitHub top language npm license GitHub Workflow Status


What is Baahu?

Baahu is a small zero-dependency Moore machine-based UI framework for Javascript + TypeScript

Features

  • Faster and smaller than major frameworks/libraries (Svelte, Preact, Vue, React, and Angular)
  • Built-in robust state management: Finite State Machines!
  • Event-driven, not change-driven/reactive
  • Built-in trie-based router & code-splitting
  • First-class TypeScript support: type-checked JSX, props, states, events.
  • O(1) component rendering for all components, not just leaves.

Get Started

Everything you need to know about Baahu is in the docs!

Try it out live on Code Sandbox!

Example Components

You should read the docs, but if you want a sneak peek at what the API looks like, here a couple of example components:

Toggle

import { b, machine, emit } from 'baahu';

const Toggle = machine({
  id: 'toggle',
  initial: 'inactive',
  context: () => ({}),
  when: {
    inactive: { on: { TOGGLE: { to: 'active' } } },
    active: { on: { TOGGLE: { to: 'inactive' } } },
  },
  render: state => (
    <div>
      <h3>{state}</h3>
      <button onClick={() => emit({ type: 'TOGGLE' })}>Toggle</button>
    </div>
  ),
});

Traffic Light

A traffic light component that doesn't let you cross the street when it is red, and displays the # of times you crossed the street.

codesandbox

import { b, machine, emit } from 'baahu';

/** returns a function that is called by baahu. emit the
 * provided event after the specified time */
function delayedEmit(event, delayMS) {
  return () => setTimeout(() => emit(event, 'light'), delayMS);
}

/**
 * you can make your own abstractions like `delayedEmit`
 * for entry/exit/"do" actions.
 *
 * embracing js/ts (as opposed to shipping with every
 * possible abstraction) keeps baahu fast and light!
 */

const Light = machine({
  id: 'light',
  initial: 'red',
  context: () => ({
    streetsCrossed: 0,
  }),
  when: {
    red: {
      entry: delayedEmit({ type: 'START' }, 3000),
      on: {
        START: {
          to: 'green',
        },
        CROSS: {
          do: () => alert('JAYWALKING'),
        },
      },
    },
    yellow: {
      entry: delayedEmit({ type: 'STOP' }, 1500),
      on: {
        STOP: {
          to: 'red',
        },
        CROSS: {
          do: ctx => ctx.streetsCrossed++,
        },
      },
    },
    green: {
      entry: delayedEmit({ type: 'SLOW_DOWN' }, 2500),
      on: {
        SLOW_DOWN: {
          to: 'yellow',
        },
        CROSS: {
          do: ctx => ctx.streetsCrossed++,
        },
      },
    },
  },
  render: (state, ctx) => (
    <div>
      <h3>{state}</h3>
      {/* this is a targeted event: 
        only the machine with the specified
        id will be checked */}
      <button onClick={() => emit({ type: 'CROSS' }, 'light')}>
        Cross the Street
      </button>
      <p>Time(s) street crossed: {ctx.streetsCrossed}</p>
    </div>
  ),
});
Popular State Machine Projects
Popular State Management Projects
Popular Control Flow Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Javascript
Typescript
State Machine
State Management
Ui Framework