Plugin Documentation

Gridline Blueprints

Orthogonal wire routing for Unreal Engine's Blueprint editor. Cleaner graphs, smarter connections — built for the way engineers think.

Unreal Engine Plugin Editor-Only Module Blueprint & AnimGraph UE 5.7 © 2025 HelixTheHare

Overview

Gridline Blueprints replaces Unreal Engine's default spline wire renderer in Blueprint and AnimGraph editors with a fully orthogonal routing system. Wires travel in horizontal and vertical segments only — like a professional schematic — making complex graphs dramatically easier to read and navigate.

◈ Orthogonal Routing
All wires snap to right-angle paths. No more diagonal spaghetti. Vertical and horizontal segments are routed intelligently based on pin positions.
⬚ Node Avoidance
Wires automatically route around nodes in their path. Both Simple (horizontal shift) and Complex (full reroute) avoidance styles available.
⟺ Wire Spacing
Parallel wires running on the same axis are automatically spaced apart to eliminate visual overlap and improve clarity.
✕ Junction Markers
Wires that cross over each other show clear visual indicators: Gap, Jump arc, Ring, or Disc — your choice of style.
⤷ Hidden Reroute Nodes
Make reroute nodes invisible, integrating them seamlessly into the wire path. They reappear on hover for easy selection.
⬡ Named Reroutes
Named Reroute Declaration and Usage nodes let you tag a wire with a name and color, then re-tap that value anywhere in the Blueprint — even across graphs.
◉ Flow Animation
Animated Dot or Pulse indicators travel along wires to visualize data flow direction. Configurable for exec wires, data wires, or all wires.
Installation

Installation

From Fab Marketplace

  1. Purchase and install Gridline Blueprints from the Fab marketplace. It will appear in your Epic Games Library under Vault.

  2. Add to project: Click "Add to Project" next to the plugin in your Library and select your target project and engine version.

  3. Enable the plugin inside your project: navigate to Edit → Plugins, search for Gridline Blueprints, and ensure the checkbox is enabled.

  4. Restart the editor when prompted. The plugin activates automatically on startup — no additional setup required.

Manual Installation

  1. Copy the plugin folder (GridlineBlueprints/) into your project's Plugins/ directory. Create the directory if it doesn't exist.

  2. Regenerate project files by right-clicking your .uproject file and selecting "Generate Visual Studio project files".

  3. Build and launch the editor. The plugin will compile automatically as part of the build.

  4. Enable if needed via Edit → Plugins → Gridline Blueprints.

Note

Gridline Blueprints is an Editor-only module. It does not add any runtime overhead, is stripped from shipping builds, and will never affect your game's packaged performance.

Quick Start

Quick Start

After installation the plugin is active immediately — open any Blueprint and your wires will already use orthogonal routing. To configure the behavior:

  1. Navigate to Edit → Project Settings (or Editor Preferences for user-local settings).

  2. Under the Plugins category, click Gridline Blueprints.

  3. All settings take effect immediately — no restart or graph refresh needed.

Tip

Settings are stored per-project in Config/DefaultEditorPerProjectUserSettings.ini. They're user-local by default and won't affect teammates unless committed.

Settings Reference

General Settings

Top-level toggles that control whether Gridline Blueprints is active and which graph types it applies to.

Setting
Type
Description
Enable Plugin
bool
Master toggle for the entire plugin. Disabling this restores Unreal's default spline wire rendering across all graph types. default: true
Enable for Blueprint Graphs
bool
Applies orthogonal routing to Blueprint event graphs and function editors. Disable to use default routing in Blueprint Graphs while keeping the plugin active for other graph types. default: true
Enable for Animation Graphs
bool
Applies orthogonal routing to Animation event graphs and function editors. Disable to use default routing in Animation Graphs while keeping the plugin active for other graph types. default: true

Routing Settings

Controls how wire paths are calculated — where bends occur, how far pin stubs extend, and how short wires are handled when orthogonal routing would produce an awkward result.

