Introduction: From Diagrams to Semantics
If you’ve built systems models in SysML v1, the first time you open a SysML v2 project feels like stepping into a parallel universe. Gone are the stereotypes, the visual-first mindset, the reliance on UML conventions as a foundation. Instead, you encounter a formally grounded language—KerML (Kernel Modeling Language)—where every element has precise meaning, unambiguous semantics, and a text-based representation that reads like code.
SysML v2, ratified by the OMG in 2023 and now shipping in production tools (Cameo 2026, CATIA Magic 2026, IBM Systems Modeler for SysML v2), represents a quantum leap in systems engineering rigor. The language no longer hides complexity in diagrams; it exposes it through executable, versionable, queryable models. For PLM practitioners, the payoff is extraordinary: SysML v2 models integrate seamlessly with Teamcenter, Windchill, and other enterprise systems via standardized REST APIs, enabling true digital threads from concept through manufacturing.
This tutorial takes you from first principles through a complete, working example: an IoT sensor gateway. You’ll learn the KerML metamodel, write SysML v2 textual notation, define parametric constraints, and—critically—sync your model with a PLM system using REST services. Whether you’re migrating from v1 or starting fresh, this guide anchors theoretical depth with practical hands-on work.
Part 1: The KerML Foundation—Everything Is a Typed Element
Why KerML Matters: The UML Profile Problem
SysML v1 was built as a UML profile—a lightweight extension of UML stereotypes layered on top of the Unified Modeling Language. This approach had profound consequences:
- Ambiguity: A UML class could be a component, a part, a type, or a constraint, depending on which stereotype you applied. The metamodel allowed contradictory combinations.
- Limited precision: Stereotypes are metadata tags, not semantic primitives. A tool couldn’t guarantee that a “requirement” was used correctly.
- Version fragmentation: Each tool vendor interpreted SysML v1 slightly differently. Models built in one tool often required manual translation in another.
KerML solves this by abandoning UML entirely and building a minimal, formal metamodel from first principles. Every modeling construct in KerML—and by extension, SysML v2—is a Type. Think of Type not as a programming-language class, but as a contract: something that defines the essence and structure of what it represents.
The Core KerML Hierarchy
At the heart of KerML are four primitives:
- Element (the root of all things)
- Type (every element that can be the type of something else)
- Classifier (a Type that describes how to structure instances)
- Feature (a named, typed property or attribute)
Let me ground this with an analogy: Imagine you’re designing a library. In UML/v1, you’d create a class called “Book” and add stereotypes like “Requirement” or “Component.” In KerML, there’s only one kind of Book—a Type that describes what books are, their properties (author, ISBN, pages), and how they relate to other elements (shelves, readers, publishers). A requirement isn’t a special Book; it’s a distinct Type in the ontology with its own structure and semantics.

