StaTable
MISRA C:2012-aware state machine design and C code generation for embedded systems.
StaTable is a Python-based tool for designing state machines and generating MISRA C:2012-compliant C code for embedded systems. It provides a CLI, a Python SDK, and a PySide6 GUI.
Features
- MISRA C:2012-aware C code generation — validated with
cppcheck+ official MISRA addon - Multi-layer state machines — Driver / Middleware / Application with priority execution
- State actions (Entry / Exit / Do) — table-driven dispatch with user-code markers
- 35 validation rules across 11 categories with AI-assisted diagnostics
- Marker-based user code preservation — regenerate without losing your custom code
- CLI + SDK + GUI — integrate into any workflow
- Pure Python — easy to install and extend
- i18n: English and Simplified Chinese (简体中文)
Installation
SDK + CLI only:
pip install statable
With GUI (PySide6):
pip install "statable[gui]"
Development:
pip install "statable[dev]"
Quick Start
CLI
statable-cli version
statable-cli generate --xml design.xml --out generated/ --format json
statable-cli validate --xml design.xml --format json --exit-on-error
Python SDK
from statable import State, Event, Transition, StateMachine, StateType, EventKind
from statable.global_defs import GlobalDefinitions
from codegen import CCodeGenerator, CodeGenerationConfig
sm = StateMachine()
sm.add_state(State(name="Idle", type=StateType.INITIAL))
sm.add_state(State(name="Running"))
sm.add_event(Event(name="START", kind=EventKind.SIGNAL))
sm.set_initial("Idle")
sm.add_transition(Transition(source="Idle", event="START", target="Running"))
cfg = CodeGenerationConfig()
gen = CCodeGenerator(config=cfg)
files = gen.generate_all_layers([("Application", sm)], GlobalDefinitions())
gen.save_generated_code(files, "generated/")
GUI
python -m statable
Menu: Language / 语言 → switch between English and 简体中文.
Requirements
- Python 3.10 or later
- PySide6 >= 6.0 (for GUI)
- pycparser (optional, for advanced parsing)
Links
- Homepage: https://github.com/akashi-hideki/StaTable
- Documentation: https://github.com/akashi-hideki/StaTable/blob/main/README.md
- Issues: https://github.com/akashi-hideki/StaTable/issues
- Chinese README: https://github.com/akashi-hideki/StaTable/blob/main/README_zh-CN.md
License
Apache License 2.0 — free for commercial and personal use.
See LICENSE for details.
Acknowledgments
If StaTable helps you, please consider giving it a ⭐ on GitHub.
Metadata
Release files for statable 3.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| statable-3.2.1.tar.gz | 341.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| statable-3.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 645.9 kB
Release files / statable-3.2.1.tar.gz
| Download URL | statable-3.2.1.tar.gz |
|---|---|
| Size | 341.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
38abed8131d8a305264ea7363854a30131cc38e8c495fed610a37cd7a96c40a5
|
|
BLAKE2b-256 checksum How to use checksums |
1814e58e0e471575f8af3b40bb2e9315dbf3e3db0e9cc7684c95a97ec972ce8a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|
Release files / statable-3.2.1-py3-none-any.whl
| Download URL | statable-3.2.1-py3-none-any.whl |
|---|---|
| Size | 304.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
db305b4d7b90c5ae39709f11382f28145394a1c7b8470105a4261e116eec9b63
|
|
BLAKE2b-256 checksum How to use checksums |
2343ab528438e5c7a4d193d4db48cef4453fd749c819bd1b5d5a8314fdf0d8ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|