Setting
Type
Description
Bend Position
(WirePathBias)
enum
Determines where the wire's vertical segment is anchored. Source places the bend near the output pin; Destination places it near the input pin. Affects the overall shape and balance of each wire. default: Destination
Pin Length
int32
Length in pixels of the horizontal stub that extends from the anchor pin before the wire turns. Increasing this creates more breathing room around pins. Corner Size is clamped to never exceed this value. Range: 14–64. default: 28
Short Wire Threshold
int32
If a wire's straight-line distance is shorter than this value (in pixels), it uses the Short Wire Style instead of gridline routing. Short connections at right-angles can look awkward with hard corners, so this fallback produces a more natural result. Set to 0 to always use orthogonal routing. Range: 0–500. default: 40
Short Wire Style
enum
Routing style applied to wires that fall below Short Wire Threshold. Spline uses a standard curved spline; Straight draws a single direct line between the two pins. Only applies when Short Wire Threshold is greater than 0. default: Spline
Short Wire Pin Length
int32
Pin stub length used when the Short Wire fallback is active. Typically set shorter than the main Pin Length since short wires need less visual breathing room. Only applies when Short Wire Threshold is greater than 0. Range: 0–64. default: 14

Bend Position Values

ValueBehavior
SourceThe horizontal segment runs from the output pin. The vertical drop happens near the source node, then a long horizontal run reaches the destination. Good for left-heavy graphs.
DestinationThe long horizontal segment runs toward the input pin first. The vertical drop happens near the destination node. Generally produces more balanced layouts. (Default)

Short Wire Style Values

ValueDescription
SplineUses a standard Bézier spline between the two pins — the same curved style as Unreal's default wire renderer. Produces a natural, smooth look for tight connections. (Default)
StraightDraws a single straight line directly between the output and input pins. Minimal and precise; best suited for adjacent nodes where there is no visual ambiguity.

Appearance Settings

Controls the visual presentation of individual wires — thickness, corner size, and the style used for direction changes.

Setting
Type
Description
Wire Thickness
float
Multiplier applied to the base wire thickness. 1.0 = default engine thickness; 2.0 = double; 0.5 = half. Range: 0.5–5.0. default: 1.0
Corner Size
int32
Radius in pixels of the rounded arc drawn where a wire changes direction. Set to 0 for sharp 90° corners. Range: 0–32. Must not exceed Pin Length. default: 8
Corner Style
enum
Visual treatment of corner curves. Only applies when Corner Size > 0. default: Eased

Corner Style Values

ValueDescription
EasedStandard Bézier arc. A gentle, natural-feeling curve. Most similar to the default spline look but constrained to 90°. (Default)
FilletA more geometrically precise quarter-circle arc. Produces a crisp, technical schematic look.
ChamferCuts a straight diagonal line across the corner instead of curving. Produces a sharp, angled miter.

Wire Spacing

When multiple wires run parallel on the same axis, Wire Spacing automatically spreads them apart to prevent visual overlap. This is particularly helpful in densely connected graphs where many outputs fan into a sequence of nodes.

Setting
Type
Description
Enable Wire Spacing
bool
Toggles automatic parallel wire separation. When disabled all wires may overlap if they share the same path. default: true
Spacing Distance
int32
Pixel distance maintained between adjacent parallel wire segments. Larger values produce more separation and make individual wires easier to trace, at the cost of taking up more graph space. Range: 8–64. default: 16
Tip

Wire spacing interacts with the routing pipeline's U-turn resolution and node avoidance phases. If spacing produces unexpected results near complex node clusters, try increasing Node Avoidance Padding to give the system more room to work with.

Node Avoidance

Node Avoidance detects when a wire's path would travel through a node it isn't connected to, and reroutes it around that node. This keeps graphs readable even when nodes are closely packed.

Setting
Type
Description
Enable Node Avoidance
bool
Master toggle for the node avoidance system. When disabled, wires will route directly and may pass through unconnected nodes. default: true
Avoidance Style
enum
Determines the algorithm used to route around a blocking node. default: Complex
Avoidance Padding
int32
Minimum pixel clearance kept between a wire and the edge of any node it routes around. Higher values prevent wires from hugging node edges too closely. Range: 0–64. default: 16

Avoidance Style Values

ValueDescription
SimpleShifts the wire's vertical segment horizontally to move it past the blocking node. Efficient and produces clean results for most cases.
ComplexAdds additional segments to fully route above or below a blocking node, even if that requires the wire to make extra turns. Handles tightly packed graphs and tall nodes better. (Default)
Performance Note

