Pseudostates

Overview

Pseudostates are transient control vertices in a State Machine graph that route execution between States. Unlike standard States, Pseudostates do not represent invariant conditions, execute doActivity behaviors, or hold active state configurations. Instead, they act as connective nodes—chaining individual Transitions together into complex compound transitions for initialization, branching, parallel execution, and boundary encapsulation.

UML Specification (Subclause 14.2.3.7):

“A Pseudostate is an abstraction that encompasses different types of transient Vertices in the StateMachine graph. Pseudostates are generally used to chain multiple Transitions into more complex compound transitions...”

Initial Pseudostate

An Initial Pseudostate defines the starting execution point within a Region or State Machine canvas. When a Region is activated through default entry, execution automatically commences from its Initial Pseudostate along its outgoing Transition to target the default active Vertex.

An Initial Pseudostate serves as the source for at most one outgoing Transition. While this initial Transition can execute an effect Behavior, it cannot specify a Trigger or Guard condition, ensuring deterministic initialization.

Operations

  • Creating:

    Click the Initial Pseudostate Stencil in the Stencil Toolbar, then click anywhere within the Canvas or a State Region to create a new Initial Pseudostate.
  • Renaming:

    Select the Initial Pseudostate and edit the Name field in the Properties Panel. An Initial Pseudostate's name must be unique within the containing State Machine SV1002.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Initial Pseudostate across the Canvas or within its current Region to change its visual location.
    • Reparenting:

      To move an Initial Pseudostate to a different Region (or out onto the root Canvas), select the Initial Pseudostate, drag it over the target Region or Canvas, and hold the Alt key while releasing the mouse button.
  • Deleting:

    Select the Initial Pseudostate on the Canvas and hit Delete, or right-click the Initial Pseudostate and select Delete from the context menu. Deleting an Initial Pseudostate automatically deletes all its connected Transitions.
  • Resizing:

    An Initial Pseudostate has a fixed visual footprint and cannot be manually resized SV1018.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclause 14.2.3.7):

“An initial Pseudostate represents a starting point for a Region; that is, it is the point from which execution of its contained behavior commences when the Region is entered via default activation. It is the source for at most one Transition, which may have an associated effect Behavior, but not an associated trigger or guard. There can be at most one initial Vertex in a Region.”

Validations

System
  • SV1002:

    Vertices and Transitions within a State Machine must have unique names.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.

History Pseudostate

History Pseudostates serve as memory nodes within composite State Regions. When a Region is exited, its active state configuration is preserved. Later, when an incoming Transition targets a History Pseudostate inside that Region, execution restores the preserved state configuration instead of defaulting to the standard initial activation path.

Shallow History

A Shallow History Pseudostate ([H]) preserves and restores only the topmost substate of the most recent active configuration in its containing Region. Any nested sub-regions within that restored substate enter via their standard default entry rules rather than restoring deeper historical substates.

  • Creating:

    Click the Shallow History Pseudostate Stencil in the Stencil Toolbar, then click anywhere within a State Region to create a new Shallow History Pseudostate. A Shallow History Pseudostate can only be added to a Region of a composite State SV1016.
  • Renaming:

    Select the Shallow History Pseudostate and edit the Name field in the Properties Panel. A Shallow History Pseudostate's name must be unique within the containing State Machine SV1002.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Shallow History Pseudostate across the Canvas or within its current Region to change its visual location.
    • Reparenting:

      To move a Shallow History Pseudostate to a different Region (or out onto the root Canvas), select the Shallow History Pseudostate, drag it over the target Region or Canvas, and hold the Alt key while releasing the mouse button.
  • Deleting:

    Select the Shallow History Pseudostate on the Canvas and hit Delete, or right-click the Shallow History Pseudostate and select Delete from the context menu. Deleting a Shallow History Pseudostate automatically deletes all its connected Transitions.
  • Resizing:

    A Shallow History Pseudostate has a fixed visual footprint and cannot be manually resized SV1018.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

Deep History

