Skip to content
sysml-rs is pre-alpha: a partial SysML v2 implementation with no OMG conformance claim. Interfaces change without deprecation while the version stays 0.x.

Known limitations

sysml-rs implementationExperimental / partial supportstatus: pre-alpha

Every entry on this page was re-verified against a release build of the commit named above: the behaviour was reproduced on that build before being listed. Entries are removed when a fix lands, not when one is planned. Broader positioning (“what is partial by design”) lives in What sysml-rs is; this page is for specific, observable defects a user may hit.

Per the OMG grammar, expose belongs only in view usage bodies; a view definition body takes filters and render members. sysml-rs currently parses expose inside view def with no diagnostic, so a spec-invalid model checks clean. Keep expose in view usages; a grammar fix is queued for the next parser regeneration batch.

A viewpoint is a kind of requirement, so satisfy someViewpoint by view; is legal SysML v2. sysml-rs reports VC010: unknown requirement for it. Workaround: none within satisfy; document the relationship in prose or a comment until fixed.

The parallel keyword in a state definition body (orthogonal regions) fails to parse: Unexpected keyword 'parallel' in state definition. Model orthogonal behaviour as separate concurrent state machines for now.

Import bodies and filtered imports are rejected

Section titled “Import bodies and filtered imports are rejected”
  • import with a body (e.g. relationship annotations on the import) fails to parse, and the error blames the visibility keyword rather than the body.
  • Filtered namespace imports such as import P::**[@SomeMetadata]; fail with a syntax error at @.

Both forms are standard SysML v2. Workaround: unfiltered imports plus explicit element filters where the consuming construct supports them.

Textual representations are not implemented

Section titled “Textual representations are not implemented”

rep ... language "..." (KerML textual representation, e.g. embedding OCL or other languages) fails to parse.

A synthesized control-node name can leak into resolution

Section titled “A synthesized control-node name can leak into resolution”

Action models with implicit control nodes can produce an AX006 diagnostic referring to an internal $ctrl_… name the user never wrote. If you see a diagnostic about a $-prefixed name, it is an implementation artefact, not your model.

A well-formed for loop over a collection fires AX009: no collection reference even when the collection reference is present and correct. The diagnostic is noise in this case; the loop itself is parsed.

Relative paths with a directory component fail project discovery

Section titled “Relative paths with a directory component fail project discovery”

From a project root, sysml check src/main.sysml fails with a discovery error (discovery root is not a directory, exit 2). An absolute path works, and so does the bare filename run from inside src/. Use absolute paths in scripts until this is fixed.

A default-stdlib sysml package archive cannot be consumed

Section titled “A default-stdlib sysml package archive cannot be consumed”

An archive built from a project using the default standard libraries records the ten standard-library URLs as usages, and consuming it as a kpar dependency fails with a dependency cycle through the standard library. Workaround (verified): the producing project sets [stdlib] exclude = ["all"] before packaging; consumption then works, with the archive checksum pinned in the consumer’s lock file. See KPAR packaging.

sysml package archives are not byte-reproducible

Section titled “sysml package archives are not byte-reproducible”

The archive metadata embeds a creation timestamp, so two builds of identical content have different checksums. Expect kpar checksums in lock files to churn when a dependency is repackaged, even without content changes.

simulate can misreport the initial state and transition targets

Section titled “simulate can misreport the initial state and transition targets”

The simulation trace can print an initial state that differs from the model’s declared initial transition, and some transition lines name the wrong target state even when the same run’s available-transitions output names the right one. Treat state names in simulate traces with suspicion until this is fixed; verification verdicts are computed separately and are not known to be affected.

sysml verify prints [ERR ] and exits 3 on a passing verdict

Section titled “sysml verify prints [ERR ] and exits 3 on a passing verdict”

A verification run whose verdict is pass still prints an error:-prefixed line containing verdict: pass and exits with code 3. Scripts must parse the verdict text rather than the exit code for now.

Overriding an attribute with --set name=value produces output byte-identical to a run without the flag; the override does not reach the model. Edit the model (or use a redefinition) to change analysis inputs until this works.

  • No Windows CLI binary. Releases ship the sysml CLI for Linux (x86-64, ARM64) and macOS (Apple Silicon, Intel), and a Windows language server inside the VS Code extension — but not sysml.exe. On Windows, build from source or use WSL.
  • Released binaries report 0.1.0 regardless of the release tag. The crate and extension versions are not bumped with the tag, so cite the release you downloaded from, not --version.
  • Released binaries are unsigned. macOS Gatekeeper quarantines them; see install.
  • Language coverage is partial. Unsupported syntax surfaces as a parse diagnostic; it is not silently accepted (with the expose exception above).
  • The desktop workbench and diagram surfaces are previews. The CLI and LSP are the stable surfaces.

Found something not listed here? Please open an issue with the model snippet and the command you ran.