Node Avoidance performs a bounds check against all nodes in the graph for every wire drawn. In very large graphs with hundreds of nodes, switching to Simple avoidance style can improve editor rendering performance if needed.

Junctions

Junctions are visual markers drawn at points where two wires cross over each other without connecting. They make it immediately clear that a crossing is not an electrical connection — an essential readability tool in dense graphs.

Setting
Type
Description
Enable Junctions
bool
Toggles junction rendering at wire crossings. When disabled, crossing wires are drawn with no visual differentiation. default: true
Junction Style
enum
Visual treatment at wire crossing points. default: Jump
Junction Size
int32
Size in pixels of the junction visual indicator. Larger values are easier to see at low zoom levels. Range: 8–32. default: 12

Junction Style Values

ValueDescription
BreakLeaves a gap in the passing wire at the crossing point, making the crossing unmistakably clear. Classic PCB schematic style.
JumpDraws a small arc over the crossing wire, as if the wire literally hops over it. Clear and intuitive. (Default)
RingDraws a small circle outline centered on the crossing point. Minimal and clean.
DiscDraws a small filled circle at the crossing. The most visible option at small sizes.

Reroute Nodes

Unreal Engine's Reroute nodes allow you to manually redirect a wire through an intermediate waypoint. Gridline Blueprints extends this with an optional "hidden" mode that makes these nodes invisible during normal editing.

Setting
Type
Description
Hide Reroute Nodes
bool
When enabled, reroute nodes become visually invisible and appear as a seamless part of the wire. Hovering over the wire near a hidden reroute node will reveal it for selection and manipulation. default: false
Tip

Hidden reroute nodes are still fully functional — they retain their position in the graph and continue to influence wire routing. They are revealed by hovering over the wire segment they occupy.

Named Reroutes

Named Reroutes are a two-node system for tagging a wire with a persistent name and color, then re-tapping that same value from anywhere in the Blueprint — including across different graphs. Where a standard Reroute node is an anonymous waypoint, a Named Reroute is a named variable tap: one Declaration captures the value, and any number of Usage nodes read it back.

The Two-Node Pattern

MyValue
(input)
(output)
→→→ GUID link
MyValue
(output)
→→→ GUID link
MyValue
(output)

A Declaration node has both an input pin (where the source value enters) and an output pin. A Usage node exposes only an output pin — it reads the value captured by its paired Declaration and makes it available at that point in the graph. Each pair is linked by a stable GUID that survives renaming, copy/paste, undo, and Blueprint recompilation.

⬡ Declaration Node
Has a Name (editable inline or via Properties) and a Color for the title bar. The name is automatically made unique within the Blueprint when placed or renamed. Accepts any wildcard pin type — the type resolves when you connect a wire to the input.
◈ Usage Node
Shows only a single output pin. Displays the same name and title color as its Declaration. The pin type mirrors the Declaration's resolved type and updates automatically when the Declaration's type changes. The hidden structural input pin is an internal bookkeeping link and is never drawn.
🔗 GUID Identity
Each Declaration holds a VariableGuid that Usage nodes store in DeclarationGuid. This GUID is stable across renames, undo/redo, and editor restarts. If the Declaration pointer becomes stale, Usage nodes re-resolve it from the GUID automatically.
↝ Type Propagation
When any pin connected to the Declaration's input or any Usage's output changes type, PropagatePinType pushes the resolved type to the Declaration's output, all Usage outputs, and notifies every downstream node of the change.
⌖ Cross-Graph Usage
Usage nodes can be placed in any graph within the same Blueprint — event graphs, function graphs, macro graphs, and Animation Blueprints. The Declaration searches all graphs via GetAllGraphs when resolving by GUID.
⚙ Compiler Expansion
During Blueprint compilation, Usage nodes are transparent: they walk upstream through the Declaration's input chain (tracing through Knot nodes and chained Declarations) to find the first real source pin, then reconnect all consumers to that pin directly before removing themselves.

