Drawing Connectors
Connectors represent the relationships between elements in your architecture — API calls, event streams, database reads, user interactions. In the C4 Designer, you draw them by dragging from a port handle on one element to another element.
On static diagrams, one visible connector can now carry several connector message members. This keeps the canvas readable when the same two elements exchange multiple business messages or protocols.
The Designer validates each connection as you draw it, preventing connections that violate the C4 model rules for the current diagram level.
How to Draw a Connector
Diagram: The port-drag workflow for drawing a connector. The Designer validates the target in real time.
Step-by-step
- Hover the cursor over the source element — four small circular port handles appear on the North, East, South, and West edges of the element
- Click and drag from any port handle — a drag line extends from the port to your cursor
- Hover over a target element — the Designer validates the connection live:
- Valid target: the drag line stays its default colour
- Invalid target: the drag line turns red and a tooltip explains why the connection is not allowed
- Release the mouse button over a valid target — the connector is created and the Connector Inspector opens automatically so you can set the label and protocol
- If you release on nothing, the drag is cancelled silently
Port handles disappear when the cursor leaves the source element during a drag. If the handles vanish before you reach the target, start the drag again from the source.
Connection Validation Rules
The C4 model defines which connections are meaningful at each diagram level. Nodinite enforces these rules automatically:
| Diagram type | Allowed connections |
|---|---|
| L0 Landscape | Person ↔ System, System ↔ System |
| L1 Context | Person ↔ System, System ↔ System |
| L2 Container | Person ↔ Container, System ↔ Container, Container ↔ Container |
| L3 Component | Container ↔ Component, Component ↔ Component |
| L4 Dynamic | Any node pair in the diagram |
| Deployment | Deployment Node ↔ Container, Deployment Node ↔ Deployment Node |
Attempting to create a cross-level connection — for example, a Person directly to a Component in an L3 diagram — is blocked. A red toast notification appears at the bottom of the screen for 4 seconds and then dismisses automatically.
Same-Pair Relationships on Static Diagrams
Context, Container, and Component diagrams keep the canvas compact by showing one visible connector per node pair. If those two elements exchange several named flows, the extra flows are managed as connector message members behind that visible line.
When you need another flow between the same two elements:
- Click the existing connector to open the Connector Inspector
- Use Add member instead of drawing a second overlapping line
- Give the new member its own display name, protocol, direction, style, and optional Message Type link
When more than one member exists, the visible connector label changes from the individual flow name to a count such as 3 flows.
The Designer still prevents overlapping duplicate lines on the canvas. If what you need is a true two-way interaction rather than several distinct messages, use the Bidirectional connector type instead.
Connector Types
The connector types available in the toolbox depend on the diagram level. Standard diagrams use three relationship types; Dynamic (L4) diagrams use a different set built for sequence modelling.
Standard Connectors (L0–L3 and Deployment)
| Type | Visual | When to use |
|---|---|---|
| Synchronous | Solid line, single arrowhead | A caller waits for a response — HTTP calls, gRPC, database queries |
| Bidirectional | Solid line, double arrowhead | Both parties initiate interactions — two-way sync |
| Asynchronous | Dashed line, single arrowhead | Fire-and-forget, event-driven — message queues, pub/sub, SFTP drops |
You choose the connector style when you draw the connection. You can change it afterwards using the Style field (Solid / Dashed) and Direction dropdown in the Connector Inspector.
Dynamic Connectors (L4 Dynamic Diagrams)
Dynamic diagrams model a runtime interaction sequence. Every connector carries a step number that defines its position in the flow, and the toolbox offers three types suited to sequencing:
| Type | Visual | When to use |
|---|---|---|
| Numbered Step | Solid line, single arrowhead + step badge | A synchronous call where the caller waits — e.g. "1. Submit order" |
| Numbered Step (Async) | Dashed line, single arrowhead + step badge | An async or fire-and-forget delivery — e.g. "3. Enqueue shipment notice" |
| Return / Callback | Solid line, reversed direction arrow | The response flowing back — shows the return journey of an earlier step |
When you draw a Numbered Step or Numbered Step (Async) connector, the step number is assigned automatically as the next integer after the highest existing step in the diagram. You can change it using the Step number field in the Connector Inspector — all other steps renumber automatically to keep the sequence gapless.
Dynamic diagrams do not collapse repeated interactions into connector message members. Each step stays as its own explicit connector in the runtime sequence.
Setting a Label and Protocol
Every connector should carry a label (what the relationship does) and a protocol (how it is implemented). These display directly on the connector line in the diagram.
After drawing a connector, the Inspector opens automatically. On Context, Container, and Component diagrams, a new connector starts with one message member. If you later add more members between the same two elements, you edit the label and protocol per member rather than on the aggregate connector shell. If you close the Inspector, click the connector line to reopen it.
| Field | Example values | Description |
|---|---|---|
| Label | "Sends purchase orders", "Queries inventory" | Describes what the relationship does |
| Protocol | HTTP, HTTPS, gRPC, AMQP, MQTT, SFTP, REST, SOAP |
The technical protocol — the field offers suggested values but accepts any text |
Both fields save automatically as you type (with a short debounce delay). There is no Save button.
When a static connector shows N flows, each member keeps its own Label, Protocol, Direction, Style, and optional Message Type link.
Connector Direction
The Direction dropdown controls the visual routing of the connector arrow on the canvas. This is a layout hint, not a data-model change:
| Direction value | Meaning |
|---|---|
| Auto | Nodinite chooses the best routing based on node positions |
| Forward | Left to right |
| Down | Top to bottom |
| Up | Bottom to top |
| Left | Right to left |
| Back | Opposite of the natural direction |
| Neighbor | Short routing for adjacent elements |
When UseContracts is enabled and the edited flow is contract-bound, direction handling follows contract semantics. The UI avoids the full service-oriented direction list for that path and applies the agreed outbound-initiating behavior.
Steps Panel (Dynamic Diagrams)
When editing a Dynamic (L4) diagram, the Steps panel on the right edge of the canvas gives you a scrollable list of every numbered connector in step order. It is the quickest way to review the full interaction sequence, check step labels, or reorder steps — without hunting for individual connector lines on the canvas.
Opening, pinning, and detaching the panel
- Hover over the STEPS tab on the right edge of the canvas to expand the panel temporarily.
- Click the pin icon () to keep the panel open while you work. The pinned state is remembered the next time you open the diagram.
The panel can also be detached from its docked position so it floats freely over the full page:
| Action | How to trigger |
|---|---|
| Detach to floating window | Click the detach icon on the panel header. The Steps panel becomes a free-floating window you can drag anywhere on the page — including away from the canvas area. |
| Return to docked position | Click the same icon again. The panel snaps back to its default docked position on the right edge. |
Detaching is useful when editing a complex Dynamic diagram with many steps: you can keep the step list visible on one side of your screen while freely moving around the canvas on the other.
What the panel shows
Each entry in the list displays:
- The step number
- The connector label
- The source → target relationship names
Editing steps inline
You can edit a step's number or label directly in the Steps panel without clicking the connector on the canvas:
- Click the step number or label field for the step you want to change
- Type the new value
- Click Save to apply — sibling steps renumber automatically if needed to keep the sequence gapless
- Click Cancel or press Escape to discard the change
Changing a step number does not delete or reorder the connector on the canvas — only the numeric label changes, and the surrounding steps adjust accordingly.
Connector Label and Protocol Visibility
Two toggle buttons in the canvas toolbar control what text appears on connector lines across the whole diagram:
| Toggle | Default state | Effect when active |
|---|---|---|
| Label | On | Displays the connector's label at the midpoint of each line |
| Protocol | Off | Displays the protocol text directly beneath the label |
Clicking a toggle immediately refreshes all connectors — no page reload needed. The toggles are available in both the Designer and the View page (in View mode, they appear only when the Interactive view is active, not in Mermaid view).
Regardless of toggle state, hovering over any connector line always shows a tooltip with the label and protocol together — so the information is never completely hidden from view.
Inspecting Connectors (View Mode)
You do not need to open the Designer to inspect a connector. In the View page with Interactive mode active, clicking any connector line opens a read-only Connector Inspector popover showing:
| Field | What it shows |
|---|---|
| Source → Target | The two element names with a directional arrow |
| Member list | One row per contained flow when the connector groups several message members |
| Label | What the relationship does for the selected member or single-member connector |
| Protocol and style | How the flow is implemented, including whether it is solid or dashed |
| Message Type | The linked Message Type, if the member is bound |
| Direction | The routing hint used on the canvas |
Linked members expose Open Message Type and, when the user has permission, Edit Message Type actions. Unlinked members remain read-only in View mode and guide the user back to the Designer for linking work.
The popover also includes a Highlight button. Clicking it draws a red highlight on that connector — useful when presenting the diagram to an audience and you want to draw attention to a specific call or flow.
Click anywhere else on the canvas to dismiss the popover.
The View mode Inspector is read-only. To edit a connector's label, protocol, direction, or step number, switch to the Designer page.
Deleting a Connector
Click the connector line to open the Connector Inspector.
- For a single-member connector, use Delete to remove the connector.
- For a static connector with several message members, remove the specific member you no longer need. When the last member is removed, the visible connector disappears from the canvas.
Frequently Asked Questions
I cannot see the port handles when hovering
Port handles only appear in edit mode (Draft state). If the diagram is Active, switch to Draft first by clicking Create Draft in the toolbar.
My drag line turns red while hovering over a target
Two reasons cause the drag line to turn red:
- Incompatible element types — the source and target types are not allowed to connect at this diagram level. Check the validation rules table. If you intended a cross-level relationship, consider whether the detail belongs in a different diagram type (for example, a Dynamic diagram allows any node pair).
- Existing visible connector — on Context, Container, and Component diagrams there is already a connector between these two nodes. Open it and add another connector message member instead of drawing a second overlapping line. If the relationship is really two-way, use the Bidirectional connector type or change the Direction property on the existing connector.
Can I have multiple connectors between the same two elements?
Yes, but on static diagrams they are managed as multiple message members behind one visible connector, not as overlapping lines on the canvas. Open the existing connector and add another member for each additional flow you want to document. In Dynamic diagrams, repeated interactions are modelled as separate numbered steps because the sequence itself matters.
Why does my connector say 3 flows instead of the message name?
That label means the visible connector contains several connector message members between the same two elements. Nodinite collapses them into one canvas line to reduce clutter. Open the connector to review each member individually and see which ones are linked to a Message Type.
How do I reorder steps in a Dynamic diagram?
Change the Step number on the connector you want to move — either by clicking the connector line to open the Connector Inspector, or inline in the Steps panel on the right edge of the canvas. All other connectors in the diagram renumber automatically to keep the sequence gapless.