This diagram shows how every concrete element—Parts, Features, Connectors, Requirements—descends from a common foundation. Critically, KerML introduces the Definition-Usage pattern:
- Definition (e.g.,
part def IoTGateway) declares the essence of something. - Usage (e.g.,
part gateway : IoTGateway) creates an instance or occurrence of that definition.
This pattern, repeated throughout SysML v2, eliminates the v1 confusion where a single element tried to be both a type and an instance.
From Metamodel to Textual Syntax
KerML’s formality is expressed through textual notation—code-like syntax that mirrors the metamodel directly. Here’s a minimal example:
package sensors {
part def TemperatureSensor {
attribute temperature : Real;
port data : DataPort;
}
part sensor1 : TemperatureSensor;
}
Each line corresponds to a metamodel construct:
– package creates a namespace (Type container)
– part def declares a Part Definition (a structural Type)
– attribute defines a Feature (a typed property)
– port declares a communication endpoint
– part sensor1 creates an instance/usage of the type
This isn’t just pretty printing. The textual notation is executable: it can be parsed, validated, and queried programmatically. For PLM integration, this is transformative—a REST API can accept a SysML v2 model as text, validate it, extract design parameters, and push them to a database.
Part 2: Textual Notation Essentials—SysML v2 as Code
Syntax Building Blocks
SysML v2’s textual notation borrows from modern programming languages (Python, TypeScript) but is tailored to systems engineering. The core patterns are:
1. Namespaces (Packages)
package vehicles {
// All definitions below are scoped to 'vehicles'
}
2. Definition-Usage Pairs
part def Wheel {
attribute diameter : LengthValue;
attribute weight : MassValue;
}
part wheel1 : Wheel; // Usage (instance) of Wheel definition
3. Ports and Connections
part def Motor {
port mechanical_out : RotationalPort;
}
part def Gearbox {
port mechanical_in : RotationalPort;
port mechanical_out : RotationalPort;
}
connection driveline {
motor.mechanical_out to gearbox.mechanical_in;
}
4. Requirements and Constraints
requirement safety_requirement : Requirement {
doc = "System must shut down if temperature exceeds 85°C";
}
constraint thermal_limit {
attribute max_temp = 85; // Parametric constraint value
}
5. Flows and Exchanges
part def Gateway {
port uplink : UpstreamPort flows messages;
}
part def Sensor {
port data : SensorPort flows messages;
}
connection message_flow {
sensor.data to gateway.uplink;
}
The elegance of this notation is that every construct has a single, unambiguous interpretation. There are no stereotypes, no alternate spellings, no tool-specific extensions.
Example: Defining a Simple IoT Sensor
package iot_gateway {
import ScalarValues::*;
part def Sensor {
attribute sensorId : String;
attribute readInterval : DurationValue;
port data_out : DataPort;
}
part def DataPort {
attribute format : String;
attribute baud_rate : Integer;
}
part def Gateway {
attribute modelNumber : String;
attribute firmwareVersion : String;
part sensors[*] : Sensor; // Composition: zero or more sensors
port cloud_uplink : CloudPort;
}
part sensor_a : Sensor {
sensorId = "TEMP-001";
readInterval = 60 [s];
}
part gateway : Gateway {
modelNumber = "IGW-2026";
parts sensor_a; // Aggregates sensor_a into this gateway
}
}
Key observations:
part defdeclares a structural type;partcreates an instance.[*]means “zero or more”; composition is expressed through nested parts.- Attribute initialization (
sensorId = "TEMP-001") happens at usage time. - Types are reusable; instances populate the actual model.
This structure maps directly to the REST API model we’ll cover later: each type becomes a schema in the API, and each instance becomes a resource.
Part 3: The SysML v2 Metamodel Layers—Parts, Ports, and Parametrics
SysML v2 extends KerML with five specialized modeling domains, each a set of Type constructs for a specific purpose:
Layer 1: Structural Architecture (Parts, Ports, Connections)
Parts are the building blocks—think of them as containers that decompose a system hierarchically.
part def EnergySystem {
part battery : Battery;
part converter : DCACConverter;
part load : Load;
connection power_path {
battery.out to converter.in;
converter.out to load.in;
}
}
Ports are typed communication points. Unlike UML ports (which are just visual markers), SysML v2 ports are first-class Types with their own features and protocols.
port def ElectricalPort {
attribute voltage : VoltageValue;
attribute current : CurrentValue;
}
port def DataPort {
attribute protocol : String;
attribute bandwidth : FrequencyValue;
}
Connections bind ports and flow data, energy, or signals between parts.

This diagram illustrates how parts nest, ports expose communication surfaces, and connectors route exchanges between parts at different hierarchy levels.
Layer 2: Requirements and Allocations
Requirements in SysML v2 are first-class Types, not floating text boxes.
requirement R1_GatewayUptime {
metadata doc = "Gateway shall maintain 99.9% uptime over 365 days";
attribute target : Percentage = 99.9;
}
requirement R2_SensorAccuracy {
metadata doc = "Temperature sensors shall achieve ±0.5°C accuracy";
}
allocation {
R1_GatewayUptime allocatedFrom gateway;
R2_SensorAccuracy allocatedFrom sensor_a;
}
Allocations explicitly bind requirements to model elements. This is crucial for traceability and PLM integration—when you query the REST API for “all requirements allocated to the gateway,” you get a precise result set.
Layer 3: Parametric Design and Constraints
This is where SysML v2 shines for design optimization. Parametric models express mathematical relationships between properties.
part def ThermalSystem {
attribute power_dissipated : PowerValue;
attribute ambient_temp : TemperatureValue;
attribute component_temp : TemperatureValue;
attribute thermal_resistance : ResistanceValue; // K/W
constraint thermal_balance {
// component_temp = ambient_temp + power_dissipated * thermal_resistance
component_temp == ambient_temp + power_dissipated * thermal_resistance;
}
}
When you instantiate this part and set power_dissipated and thermal_resistance, the constraint solver can derive component_temp. In a PLM system integrated via REST API, you can push a design variant, the API evaluates the constraint, and returns the computed thermal result—enabling automated design space exploration.