Adding Named Reroutes

  1. Place a Declaration: Right-click in any Blueprint graph and search for "Add Named Reroute Declaration". The node is placed with a default name (Name) and blue title color. Connect a wire to its input to capture the value.

  2. Rename it: Double-click the node title to rename it inline, or open the node's Details panel and edit the Name property. The name is validated to be unique — a numeric suffix is appended automatically if a conflict exists.

  3. Change the color: In the Details panel, click the Node Color swatch. All Usage nodes sharing this Declaration immediately update to show the new color.

  4. Create a Usage: Right-click the Declaration and choose Create Reroute Usage, or search for the Declaration's name in the action menu of the target graph. The Usage node appears with only an output pin — wire it to any input that needs the value.

Context Menu Actions

Each node type in the Named Reroute system adds entries to the graph editor's right-click context menu under the Node Actions section.

On a Reroute (Knot) Node

ActionDescription
Convert to Named Reroute Replaces the Knot node with a new Named Reroute Declaration, preserving all incoming and outgoing connections. If the Knot had outgoing links, a matching Usage node is placed immediately to the right and wired up. The Knot's pin type is resolved and applied to the new Declaration automatically.

On a Named Reroute Declaration

ActionDescription
Select Named Reroute Usages Opens the Blueprint's Find Results panel and searches for all Usage nodes that reference this Declaration by name. Results are scoped to the current Blueprint only.
Create Reroute Usage Spawns a new Usage node immediately to the right of the Declaration (offset by 144 units), already linked and typed. Equivalent to double-clicking "Jump to Definition" from a Usage.
Convert to Reroute Replaces this Declaration (and all its Usage nodes across all graphs) with a single standard Reroute (Knot) node placed at the Declaration's position. All incoming and outgoing connections — from both the Declaration and every Usage — are transferred to the new Knot's input and output respectively.

On a Named Reroute Usage

ActionDescription
Select Named Reroute Declaration Navigates to the graph containing the paired Declaration, clears the current selection, selects the Declaration node, and zooms to fit it in view. Works across graphs — opens the correct graph tab automatically.
Convert to Reroute Same as the Declaration's "Convert to Reroute" if the Declaration still exists. If the Usage is orphaned (its Declaration was deleted), replaces only this Usage with a standard Reroute node, preserving its outgoing connections.

Jump to Definition

Both node types support Unreal Engine's standard Jump to Definition action (accessible via the right-click menu or the keyboard shortcut). The behavior is intentionally asymmetric:

NodeJump to Definition Behavior
Declaration Opens the Find Results panel and searches for all Usage nodes that reference this Declaration by name — effectively "find all usages." Only available if at least one Usage node exists.
Usage Navigates directly to the Declaration node in whichever graph it lives in: opens the graph tab, selects the Declaration, and zooms to fit. Only available if the Declaration is valid.

Behavior Reference

Event
Affects
What Happens
Rename Declaration
All Usages
Name is validated for uniqueness (numeric suffix appended if needed). All Usage nodes call ReconstructNode to update their displayed title. The Blueprint action database refreshes so the renamed Declaration appears correctly in action menus.
Recolor Declaration
All Usages
All Usage nodes immediately notify their graph of a visual change via NotifyNodeChanged, causing the title bar color to update in real time across every graph the Usage appears in.
Delete Declaration
All Usages
All Usage nodes have their Declaration pointer cleared and call ReconstructNode, leaving them in an "Invalid Named Reroute" state. They display a black title bar and an invalid title, but remain in the graph and can be manually deleted or converted.
Copy & Paste
Declaration
Each pasted Declaration receives a brand-new VariableGuid, making it fully independent from the original. The name is also made unique. Co-pasted Usage nodes (pasted in the same operation) automatically adopt the new Declaration via their TObjectPtr reference, with no manual re-linking required.
Undo / Redo
Both
After any undo, Usage nodes re-call FindDeclaration() from the stored GUID to restore their Declaration pointer, then reconnect the structural input pin and propagate the pin type. Declaration nodes re-run PropagatePinType to restore all Usage types.
Blueprint Recompile
Both
During compilation, Usage nodes call ExpandNode: the structural link is broken, then the compiler traces upstream through the Declaration's input chain to find the real source pin and reconnects all consumers directly, making the Named Reroute system fully transparent to compiled output.

Action Menu Filtering

