SysML v2 · KerML 1.1 · written in Go
OpenSysML materializes the instances a model describes, evaluates their features with units carried and checked, performs actions and advances state machines on a clock, and decides requirements and analysis objectives against what it finds — so it reports what a validator or expression evaluator cannot reach: the rollup with an unvalued leaf, the result in the wrong dimension, the action with no step to start at. It also parses, validates, serves an editor over LSP, generates documents and exports RDF, with Go, Python, Node, Java, Rust, Julia and MATLAB clients for the same runtime.
One open interchange, two implementations, a version-controlled store. Drag the boxes around — click opens the project, right-click shows its attributes. Zoom with the buttons, Ctrl+scroll or a pinch, and drag the background to pan. Edit the model and the engine redraws the diagram as you type.
A launch vehicle whose total mass is a recursive roll-up over its parts, listed one part per row. The masses are the model's; totalMass is the engine's: Run instantiates the stages and engines and fills the column from the engines up. Edit a mass and run again; add the instrument unit, whose mass the model leaves out on purpose, and the roll-up comes back undetermined, naming the missing value; give it its mass and it completes.
A lunar mission's phases as a state machine whose transitions fire on the clock: after 9000 [s] out of prelaunch, 270,000 s of translunar coast, and so on to recovery. Run performs the machine on the mission and advances the engine's simulated clock by 400,000 s; the trace the engine records lights each phase at the instant it was entered and walks the token along each transition as it fires, and the run stops on the surface with the machine still waiting there. Advance to 800,000 s instead and the last timed transition fires at t = 702,000 s, reaching done. Debug the run steps through the records one by one, clock instant included.
A lunar mission as an action: each burn is a step that assigns the velocity budget it leaves, remaining, and a decide lets the landing go only while enough is left. Run performs the action on Apollo 11 and replays the trace the engine records: the token moves step to step, each assigned remaining appears under the burn that wrote it, and the run stops at awaitGo, whose accept waits for a GoForDescent nothing has sent. Send GoForDescent and the run posts it to the waiting accept and goes on to splashdown; fly Apollo 8 and its smaller budget sends the decide the other way; remove the start and see what the engine makes of an action with no first step.
This is a SysML model. Run it or edit it in your browser on the OpenSysML engine (about 9 MB, downloaded once).
The start and each Pull out of Flexo are free choices; a seed picks each branch at random, the same way every time. Run picks a new random seed unless you set one, and shows it here so the debugger can replay that path. With no seed the debugger takes the engine's default branch.
Each record carries the simulated instant the engine wrote it at; the machine makes no free choices, so the run is the same every time. Step through the records or play them to watch the clock advance.
Each record names the token and the executor step it was written at; the events the run posts are the toggles under the stage. Step through the records to watch the token advance and each assignment land.
Waiting events: empty
The engine re-reads the model as you type. Try changing a label or lang, adding a part of type Project, connecting it with another interface, or deleting a ; to see a diagnostic.Try changing an engine's mass or a stage's propellantMass and run the model again to see every total follow, giving the InstrumentUnit a mass of its own to settle the undetermined roll-up without the usage's, or deleting a ; to see a diagnostic.Try changing a transition's after wait so a phase ends sooner or later, adding a state with a transition into it, or deleting a ; to see a diagnostic.Try changing a burn's assign remaining := remaining - … or Apollo 11's budget so the decide at landingGo goes the other way, adding a step with a then into it, or deleting a ; to see a diagnostic.
Refereed against the OMG pilot implementation
OpenSysML is run beside a pinned build of the OMG pilot implementation over the same models, and the two are compared wherever they can be: the diagnostics each reports, the diagnostics the reference's own test suites declare, how names resolve, and whether an invalid model is turned away. Each comparison has a committed baseline that anyone can reproduce, and the results are kept in the records rather than restated here.
What this is not: the comparison is of what two implementations report on the same files, not an official conformance suite, and no certification or percentage of the specification is claimed. The reference evaluates expressions but executes neither actions nor state machines, so behavior is beyond what it can referee. Read how each comparison is measured and what it currently reports, or which rules are faithful, approximate or missing.
Measured on the public Apollo 11 SysML v2 model (Airbus, MPL-2.0); the commands to repeat it are on the performance page.
Speed is the smaller point. The pinned OMG pilot validator passes all 28 files without a
finding and OpenSysML's own validation reports 2 warnings and no error; asked to
run the model, the runtime stops its delta-v, reliability and injection
calculations and the instantiation of the mission itself at defects only execution
reaches — an e that resolves to a valueless ISO 80000 quantity, a
gravitational parameter typed as a force, three mission phases with no succession between
them. Each is reproduced in
the showcase's Apollo 11 section.
A hand-written parser for the full surface syntax, name resolution, and validation split into tiers so a model is checked as strictly as you ask.
sysml-lsp speaks the Language Server Protocol — completion,
diagnostics, hovers, navigation and diagrams in VS Code or any LSP client.
An interactive session that keeps your model: instantiate parts, inspect feature values, and step through behavior at a breakpoint — in a terminal, a Jupyter notebook, or this browser.
Actions, state machines, calculations, analyses and requirements really run, on materialized objects with units, with a step budget so a model can never spin forever — and a well-formed model that cannot run is reported with the reason.
Views and viewpoints in the model become Markdown, HTML and PDF reports whose tables, figures and figures of merit are queried from the model as it runs.
Round-trip models through RDF/Turtle and query them with OSLC query text, so a model is data other tools can read.
Go, Python, Node/TypeScript, Java, Rust, Julia and MATLAB clients drive the same
execution runtime — in process, or over the sysml-grpc service.
Choosing a client · Go · Python · Node · Java · Rust · Julia · MATLAB
# Linux and macOS
curl -fsSL https://opensysml.org/install.sh | sh
# Windows
irm https://opensysml.org/install.ps1 | iex
# macOS, with Homebrew
brew install Open-MBEE/tap/opensysml
# with a Go toolchain
go install github.com/Open-MBEE/OpenSysML/cmd/sysml@latest
Every release's archives, checksums and signatures are on the downloads page; the install page covers every route, verification, and macOS Gatekeeper.
To try what landed today rather than at the last release, the
nightly snapshot builds
develop every night as a prerelease.
Every construct is recorded as faithful, approximate or not implemented. No conformance certification is claimed.
Where the published reference material is itself defective, the correction is declared and the corpus left as published.
The roadmap lists what is missing, in the order it should be picked up.
The OpenSysML MDK (Runtime Environment and Development Kit) is the runtime of the OpenSysML suite, beside a Rust toolchain, the OMG reference implementation and a version-controlled model store.