This diagram shows how constraints couple parameters, enable bi-directional inference, and feed into design optimization loops in the PLM system.
Layer 4: Behavior (Actions and Interactions)
SysML v2 models behavior through Actions—parameterized, composable building blocks for dynamic behavior.
action def SensorRead {
input sensor_id : String;
output reading : TemperatureValue;
output timestamp : TimeValue;
}
action def TransmitToCloud {
input data : TemperatureValue;
input gateway_id : String;
output response : HttpResponse;
}
action def GatewayMainLoop {
do sensor_read : SensorRead;
do transmit : TransmitToCloud {
data = sensor_read.reading;
gateway_id = "IGW-2026-001";
}
}
Actions compose: GatewayMainLoop calls SensorRead, which outputs a reading that feeds into TransmitToCloud. This composition creates a trace of data flow, a foundation for simulation and code generation.
Layer 5: Analysis and Verification
SysML v2 supports formal analysis through verification activities and test cases.
verification verifyThermalBounds {
subject = gateway;
predicate = thermal_system.component_temp <= 85 [°C];
method = analysis;
}
test testSensorAccuracy {
steps {
// Stimulate sensor with known input
// Assert output matches specification
}
}
These elements integrate with simulation tools and PLM systems to create closed-loop verification workflows.
Part 4: Building Your First IoT Gateway Model
Let’s synthesize everything into a complete, working model. This is a real SysML v2 textual file that you can paste into Cameo 2026 or another SysML v2 editor.
The Complete Gateway Definition
package IoTGatewaySystem {
import ScalarValues::*;
// ========== PORT DEFINITIONS ==========
port def SensorDataPort {
attribute protocol : String = "Modbus";
attribute sampleRate : FrequencyValue;
}
port def CloudPort {
attribute protocol : String = "MQTT";
attribute brokerUrl : String;
}
port def PowerPort {
attribute voltage : VoltageValue;
attribute maxCurrent : CurrentValue;
}
// ========== PARTS ==========
part def TemperatureSensor {
attribute sensorId : String;
attribute accuracy : TemperatureValue = 0.5 [°C];
port data : SensorDataPort;
}
part def Gateway {
attribute modelNumber : String = "IGW-2026";
attribute cpuCores : Integer = 4;
attribute ramGB : Integer = 8;
part sensors[*] : TemperatureSensor;
port power_in : PowerPort;
port cloud_out : CloudPort;
attribute system_temp : TemperatureValue;
attribute max_allowable_temp : TemperatureValue = 85 [°C];
// Parametric constraint: system temperature as function of power
constraint thermal {
system_temp == 25 [°C] + (power_in.voltage * 0.5);
}
}
part def PowerSupply {
attribute ratedOutput : PowerValue = 60 [W];
port output : PowerPort;
}
part def CloudBridge {
attribute apiKey : String;
port mqtt_in : CloudPort;
}
// ========== CONNECTIONS ==========
connection sensors_to_gateway {
// Each sensor connects to gateway
// (in real model, would iterate over sensors array)
}
// ========== REQUIREMENTS ==========
requirement REQ_Uptime {
doc = "Gateway must maintain 99.9% uptime";
metadata priority = "high";
}
requirement REQ_ThermalSafety {
doc = "Internal temperature shall not exceed 85°C under nominal load";
}
requirement REQ_SensorAccuracy {
doc = "Each sensor shall achieve ±0.5°C accuracy";
}
// ========== ALLOCATIONS ==========
allocate REQ_ThermalSafety to gateway;
allocate REQ_SensorAccuracy to sensors;
allocate REQ_Uptime to gateway;
// ========== VERIFICATION ==========
verification verify_thermal_constraint {
subject = gateway;
predicate = gateway.system_temp <= gateway.max_allowable_temp;
}
// ========== INSTANCES ==========
part my_gateway : Gateway {
modelNumber = "IGW-2026-PILOT-001";
cpuCores = 8;
}
part temp_sensor_1 : TemperatureSensor {
sensorId = "TEMP-LIVING-ROOM-001";
}
part temp_sensor_2 : TemperatureSensor {
sensorId = "TEMP-GARAGE-001";
}
part psu : PowerSupply {
ratedOutput = 90 [W];
}
part cloud_client : CloudBridge {
apiKey = "sk-xyz123";
}
}
This model defines:
- Three port types (SensorDataPort, CloudPort, PowerPort) with attributes that enforce communication protocols.
- Four part types (TemperatureSensor, Gateway, PowerSupply, CloudBridge) representing physical/logical components.
- Parametric constraint linking system temperature to power input.
- Three requirements with allocations to specific parts.
- Verification activity that formally states the thermal safety predicate.
- Five instances representing the actual deployed system.
The beauty: every element is queryable, versionable, and—via the REST API—patchable by the PLM system.
Part 5: The SysML v2 REST API and PLM Integration
The Systems Modeling API Specification
SysML v2 doesn’t just define a language; it defines how tools interact with models. The Systems Modeling API and Services Specification (OASIS/OMG standard) specifies three layers:
- Platform-Independent Model (PIM): Abstract service definitions (query, create, update, delete elements).
- REST/HTTP PSM: Binding to HTTP/JSON, using OpenAPI 3.0.
- OSLC PSM: Binding to OSLC (Open Services for Lifecycle Collaboration), an enterprise integration standard.
For PLM integration, you use the REST/HTTP PSM. Every SysML element becomes a RESTful resource.