Usage node spawners are only shown in a Blueprint's action menu if a matching Declaration (identified by GUID) exists somewhere in that Blueprint. This prevents stale entries from accumulating in the action panel after Declarations are deleted. The action database is refreshed automatically whenever a Declaration is placed, renamed, or destroyed.

Important

Declaration names must be unique per Blueprint, not per graph. Two Declarations in the same Blueprint cannot share a name even if they are in different function graphs. If you paste a Declaration whose name already exists, a numeric suffix is appended automatically (e.g., NameName1).

Cross-Graph Note

Usage nodes search all graphs in the owning Blueprint when resolving their Declaration. This means a Declaration in an event graph can be referenced by a Usage in a function graph and vice versa. However, Named Reroutes cannot span across different Blueprint assets.

Wire Animation

Flow animation draws moving indicators along wires to visualize the direction of data or execution flow. Useful when reviewing complex graphs or presenting to others.

Setting
Type
Description
Show Flow Animation
bool
Master toggle for wire flow animation. When disabled all other animation settings have no effect. default: false
Animation Style
enum
Visual style for animated elements. Dot: small circular indicators. Pulse: expanding brightness wave. default: Dot
Animated Wire Types
enum
Controls which wires display animation. default: ExecutionOnly
Animation Spacing
int32
Pixel distance between animated elements. For Pulse style, also controls pulse length (60% of this value). Range: 16–256. default: 64
Animation Speed
int32
Speed of animated elements in pixels per second. Higher values = faster movement. Range: 32–512. default: 192
Animation Size
float
Size of animated elements relative to wire thickness. 0.1 = 10% of wire thickness; 1.0 = same size as the wire. Range: 0.1–1.0. default: 0.2
Pulse Brightness
float
Brightness multiplier for the Pulse animation style. Values above 1.0 produce a glow effect. Only applies when Animation Style is set to Pulse. Range: 0.5–3.0. default: 1.5

Animated Wire Types

ValueDescription
ExecutionOnlyAnimation only on white execution (flow-of-control) wires. (Default)
DataWiresOnlyAnimation only on colored data-carrying wires (int, float, bool, etc.).
AllWiresAnimation on every wire regardless of type.
SelectedOnlyAnimation only on wires connected to the currently selected node(s).
Technical Reference

Architecture

Gridline Blueprints is structured as a phase-based wire routing pipeline. Each frame, collected wire data passes through a series of discrete phases before being drawn.

Module Structure

Plugin Layout
GridlineBlueprints/
  Source/GridlineBlueprints/
    Public/
      GridlineBlueprints.h                   // Module interface
      GridlineBlueprintsSettings.h           // UDeveloperSettings config class
      GridlineBlueprintsConnectionDrawingPolicy.h
      UK2Node_NamedRerouteDeclaration.h      // Declaration node class
      UK2Node_NamedRerouteUsage.h            // Usage node class
    Private/
      GridlineBlueprints.cpp                 // Module startup / factory registration
      GridlineBlueprintsConnectionDrawingPolicy.cpp
      GridlineBlueprintsNamedReroutes.cpp    // Slate widgets, node factory, context menus
      UK2Node_NamedRerouteDeclaration.cpp
      UK2Node_NamedRerouteUsage.cpp

Routing Pipeline Phases

Each phase implements IWireRoutingPhase and operates on the full set of FWireData objects collected during the current draw call.

1. U-Turn Resolution
Detects wires that need to travel backwards (output pin to the right of input pin) and builds appropriate U-shaped paths with calculated heights to avoid collisions.
2. Wire Spacing
Groups parallel wire segments and applies uniform offsets to separate them, using the configured spacing distance.
3. U-Turn Bridge Correction
Post-spacing correction pass that adjusts U-turn heights after spacing has shifted wire positions.
4. Post-Spacing U-Turn
Final U-turn geometry rebuild after all spacing corrections are applied.
5. Node Avoidance
Checks each wire's path against the node bounds map and reroutes segments that pass through unconnected nodes.
6. Corner Processing
Converts sharp direction-change points into the configured corner style (Eased, Fillet, or Chamfer) using Bézier control points.
7. Junction Processing
Detects segment intersections between different wires and inserts Junction markers at crossing points using the configured junction style.

Factory Registration

