Build embedded controllers visually. Ship native C++.
SMFlow compiles a node-and-wire flow ahead of time into readable, native C++17 for your microcontroller — no interpreter on the device, and nothing from SMFlow running on it. Simulate on your desktop, then deploy to real hardware. An AI assistant can draft the flow through the built-in MCP server while you approve every change.
From visual flow to native firmware — deterministic, offline, and yours to audit.

Positioning
The Right Tool for Embedded Control
SMFlow is for embedded developers and machine builders who need deterministic control logic on microcontrollers — without building and maintaining the entire control architecture by hand.
Building custom embedded machinery has historically forced a difficult trade-off between complex C firmware and expensive proprietary PLCs. SMFlow bridges that gap.
Traditional C/C++ Firmware
Writing bare-metal drivers, manual timer loops, state machine enums, switch-case blocks, debouncing, and fault handling in C/C++.
Industrial PLCs
Using IEC 61131 ladder logic / function block systems on dedicated industrial PLC racks.
Node-RED / High-Level
Flow-based visual tools designed for Linux gateways, servers, cloud integration, and IoT dashboards.
Deterministic Visual Control
PLC-style cyclic execution and visual state machines running directly on low-cost modern microcontrollers.
Where SMFlow shines: When a traditional PLC is overkill for your machine or product, but hand-writing and maintaining a complete custom embedded C++ firmware stack is unnecessarily complex and time-consuming.
"PLC-style" describes the execution model — a cyclic scan with deterministic node ordering and visual state machines. SMFlow is not a safety-rated or certified PLC and does not replace independent safety engineering, hardware interlocks, e-stop design, or application validation.
Watch the Introduction
See SMFlow end to end
A 12-minute walkthrough of the flow-to-firmware workflow — design a graph, simulate it, and compile it to native C++. More walkthroughs land on the channel as they are recorded.
Developer Experience
From Visual Logic to Running Hardware in Minutes
No toolchain configuration headaches, no complex RTOS boilerplate, no manual state machine tables in C.
Select Target
Choose your microcontroller target (ESP32, STM32, RP2040, Arduino Opta, Arduino Nano, Uno R3 or Mega 2560 (AVR), or Linux IPC).
Place Hardware I/O
Drag in digital inputs, analog sensors, I²C/SPI peripherals, or CAN bus receivers.
Define States & Logic
Add state machine transitions, debounce timers, interlocks, and safety conditions.
Simulate Live
Step through scan cycles on your desktop. Inspect variables, forces, and timings in real-time.
Deploy to Hardware
Hit Deploy. SMFlow compiles ahead-of-time to C++17 and flashes your microcontroller.
"I just programmed a complete multi-state microcontroller application without having to write the whole controller in C."
Deterministic Execution • Zero Interpreter Overhead • Full C++ Toolchain Compilation
Real-World Systems
Built for Real Machines, Not Abstract Code
See how engineers and OEMs use SMFlow to power physical controllers across industries. Each of these is a complete reference project you can open, build, and run — not a diagram.
Browse the full sample library
Pump & Fluid Control
Pressure/level hysteresis, anti-short-cycle and anti-recycle timers, dry-run and overload faults, 3-position HOA modes, and latched alarms.

Temperature & Process Control
Dual-mode heat/cool hysteresis, startup delay, post-heat cooldown, an emergency over-temperature purge, and set-dominant latched alarms.

Custom OEM & Pneumatic Machines
Extend/dwell/retract sequencing with dual watchdog jam detection, simultaneous-sensor conflict lockout, stop abort, and alarm reset — no $2,000 PLC rack.

Automotive Body Modules
Standalone ECUs for wipers, washers, and power windows — multi-speed interlocks, FMVSS 118 anti-pinch, auto-park, and watchdog stall detection.

Automotive Power & Charging
A standalone alternator regulator with 128 Hz PWM RVC field control, soft-start, thermal derating, and overvoltage latching.

