Syside 0.9.0

Released on May 10th, 2026.

This version’s Python API documentation.

This release brings substantial new capabilities to both Syside Modeler and Syside Automator, a range of quality-of-life improvements driven directly by feedback from enterprise users, and a considerable number of bug fixes reported by our community.

The main topic of the update was requirements engineering, featuring new functionality such as editable Table and Matrix views (with CSV export), ReqIF import and export, requirement evaluation.

This release also updates the SysMLv2 standard library to the 2026-03 version, contains a number of breaking changes that we have to make before the release of Syside v1.0, and implements support for user-wide syside.toml and non-version-controlled syside.user.toml configurations, and more.

Table View Demo

Modeler

:rocket: Features

:bug: Bug Fixes

  • Visualization CSS CORS causing Syside Cloud TS broken on Firefox
  • Fix conjugated ports not flipping their directionality arrows in Tom Sawyer visualisation.
  • Remove the non-functioning “Print and Export” button from Tom Sawyer visualisation. (the diagrams can still be saved using “Save as Image” button). (Forum post: 422)

Modeler CLI

:rocket: Features

  • Export CSV of Grid Views defined in your model
  • Print program name in version text
  • Add LICENSE to CLI binary archives
  • Add an option to specify Sysand environment directory

Automator

:rocket: Features

  • (breaking) Reimplement CLI using native parser and subcommands
  • (breaking) Add conf submodule and move FormatOptions there, add remaining config types
  • (breaking) Refactor FormatOptions to match config structure
  • (breaking) Extend interpreter scalar values with complex
  • (breaking) Extend interpreter scalar values with fractions.Fraction

  • Implement ReqIF import and export. Feature documentation
  • Enable explicit filter evaluation on generators that may include imported members
  • Add LazyImportIterator that enables explicit filter condition evaluation on imported members
  • Add optional filter to SerializationOptions that allows evaluating filter expressions on serialization
  • Add optional threads argument to get_default_executor
  • Redirect CLI outputs to sys.stdout and sys.stderr
  • Add conf.load_config for loading Config from file
  • Bundle syside.schema.json in syside/schemas package directory
  • Add Stdlib.that and Stdlib.this for standard that and this features
  • Bind accessors to internal Graph structure
  • Constrain Value to list[Scalar] to match SysML and internal evaluation
  • Add bindings for inlay hint config
  • Add fail_action argument to SerializationOptions.with_options
  • Add external argument to cli.main to include additional subcommands that do their own argument parsing

:bug: Bug Fixes

  • (breaking) Make [Base]Model classes frozen to fix potential incompatibility between result fields

  • Add missing ForLoopActionUsage.seq_member for manipulating seq
  • Fix json.dumps raising errors even if errors were ignored

Modeler & Editor

:rocket: Features

  • Evaluate filter expression when computing suggestions with a small number of steps to ensure fast response times
  • Render alias documentation on hover in addition to its target documentation
  • Apply normalization to all incoming URLs, do not escape Windows drive colon
  • Change declaration to return its own location instead of none when requesting definition

:bug: Bug Fixes

  • Exit gracefully with an error message if the provided --log path is inaccessible or is a directory
  • Add syside source to all internal diagnostics
  • Return response errors if receiving notifications or requests before the server has completed initialization

All Syside Tools

:rocket: Features

  • validation: (breaking) Promote namespace-distinguishability to an error
  • validation: (breaking) Promote usage-feature-typing to error
  • sema: (breaking) Integrate filter import evaluation into name resolution
  • (breaking) Evaluate import filters during analysis
  • printer: (breaking) Insert trailing notes with package declarations if a trailing note already exists or the body spans multiple lines
  • printer: (breaking) Switch to format options used in config
  • interpreter: (breaking) Allow optional BoundMetaclass::metaclass to remove reflection dependency on the standard library cache
  • interpreter: (breaking) Add complex scalar type support
  • interpreter: (breaking) Add rational scalar type support

  • stdlib: Update to 2026-03 version
  • interpreter: Implement requirement evaluation as assumptions implies requirements (Forum post: 429) Feature example
  • conf: Inherit user-wide syside.toml and non-version controlled project syside.user.toml
  • model,sema: Do not attempt to evaluate any functions inside filter expressions to avoid long execution times
  • grammar,printer: Allow const end features in KerML
  • grammar: Align CST field names with model names using snake_case
  • parser: Rename parsing-error to syntax-error for better clarity
  • validation: Remove part-usage-part-definition to match the spec and the metamodel
  • sema: Do not attempt to evaluate any functions because they are technically not model-level evaluable
  • validation: Check inherited features for attribute-*-features diagnostics
  • crash-handler: Use timestamp instead of hash for local names, upload all similar crashes
  • printer: Throw an error with custom message on formatting prefix metadata without explicit feature typings
  • type-checker: Add support for standard this inference (Forum post: 449)
  • interpreter: Extend evaluation to constraint and calc usages as invocations without arguments, look for inherited result
  • sema: Diagnose potential filter cycles
  • conf: Extend config with options for LSP inlay hints
  • conf: Merge exclude option from inherited configs
  • validation: Clarify that *-expression-*-redefinition are diagnosed on unexpected arguments
  • stdlib: Fix gcd typing, add gcd specialization for integers

:bug: Bug Fixes

  • sema: (breaking) Mark all non-operator functions as not model-level evaluable to match the spec

  • model: Fix that filter imports were not included in imported members
  • model: Fix that transitive imports were not included in imported members
  • printer: Print specialization and type relationship references on the same line if an indent would not reduce their starting columns
  • sema: Add implicit (sub)object subsettings to qualifiying ports and occurrences
  • validation: Rename item-flow* and flow-connection* to flow*, flow-item* to flow-payload*
  • sema: Fix that some directed features received implicit specializations from feature values, leave a few useful exceptions
  • validation: Fix that binding to undirected features was accepted in invocation expressions, constructor expressions only accepted input features
  • serde: Fix that unnamed root elements would generate their parent element id
  • grammar: Fix that metadata prefixes were not allowed on feature subtypes in KerML
  • validation: Fix that metadata-feature-annotated-element did not account for multiple inheritance in subclassification
  • interpreter: Fix that reflective metadata subclassification did not take multiple inheritance into account
  • validation: Fix more false negatives in metadata-feature-annotated-element
  • printer: Fix that global $:: reference prefixes would be dropped
  • validation: Fix that assigning underlying enum types were not diagnosed on features typed by enum definitions (Forum post: 463)
  • grammar: Fix that \ was sometimes not parsed as an escape in string literals