Get it on Fab Store

Overview

BlueLine is a professional productivity suite for Unreal Engine 5.7, designed to solve the two biggest frictions in professional Blueprint development: Messy Graphs and Invisible Data.

🧲 "Magnet" Formatting

Instantly align nodes based on execution flow using Shift+Q. Unlike other formatters, BlueLine is Selection-Only, preserving Git history while restoring order.

🧬 Genetic "Clean Graph"

Uses a Genetic Algorithm (Shift+C) to iteratively minimize wire crossings and find the mathematically optimal layout for complex node webs.

🏷️ Semantic Auto-Tagging

Intelligently classifies logic clusters (Combat, AI, Movement) using Shift+T, automatically wrapping them in Smart Color comment boxes.

🛣️ Pathfinding (Shift+R)

Enforce 90-degree discipline. Injects reroute knots to convert diagonal spaghetti into clean, orthogonal Manhattan paths.

🖱️ Pin Context Menu

Right-click any Pin to access localized Straighten commands, featuring an IQ Check to prevent node collisions.

🎨 Smart Tag Visuals

Transforms generic grey Gameplay Tags into Color-Coded Chips in both the Details Panel and Graph Nodes. Configured via DataAsset for team sync.

Using BlueLine

Welcome to a cleaner workflow. This section covers the essential first steps for new users to get the most out of BlueLine's intelligence features.

1. Setting Up Colored Tags

BlueLine's visual clarity depends on your Theme Data. By mapping Gameplay Tags to colors, you turn generic grey wires into a color-coded map of your logic.

The Theme Data Asset

The plugin looks for an asset named DA_BlueLineDefault of type BlueLineThemeData.

  1. Create: Right-click in Content Browser → Miscellaneous → Data Asset → BlueLineThemeData.
  2. Configure: Add a new entry to the Tag Styles array.
  3. Define: Set the Tag (e.g., Combat.Damage) and pick a Color (e.g., Bright Red).
  4. Propagate: Enable Apply To Children if you want sub-tags like Combat.Damage.Fire to inherit the same style automatically.
Combat.*
Combat.CriticalHit Inherited Style

2. Mastering Auto-Tagging (Shift+T)

Don't waste time creating comment boxes. Let BlueLine's semantic analyzer do it for you.

The Workflow

Select a messy group of nodes and press Shift+T. BlueLine will:

  • Scan for Function Keywords (Damage, Movement, AI).
  • Analyze Variable Types used in the cluster.
  • Detect Execution Chains that belong together.
  • Wrap them in a Colored Comment Box based on your Theme Data.
// BlueLine Analyzer Log
[Info] Scanning 12 selected nodes...
[Match] Keyword 'Damage' found in 4 nodes.
[Match] Tag 'Combat' mapped to Red.
[Action] Creating Comment: "Combat Logic"
_ Cluster Analysis Complete.
Pro Tip: If the analyzer can't find a strong match, it will use a neutral "Logic Cluster" tag. You can improve detection by using descriptive function names and consistent Gameplay Tags in your variables.

Installation & Build

Because BlueLine modifies the Editor Source (GraphPins and Property Editors), it must be compiled with your project.

  1. Copy the BlueLine folder into your project's /Plugins/ directory.
  2. Right-click your .uproject file and strictly select Generate Visual Studio Project Files.
  3. Open `YourProject.sln`.
  4. Build Solution (Ctrl+Shift+B).
  5. Launch Unreal Engine. Enable the plugin in Edit > Plugins.
Important: If you are upgrading from UE 5.3 to UE 5.7+, you must perform a "Clean Build" (Delete Binaries/Intermediate folders) to ensure the new Pin Factory registers correctly.

Magnet Formatting (Shift+Q)

Stop manually dragging nodes pixel-by-pixel. BlueLine introduces the "Soft Align" workflow for localized cleanup.

Before Selection Shift + Q Aligned Flow
Use Shift+Q to snap selected nodes grid-relative to their execution parents.

How it works

The formatter analyzes the Execution Flow and Data Links of the selected nodes. It calculates the optimal Y-position for the shortest possible horizontal connection. If Manhattan Routing is enabled, it will also inject reroute nodes to maintain 90-degree orthogonal paths.