A Deep History Pseudostate ([H*]) preserves and restores the full, nested state configuration of its containing Region down to its innermost active leaf states. Restoring a Deep History state executes entry behaviors along the entire active hierarchy in top-down sequence.

  • Creating:

    Click the Deep History Pseudostate Stencil in the Stencil Toolbar, then click anywhere within a State Region to create a new Deep History Pseudostate. A Deep History Pseudostate can only be added to a Region of a composite State SV1016.
  • Renaming:

    Select the Deep History Pseudostate and edit the Name field in the Properties Panel. A Deep History Pseudostate's name must be unique within the containing State Machine SV1002.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Deep History Pseudostate across the Canvas or within its current Region to change its visual location.
    • Reparenting:

      To move a Deep History Pseudostate to a different Region (or out onto the root Canvas), select the Deep History Pseudostate, drag it over the target Region or Canvas, and hold the Alt key while releasing the mouse button.
  • Deleting:

    Select the Deep History Pseudostate on the Canvas and hit Delete, or right-click the Deep History Pseudostate and select Delete from the context menu. Deleting a Deep History Pseudostate automatically deletes all its connected Transitions.
  • Resizing:

    A Deep History Pseudostate has a fixed visual footprint and cannot be manually resized SV1018.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclauses 14.2.3.4.4 & 14.2.3.7):

“The concept of State history was introduced by David Harel in the original statechart formalism. It is a convenience concept associated with Regions of composite States whereby a Region keeps track of the state configuration it was in when it was last exited. This allows easy return to that same state configuration, if desired...

Deep history (deepHistory) represents the full state configuration of the most recent visit to the containing Region... Shallow history (shallowHistory) represents a return to only the topmost substate of the most recent state configuration, which is entered using the default entry rule.”

Validations

System
  • SV1002:

    Vertices and Transitions within a State Machine must have unique names.
  • SV1016:

    A History Vertex can only be added to a Region of a composite State.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.

Join Pseudostate

A Join Pseudostate serves as a synchronization barrier in a State Machine, merging multiple concurrent execution paths originating from different orthogonal Regions into a single outgoing Transition.

Similar to a join node in Petri nets, a Join Pseudostate enforces synchronization: execution remains blocked at the Join until all incoming Transitions from active orthogonal Regions complete. Incoming Transitions terminating on a Join Pseudostate cannot specify Guards or triggers.

Operations

  • Creating:

    Click the Join Pseudostate Stencil in the Stencil Toolbar, then click anywhere within the Canvas or a State Region to create a new Join Pseudostate.
  • Renaming:

    Select the Join Pseudostate and edit the Name field in the Properties Panel. A Join Pseudostate's name must be unique within the containing State Machine SV1002.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Join Pseudostate across the Canvas or within its current Region to change its visual location.
    • Reparenting:

      To move a Join Pseudostate to a different Region (or out onto the root Canvas), select the Join Pseudostate, drag it over the target Region or Canvas, and hold the Alt key while releasing the mouse button.
  • Resizing:

    Select the Join Pseudostate and drag its top or bottom edge to adjust its height. Only the height of a Join Vertex can be adjusted, and it cannot be reduced below the bounds of its connected Transitions SV1019.
  • Deleting:

    Select the Join Pseudostate on the Canvas and hit Delete, or right-click the Join Pseudostate and select Delete from the context menu. Deleting a Join Pseudostate automatically deletes all its connected Transitions.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclause 14.2.3.7):

“join – This type of Pseudostate serves as a common target Vertex for two or more Transitions originating from Vertices in different orthogonal Regions. Transitions terminating on a join Pseudostate cannot have a Guard or a trigger. Similar to junction points in Petri nets, join Pseudostates perform a synchronization function, whereby all incoming Transitions have to complete before execution can continue through an outgoing Transition.”

Validations

System
  • SV1002:

    Vertices and Transitions within a State Machine must have unique names.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1019:

    Only the height of a Join or Fork Vertex can be adjusted, and it cannot be reduced below the bounds of its connected Transitions.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.

Fork Pseudostate

A Fork Pseudostate splits a single incoming Transition into multiple parallel outgoing Transitions that concurrently enter target Vertices in distinct orthogonal Regions.