Example: Querying Your Gateway Model via REST
Once your SysML v2 model is loaded in a service provider (e.g., Siemens Systems Modeler, an open-source SysON instance, or a custom server), you interact with it via standard HTTP:
Get all Part Definitions:
GET /services/models/{modelId}/elements?filter=type:PartDefinition
Authorization: Bearer {token}
Response (JSON):
{
"elements": [
{
"id": "df7a5c91-...",
"type": "PartDefinition",
"name": "Gateway",
"qualifiedName": "IoTGatewaySystem::Gateway",
"ownedAttributes": [
{
"id": "attr-001",
"type": "Attribute",
"name": "modelNumber",
"typeRef": "ScalarValues::String"
}
]
}
]
}
Query all Requirements allocated to a specific Part:
GET /services/models/{modelId}/elements/{gatewayId}/allocated-requirements
Authorization: Bearer {token}
Response (JSON):
{
"requirements": [
{
"id": "req-001",
"name": "REQ_Uptime",
"doc": "Gateway must maintain 99.9% uptime"
},
{
"id": "req-002",
"name": "REQ_ThermalSafety",
"doc": "Internal temperature shall not exceed 85°C under nominal load"
}
]
}
Update a Parametric Attribute (e.g., push a design variant from PLM):
PATCH /services/models/{modelId}/elements/{gatewayId}/attributes/cpuCores
Content-Type: application/json
Authorization: Bearer {token}
{
"value": 16
}
Response:
{
"id": "attr-cores",
"name": "cpuCores",
"value": 16,
"updated": "2026-04-17T14:23:45Z"
}
Evaluate a Constraint (POST to constraint solver):
POST /services/models/{modelId}/constraints/{thermalConstraintId}/evaluate
Content-Type: application/json
Authorization: Bearer {token}
{
"inputs": {
"power_in_voltage": 12,
"power_in_current": 5
}
}
Response:
{
"constraint_id": "thermal-001",
"status": "satisfied",
"outputs": {
"system_temp": 28.5
},
"timestamp": "2026-04-17T14:24:10Z"
}
Practical PLM Integration Workflow
Here’s how Teamcenter and SysML v2 interact in a 2026 enterprise setup:
- Model Authoring in Cameo/CATIA Magic: Engineers write SysML v2 textual notation.
- Push to Repository: Model is committed to a Git-like system (or directly to SysML v2 service provider).
- Teamcenter Subscribes to Model Events: Teamcenter watches the SysML REST API for changes (via webhooks or polling).
- Requirements Sync: When a requirement is created/modified in SysML, Teamcenter pulls it via REST API and creates a corresponding Requirement Management (RM) object.
- Design Parameter Sync: Parametric attributes (CPU cores, thermal limits) are synchronized to Teamcenter’s design parameter database, triggering CAD model updates.
- BOM Generation: Teamcenter queries the part structure via REST API and generates a Bill of Materials linked to the logical design.
- Verification Loop: Test results from simulation tools are posted back to the SysML model via REST API, creating a closed-loop verification trace.