Manhattan Routing (Shift+R)

Blueprint spaghetti is often caused by long, diagonal splines that cross over unrelated nodes. Manhattan Routing enforces 90-degree discipline across your selection.

Legacy Spline Shift + R Orthogonal Route
Shift+R injects UK2Node_Knot (Reroutes) to force connections into clean right angles.

Intelligent Backwards Flow

When routing connections to nodes placed *behind* the source (Backwards Flow), BlueLine automatically calculates a Safe Perimeter to route the wire around the node body, preventing the wire from passing through the node's visual area.

Automatic Safe Perimeter Routing

Key Features

  • 1. Multi-Point Alignment: Automatically calculates the mid-points for L and Z-style bends.
  • 2. Knot Centering: Ensures reroute nodes are perfectly centered between their connected pins.
  • 3. Proximity Awareness: Will not trigger if pins are too close together, preventing "knot clusters" in tight spaces.

Clean Graph (Shift+C)

For large, tangled logic webs, the Genetic Algorithm finds the global optimum for node placement and wire routing.

Gen 0
Crossing Detected
Gen 150 (Fittest)
Score: 98.4%
The Genetic Engine (Shift+C) simulates 150 generations of node layouts to minimize wire length and overlap.

The Evolutionary Process

Unlike standard formatters that use fixed rules, BlueLine's Genetic Algorithm (GA) performs a simulation:

  • 1. Population: It spawns 50 randomized "Genomes" of your selected nodes.
  • 2. Scoring: Each genome is penalized for wire crossings, backward flow, and excessive whitespace.
  • 3. Selection: The fittest layouts are kept; the weakest are discarded.
  • 4. Mutation: Winners are "bred" with small positional mutations to find the local maxima of readability.

Semantic Auto-Tag (Shift+T)

BlueLine uses Semantic Heuristics to understand what your code does, automatically grouping it into themed Comment Boxes.

Identified Markers

Combat.Damage AI.Perception Movement.Input

"Detected 'Health', 'Damage', and 'Attack' nodes. Classifying as Combat Logic."

✨ Combat Logic
Shift+T analyzes node titles and variable types to cluster nodes into semantic Comment Boxes.

Heuristic Intelligence

The FBlueLineSmartTagAnalyzer looks for patterns across the graph:

  • Naming: Matches keywords in function names (e.g., "Projectile" → Combat, "Sound" → Audio).
  • Connectivity: Groups nodes that are physically linked, even if they share no common keywords.
  • Theme Sync: Uses the colors defined in your BlueLineThemeData asset to style the resulting comment boxes.

Smart Tags (Details Panel)

BlueLine hijacks the Details Panel for GameplayTags to inject visual context. It replaces the standard textual row with a composite widget.

Damage.Tag Status.Fire.Burn
The Details Panel row displays a Color Strip, the Tag Picker, the Color Config, and Inheritance Checkbox side-by-side.

Colored Pins (Graph Editor)

Using the custom FBlueLineGraphPinFactory, the plugin also injects styling into the Blueprint Graph itself.

Make Gameplay Tag Tag Status.Fire.Burn
A Graph Node utilizing the "Loud" Border style to highlight the tag color.

Pin Context Menu

For fine-grained control, BlueLine extends the standard Blueprint pin context menu with localized actions.

Pin Actions
Break Link
Promote to Variable
Straighten Connections BlueLine
Intelligence Check: Safe to straighten. No overlapping logic detected in this sector.
Right-click any Pin to access the "Straighten Connections" command for that specific link.

Intelligence (IQ) Check

BlueLine won't blindly insert knots if it would make the graph worse. Before straightening, the engine performs a sector scan:

  • Collision Detection: If a new Manhattan path would pass directly through an existing node, the action is cancelled.
  • Overlap Prevention: If the horizontal distance is less than 64 units, it keeps the spline to avoid a "knot on top of pin" visual glitch.
  • Pathfinding: It searches for the "cleanest" side (top vs bottom) to route around obstacles.

Team Setup

BlueLine uses a DataAsset to sync colors across the team. This ensures that if the Lead Designer marks "Status.Dead" as Black, every other developer sees Black instantly.