Multi-Stage Machine Sequencing
Cascaded on-delay timers and interlocked gates stepping a machine through stages — feeders, indexers, test fixtures, and dispensing stations.
Your Machine on the Plant Network
An SMFlow controller answers a SCADA system, an HMI, or another PLC directly overModbus TCP. There are no Modbus nodes to wire: the project declares a register map that binds shared variables to holding and input registers, and the flow reaches them through the variable nodes it already has. Encoding and word order are always declared, never inferred — word order is the most common way a Modbus integration fails on site.
The server’s own health comes back into the graph as read-only variables, so“the SCADA went away, fall back to a safe state” is ordinary logic rather than firmware you have to write. Hand the integrator a register sheet straight out of the editor as CSV or Markdown.
Hardware & Protocol Abstractions
Direct Hardware Interfaces Without Low-Level Boilerplate
SMFlow abstracts low-level registers into clean, deterministic nodes so you can focus on control logic.
GPIO & Digital I/O
Pull-up/down, debounce filtering, interrupt triggers, high-speed PWM.
Analog & ADC/DAC
Voltage reading, pressure/temperature scaling, moving-average filters.
I²C & SPI Buses
Hardware sensor communication, OLED/LCD displays, external memory.
UART & Serial
Telemetry streaming, RS232/RS485 modbus, custom protocol packets.
CAN Bus (Controller Area Network)
Frame filtering, vehicle/industrial telemetry, hydraulic valve control.
Modbus TCP Server
Shared variables served to a SCADA system or HMI as holding and input registers, with declared encoding and word order.
Ethernet (W5100 / W5500)
WIZnet controllers over SPI, addressed statically or by a DHCP client that never blocks the scan.
Timers & Clocks
On-delay, off-delay, pulse timers, deterministic scan cycle schedulers.
Visual State Machines
Named states, transition guards, entry/exit actions, fault states.
Logic & Arithmetic
Boolean gates, comparator thresholds, mathematical formulas, clamps.
Supported Microcontroller & Hardware Targets
Your AI assistant can author the flow.
You still approve every change.
SMFlow ships a Model Context Protocol server — smflow mcp — that connects Claude, Cursor, VS Code Copilot, Cline, or Windsurf straight to the editor you have open. The agent reads the real node catalog, the real pin map of your real board, and the real validation diagnostics, then proposes a transaction. Nothing touches the graph until you click Apply.
The authoring loop
- 1Discover, never guess.
The agent asks for the node catalog, the supported targets, and the board's pins, buses, and device drivers. It authors only from what your build actually has.
- 2Propose a transaction.
Add nodes, set properties, wire ports — submitted as one atomic proposal against a specific document revision, with a one-line summary a human can approve at a glance.
- 3Review on the canvas.
The editor ghosts the proposed additions, edits, and deletions over your graph. Apply or Reject. Applied proposals land as a single labelled undo step —
Ctrl+Ztakes the whole thing back. - 4Validate, then build.
The agent reads the same compiler diagnostics you see and fixes its own errors before asking for a build. An invalid graph still refuses to generate code.
{
"mcpServers": {
"smflow": {
"command": "smflow",
"args": ["mcp"]
}
}
}One entry, and the agent attaches to whichever editor session is running. For CI and headless workflows, smflow mcp --project ./project.smflowedits the file on disk instead.
13 tools
11 read · 1 mutate · 1 buildThere is deliberately no deploy tool. Flashing a physical board stays a human action from the editor or the CLI.
The editor listens on no port until you turn on Allow local automation in Settings.
Binds to 127.0.0.1 on an ephemeral port, with a per-session bearer secret and no CORS. Nothing reaches your machine from the network.
Every proposal targets a revision. Edit the graph while the agent is thinking and its stale proposal is rejected, not merged.
Why Engineers Pay for SMFlow
The value of SMFlow is not merely counting lines of code. It is radically reducing the cognitive load and engineering hours required to architect, test, deploy, and maintain deterministic embedded systems.
AI can help write code.
SMFlow helps you build the controller.
Large language models have made generating raw code cheaper than ever. But generating code is only a fraction of the embedded engineering challenge.
An engineer still needs to define safe state machines, guarantee microsecond timing, audit hardware interlocks, simulate edge cases, test physical actuators, and safely maintain machines in production.
SMFlow provides the structured, deterministic environment that turns control intent into validated, deployable embedded logic.
Hard Invariants
Clean C++17 AOT Output.
No Target Interpreters.
SMFlow takes a strict compiler approach: your visual graph compiles ahead of time into readable C++17 that firmware engineers can inspect, audit, and trust. The same project always generates byte-identical source. The target device runs no Python, Node.js, JVM, or background interpreter.
- ▪Deterministic Cyclic Scan: Every scan cycle executes nodes in the same validated order — a fixed, allocation-free sequence with no interpreter scheduling. (Wall-clock timing depends on your board and toolchain; see the measured benchmarks.)
- ▪Static Memory Layout: Pre-allocated buffers, zero heap allocations in inner execution loops.
- ▪Byte-Identical Source: The same project always generates the exact same C++ source — no timestamps, no random IDs, no ordering drift. The final binary is whatever your own compiler and toolchain produce from that source.
// Auto-generated by SMFlow ahead-of-time compiler
#include "smflow_runtime.hpp"
void step_cyclic_task() {
const bool btn_state = hal_read_digital(PIN_DI1);
const bool motor_cmd = !btn_state;
hal_write_digital(PIN_DO1, motor_cmd);
}
int main() {
hal_init();
while (true) {
step_cyclic_task();
hal_wait_next_period_us(1000);
}
}Transparent Licensing
Try It Free. Upgrade for Commercial Projects.
Start building for free with the full node library. Upgrade to Pro for unlimited nodes and commercial rights.
SMFlow Free
Fully functional and free forever. Build real projects, test hardware drivers, and evaluate the full workflow.
- ✓ Up to 12 nodes per flow
- ✓ Full microcontroller target support (ESP32, STM32, RP2040, AVR, Linux)
- ✓ Full driver, peripheral & protocol ecosystem (GPIO, I²C, SPI, CAN)
- ✓ Modbus TCP server, up to 4 mapped variables
- ✓ Desktop simulator with live scan cycle inspection
- ✓ Visual IDE & standalone CLI tools
- ✓ Never takes files hostage (always open & edit any size project)
SMFlow Pro
For engineers, machine builders, system integrators, and commercial controller developers.
Introductory pricing — regular price $800
- ✓ Unlimited nodes per flow
- ✓ Unlimited Modbus TCP register map
- ✓ Commercial use rights included
- ✓ 3 device activations per seat
- ✓ 100% offline-capable after activation
- ✓ Cross-platform: Windows, Linux, macOS
- ✓ Headless CI/CD build agent support (`SMFLOW_LICENSE_DIR`)
- ✓ Zero runtime fees, zero royalties on compiled binaries