The module registers a FGridlineBlueprintsConnectionDrawingPolicyFactory with FEdGraphUtilities on startup. This factory intercepts all Blueprint and AnimGraph schema pin connection draw calls and returns a FGridlineBlueprintsConnectionDrawingPolicy instance, which inherits from Unreal's FKismetConnectionDrawingPolicy.

A second FNamedRerouteNodeFactory is registered via FEdGraphUtilities::RegisterVisualNodeFactory to supply custom Slate widgets for Declaration and Usage nodes. Context menu extensions are registered against three tool menu paths — K2Node_Knot, K2Node_NamedRerouteDeclaration, and K2Node_NamedRerouteUsage — at module startup through the UToolMenus startup callback system.

Compatibility

Graph Types
Blueprint Event Graphs, Blueprint Function Graphs, Blueprint Macro Graphs, Animation Blueprints (AnimGraph). Material editors and other custom graph types use their own drawing policies and are not affected.
Engine Version
Developed and tested against Unreal Engine 5.7. Specific version requirements are listed on the Fab marketplace page.
Platform
Editor-only. Runs on Win64, Mac, and Linux — any platform the Unreal Engine editor supports. No platform-specific shipping builds are produced or required.
Other Plugins
Uses the standard FEdGraphUtilities factory registration mechanism. Compatible with other plugins that use the same system, as factories are evaluated in priority order.
?

Frequently Asked Questions

Will this affect my shipped game?

No. Gridline Blueprints is an Editor-only module. It is completely excluded from packaged builds and has zero effect on runtime performance or behavior.

My wires look the same after installing. What's wrong?

Ensure the plugin is enabled in Edit → Plugins → Gridline Blueprints and that Enable Plugin is checked in Project Settings. A full editor restart after enabling is recommended.

Does this work with Animation Blueprints?

Yes. Gridline Blueprints hooks into the base AnimGraph drawing policy.

Does this work with Blueprint Assist?

Yes, but Gridline Blueprints requires some space to function properly so if wires seems to route incorrectly, then do the following: Increase Blueprint Parameter Padding in Blueprint Assist: Go to Edit → Editor Preferences → Blueprint Assist Formatting → Blueprint Formatting → Blueprint Parameter Padding. Increase the Short Wire Threshold in Gridline Blueprints: Go to Editor Preferences → Plugins → Gridline Blueprints → Routing → Short Wire Threshold

Wires are overlapping even with Wire Spacing enabled.

Wire spacing operates on segments that are detected as parallel. If wires share the same path through complex U-turn geometry, spacing detection may not classify them as parallel. Try increasing Node Avoidance Padding to spread segments further apart before the spacing pass runs.

Node avoidance is causing wires to take strange paths.

Switch Avoidance Style from Complex to Simple. If that still produces unwanted results, temporarily disable node avoidance to confirm it's the source of the issue, then adjust Avoidance Padding.

How do I access hidden reroute nodes to move or delete them?

Hover your mouse cursor over the wire near where the reroute node is placed. The node will appear and become selectable. You can also disable Hide Reroute Nodes temporarily to see all reroute nodes in the graph at once.

Does flow animation impact editor performance?

Flow animation forces a redraw on every tick for animated wires. In very large graphs, using SelectedOnly as the Animated Wire Types setting limits this to wires near the currently selected node, which substantially reduces overhead.

I deleted a Declaration and now my Usage nodes are broken. What do I do?

Deleting a Declaration orphans all its Usage nodes — they will display a black title bar and the label "Invalid Named Reroute." You can either undo the deletion to restore the Declaration, right-click each Usage and choose Convert to Reroute to replace them individually with standard Reroute nodes, or simply delete the orphaned Usage nodes.

Can a Named Reroute Declaration be referenced from a different Blueprint?

No. Named Reroutes are scoped to a single Blueprint asset. The GUID resolution searches only the graphs belonging to the Blueprint that owns the Usage node. To share a value between Blueprints, use a standard Blueprint interface, function call, or variable.

Can I use Named Reroutes across function graphs and the event graph in the same Blueprint?

Yes. Usage nodes search all graphs in the owning Blueprint when resolving their Declaration. A Declaration in the event graph can be referenced by a Usage in a function graph and vice versa.