https://github.com/jaxcksn/fsmd
A python CLI tool for creating diagrams of finite state machines.
https://github.com/jaxcksn/fsmd
automata automata-theory cli-app deterministic-finite-automata finite-state-machine fsm non-deterministic-finite-automaton python python3
Last synced: 10 days ago
JSON representation
A python CLI tool for creating diagrams of finite state machines.
- Host: GitHub
- URL: https://github.com/jaxcksn/fsmd
- Owner: jaxcksn
- License: gpl-3.0
- Created: 2023-09-27T00:59:29.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-04T14:33:44.000Z (over 1 year ago)
- Last Synced: 2025-04-12T17:11:52.067Z (10 days ago)
- Topics: automata, automata-theory, cli-app, deterministic-finite-automata, finite-state-machine, fsm, non-deterministic-finite-automaton, python, python3
- Language: Python
- Homepage:
- Size: 37.1 KB
- Stars: 5
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# FSMD
### Finite State Machine Diagram Tool

> A python command line tool for creating finite state machine diagrams from a file. Make deterministic and non-deterministic automata easily!
![]()
![]()
![]()
![]()

[Features](#features) **·** [Installation](#installation) **·** [Usage](#using-fsmd) **·** [Support](#support)
## Features
### Current
- Allows easy creation of an FSM diagram anywhere from a YAML file
- Quickly create non-deterministic automata with epsilon transition support.
- Included installer for Graphviz for Windows and MacOS.
- Easy to install and use
- Diagrams are automatically optimized to be the ideal size.### Planned
- [ ] Allow changing output format
- [ ] Improve input file capabilities
- [ ] Add CLI options for sizing output
- [ ] Add more rigorous input file checking
- [ ] Linux support for installer
- [ ] Improve reliability of installer## Installation
### Pre-requisites
To use FSMD, **Python 3.7 or greater** is required to be installed. You must also have pip as well.
### Install FSMD
To install FSMD you can run:
```
pip install FSMD
```If you want to run the project directly, you can run the main.py file in the source folder, and Typer should take care of the rest.
### Install Graphviz
The Graphviz library is required for FSMD to work properly, there are a few two ways (unless you are on Linux) to do this.
### Automatic Install (Windows & MacOS Only)
FSMD includes an automatic installer for Graphviz. Each platform has different steps.
The automatic installer is experimental and **not guaranteed** to work, it's recommended to [install Graphviz yourself](#manual-install-all-platforms) if the automatic installer does not work for you.
---
Windows
#### Usage
To install on Windows, run the following command:
FSMD install
_Note:_ The windows installer does not add the Graphviz executables to your system path. It instead installs to a location in `%LOCALAPPDATA`, which is added to the PATH only when running FSMD. If you don't know what this means, don't worry about it.
---
MacOS
#### Requirements
Automatic installation on MacOS **requires Homebrew** to be installed. You can install it by following the steps on [this page](https://brew.sh/).
#### Usage
Once you meet all the requirements, run the following command:
FSMD install
---
### Manual Install (All Platforms)
Visit the [Graphviz Download Page](https://graphviz.org/download/) and follow the steps to install Graphviz for your platform.
Once downloaded and installed, make sure Graphviz is in your path by running:
dot --version
If the command runs with no issues, then you are ready to start using FSMD.
## Using FSMD
Once you have the tool installed, you will need to create a file for FSMD to create a diagram of. Please see the [FSM File Documentation](./docs/fsmfile.md) for details.
To create the diagram, run the following command:
FSMD create FORMAT INPUT_FILE OUTPUT_FOLDER
Where FORMAT is `png` or `svg`
To view all the options and arguments for the create command you can run:FSMD create --help
## Support
I am an active college student, so I stay pretty busy, but feel free to open an issue if you run into any problems, and I will look into it as soon as I can.