Forking enables simultaneous activation of concurrent state threads within a composite State. Transitions outgoing from a Fork Pseudostate execute atomically upon fork activation and cannot specify individual Guards or triggers.

Operations

  • Creating:

    Click the Fork Pseudostate Stencil in the Stencil Toolbar, then click anywhere within the Canvas or a State Region to create a new Fork Pseudostate.
  • Renaming:

    Select the Fork Pseudostate and edit the Name field in the Properties Panel. A Fork Pseudostate's name must be unique within the containing State Machine SV1002.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Fork Pseudostate across the Canvas or within its current Region to change its visual location.
    • Reparenting:

      To move a Fork Pseudostate to a different Region (or out onto the root Canvas), select the Fork Pseudostate, drag it over the target Region or Canvas, and hold the Alt key while releasing the mouse button.
  • Resizing:

    Select the Fork Pseudostate and drag its top or bottom edge to adjust its height. Only the height of a Fork Vertex can be adjusted, and it cannot be reduced below the bounds of its connected Transitions SV1019.
  • Deleting:

    Select the Fork Pseudostate on the Canvas and hit Delete, or right-click the Fork Pseudostate and select Delete from the context menu. Deleting a Fork Pseudostate automatically deletes all its connected Transitions.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclause 14.2.3.7):

“fork – fork Pseudostates serve to split an incoming Transition into two or more Transitions terminating on Vertices in orthogonal Regions of a composite State. The Transitions outgoing from a fork Pseudostate cannot have a guard or a trigger.”

Validations

System
  • SV1002:

    Vertices and Transitions within a State Machine must have unique names.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1019:

    Only the height of a Join or Fork Vertex can be adjusted, and it cannot be reduced below the bounds of its connected Transitions.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.

Junction Pseudostate

A Junction Pseudostate is a transient control Vertex used to chain multiple Transition segments together into compound paths. It can be utilized to merge several incoming Transitions into a single shared continuation path, or to split an incoming Transition into multiple outgoing paths governed by different Guard conditions.

Junctions execute static conditional branching: all Guard conditions along a compound transition path containing a Junction are evaluated before any portion of the transition is taken. If no valid outgoing path evaluates to true, the entire compound transition is disabled.

Operations

  • Creating:

    Click the Junction Pseudostate Stencil in the Stencil Toolbar, then click anywhere within the Canvas or a State Region to create a new Junction Pseudostate.
  • Renaming:

    Select the Junction Pseudostate and edit the Name field in the Properties Panel. A Junction Pseudostate's name must be unique within the containing State Machine SV1002.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Junction Pseudostate across the Canvas or within its current Region to change its visual location.
    • Reparenting:

      To move a Junction Pseudostate to a different Region (or out onto the root Canvas), select the Junction Pseudostate, drag it over the target Region or Canvas, and hold the Alt key while releasing the mouse button.
  • Deleting:

    Select the Junction Pseudostate on the Canvas and hit Delete, or right-click the Junction Pseudostate and select Delete from the context menu. Deleting a Junction Pseudostate automatically deletes all its connected Transitions.
  • Resizing:

    A Junction Pseudostate has a fixed visual footprint and cannot be manually resized SV1018.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclause 14.2.3.7):

“junction – This type of Pseudostate is used to connect multiple Transitions into compound paths between States. For example, a junction Pseudostate can be used to merge multiple incoming Transitions into a single outgoing Transition representing a shared continuation path. Or, it can be used to split an incoming Transition into multiple outgoing Transition segments with different Guard Constraints.

NOTE. Such guard Constraints are evaluated before any compound transition containing this Pseudostate is executed, which is why this is referred to as a static conditional branch.”

Validations

System
  • SV1002:

    Vertices and Transitions within a State Machine must have unique names.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.

Choice Pseudostate

A Choice Pseudostate is a transient control vertex used to realize dynamic conditional branching in a State Machine graph. It splits an incoming compound Transition into multiple alternative outgoing paths governed by Guard conditions.

Unlike a Junction Pseudostate, Guard conditions on outgoing Transitions from a Choice Pseudostate are evaluated dynamically when execution reaches the Choice point. This allows routing decisions to depend on side effects or data changes produced by actions executed along the incoming Transition segment.

