Sinelabore

Generate production-ready source code from state diagrams or SysML v2 textual models#

From design to code with ease#

Sinelabore is a tool that has proven itself over many years across numerous applications and with many customers. It enables developers to combine event-driven architecture, hierarchical state machines, model-based design, and automatic code generation effectively. You usually see a return on investment very quickly.

⬇️ Download Editor tutorial Getting started: UML state machines Getting started: SysML v2

The sinelabore editor with the microwave oven state machine, and the C code generated for its state Cooking

Many systems are good candidates for a finite-state-machine implementation: anything that must sequence actions, or react to inputs differently depending on its current mode. Typical examples include control-oriented software such as protocol stacks, stateful workflows, visualizations, and control applications.

How it works#

  • 1 · Model#

    Draw a flat or hierarchical state machine in the built-in editor or in your UML tool.

  • 2 · Generate#

    Run the code generator. It writes plain source code in C, C++, Rust or one of seven other languages.

  • 3 · Integrate#

    Call the generated handler from your main loop, an RTOS task or an interrupt service routine.

Why Sinelabore#

  • No framework, no runtime
    The generated code does not lock you into a runtime framework and fits bare-metal and RTOS designs alike.

  • Any compiler, any CPU
    Standard language features only, for 8-, 16- and 32-bit CPUs, your IDE, build and CI.

  • Readable code
    Nested switch/case and if/else: easy to read, debug, and if needed change by hand.

  • Your system design
    Use it with an RTOS (VxWorks, FreeRTOS, embOS, RTEMS, …), in an interrupt or in a super loop.

  • Static analysis friendly
    Generated C++ passes clang-tidy and is C++11 ready (modernize-*).

  • Configurable
    A plain text configuration file tailors the generated code to your needs.

Languages and tools#

Generated languages: C · C++ · Rust · Java · Python · C# · Go · Swift · Lua · JavaScript

Modeling tools: Integrated editor · Enterprise Architect · UModel · Cadifra · astah · MagicDraw / Cameo · Modelio · Papyrus · Visual Paradigm · StarUML · draw.io · All tools →

For your field#

Sinelabore generates readable, maintainable C or C++ from flat or hierarchical UML state machine diagrams, for embedded real-time and low-power systems.

Sinelabore UML state diagram code generation workflow

Getting started with UML state machines →

Where parts of an IoT application run in Java, Python, C#, Lua, Rust, JavaScript, Go or Swift, the same model generates code for them too. Model once and keep the behavior consistent across gateways, services and firmware.

Supported programming languages →

Sinelabore generates executable C++ from a SysML v2 textual model: state machines, and also the parts, ports and their interactions. Write the model in a text editor such as Visual Studio Code, and simulate the system early in design.

Sinelabore SysML v2 code generation workflow

Getting started with SysML v2 →

What customers say#

Sinelabore is used worldwide by companies of all sizes and in a wide range of industries, from multinational organizations to independent consultants.

  • “I like that I don’t have to draw the state machine, then separately implement it and keep these two synchronized; this saves me time and reduces the potential of bugs.”

    Daniel Bedrenko, Software Developer, BPS…tec GmbH

  • “… wir nutzen Ihr Produkt schon seit vielen Jahren und es hat sich als zuverlässiges und wertvolles Werkzeug erwiesen …”

  • “We like your tool, in fact we will give an intro for another local company next week.”

A study by the Laboratory of Model Driven Engineering for Embedded Systems at CEA, France, “Complete Code Generation from UML State Machine”, reports: “… without optimization, Sinelabore generates the smallest executable size …”

Try it#

⬇️ Download Examples on GitHub Getting started: UML state machines Getting started: SysML v2