Step 1: Create the Asset

  1. In the Content Browser, right-click and select Miscellaneous > Data Asset.
  2. Search for BlueLineThemeData.
  3. Crucial: Name the file DA_BlueLineDefault.
  4. Place it anywhere in your Content folder (The plugin uses Asset Registry search to find it).

Step 2: Configure Rules

Open the asset and add entries to the Tag Styles array.

Rule Example:
- Tag: Status
- Color: Green
- ApplyToChildren: True

Result: Status, Status.Buff, and Status.Buff.Heal will all turn Green automatically.

Runtime Debugging

BlueLine exposes a static library to draw colored debug text in the game world, using the same colors defined in your editor Data Asset.

C++ Usage

#include "Debug/BlueLineDebugLib.h"

void AMyCharacter::Tick(float DeltaTime)
{
    // Draw "Status.Frozen" in Cyan (if defined in DataAsset) above the character
    UBlueLineDebugLib::DrawBlueLineDebugTag(
        this, 
        CurrentStateTag, 
        GetActorLocation() + FVector(0,0,100)
    );
}

Blueprint Usage

Search for the node "Draw BlueLine Debug Tag".

Module Dependency Graph

BlueLine is architected to separate Runtime logic (shipping with the game) from Editor logic (tools). This prevents packaging errors and ensures a lightweight footprint in builds.

BlueLineCore Type: Runtime BlueLineSmartTags Type: Editor (Details Panel) BlueLineGraph Type: Editor (Nodes & Logic)
Graph & SmartTags depend on Core for shared DataAssets, but function independently of each other.

BlueLineCore

Contains the UBlueLineThemeData definition and the static function library UBlueLineDebugLib. It serves as the single source of truth for colors used by both the Editor and the Runtime game client.

BlueLineSmartTags

The "Brains" of the plugin. Contains the FBlueLineSmartTagAnalyzer, which performs asynchronous semantic parsing of graph structures to suggest and apply tags/styles automatically.

BlueLineGraph

The "Hands" of the plugin. Implements the FBlueLineManhattanRouter for orthogonal wire management and the FBlueLineGraphCleaner Genetic Engine. It handles all low-level Slate interaction and node manipulation.

The Manhattan Routing Engine

BlueLine replaces standard Blueprint splines with intelligent, 90-degree orthogonal paths. This is achieved via a Dynamic Knot Injection system.

1. Path Calculation

The router calculates a multi-point "Z-bend" or "L-bend" based on the relative distance between pins. It handles backwards flow by creating a "Safe Loop" to prevent tangling.

2. Knot Persistence

Unlike transient visual-only fixes, BlueLine injects real UK2Node_Knot (Reroute) nodes. This ensures the layout remains clean across editor restarts and team commits.

The "Magnet" Algorithm (Soft Align)

The formatter (Shift+Q) uses a heuristic approach rather than a solver. It does not try to solve the whole graph; it solves local constraints based on user selection.

Parent Node Target Y (Pin Aligned) Min X (Padding)

Logic Flow

  • Prioritization: The algo scans Input Pins. Exec pins take priority over Data pins.
  • Y-Axis (Alignment): TargetY = Parent.Y + Offset. It attempts to make the wire perfectly horizontal.
  • X-Axis (Spacing): TargetX = Parent.X + Width + Padding. It ensures nodes never overlap, pushing child nodes to the right if necessary.
  • Snap: Final coordinates are rounded to the nearest Grid Unit (16px) for cleanliness.

UE 5.7 Implementation Nuances

Developing for Unreal Engine 5.7 requires specific architectural patterns to maintain compatibility with new editor systems:

ToolMenus API
UE 5.7 has moved away from legacy FExtender delegates in favor of the UToolMenus system. BlueLine now registers its context menu entries (like "Spawn Messy Demo") using the modern GraphEditor.GraphContext hook to ensure visibility in all sub-graph types.
Module Phases
The BlueLineSmartTags module loads in the Default phase but manually triggers LoadModuleChecked("GraphEditor"). This ensures that the engine's menu systems are fully initialized before the plugin attempts to inject its custom commands.
Knot-Aware Clusters
The 5.7 Graph Analyzer now treats UK2Node_Knot as transparent "pass-through" nodes. This prevents the semantic analyzer from fragmenting a single logic chain into multiple disconnected clusters, allowing for much larger Auto-Tagging scopes.