Operations

  • Creating:

    Click the Choice Pseudostate Stencil in the Stencil Toolbar, then click anywhere within the Canvas or a State Region to create a new Choice Pseudostate.
  • Renaming:

    Select the Choice Pseudostate and edit the Name field in the Properties Panel. A Choice Pseudostate's name must be unique within the containing State Machine SV1002.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Choice Pseudostate across the Canvas or within its current Region to change its visual location.
    • Reparenting:

      To move a Choice Pseudostate to a different Region (or out onto the root Canvas), select the Choice Pseudostate, drag it over the target Region or Canvas, and hold the Alt key while releasing the mouse button.
  • Deleting:

    Select the Choice Pseudostate on the Canvas and hit Delete, or right-click the Choice Pseudostate and select Delete from the context menu. Deleting a Choice Pseudostate automatically deletes all its connected Transitions.
  • Resizing:

    A Choice Pseudostate has a fixed visual footprint and cannot be manually resized SV1018.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclause 14.2.3.7):

“choice – This type of Pseudostate is similar to a Junction Pseudostate and serves similar purposes, with the difference that the guard Constraints on all outgoing Transitions are evaluated dynamically, when the compound transition traversal reaches this Pseudostate. Consequently, choice is used to realize a dynamic conditional branch... If more than one guard evaluates to true, one of the corresponding Transitions is selected... To avoid [ill-formed models], it is recommended to define one outgoing Transition with the predefined “else” guard for every choice Pseudostate.”

Validations

System
  • SV1002:

    Vertices and Transitions within a State Machine must have unique names.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.

Entry Point Pseudostate

An Entry Point Pseudostate represents an entry point for a composite State that provides encapsulation of the insides of the State. In each Region of the composite State owning the Entry Point, there is at most a single Transition from the Entry Point to a Vertex within that Region.

If the owning State has an associated Entry Behavior, this Behavior is executed before any Behavior associated with the outgoing Transition of the Entry Point. If the composite State contains multiple orthogonal Regions, the Entry Point acts as a Fork Pseudostate.

Operations

  • Creating:

    Click the Entry Point Pseudostate Stencil in the Stencil Toolbar, then click inside a composite State anywhere around a desired edge. This creates a new Entry Point Pseudostate anchored to the edge closest to the mouse click. An Entry Point Pseudostate can only be added to a composite State SV1014.
  • Renaming:

    Select the Entry Point Pseudostate and edit the Name field in the Properties Panel. An Entry Point Pseudostate's name must be unique within the parent State's Connection Points SV1022.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Entry Point Pseudostate around the edges of its parent State to change its visual location SV1020.
    • Reparenting:

      Entry Point Pseudostates cannot be reparented to a different parent State SV1021.
  • Deleting:

    Select the Entry Point Pseudostate on the Canvas and hit Delete, or right-click the Entry Point Pseudostate and select Delete from the context menu. Deleting an Entry Point Pseudostate automatically deletes all its connected Transitions.
  • Resizing:

    An Entry Point Pseudostate has a fixed visual footprint and cannot be manually resized SV1018.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclause 14.2.3.7):

“entryPoint – An entryPoint Pseudostate represents an entry point for a StateMachine or a composite State that provides encapsulation of the insides of the State or StateMachine. In each Region of the StateMachine or composite State owning the entryPoint, there is at most a single Transition from the entry point to a Vertex within that Region.

NOTE. If the owning State has an associated entry Behavior, this Behavior is executed before any behavior associated with the outgoing Transition. If multiple Regions are involved, the entry point acts as a fork Pseudostate.”

Validations

System
  • SV1014:

    Entry and Exit Point Vertices can only be added to a composite State.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1020:

    Entry and Exit Point Vertices can only be repositioned along the edges of their parent State.
  • SV1021:

    Entry and Exit Point Vertices cannot be reparented.
  • SV1022:

    Entry and Exit Point Vertices must have a unique name within its parent State's Connection Points.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.

Exit Point Pseudostate

An Exit Point Pseudostate is an exit point of a composite State that provides encapsulation of the insides of the State. If multiple Transitions from orthogonal Regions within the State terminate on this Exit Point Pseudostate, then it acts like a Join Pseudostate.