Part 6: The 2026 Tool Landscape
Cameo and CATIA Magic (Dassault Systèmes)
With the 2026 release, Cameo and CATIA Magic now ship SysML v2 support as a first-class feature:
- Two-way synchronization between textual and graphical notation (edit in text, diagrams auto-update; edit diagrams, text reflects changes).
- SysML v2 Community Edition available for free, removing the barrier to entry.
- Integrated constraint solver for parametric evaluation.
- REST API client for querying external SysML repositories.
The licensing structure is nuanced: only certain No Magic license configurations (M2E-N, M2E-C, M3E-N, M3E-C) include SysML v2; custom MagicDraw base + plugin configurations do not. Check your license terms.
IBM Systems Modeler for SysML v2
A collaboration between IBM and Siemens, this tool is built on the proven Rhapsody foundation but rewritten for SysML v2 semantics. It excels in simulation and behavior modeling—if your systems engineering process emphasizes dynamic analysis, this is compelling.
Siemens Systems Modeler Integration
Siemens integrated SysML v2 support into Teamcenter itself, enabling engineers to author models directly within PLM without context-switching. The integration includes:
- Native SysML v2 textual parsing.
- Bidirectional sync with Teamcenter’s Item/BOM structure.
- REST API serving models directly from Teamcenter.
Open-Source and Academic Tools
SysON (Stepper Open-Source Notation) is a free, web-based SysML v2 editor with REST API support. Ideal for learning, prototyping, and small teams.
MontiCore provides a language workbench for SysML v2 grammar customization and code generation.
v1 vs. v2: Migration Considerations
Migrating from SysML v1 to v2 is non-trivial but feasible. The OMG provides a transformation specification that maps v1 constructs to v2, but it’s not lossless:
| v1 Construct | v2 Equivalent | Notes |
|---|---|---|
| Block | Part Definition | Direct mapping |
| Requirements (diagram) | Requirement (Type) | More rigorous |
| Parametric Diagram | Constraint | Explicit syntax |
| Activity Diagram | Action | Refactored as Type |
| State Machine | Action-based behavior | More flexible composition |
Migration Strategy:
- Pilot projects: Start SysML v2 on new systems; keep v1 for legacy.
- Gradual adoption: Tools like Cameo support both v1 and v2 in the same project (project-level setting).
- Transformation tooling: Use Siemens/OMG transformation scripts to bulk-convert v1 diagrams to v2 structure.
- Methodology update: Your SE process (requirements flow-down, allocation, verification) will shift. Allow time for team reskilling.
The transformation covers approximately 20% of the metamodel as of 2026; other elements require manual refactoring. This is a multi-quarter effort for large portfolios.
Part 7: Advanced Workflow—Constraint Solving and Design Exploration
Let’s deepen the thermal example to show how SysML v2 enables automated design optimization.
Parametric Model with Multiple Constraints
part def ThermalDesign {
// Inputs: design choices
attribute cpu_power : PowerValue;
attribute ambient_temp : TemperatureValue;
attribute heatsink_area : AreaValue;
attribute airflow : VelocityValue;
// Parameters: material/physics properties
attribute heatsink_conductivity : Real = 150; // W/(m*K)
attribute natural_convection_h : Real = 10; // W/(m²*K) (no fans)
attribute forced_convection_h : Real = 100; // W/(m²*K) (with airflow)
// Internal: calculated
attribute thermal_resistance : Real;
attribute convection_coefficient : Real;
attribute junction_temp : TemperatureValue;
// Constraints: physics equations
constraint convection {
convection_coefficient ==
if airflow > 0 [m/s] then forced_convection_h else natural_convection_h;
}
constraint thermal_resistance_eq {
thermal_resistance ==
1.0 / (convection_coefficient * heatsink_area);
}
constraint thermal_balance {
junction_temp ==
ambient_temp + cpu_power * thermal_resistance;
}
constraint safety_limit {
junction_temp <= 85 [°C];
}
}
Now, design space exploration via the REST API:
Scenario 1: Passive cooling (no fans)
POST /services/models/thermal-design/constraints/evaluate
{
"inputs": {
"cpu_power": 50,
"ambient_temp": 25,
"heatsink_area": 0.01,
"airflow": 0 // No fans
}
}
Response:
{
"junction_temp": 72.5, // Safe
"satisfied": true
}
Scenario 2: Higher load, same passive setup
POST /services/models/thermal-design/constraints/evaluate
{
"inputs": {
"cpu_power": 100,
"ambient_temp": 25,
"heatsink_area": 0.01,
"airflow": 0
}
}
Response:
{
"junction_temp": 145, // Violates 85°C limit
"satisfied": false,
"constraint_violations": ["safety_limit"]
}
Scenario 3: Fixed load, optimized heatsink
POST /services/models/thermal-design/constraints/solve
{
"objectives": {
"minimize": ["heatsink_area"]
},
"constraints": {
"safety_limit": true,
"cpu_power": 100,
"ambient_temp": 25,
"airflow": 0
}
}
Response:
{
"solution": {
"heatsink_area": 0.0267, // m²
"convection_coefficient": 10,
"thermal_resistance": 3.73,
"junction_temp": 84.99
}
}
This is where SysML v2 + PLM shines: a Teamcenter designer can submit design variants, the SysML REST API evaluates them in seconds, and returns the feasible design space without running CAD simulations. The constraint model becomes a digital specification that’s both human-readable (textual SysML) and machine-executable (REST API).
Part 8: Hands-On Exercise—Deploy Your First Model
Step 1: Install Cameo SysML v2 Community Edition
- Download from Dassault’s CATIA Magic portal.
- Install and open Cameo.
- Create a new SysML v2 project.
Step 2: Paste the Gateway Model
In the Cameo textual editor, paste the complete gateway definition from Part 4. Save and let Cameo validate the syntax.
Step 3: Inspect the Generated Diagram
Cameo automatically generates a structural diagram from the textual notation. You’ll see:
– Part definitions as boxes.
– Port types on the boundaries.
– Containment relationships (sensors inside gateway).
– Parametric constraint symbols.
Step 4: Query the Model via REST
If your Cameo instance exposes the REST API (check Tools → REST API settings):
curl -X GET http://localhost:8080/services/models/IoTGatewaySystem/elements \
-H "Accept: application/json"
You’ll receive JSON describing all parts, ports, and requirements.
Step 5: Connect to Teamcenter (Optional, Requires License)
If you have Teamcenter access:
- In Cameo, go to Tools → Teamcenter Integration.
- Configure the Teamcenter server URL and credentials.
- Create a requirement in SysML v2.
- Right-click → Synchronize to Teamcenter.
- In Teamcenter, verify that the requirement appears in the RM module.
This closes the loop: SysML v2 becomes the single source of truth for architectural requirements, and PLM becomes the enforcer of design rules and traceability.
Part 9: Common Pitfalls and Best Practices
Pitfall 1: Mixing v1 and v2 Thinking
In v1, you’d create a “Component” block and add stereotypes. In v2, resist the urge:
// Wrong (v1 thinking):
part def System {
// Try to stuff everything in one place
}
// Right (v2 thinking):
part def SystemArchitecture {
part logical_design : LogicalDesign;
part physical_design : PhysicalDesign;
part control_system : ControlSystem;
}
part def LogicalDesign { ... }
part def PhysicalDesign { ... }
part def ControlSystem { ... }
SysML v2 encourages hyperspecialization: each type has a clear purpose.
Pitfall 2: Over-Parameterizing
It’s tempting to add a constraint for every relationship:
// Don't do this (over-constrained):
constraint every_thing {
x == a + b;
y == c - d;
z == x * y;
...
}
// Do this (focused constraints):
constraint power_budget {
total_power <= max_dissipation;
}
constraint thermal_design {
case_temp == ambient_temp + total_power * thermal_resistance;
}
Keep constraints focused and testable. A constraint that’s always trivial or always violated is a red flag.
Pitfall 3: Ignoring Allocation Rigor
Don’t treat allocations as nice-to-have:
// Weak (missing allocations):
requirement R1 { ... }
part def Gateway { ... }
// Strong (explicit allocation):
requirement R1 { ... }
part def Gateway { ... }
allocate R1 to gateway;
// Query: "What requirements does this gateway satisfy?"
// Answer: REST API returns [R1, ...]
Allocations are the foundation of traceability. They’re what PLM systems query and audit.
Best Practice 1: Version Control Your Models
SysML v2’s textual notation is git-friendly:
git init my_model
cd my_model
echo "package MySystem { ... }" > model.sysmlv2
git add model.sysmlv2
git commit -m "Initial gateway model"
Diffs are readable, merge conflicts are solvable, and you have full history. Many teams now use GitOps workflows: commit to main branch → CI pipeline validates syntax → REST API auto-updates service.
Best Practice 2: Separate Definitions from Instances
// File: definitions.sysmlv2
package IoTGatewayDefinitions {
part def Gateway { ... }
part def Sensor { ... }
}
// File: instances.sysmlv2
package IoTGatewayInstances {
import IoTGatewayDefinitions::*;
part production_gateway : Gateway { ... }
part prototype_gateway : Gateway { ... }
}
This separation makes it easy to reuse the same definitions across multiple instances/variants.
Best Practice 3: Use Requirement Metadata for Traceability
requirement R1 {
doc = "User-visible description";
metadata {
source = "Customer requirement DOC-2026-001";
owner = "Systems Engineer";
priority = "high";
verification_method = "analysis";
}
}
When the PLM REST API pulls this requirement, the metadata tags along, enabling rich traceability queries.
Part 10: The Digital Thread in Action
The ultimate goal of SysML v2 + PLM integration is the digital thread: an unbroken, machine-readable link from concept through deployment.
The Flow
- Concept Phase: Write SysML v2 requirements model → push to Teamcenter.
- Design Phase: CAD team creates parts linked to SysML port definitions → BOM synchronized back to SysML via REST API.
- Analysis Phase: Thermal simulation evaluated against SysML parametric constraints → results annotated on model.
- Manufacturing Phase: Parametric attributes (tolerances, material codes) flow to CAM → verify against SysML specifications.
- Service Phase: Field data (actual thermal readings, uptime metrics) queried against SysML v2 model → closed-loop verification.

