Skip to content
State Machine Visualizer
Ruby Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Build Status Code Climate Test Coverage Inline docs Gem Version Yard Docs

Visualize State Machines using GraphViz

External Dependencies

Stateoscope depends on GraphViz for generating the graphs. You need to make sure that GraphViz is properly installed on your system before you will be able to generate graphs. If you are on a Mac, you can install GraphViz via Homebrew

$ brew install graphviz


Add this line to your application's Gemfile:

gem 'stateoscope', '~> 0.1.3', group: :development

And then execute:

$ bundle

Using the rake task

To generate a state machine visualization for your Model, run

rake 'stateoscope:visualize[Model]'

If you have multiple state machines defined on your model, you can pass the name of the state machine as second parameter

rake 'stateoscope:visualize[Model,specific_state_machine]'

If you want to highlight a specific state of your state machine, add the name as a third argument.

rake 'stateoscope:visualize[Order,order_state,delivered]'

In any case, a PDF file containing the graph visualization will be saved to the current directory.

Using Stateoscope directly

Stateoscope exposes a visualize method that allows for a more fine-grained and dynamic usage.


filename = Stateoscope.visualize(
  state_machine_name: "order_state",
  current_state: "delivered",
  dir: Rails.root.join("public"), # default current directory
  format: "png" # default "pdf", possible are all formats that GraphViz supports

# filename will be for example RAILS_ROOT/public/order_state-20191201145422.png


Stateoscope ships with adapters for the following state machine gems:


After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install.


To release a new version, perform the following steps:

  • update changelog
  • update version in version.rb
  • update version in the installation instructions in README.rb
  • run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to
  • create a release for the new version on


Bug reports and pull requests are welcome on GitHub at

You can’t perform that action at this time.