Transitions terminating on an Exit Point from within any contained Region imply the complete exit of the composite State, triggering the execution of its associated Exit Behavior.

Operations

  • Creating:

    Click the Exit Point Pseudostate Stencil in the Stencil Toolbar, then click inside a composite State anywhere around a desired edge. This creates a new Exit Point Pseudostate anchored to the edge closest to the mouse click. An Exit Point Pseudostate can only be added to a composite State SV1014.
  • Renaming:

    Select the Exit Point Pseudostate and edit the Name field in the Properties Panel. An Exit Point Pseudostate's name must be unique within the parent State's Connection Points SV1022.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Exit Point Pseudostate around the edges of its parent State to change its visual location SV1020.
    • Reparenting:

      Exit Point Pseudostates cannot be reparented to a different parent State SV1021.
  • Deleting:

    Select the Exit Point Pseudostate on the Canvas and hit Delete, or right-click the Exit Point Pseudostate and select Delete from the context menu. Deleting an Exit Point Pseudostate automatically deletes all its connected Transitions.
  • Resizing:

    An Exit Point Pseudostate has a fixed visual footprint and cannot be manually resized SV1018.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclause 14.2.3.7):

“exitPoint – An exitPoint Pseudostate is an exit point of a StateMachine or composite State that provides encapsulation of the insides of the State or StateMachine. Transitions terminating on an exit point within any Region of the composite State or a StateMachine referenced by a submachine State implies exiting of this composite State or submachine State (with execution of its associated exit Behavior).”

Validations

System
  • SV1014:

    Entry and Exit Point Vertices can only be added to a composite State.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1020:

    Entry and Exit Point Vertices can only be repositioned along the edges of their parent State.
  • SV1021:

    Entry and Exit Point Vertices cannot be reparented.
  • SV1022:

    Entry and Exit Point Vertices must have a unique name within its parent State's Connection Points.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.

Terminate Pseudostate

A Terminate Pseudostate represents an abrupt, immediate end to the execution of an entire State Machine context.

When execution reaches a Terminate Pseudostate, the State Machine halts immediately without exiting active States or executing any associated Exit Behaviors. Any running DoActivity Behaviors across all active Regions are automatically aborted.

Operations

  • Creating:

    Click the Terminate Pseudostate Stencil in the Stencil Toolbar, then click anywhere within the Canvas or a State Region to create a new Terminate Pseudostate.
  • Renaming:

    Select the Terminate Pseudostate and edit the Name field in the Properties Panel. A Terminate Pseudostate's name must be unique within the containing State Machine SV1002.
  • Moving & Reparenting:

    • Repositioning:

      Click and drag the Terminate Pseudostate across the Canvas or within its current Region to change its visual location.
    • Reparenting:

      To move a Terminate Pseudostate to a different Region (or out onto the root Canvas), select the Terminate Pseudostate, drag it over the target Region or Canvas, and hold the Alt key while releasing the mouse button.
  • Deleting:

    Select the Terminate Pseudostate on the Canvas and hit Delete, or right-click the Terminate Pseudostate and select Delete from the context menu. Deleting a Terminate Pseudostate automatically deletes all its connected Transitions.
  • Resizing:

    A Terminate Pseudostate has a fixed visual footprint and cannot be manually resized SV1018.
  • Editing Notes:

    Select the Pseudostate and edit the Notes field in the Properties Panel (maximum 500 characters SV1031).

UML Specification (Subclause 14.2.3.7):

“terminate – Entering a terminate Pseudostate implies that the execution of the StateMachine is terminated immediately. The StateMachine does not exit any States nor does it perform any exit Behaviors. Any executing doActivity Behaviors are automatically aborted. Entering a terminate Pseudostate is equivalent to invoking a DestroyObjectAction.”

Validations

System
  • SV1002:

    Vertices and Transitions within a State Machine must have unique names.
  • SV1018:

    Only State, Join, and Fork Vertices, as well as Transition Labels, support manual resizing.
  • SV1031:

    Notes for an element can contain a maximum of 500 characters.