Troubleshooting

Issue 1: Tags are "Hot Pink" (Magenta)

If your Graph Pins or Runtime Debug text appear as a uniform, bright pink (Magenta), the plugin cannot find your configuration file.

Status.Fire AssetRegistry Search MISSING FILE BlueLineThemeData
Use of Magenta (1,0,1) indicates the DataAsset lookup returned nullptr.

Solution

  1. Check your Content Browser. Do you have a file created from class BlueLineThemeData?
  2. Naming Convention: Ensure it is named DA_BlueLineDefault.
  3. Save & Restart: If you just created it, the Registry might be stale. Save the asset and Restart the Editor.

Issue 2: "Spawn Messy Demo" is Missing

You right-click in the graph but the "BlueLine Demo" section does not appear.

  • Graph Focus: Ensure you are clicking on the background of the graph, not a node.
  • Module Status: Check the Output Log for "BlueLineSmartTags: Registering...". If it is missing, the module failed to load due to a dependency mismatch.
  • Rebuild: If you are using C++, perform a full rebuild to ensure ToolMenus is correctly linked.

Issue 3: "Shift+T" (Auto-Tag) Fails

The command runs, but no comment boxes are created.

  • Cluster Size: Auto-Tag ignores clusters of fewer than 3 nodes to prevent "noise" on small snippets.
  • Semantic Density: If the nodes are purely generic (e.g., just Float Math without context), the analyzer might not have enough confidence to suggest a tag.
  • Knot Links: Ensure you are using the latest version of BlueLine that supports Knot-traversal for cluster detection.

Issue 4: Graph Pins are Generic Grey

You created a Gameplay Tag pin, but it looks like a standard, uncolored dropdown. This is a Factory Priority issue ("Shadowing").

VisualPinFactory Stack (LIFO) 1. BlueLineFactory 2. Engine Default Factory ⚠️ Engine shadowed Plugin 1. Engine Default Factory 2. BlueLineFactory ✅ Plugin Handles Pin First
Unreal checks Factories in Reverse Order. BlueLine must load AFTER the Engine module to sit on top.

Solution

  • Restart Required: StartupModule() registers the factory. If you compiled via Live Coding, the registration code did not run. Restart the editor.
  • PreDefault Loading: Open BlueLine.uplugin. Ensure the BlueLineGraph module has "LoadingPhase": "PreDefault". This forces it to register early, but we rely on dependency ordering (see below) to ensure we end up on top.
  • Dependencies: Ensure BlueLineGraph.Build.cs includes "GameplayTagsEditor". This forces the Engine module to load first, so when your module loads second, your factory is pushed to the top of the stack.

Issue 5: "Shift+Q" Does Nothing

You press the hotkey, but nodes do not move. The Output Log shows nothing.

Common Causes

Focus Issues

The command only triggers if the Graph Editor has focus. If you clicked a Toolbar button or a different window, focus is lost.

Fix: Click empty space in the graph before pressing Shift+Q.

Engine Shortcut Conflicts

Another plugin or Editor Preference might be using Shift+Q.

Fix: Go to Editor Preferences > Keyboard Shortcuts, search for "Soft Align", and rebind it.

Issue 6: Compilation Errors (UE 5.7)

If you are modifying source code, note the strict API changes in 5.7.

C3668: CreateConnectionPolicy override not found

This function was removed from FGraphPanelNodeFactory in 5.7. Do not attempt to override it. Remove it from your header.

C2664: MakeGameplayTagWidget cannot convert...

The FGameplayTagWidgetSettings struct is deprecated. You must use the direct function signature: MakeGameplayTagWidget(Delegate, InitialPtr, FilterString).

LNK2019: Unresolved External Symbol FGameplayTag::StaticStruct

Your module is using Gameplay Tags but forgot to link the library. Add "GameplayTags" to `PublicDependencyModuleNames` in your `Build.cs` file.

Budapest, HU

GregOrigin

Created by Andras Gregori @ Gregorigin, a single dad currently based outside Budapest, HU.

"Building tools that empower creators to shape worlds."