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.0
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.0.tar.gz | 341.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| statable-3.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 645.6 kB
Release files / statable-3.2.0.tar.gz
| Download URL | statable-3.2.0.tar.gz |
|---|---|
| Size | 341.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c7b191700d9172fb8acc2c11da3a768b57d05170684d2cd3d8a2b1b7aabaafc0
|
|
BLAKE2b-256 checksum How to use checksums |
4387b147656c92a4a0a5d5edbe49378bba34c431bab91ca1ac2272b8fbcd9c9d
|
| 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.0-py3-none-any.whl
| Download URL | statable-3.2.0-py3-none-any.whl |
|---|---|
| Size | 303.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4020821efe2532506757a7c09728cae0c12d809cb29ad4212932e84df5154a71
|
|
BLAKE2b-256 checksum How to use checksums |
9b26fa80a2014e9b96516d58e1007661ea8934b8b99fc17199197d930042ff79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|