A modular Rust implementation of Object-Process Methodology (OPM, ISO 19450) with Petri-net simulation. Designed to replace clunky existing tools with something lightweight that runs on the desktop, in the browser (via WASM), or from the command line.
OPCloud (the canonical OPM tool) is finicky, Chrome-only, and breaks more often than not. Existing open-source attempts are abandoned. This project is built as a semester project for FJFI ČVUT, with the goal of producing a small, modular, simulatable OPM editor.
| Feature | Status |
|---|---|
| OPL parser (Dori-style syntax, pest grammar) | ✅ done |
Auto-layout via Graphviz dot |
✅ done |
| SVG renderer with token visualization | ✅ done |
| Petri-net simulation (single-step + run, seeded RNG) | ✅ done |
| GIF export | ✅ done |
| Desktop UI (egui / eframe) | ✅ done |
Hierarchical OPDs (P zooms into …) |
✅ done |
| Live reload of diagram on OPL edit (debounced) | ✅ done |
| PNG / SVG / GIF export from the desktop | ✅ done |
| Web (WASM) | 🚧 stub |
| Vector painter for crisp zoom + click selection | 📝 planned |
| GitHub Actions CI | 📝 planned |
See TODO.md for the full task tracker and per-phase notes.
┌─────────────────────────────────┐
│ opm-core │
│ (library, pure Rust, no_std-ish)│
│ │
│ model parser layout │
│ render petri export │
└─────────────────────────────────┘
│ │ │
┌─────────────┘ │ └─────────────┐
│ │ │
┌──────────┐ ┌──────────┐ ┌──────────┐
│ opm-cli │ │opm-desktop│ │ opm-web │
│ clap │ │ egui/efr. │ │ wasm-bg │
└──────────┘ └──────────┘ └──────────┘
opm-core is the only crate that contains business logic. The three frontends are thin shells.
# Sanity check (does it build?)
cargo build --workspace
# Parse a .opl file
cargo run -p opm-cli -- parse examples/ceramic-workshop.opl
# Render static SVG
cargo run -p opm-cli -- layout examples/ceramic-workshop.opl -o diagram.svg
# Simulate and produce GIF
cargo run -p opm-cli -- simulate examples/ceramic-workshop.opl -o sim.gif
# Desktop GUI (once built)
cargo run -p opm-desktopExternal requirements: Graphviz dot on $PATH (used for auto-layout).
The canonical example is examples/ceramic-workshop.opl — an OPM model of a ceramic workshop with reservations, production (designing → shaping → drying → firing → glazing → second firing → pickup), inventory management, and drink sales.
opm_semestral_project/
├── Cargo.toml # workspace
├── crates/
│ ├── opm-core/ # the library
│ ├── opm-cli/ # command-line interface
│ ├── opm-desktop/ # egui desktop app
│ └── opm-web/ # WASM library + frontend
├── docs/ # architecture & format docs
├── examples/ # sample .opl files
├── CLAUDE.md # AI agent instructions
├── TODO.md # task tracker
└── README.md # this file
Matěj Michálek — FJFI ČVUT, semester project, 2026.
Not yet decided — likely MIT or Apache-2.0 dual.