sysml2kit
API-first Python tooling for building, querying, validating, and automating SysML v2 models.
Status: pre-alpha. The 0.1.x line has a working core (model, writer, interchange, queries, validation, diff, API client, parse backend); the API may still move between minor versions. Pin an exact version if you depend on it.
sysml2kit is the requirements/architecture/traceability layer for
engineering automation stacks: build a system model in Python, emit standard
SysML v2 textual notation and Systems Modeling API JSON, run traceability
queries (which requirements are unsatisfied? unverified? allocated where?),
validate, and diff. It targets the OMG SysML v2 standard, not any vendor tool.
What it does
- Object model: a documented subset of SysML v2 (packages, parts, ports, attributes with units, requirements, satisfy/verify/derive/allocate, analysis cases) as pydantic models, with an opaque passthrough for elements outside the subset so richer models survive a round trip.
- Textual notation writer: deterministic
.sysmloutput. Parsing is delegated to a pluggable backend (pip install sysml2kit[parse]installs sysmlpy); the kit itself does not reimplement the grammar. - JSON interchange: read/write the Systems Modeling API serialization, the format the standard REST API speaks.
- Traceability queries: unsatisfied/unverified requirements, allocation tables, requirement-to-part trace matrices.
- Validation and diff: rule-based model checks and element-level diffs.
- API client: a thin HTTP client for the OMG Systems Modeling API and Services endpoints.
Install
pip install sysml2kit # core: build, write, query, validate, diff
pip install "sysml2kit[parse]" # + read .sysml files (sysmlpy backend)
pip install "sysml2kit[graph]" # + NetworkX export
Quick start
from sysml2kit import Model, builder
model = Model()
pkg = builder.pkg(model, "Vehicle")
battery = builder.part(model, "battery", owner=pkg)
range_req = builder.req(
model,
"REQ-001",
"Range",
owner=pkg,
text="The vehicle shall travel at least 400 km on one charge.",
)
builder.satisfy(model, source=battery, target=range_req)
from sysml2kit.text import write_model
print(write_model(model)) # standard SysML v2 textual notation
from sysml2kit.query import unverified_requirements
print(unverified_requirements(model)) # [REQ-001] — no verify link yet
Architecture
sysml2kit
├── model # element classes, Model container, builder API
├── text # SysML v2 textual notation writer
├── interchange # Systems Modeling API JSON reader/writer
├── query # traceability queries
├── validation # rule-based checks (S2K001...)
├── diff # element-level model diff
├── api # Systems Modeling API HTTP client
├── backends # parser backends (sysmlpy behind the [parse] extra)
├── interop # tool-agnostic requirement extraction
└── cli # `sysml2kit` command line
The spec pin, element subset, and known deviations are documented in
SPEC.md. Reference spec release: OMG SysML-v2-Release tag
2026-05.
Domain content lives outside the kit. For antenna/RF systems engineering, see sysml2kit-rf-library, a SysML v2 model library consumed through this package.
For agents
An MCP server ships behind the mcp extra with eight tools: model_show,
model_validate, model_diff, model_export, model_diagram,
requirements_trace, requirements_extract, library_load. Artifacts are
returned as file paths, not payloads.
pip install "sysml2kit[mcp,parse]"
sysml2kit mcp serve # stdio; --transport http also supported
{"mcpServers": {"sysml2kit": {"command": "sysml2kit", "args": ["mcp", "serve"]}}}
The CLI (sysml2kit show | validate | diff | export | fmt) covers the same
operations for shell use.
Development
uv sync --all-extras --group dev
uv run pytest # core suite (no extras needed)
uv run pytest -m parse # round-trip tests against sysmlpy
uv run ruff check . && uv run ruff format --check .
uv run mypy
scripts/slopcheck.sh # prose lint, advisory
uv run mkdocs serve # docs preview
Citation
@software{hodge2026sysml2kit,
author = {Hodge, John},
title = {sysml2kit: API-first Python tooling for SysML v2 models},
year = {2026},
url = {https://github.com/jman4162/sysml2kit},
license = {Apache-2.0}
}
License
Apache-2.0. See LICENSE and NOTICE. This project contains no code or model text from the EPL-2.0 OMG pilot implementation; conformance checks run it out of process only.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sysml2kit-0.2.0.tar.gz.
File metadata
- Download URL: sysml2kit-0.2.0.tar.gz
- Upload date:
- Size: 197.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
762c121f2e855cdd02c9fff60559c2b970ad82f1c880e6d67c72feb2463e4d7c
|
|
| MD5 |
53af7adc7873f6f4ba0b7a0850ae250c
|
|
| BLAKE2b-256 |
d7cdba7f1bab14295bccdb9461cfb9d79fa24108b630f6806adc17fdd6b4a976
|
Provenance
The following attestation bundles were made for sysml2kit-0.2.0.tar.gz:
Publisher:
release.yml on jman4162/sysml2kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sysml2kit-0.2.0.tar.gz -
Subject digest:
762c121f2e855cdd02c9fff60559c2b970ad82f1c880e6d67c72feb2463e4d7c - Sigstore transparency entry: 2545216899
- Sigstore integration time:
-
Permalink:
jman4162/sysml2kit@98d5d6ea9d3c4297fba16b32409325d60548e11f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/jman4162
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@98d5d6ea9d3c4297fba16b32409325d60548e11f -
Trigger Event:
push
-
Statement type:
File details
Details for the file sysml2kit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: sysml2kit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 54.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57ad19ca8b2d93e18df8e8d4bce761261387c6f170a1449789bcc87396a2b156
|
|
| MD5 |
698e9379e198faead2adc9a44025ae30
|
|
| BLAKE2b-256 |
b836bdf8e5ae78ab39af1feb0543221a2057279e245030e5f421fccd28545b93
|
Provenance
The following attestation bundles were made for sysml2kit-0.2.0-py3-none-any.whl:
Publisher:
release.yml on jman4162/sysml2kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sysml2kit-0.2.0-py3-none-any.whl -
Subject digest:
57ad19ca8b2d93e18df8e8d4bce761261387c6f170a1449789bcc87396a2b156 - Sigstore transparency entry: 2545217020
- Sigstore integration time:
-
Permalink:
jman4162/sysml2kit@98d5d6ea9d3c4297fba16b32409325d60548e11f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/jman4162
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@98d5d6ea9d3c4297fba16b32409325d60548e11f -
Trigger Event:
push
-
Statement type: