- 13 minutes to read

Shapes and Toolbox Reference

The toolbox panel in the C4 Designer is the palette of C4 shapes you use to build or edit C4 Diagrams. Its contents are context-sensitive: the C4 toolbox shows only the shapes that are valid for the active diagram type, so the visible toolbox is always a subset of the full C4 shape vocabulary. Use this page as the lookup reference; for the hands-on workflow, see Building a Diagram.

Switching a diagram between the Context, Component, Dynamic, and Container levels and using the toolbox filter chips, animated walkthrough (7.12)
Animated walkthrough: the same toolbox on a Context, Component, Dynamic, and Container diagram, switched with Navigate. The sections change with the level; the Service filter chip narrows the list, and All brings everything back. It ends on the Container toolbox.

Understanding the Shape Vocabulary

One shape vocabulary covers every way a shape reaches a diagram in Nodinite. A diagram you Import from Mermaid, PlantUML, Structurizr DSL, or Draw.io XML produces the same shape families as one you assemble by hand, and diagrams built in the designer export clean, standards-compliant Mermaid that any C4-aware tool can read.

flowchart LR Toolbox["fa:fa-toolbox Toolbox
filtered by diagram type"] --> Canvas["fa:fa-diagram-project Canvas"] Import["fa:fa-file-import Import
Mermaid, PlantUML, Structurizr DSL, Draw.io XML"] --> Canvas Repo["fa:fa-database Repository entity
and its Component Type"] -. binding and icon .-> Canvas Canvas --> Mermaid["fa:fa-code Mermaid source and export"]

The toolbox and the import wizard feed the same canvas; Repository bindings supply the node's entity and icon, and every diagram renders as Mermaid C4 markup.

Surface What you do
Toolbox Drag and drop shapes onto the canvas in the designer
Canvas The placed shape renders on the live diagram
Import The import wizard produces the same shapes from external markup

C4 Designer with the Deployment toolbox open next to an Order-to-Cash Deployment diagram (7.12)
Example of the toolbox on a Deployment diagram: only Infrastructure Nodes, Containers, Boundaries, and Connectors appear, because those are the shapes valid for that diagram type. The Domain filter chip shows because the Infrastructure Node can bind to a Domain.

Toolbox Filter, Resolver, and Binding Defaults

The toolbox has up to six filter chips: All, System, Domain, Service, Integration, and Contract. A chip only shows when the diagram type has shapes for it: a Context diagram shows All and System, Domain shows on a Deployment diagram (for the Infrastructure Node), and Contract shows only when UseContracts is enabled and you have read rights on Contracts.

The filter chips do not limit the diagram to a single binding target. They only change which repository-centric shape families the toolbox emphasizes. A separate node resolver decides what a selected node can bind to and what its default binding kind is (see Repository Bindings). This holds for every diagram type below, so switching the filter never changes the meaning of a node that is already on the canvas.

Filter chip What it emphasizes in the toolbox What it does not mean
All All toolbox sections allowed for the diagram type It does not force every node to bind to every entity kind
System System-facing shapes, plus the advanced System items valid in the diagram It does not mean every selected node binds as a System
Domain Deployment items that can bind to a Domain (the Infrastructure Node) It does not mean the diagram is scoped to a Domain
Service Service-facing container and deployment items It does not mean the current node is a Service node
Integration Integration-facing component items It does not mean the node is integration-only in the resolver
Contract Contract-capable items, where contract support is enabled It does not mean the diagram type is contract-only

The designer default may prefer Integration, Service, or Contract depending on the node kind and current binding, but the filter chip only changes what the toolbox shows.

Component Type Icons vs Toolbox Icons

Every shape on the canvas displays one of two icons:

  • Toolbox default icon: the built-in icon for the shape type, shown in the toolbox and used as the fallback when no Component Type is available.
  • Component Type icon: the icon from the Component Type assigned to the bound Repository entity.

When the bound entity has a Component Type, its icon replaces the toolbox default on the canvas. Assign the icon once to a System, Service, Integration, or Domain, and it appears automatically in every C4 diagram that references that entity, in both view mode and the designer.

Important

The entity Component Type always wins. For the full priority chain and fallback rules, see Component Types. The icons listed on this page are the default fallback icons.

The Internal vs External Icon Convention

Every actor and node shape exists in an internal and an external variant. Nodinite marks the difference with an icon overlay on every diagram type, so colour is never the only signal.

Variant Icon treatment Canvas colour Mermaid macro pattern
Internal Base icon alone Blue No suffix: Person, Container, Component
External Base icon + overlay at the top-right corner Grey _Ext suffix: Person_Ext, Container_Ext, Component_Ext
Tier Internal icon External icon
Person +
Software System +
Container (generic) +
Database (any tier) +
Queue / Stream (any tier) +
Component +

The tables below list the internal icon; the external variant adds the overlay.

Shape Availability by Diagram Type

Shape L0 / L1 L2 L3 Dynamic Deployment
Person (internal) ✅ Yes ✅ Yes ✅ Yes ✅ Yes ❌ No
Person (external) ✅ Yes ✅ Yes ✅ Yes ✅ Yes ❌ No
Software System ✅ Yes ✅ Yes ✅ Advanced ✅ Yes ❌ No
Software System (external) ✅ Yes ✅ Yes ✅ Yes ✅ Yes ❌ No
Database System ✅ Yes ✅ Yes ✅ Advanced ✅ Yes ❌ No
Database System (external) ✅ Yes ✅ Yes ✅ Advanced ✅ Yes ❌ No
Queue System ✅ Yes ✅ Yes ✅ Advanced ✅ Yes ❌ No
Queue System (external) ✅ Yes ✅ Yes ✅ Advanced ✅ Yes ❌ No
Container (generic or sub-typed) ❌ No ✅ Yes ❌ No ✅ Yes ❌ No
Container (external) ❌ No ✅ Yes ❌ No ✅ Yes ❌ No
Container Instance (+ external) ❌ No ✅ Yes ❌ No ❌ No ✅ Yes
Container Database (+ external) ❌ No ✅ Yes ❌ No ✅ Yes ❌ No
Container Queue / Stream (+ external) ❌ No ✅ Yes ❌ No ✅ Yes ❌ No
Component (+ external) ❌ No ❌ No ✅ Yes ❌ No ❌ No
Component Database (+ external) ❌ No ❌ No ✅ Yes ❌ No ❌ No
Component Queue (+ external) ❌ No ❌ No ✅ Yes ❌ No ❌ No
Infrastructure Node ❌ No ❌ No ❌ No ❌ No ✅ Yes
Container Boundary ❌ No ✅ Yes ✅ Yes ❌ No ❌ No
System Boundary ✅ Yes ✅ Yes ❌ No ❌ No ❌ No
Enterprise Boundary ✅ Yes ❌ No ❌ No ❌ No ❌ No
Generic Boundary ❌ No ❌ No ✅ Yes ❌ No ❌ No
Deployment Node ❌ No ❌ No ❌ No ❌ No ✅ Yes
Relationship: solid and async (dashed) ✅ Yes ✅ Yes ✅ Yes ✅ Yes ✅ Yes
Bidirectional ↔ ✅ Yes ✅ Yes ✅ Yes ❌ No ❌ No
Numbered Step, Numbered Step (Async), Return / Callback ❌ No ❌ No ❌ No ✅ Yes ❌ No

"Advanced" means the shape sits in the collapsed Advanced section of the L3 toolbox. On L2 the System shapes sit in the External Systems section, internal ones included; on Dynamic they sit in Participants.

Note

In Dynamic diagrams the Relationship shapes gain a step-number badge, and a dedicated Return ← (Rel_Back) connector is added. Bidirectional (BiRel) is accepted on import for Dynamic diagrams but isn't a primary toolbox shape.

Toolbox Section Order by Diagram Type

Diagram Toolbox sections (in order)
L0 System Landscape Persons · Systems · Boundaries (System, Enterprise) · Connectors
L1 Context Persons · Systems · Boundaries (System, Enterprise) · Connectors
L2 Container Persons · Containers · Databases · Queues & Streams · External Systems · External Containers · Boundaries (System, Container) · Connectors
L3 Component Components · External Actors · Advanced ▶ (System shapes, collapsed) · Boundaries (Boundary, Container) · Connectors
Dynamic Participants · Connectors (no Boundaries section)
Deployment Infrastructure Nodes · Containers · Boundaries (Deployment Node) · Connectors (no Persons or System-level section)

L0 System Landscape and L1 System Context

L0 and L1 use the same Mermaid C4Context declaration and the same toolbox sections, including the System Boundary and Enterprise Boundary. The difference is conceptual: L0 spans your full enterprise landscape; L1 focuses on a single system in its context. All shapes bind to Systems; the System filter maps most directly to the binding model here.

Shape Icon Mermaid macro C4Type on the bound System Notes
Person Person Person Internal user, analyst, or role
Person (external) + overlay Person_Ext PersonExt External customer, trading partner, or user
Software System System InternalSystem A system you own and operate
Software System (external) + overlay System_Ext ExternalSystem Third-party, SaaS, or partner system
Database System SystemDb SystemDb Internal system rendered as a database cylinder
Database System (external) + overlay SystemDb_Ext SystemDbExt External database system
Queue System SystemQueue SystemQueue Internal message bus or queue at context level
Queue System (external) + overlay SystemQueue_Ext SystemQueueExt External queue, event bus, or stream

L2 Container Diagram

Container diagrams zoom inside a system boundary to show the applications, services, databases, and message buses that implement it. Container nodes bind to Services; platforms, portals, and tools may bind to Systems when that entity better represents the element. The L2 toolbox also offers all six System shapes from L0/L1, internal ones included, in its External Systems section (System, System_Ext, SystemDb, SystemDb_Ext, SystemQueue, SystemQueue_Ext). Its boundaries are the System Boundary and the Container Boundary.

Container Sub-Types

The C4ContainerType values below come from the Service's C4 properties; Repository Properties for C4 Diagramming is the full reference, including numeric values.

Shape Icon Mermaid macro C4ContainerType Example
Container (generic) Container None Catch-all when no specific sub-type applies
Web Application Container WebApp Customer portal, admin UI
Single-Page App Container SinglePageApp Single-page application or progressive web app
Mobile App Container MobileApp iOS app, Android app
REST API / Service Container API Customer API, Order Service, gRPC endpoint
Microservice Container Microservice Shipping service, auth service
Serverless / Function Container Function Azure Function, AWS Lambda, nightly batch
File Store Container FileStore Azure Blob, SFTP folder, NFS mount
Container (external) + overlay Container_Ext — External container inside scope
Container Instance Container_Instance — A specific running replica of a container

Database, Queue, and Stream Shapes (L2)

Shape Icon Mermaid macro C4ContainerType Notes
Database / Datastore ContainerDb Database SQL Server, PostgreSQL, MongoDB, Cosmos DB
Cache / Key-Value Store ContainerDb Cache Redis, Memcached
Database (external) + overlay ContainerDb_Ext — External database accessed by the system
Message Bus / Queue ContainerQueue MessageBus Azure Service Bus, RabbitMQ, SQS
Queue ContainerQueue Queue Standalone point-to-point queue, decoupled from a bus
Event Stream ContainerQueue EventStream Kafka topic, Azure Event Hub
Queue / Stream (external) + overlay ContainerQueue_Ext — External queue or stream outside the boundary

L3 Component Diagram

Component diagrams zoom into a single Service scope and show its internal building blocks. Component nodes bind to Integrations, Services, or Contracts depending on the selected node binding kind and permissions. The designer defaults a component node to Integration; the binding picker also allows Service and Contract.

Shape Icon Mermaid macro C4ComponentType Notes
Component Component None Generic logical building block
Component (external) + overlay Component_Ext — (optional binding) External module or third-party library
Component Database ComponentDb Repository Data access component
Component Database (external) + overlay ComponentDb_Ext — (optional binding) External data store accessed by this component
Component Queue ComponentQueue Queue Async message consumer or producer
Component Queue (external) + overlay ComponentQueue_Ext — (optional binding) External queue or stream

The External Actors section offers the Person and Software System (external) shapes from L0/L1, placed outside the Container Boundary that encloses the components. The collapsed Advanced section exposes the System-level shapes still valid at L3: System, SystemDb, SystemDb_Ext, SystemQueue, and SystemQueue_Ext. The Boundaries section offers the generic Boundary and the Container Boundary, which wraps the scope Container.

Dynamic Diagram

Dynamic diagrams show the runtime interaction sequence for a specific business workflow. Participants are Person, System, or Container instances (no Component shapes), and connectors carry step numbers that define the execution order. The Dynamic toolbox has no Boundaries section. The filter changes which participant families appear; the step and return connectors give the diagram its shape.

Shape Icon Mermaid macro Notes
Person Person Internal role in the sequence
Person (external) + overlay Person_Ext External actor in the sequence
Container (any sub-type) Container Participating service; the technology subtitle is optional
Container Database ContainerDb Database participant
Container Queue ContainerQueue Message queue participant
Software System System Internal system in the interaction flow
Software System (external) + overlay System_Ext External system in the interaction flow
Database System (+ external) SystemDb, SystemDb_Ext Database system in the flow
Queue System (+ external) SystemQueue, SystemQueue_Ext Queue or event bus in the flow

Deployment Diagram

Deployment diagrams show where container instances are physically hosted. The selected node resolves according to the deployment-specific item you place, not through a generic System or Service binding.

Shape Icon Mermaid macro Notes
Infrastructure Node InfrastructureNode Generic deployment participant
Container Instance Container_Instance Specific running replica; binds to the same Service as its base Container
Container Instance (external) + overlay Container_Instance_Ext External or managed instance outside the local deployment boundary
Deployment Node Deployment_Node Deployment boundary / infrastructure envelope (see Boundaries)

Boundaries

Boundary shapes group nodes inside a dashed labelled box. They optionally link to a Domain, but a label-only boundary with no Repository anchor is also valid. For adding, binding, collapsing, and nesting boundaries, see Organising with Boundaries.

Important

Boundaries are per-diagram, not global. Placing a Domain inside a boundary in one C4 diagram, or changing its boundary type, nesting, or order, doesn't affect where that Domain appears in any other diagram or in the BPM Designer.

Boundary shape Icon Mermaid macro Available in Notes
Container Boundary Container_Boundary L2, L3 Default boundary at L2; the scope Container wrapper at L3
System Boundary System_Boundary L0/L1, L2 A single system's boundary within a wider view
Enterprise Boundary Enterprise_Boundary L0/L1 Outermost organisational wrapper
Generic Boundary Boundary L3 Custom grouping with a free-text type hint; the toolbox tile is named Boundary
Deployment Node Deployment_Node Deployment Infrastructure zone; supports unlimited nesting

Connectors

The toolbox exposes a diagram-specific connector palette. Direction is a property of a placed connector, not a separate shape; set it per flow in Connector Properties after you draw the connector. For drawing, display names, protocols, flows, and the connection rules per diagram type, see Drawing Connectors.

Shape Icon Mermaid output Available in
Synchronous Rel(...) L0, L1, L2, L3, Deployment
Asynchronous (dashed badge) Rel(...) + UpdateRelStyle($lineStyle=dashed) L0, L1, L2, L3, Deployment
Bidirectional BiRel(...) L0, L1, L2, L3
Numbered Step Rel(...) with step prefix Dynamic only
Numbered Step (Async) (dashed badge) Rel(...) + dashed style with step prefix Dynamic only
Return / Callback Rel_Back(...) Dynamic only

Note

Bidirectional vs Rel_Back: BiRel adds arrowheads to both ends of one connector; use it when the relationship is genuinely two-way. Rel_Back reverses the rendered arrow but keeps source and target in their logical markup order; use it for response or acknowledgement arrows in Dynamic step sequences.

Connector Direction

Direction Mermaid macro When to use
Auto (default) Rel The layout engine decides; start here for any new connector
Down Rel_D Top-to-bottom hierarchical flow; parent → child calls
Up Rel_U Bottom-to-top callbacks or events bubbling up
Left Rel_L Return path in a left-to-right layout
Right Rel_R Sequential pipeline steps in a left-to-right layout
Back Rel_Back Response or ack; the arrow is reversed visually while FROM/TO stay in their original order
Neighbor Rel_Neighbor Places the target adjacent to the source; minimises edge length for tightly coupled pairs

How Imported Notation Maps to Shapes

The Mermaid macro in each table above is the exact notation the Import wizard reads. The diagram type declaration on the first line (C4Context, C4Container, C4Component, C4Deployment, C4Dynamic) tells the parser which shape tier to expect, and each macro (ContainerDb_Ext, Component_Ext, Rel_Back, …) maps to the shape with that macro on this page. The wizard then matches node names to Repository entities (Container → Services, System and Person → Systems, Component → Integrations) and lets you review conflicts before anything is saved; see Import for the full workflow and the supported syntax per source format.

Macros that aren't in this reference, such as newer Mermaid C4 additions or PlantUML-only variants, are skipped, and the import result header shows the count of skipped directives.

Next Steps