StateMachines::Mermaid

CI Gem Version Supported Ruby

Mermaid diagram renderer for state_machines. Generate Mermaid state diagrams from your state machines.

Installation

Add this line to your application's Gemfile:

gem 'state_machines-mermaid'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install state_machines-mermaid

Usage

Basic Usage

require 'state_machines-mermaid'

class Order
  state_machine :status, initial: :pending do
    event :process do
      transition pending: :processing
    end

    event :ship do
      transition processing: :shipped
    end

    event :deliver do
      transition shipped: :delivered
    end

    event :cancel do
      transition [:pending, :processing] => :cancelled
    end

    state :delivered, :cancelled do
      def final?
        true
      end
    end
  end
end

# Generate Mermaid diagram
puts Order.state_machine(:status).draw

This generates:

stateDiagram-v2
  pending : pending
  processing : processing
  shipped : shipped
  delivered : delivered
  cancelled : cancelled
  pending --> processing : process
  processing --> shipped : ship
  shipped --> delivered : deliver
  pending --> cancelled : cancel
  processing --> cancelled : cancel

With Conditions

class Character
  state_machine :status, initial: :idle do
    event :attack do
      transition idle: :combat, if: :has_weapon?
    end

    event :rest do
      transition combat: :idle, unless: :in_danger?
    end
  end
end

# Generates transitions with conditions
puts Character.state_machine(:status).draw

Output includes conditions:

stateDiagram-v2
  idle : idle
  combat : combat
  idle --> combat : attack [if has_weapon?]
  combat --> idle : rest [unless in_danger?]

Show Callbacks

# Include callback information in the diagram
Character.state_machine(:status).draw(show_callbacks: true)

Output to File

File.open('state_diagram.mmd', 'w') do |file|
  Order.state_machine(:status).draw(io: file)
end

Integration with Mermaid Tools

The generated output is compatible with:

  • Mermaid Live Editor
  • GitHub Markdown (renders Mermaid diagrams natively)
  • Various documentation tools (GitLab, Notion, etc.)
  • Mermaid CLI for generating PNG/SVG files

Example: Complex State Machine

class Dragon
  state_machine :mood, initial: :sleeping do
    state :sleeping, :hunting, :hoarding, :rampaging

    event :wake_up do
      transition sleeping: :hunting, if: :hungry?
      transition sleeping: :hoarding, if: :treasure_nearby?
    end

    event :find_treasure do
      transition hunting: :hoarding
      transition hoarding: same  # Keep hoarding
    end

    event :enrage do
      transition any - :rampaging => :rampaging
    end
  end
end

puts Dragon.state_machine(:mood).draw

Features

  • Generates valid Mermaid state diagram syntax
  • Supports initial and final states
  • Shows transition conditions (if/unless)
  • Handles self-transitions (loopbacks)
  • Sanitizes state names for Mermaid compatibility
  • Optional callback visualization
  • Compatible with all state_machines features

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/state-machines/state_machines-mermaid.

License

The gem is available as open source under the terms of the MIT License.