Each arrow represents a REST API call or automated sync. The SysML v2 model is the Rosetta Stone—it’s simultaneously:
- A source of truth for requirements and architecture.
- A computable specification (constraints, parametrics).
- A dictionary linking requirements to CAD, simulations, and tests.
- A versioned artifact that lives alongside design.
Conclusion: SysML v2 as Your Enterprise Standard
If you’re still using SysML v1, the question is no longer “Should we migrate?” but “When can we afford not to?” The 2026 tool landscape is mature:
- Cameo/CATIA Magic offer production-grade v2 modeling with free community editions.
- Siemens Systems Modeler (IBM Rhapsody-based) provides deep simulation and Teamcenter integration.
- Open-source alternatives like SysON lower the barrier for prototyping.
- REST API standardization means your models are no longer locked into a single tool vendor.
For PLM practitioners, SysML v2 is transformative. Requirements, architecture, and design constraints become executable specifications that can be queried, validated, and synced with CAD, simulation, and manufacturing systems. The textual notation, grounded in KerML’s formal semantics, eliminates the ambiguity and tool fragmentation that plagued v1.
Start with the IoT gateway example in this tutorial. Build a small SysML v2 model, push it to a REST API service, and integrate it with your PLM system. The payoff—traceability, reusability, and automation—will justify the learning curve.
Welcome to the future of systems engineering.
References and Further Reading
- OMG SysML v2 Specification
- Systems Modeling API and Services (Part 3)
- OASIS SysML v2.0 Specification
- GitHub: SysML v2 Release
- SysML v2 API Cookbook
- No Magic Cameo SysML v2 Documentation
- Siemens Teamcenter SysML v2 Integration Guide
- SysML v1 to v2 Transformation Specification
- Technical Report: SysML v1 to v2 Transition Approach (2024)
- Sensmetry: SysML v2 Textual Notation Cheatsheet
- Syndeia Digital Thread Platform
- Dassault CATIA Magic/Cameo SysML v2 Community Edition
- GoEngineer: SysML v2 Advantages in Cameo & CATIA Magic 2026
