GregOrigin - BlueLine: Smart Tagging & Node Alignment

Watch it in action

Read the manual

BlueLine is a lightweight, modular C++ plugin for Unreal Engine 5 designed to solve three specific problems in professional development workflows:

  1. Graph Readability: Replaces messy Bezier "noodles" with clean, 90-degree orthogonal wiring without the performance cost of A* pathfinding.

  2. Team Collaboration: Provides "Soft Formatting" tools that align nodes without reorganizing the entire graph, preventing massive Git/Perforce diffs.

  3. Data Visualization: Transforms standard Gameplay Tags in the Details Panel into colored, readable chips, synchronized across the entire team via Data Assets.

πŸ”Œ Graph Enhancements

BlueLine replaces the standard graph rendering pipeline with a high-performance "Manhattan" style renderer.

1. Manhattan Wiring
  • Orthogonal Routing: Wires turn at 90-degree angles.

  • Ghost Wires: Wires passing behind nodes are automatically rendered with reduced opacity (35%) to reduce visual noise.

  • Performance: Uses simple geometric heuristics instead of pathfinding, ensuring zero input lag even in massive Animation Blueprints.

2. "Soft Magnet" Formatting (Shift + Q)

Unlike other auto-formatters that rearrange your entire graph (destroying your specific layout), BlueLine uses a Selection-Only approach.

  • Usage: Select a group of nodes and press Shift + Q.

  • Behavior: Nodes align grid-relative to their input connections.

  • The "Anti-Diff" Philosophy: BlueLine never touches nodes you haven't selected. This ensures your Commit History remains clean and readable.

3. Hotkeys

Key Action Description Shift + Q Magnet Align Aligns selected nodes to the grid relative to their inputs. F8 Toggle Style Instantly switches between BlueLine wires and Standard Bezier curves.

🏷️ Smart Tags & Visualization

BlueLine overrides the Details Panel customization for FGameplayTag, replacing the text string with a colored "Chip" widget.

1. Setup (Team Color Sync)

Colors are not stored in local user preferences. they are stored in a Data Asset so the whole team sees the same colors.

  1. Create a DataAsset derived from BlueLineThemeData.

  2. Name it DA_BlueLineDefault and place it in /Game/BlueLine/ (Content/BlueLine/).

    • Note: This path ensures the plugin finds it automatically without configuration.

  3. Add Tag Styles:

2. Runtime Debugging (C++)

Debug colors shouldn't disappear when you hit PIE (Play In Editor). Use the static library to draw colored tags on the HUD or in World space.

3. Blueprint Support

The library is exposed to Blueprint as "Draw BlueLine Debug Tag".

I’m posting a changelog here for clarity :slightly_smiling_face:

BlueLine Changelog

Bug Fixes

Fixed Pin Duplication in Demo Nodes

Fixed a critical bug where AllocateDefaultPins() was not clearing existing pins before creating new ones, causing duplicated/stacked pins to appear when nodes were reconstructed (e.g., during compilation or undo/redo).

Affected Files:

  • Source/BlueLineSmartTags/Private/Demos/UK2Node_TagDemo.cpp
  • Source/BlueLineSmartTags/Private/Demos/UK2Node_KingSafety.cpp
  • Source/BlueLineSmartTags/Private/Demos/UK2Node_AWSTag.cpp

Fix: Added Pins.Reset() at the beginning of AllocateDefaultPins() to clear existing pins before recreation.

Fixed F8 Key Binding Conflict

Changed ToggleWireStyle command from F8 to Shift+F8 to avoid conflict with Unreal Engine's built-in "Possess or Eject Player" debugger command used in Play-in-Editor (PIE) mode.

Affected Files:

  • Source/BlueLineGraph/Private/Commands/FBlueLineCommands.cpp
  • Source/BlueLineGraph/Private/BlueLineGraphModule.cpp
  • Source/BlueLineGraph/Public/Commands/FBlueLineCommands.h

New Shortcut:

Shortcut Command Context
Shift+F8 Toggle Wire Style Blueprint Graph

Fixed Hardcoded Stub Length

The FBlueLineConnectionPolicy was using a hardcoded stub length value (20.0f) instead of respecting the user-configurable StubLength setting from Editor Preferences.

Affected Files:

  • Source/BlueLineGraph/Private/Drawing/FBlueLineConnectionPolicy.cpp

Fix: Changed from hardcoded value to use Settings->StubLength:

// Before:
const float StubLength = 20.0f * LocalZoomFactor;

// After:
const float StubLength = (Settings ? Settings->StubLength : 20.0f) * LocalZoomFactor;

Improvements

Implemented WireStyle Support

The WireStyle setting (Thin/Medium/Thick/Dynamic) in Editor Preferences was previously defined but not actually applied to wire rendering. Now it's fully functional.

Affected Files:

  • Source/BlueLineGraph/Private/Drawing/FBlueLineConnectionPolicy.cpp

Implementation:

void FBlueLineConnectionPolicy::DetermineWiringStyle(UEdGraphPin* OutputPin, UEdGraphPin* InputPin, FConnectionParams& Params)
{
    // Applies WireStyle from settings:
    // - Thin: 1.5px
    // - Medium: 2.5px  
    // - Thick: 4.0px
    // - Dynamic: Uses theme-based type coloring
    // Also applies WireThicknessMultiplier setting
}

Removed Ghost Setting: bAnimateExecutionWires

Removed the bAnimateExecutionWires setting from Editor Preferences that had no implementation. This was a placeholder setting that had no effect.

Affected Files:

  • Source/BlueLineCore/Public/Settings/UBlueLineEditorSettings.h
  • Source/BlueLineCore/Private/Settings/UBlueLineEditorSettings.cpp

New Feature: Graph Bookmarks

Added bookmark system for quick navigation in Blueprint graphs.

Hotkeys:

  • Ctrl+1-9: Set bookmark at selected node
  • 1-9: Jump to bookmark
  • Ctrl+0: Clear all bookmarks in current graph

Features:

  • Bookmarks persist per graph across editor sessions
  • Stored in Saved/BlueLineBookmarks.json
  • Automatic cleanup when assets are deleted
  • Visual feedback in Output Log

New Files

Source/BlueLineGraph/
β”œβ”€β”€ Public/Bookmarks/
β”‚   └── FBlueLineBookmarkManager.h      # Bookmark management API
└── Private/Bookmarks/
    └── FBlueLineBookmarkManager.cpp    # Implementation with JSON persistence

New Feature: Node Snippets

Save selected nodes as reusable templates that can be quickly inserted into any graph.

Hotkeys:

  • Shift+S: Create snippet from selected nodes
  • Shift+I: Insert a saved snippet

Features:

  • Full node serialization including connections
  • Organize snippets by category
  • Persistent storage in Saved/BlueLineSnippets.json
  • Export/import snippets for sharing

New Files

Source/BlueLineGraph/
β”œβ”€β”€ Public/Snippets/
β”‚   └── FBlueLineSnippetManager.h       # Snippet management API
└── Private/Snippets/
    └── FBlueLineSnippetManager.cpp     # Implementation with JSON persistence

[1.0.3] - 2026-02-09

Overview

Major feature release introducing BlueLineRuntime - a new runtime module that enables Blueprint Subsystem creation directly from the editor. This release also adds the "Extract to Subsystem" feature, allowing developers to refactor complex Blueprint graphs by extracting selected nodes into dedicated Subsystem Blueprints.


New Module: BlueLineRuntime

Blueprint Subsystem Base Classes

The BlueLineRuntime module provides Blueprint-friendly base classes for creating Unreal Engine Subsystems without writing C++. This enables developers to create managers and systems that persist across level transitions using familiar Blueprint workflows.

New Files

Source/BlueLineRuntime/
β”œβ”€β”€ BlueLineRuntime.Build.cs              # Module build configuration
β”œβ”€β”€ Public/
β”‚   β”œβ”€β”€ BlueLineRuntimeModule.h           # Public module interface
β”‚   └── Subsystems/
β”‚       β”œβ”€β”€ BlueLineGameInstanceSubsystem.h   # GameInstance base class
β”‚       β”œβ”€β”€ BlueLineWorldSubsystem.h          # World base class
β”‚       └── BlueLineLocalPlayerSubsystem.h    # LocalPlayer base class
└── Private/
    β”œβ”€β”€ BlueLineRuntimeModule.cpp         # Module implementation
    └── Subsystems/
        β”œβ”€β”€ BlueLineGameInstanceSubsystem.cpp
        β”œβ”€β”€ BlueLineWorldSubsystem.cpp
        └── BlueLineLocalPlayerSubsystem.cpp

Base Classes

Class Parent Use Cases
UBlueLineGameInstanceSubsystem UGameInstanceSubsystem Game state managers, Save/load systems, Achievement managers
UBlueLineWorldSubsystem UWorldSubsystem Level-specific rules, World event managers, Per-level audio
UBlueLineLocalPlayerSubsystem ULocalPlayerSubsystem Per-player input, Player UI controllers, Split-screen HUD

Blueprint Events

All base classes provide Blueprint-implementable events:

  • On Initialize - Called when subsystem is initialized
  • On Deinitialize - Called when subsystem is shut down
  • On Post Initialize (World only) - Called after all subsystems initialized
  • On World Begin Play (World only) - Called when world starts gameplay
  • On Update Streaming State (World only) - Called for streaming updates

New Feature: Extract to Subsystem

Shift+B: Extract Selected Nodes to Subsystem

A powerful refactoring tool that allows extracting selected Blueprint nodes into a new dedicated Subsystem Blueprint. This helps organize complex graphs by isolating functionality into properly architected subsystems.

How It Works

  1. Select nodes in any Blueprint graph
  2. Press Shift+B or right-click β†’ "Extract to Subsystem"
  3. Choose destination in the save dialog
  4. New Blueprint created inheriting from BlueLineGameInstanceSubsystem
  5. Blueprint opens automatically for editing

Implementation

New Files:

  • Source/BlueLineGraph/Public/BlueprintSubsystem/BlueprintSubsystemExtractor.h
  • Source/BlueLineGraph/Private/BlueprintSubsystem/BlueprintSubsystemExtractor.cpp

Key Features:

  • Analyzes selected nodes for external connections and dependencies
  • Creates properly configured Blueprint with correct parent class
  • Supports fallback to engine subsystem classes if BlueLineRuntime unavailable
  • Opens save dialog for user to choose destination path
  • Automatically opens new Blueprint for editing

Build System Updates

BlueLineRuntime.Build.cs (New)

public class BlueLineRuntime : ModuleRules
{
    PublicDependencyModuleNames.AddRange(
        new string[] { "Core", "CoreUObject", "Engine" }
    );
}

BlueLineGraph.Build.cs

 PrivateDependencyModuleNames.AddRange(
     new string[]
     {
         // ... existing modules ...
+        "ContentBrowser",   # Required for save asset dialog
+        "AssetTools"        # Required for blueprint creation
     }
 );

+// Allow includes from BlueLineSmartTags without circular dependency
+PrivateIncludePathModuleNames.AddRange(
new string { "BlueLineSmartTags" }
);


Plugin Configuration

BlueLine.uplugin

{
    "Version": 3,
    "VersionName": ",
    "Modules": [
        { "Name": "BlueLineCore", "Type": "Runtime", "LoadingPhase": "PreDefault" },
        { "Name": "BlueLineRuntime", "Type": "Runtime", "LoadingPhase": "Default" },
        { "Name": "BlueLineGraph", "Type": "Editor", "LoadingPhase": "PreDefault" },
        { "Name": "BlueLineSmartTags", "Type": "Editor", "LoadingPhase": "Default" },
        { "Name": "BlueLineLevel", "Type": "Editor", "LoadingPhase": "PostEngineInit" }
    ]
}

Keyboard Shortcuts

New Commands

Shortcut Command Context Module
Shift+B Extract to Subsystem Blueprint Graph BlueLineGraph
Shift+E Export to Text Blueprint Graph BlueLineGraph

Updated Shortcuts Reference

Shortcut Command Context
Shift+Q Auto-Format Graph Blueprint Graph
Shift+R Rigidify Connections Blueprint Graph
Shift+C Clean Graph Blueprint Graph
Shift+T Auto-Tag Selection Blueprint Graph
Shift+B Extract to Subsystem Blueprint Graph
Shift+E Export to Text Blueprint Graph
Shift+S Open Level Pie Menu Level Editor Viewport
Shift+F8 Toggle Wire Style Blueprint Graph

New Feature: Export to Text

Shift+E: Export Blueprint to Readable Text

A lightweight text exporter that converts Blueprint graphs into human-readable format for debugging, documentation, and AI-assisted analysis. Inspired by the Blueprint Text Exporter plugin.

How It Works

  1. Open any Blueprint graph
  2. Press Shift+E or right-click β†’ "Export to Text"
  3. Choose save location in the file dialog
  4. Open the .txt file for debugging or AI analysis

Example Output

=== Blueprint Export: BP_Player ===
Export Type: Full Graph
Total Nodes: 42

Event BeginPlay
└─ then β†’
Set Max Health (MaxHealth = 100.0)
└─ then β†’
Set Current Health (CurrentHealth = MaxHealth)

Event TakeDamage
Take Damage (Damage = 10.0, DamageType = DamageType_Fire)
└─ then β†’
Apply Damage (Target = Self, BaseDamage = Damage)
└─ then β†’
UpdateHealthBar (Percent = CurrentHealth / MaxHealth)

Implementation

New Files:

  • Source/BlueLineGraph/Public/Export/BlueLineGraphExporter.h
  • Source/BlueLineGraph/Private/Export/BlueLineGraphExporter.cpp

Key Features:

  • Exports full graph or selected nodes
  • Follows execution flow with tree structure
  • Expands pure (data) nodes inline
  • Saves to [Project]/BlueprintExports/ by default
  • Compatible with AI tools (ChatGPT, Claude, etc.)

Build System Updates

BlueLineGraph.Build.cs (Updated)

 PrivateDependencyModuleNames.AddRange(
     new string[]
     {
         // ... existing modules ...
+        "DesktopPlatform"   # Required for save file dialog
     }
 );

Context Menu Additions

Blueprint Graph Context Menu

New entries in the "BlueLine Graph" section:

  • Auto-Tag Selection - Tag selected nodes semantically
  • Extract to Subsystem - Create subsystem from selection
  • Export to Text - Export graph to readable text

API Additions

// BlueprintSubsystemExtractor.h
class FBlueprintSubsystemExtractor
{
    bool ExtractToSubsystem(
        UEdGraph* SourceGraph,
        const TArray<UEdGraphNode*>& SelectedNodes,
        ESubsystemType SubsystemType,
        const FString& NewSubsystemName,
        const FString& DestinationPath);
void OpenExtractionDialog(UEdGraph* Graph, const TArray&lt;UEdGraphNode*&gt;&amp; SelectedNodes);
static bool CanExtractNodes(const TArray&lt;UEdGraphNode*&gt;&amp; SelectedNodes);

};

// BlueLineGraphExporter.h
class FBlueLineGraphExporter
{
static void ExportGraphToText(UEdGraph* Graph, const TArray<UEdGraphNode*>& SelectedNodes);
static bool CanExportNodes(const TArray<UEdGraphNode*>& Nodes);
};

// ESubsystemType enum
UENUM()
enum class ESubsystemType : uint8
{
GameInstance,
World,
LocalPlayer
};


Documentation

HTML Manual Updates

Comprehensive documentation updates for the new features:

New Sections Added:

  • Extract to Subsystem (Shift+B) - Complete workflow guide with visual examples
  • Export to Text (Shift+E) - Feature documentation with example output
  • Blueprint Subsystems - Base class documentation with comparison table

Updated Architecture Diagram:

  • Added BlueLineRuntime module to the dependency graph
  • Shows Editor β†’ Runtime relationships with dashed lines

New Navigation Items:

  • "Advanced πŸ†•" section in sidebar
  • Individual pages for each new feature

Visual Improvements:

  • Feature cards for Extract to Subsystem and Export to Text in Overview
  • Version banner updated
  • Subsystem type comparison table

Bug Fixes

  • Fixed circular dependency between BlueLineGraph and BlueLineSmartTags modules
  • Fixed include paths for cross-module header access
  • Fixed missing includes in BlueprintSubsystemExtractor (UBlueprintFactory, UEdGraphNode_Comment)

[1.0.2] - 2026-02-08

Overview

Major release introducing BlueLineLevel - a unified Level Editor toolkit previously known as "Shift+S". This release merges the viewport-based modeling workflow tools into BlueLine, creating a complete editor enhancement suite covering both Blueprint graphs and Level Editor viewports.


New Module: BlueLineLevel

Full Migration of Shift+S (ShiftSDev) Plugin

The Shift+S plugin has been fully integrated into BlueLine as the BlueLineLevel module. All functionality has been preserved and enhanced to work within the BlueLine ecosystem.

New Files

Source/BlueLineLevel/
β”œβ”€β”€ BlueLineLevel.Build.cs              # Module build configuration
β”œβ”€β”€ Public/
β”‚   β”œβ”€β”€ BlueLineLevelModule.h           # Public module interface (IBlueLineLevelModule)
β”‚   β”œβ”€β”€ BlueLineLevelTypes.h            # Core types (EBlueLinePivotTarget, constants)
β”‚   β”œβ”€β”€ BlueLineLevelOps.h              # Pivot and selection operations
β”‚   └── BlueLineLevelSelection.h        # Session-based selection system
└── Private/
    β”œβ”€β”€ BlueLineLevelModule.cpp         # Module implementation
    β”œβ”€β”€ Core/
    β”‚   β”œβ”€β”€ BlueLineLevelOps.cpp        # Pivot snapping, vertex picking, material selection
    β”‚   └── BlueLineLevelSelection.cpp  # Cached selection with live preview
    β”œβ”€β”€ Framework/
    β”‚   β”œβ”€β”€ BlueLineLevelCommands.h     # Command definitions
    β”‚   └── BlueLineLevelCommands.cpp   # Alt+S shortcut binding
    └── UI/
        β”œβ”€β”€ SBlueLineLevelPieMenu.h     # Radial pie menu widget
        └── SBlueLineLevelPieMenu.cpp   # Menu implementation

Features Migrated

Feature Description Shortcut
Pie Menu Radial menu for quick actions Alt+S
Pivot Center Snap pivot to selection center Pie Menu ↑
Pivot Bottom Snap pivot to selection bottom Pie Menu ↓
Cursor Snap Vertex-precision picker mode Pie Menu β†’
Select Scope Material-based radius selection Pie Menu ←
Radius Scroll Adjust selection radius with mouse wheel While hovering Select Scope

Update: Streamlined Pie Menu Design (2026-02-08)

The Pie Menu has been completely redesigned to match BlueLine's elegant Blueprint aesthetic:

The Pie Menu has been completely redesigned to match BlueLine's elegant Blueprint aesthetic:

Feature Implementation
Blueprint Grid Background Subtle Blueprint-style grid that fades toward edges
Animated Hover States Smooth interpolation for scale and glow effects
Directional Layout Clean 90Β° orientation (Top/Right/Bottom/Left)
Color-Coded Options BlueLine blue for pivot tools, Greg green for selection, warm accent for cursor
Dynamic Center Indicator Center dot changes color to match hovered option
Connection Lines Subtle lines connecting center to each option
Refined Typography Short labels when idle, full labels on hover
Picker Mode Minimal crosshair with contextual hints

Visual Hierarchy:

  • Center dead zone prevents accidental triggers
  • 45Β° diagonal zones are neutral (no selection)
  • Options activate only when hovering the specific quadrant
  • Glow effects provide visual feedback without clutter

BlueLine 1.0.5 - Changelog

New Features

  • Magnetic Wire Snapping: Implemented a Node Graph Assistant-style wire snapping system (FBlueLineWireSnapper). When dragging a connection, your cursor will now magnetically snap to valid nearby pins, preventing near-misses during fast routing.
    • Configurable via Editor Preferences (Enable/Disable and Snap Radius tuning).

Bug Fixes

  • Context Menu Crash: Fixed an IsValid() assertion crash (FBlueLineGraphMenuExtender.cpp:120) that occurred when opening the Blueprint right-click context menu immediately at Editor startup before the BlueLineSmartTags module had fully initialized.
  • Hotkey Conflict: Changed the "Toggle Wire Style" hotkey from Shift+F8 to Shift+W to prevent overriding Unreal Engine's default Play in Editor (PIE) / Eject Player bindings.
  • Smart Tag Specificity: Fixed an issue where Smart Tag colors could apply the wrong hierarchical style based on string length. The resolver now correctly uses Unreal's native MatchesTagDepth to ensure exact parent-child inheritance logic.
  • Auto-Routing Tangling: Changed the default value of "Auto-Route New Connections" from true to false to prevent internal macro/node structures from tangling when duplicating or pasting large graphs.

Architectural Improvements

  • Zero Runtime Overhead: Completely removed the BlueLineRuntime module. The plugin is now 100% Editor-only.
    • The "Extract to Subsystem" feature has been rewritten to inherit directly from Unreal Engine's native subsystem classes (UGameInstanceSubsystem, UWorldSubsystem, ULocalPlayerSubsystem) instead of relying on a proprietary BlueLine base class.
  • Dynamic Configuration: Removed the legacy BlueLineConfig.h constants system. All core thresholds and "magic numbers" have been fully migrated into UBlueLineEditorSettings, ensuring seamless live-updates when modifying preferences.
  • Version Sync: Aligned BlueLine.uplugin version strings (1.0.5) to accurately reflect documented feature sets.

1.1 update - 2026-05-24 :champagne:

New & Updated Features

  • :repeat_button: Gridline Wire Style: Completely refactored FBlueLineConnectionPolicy. Wires are now drawn as continuous orthogonal polylines with mathematically rounded corners (bezier arcs) and semi-circle β€œbridges/bumps” where wires intersect.
  • :man_technologist: Strict Node Alignment: Modified the genetic algorithm graph cleaner (FBlueLineGraphCleaner) to trace parent execution pins and align nodes into perfectly straight horizontal execution rows, snapping all nodes to a uniform 16-unit vertical grid.
  • Wire Spacing (Bus Routing): Implemented an intelligent overlap detection algorithm that iteratively staggers parallel horizontal and vertical wires, producing perfectly spaced β€œbus lines” without overlapping.
  • :brain: Named Reroutes (Wireless Data): Standard UK2Node_Knot reroute nodes that share the exact same non-empty NodeComment will now automatically suppress their connecting wires, visually acting as wireless data transmitters/receivers.
  • :man_mage: Polished Setup Wizard: Introduced a dark blue & cyan natively styled Slate Setup Wizard that opens on first launch. Features interactive quick-config checkboxes and β€œFeatures at a Glance.” Includes GregOrigin branding.
  • :clapper_board: Wizard Action Buttons: The Wizard now includes one-click buttons to β€œOpen Showcase Blueprint”, β€œOpen Documentation”, β€œOpen All Settings”, and β€œGet Support” (Discord) for frictionless onboarding.
  • :technologist: Headless Blueprint Linter (CI/CD): Added UBlueLineLinterCommandlet, allowing enterprise teams to run BlueLine Linter in CI/CD pipelines to fail the build (Exit Code 1) if code smells (Tick Abuse, Deep Nesting, etc.) are detected.
  • :office_worker: Visual Snippet Manager Tab: Implemented SBlueLineSnippetTab, a dockable UI panel (Window > Tools > Snippet Manager) providing a list view of saved snippets with one-click insertion and deletion.
  • :window: Window Menu Integration: The Setup Wizard is now accessible on-demand from Window > BlueLine Setup Wizard.
  • :keyboard: Keyboard Shortcut Exposure: Re-verified and ensured IMainFrameModule UI commands are properly exposed so users can natively rebind BlueLine hotkeys (Shift+Alt+C, Shift+Alt+T, Shift+Alt+L) in Editor Preferences.

Bug Fixes

  • Context Menu Right-Click Crash: Resolved a critical editor crash that occurred when right-clicking on nodes in the Blueprint graph. The crash was caused by a null pointer dereference inside TCommands<FBlueLineSmartTagCommands>::Get(). The AutoTagGraph context menu entry has been relocated from the BlueLineGraph module to the BlueLineSmartTags module where the command is natively registered, and is now guarded by FBlueLineSmartTagCommands::IsRegistered().
  • Module Decoupling: Removed redundant private include paths and dependencies to BlueLineSmartTags from BlueLineGraph.Build.cs, enforcing strict boundary checks and modular design.

1.1.1 update, 2025-05-25

Bug Fixes

  • Editor Exit Crash (Wire Snapper Shutdown): Fixed a shutdown crash caused by FBlueLineWireSnapper::Disable() calling FSlateApplication::Get() after Slate teardown during editor exit. Input preprocessor registration and unregistration are now guarded by FSlateApplication::IsInitialized().
  • Editor Exit Crash (Level Pie Menu Lifetime): Hardened BlueLineLevel shutdown so the pie menu detaches its raw close callback before module teardown and no longer tries to restore viewport focus or remove overlays after Slate is gone.
  • Editor Exit Crash (Deferred UI Registrations): Added shutdown guards for the setup wizard post-engine-init hook and snippet tab spawner registration/unregistration so late editor teardown no longer assumes Slate and global tab infrastructure are still valid.
  • Large Graph Connector Loss: Fixed missing Blueprint connectors on large graphs by replacing the previous heavy fallback with an explicit simplified Manhattan wire draw path that still renders visible wires.

Performance & Stability

  • Large Blueprint Memory Pressure: Added a scalable fallback in FBlueLineConnectionPolicy for large graphs. When graph complexity crosses a budget, BlueLine now skips the expensive global bus-routing/crossing pass and draws a cheaper Manhattan path per wire instead of performing quadratic routing work every paint.
  • Auto-Routing Guardrails: Tightened FBlueLineConnectionInterceptor so the global OnObjectModified hook refuses to scan medium-to-large graphs, reducing load-time memory churn when opening large Blueprints.
  • Wire Snapping Guardrails: Disabled magnetic wire snapping on very large graphs to prevent full-graph pin searches from running every tick during drag operations.

Affected Modules

  • BlueLineGraph: Hardened wire snapper shutdown, added large-graph rendering fallback, preserved connector visibility in simplified mode, and reduced auto-routing/snapper cost on complex graphs.
  • BlueLineLevel: Hardened pie menu shutdown and callback lifetime handling during editor exit.
  • BlueLineCore: Cleaned up setup wizard lifecycle hooks and added Slate-safe guards around first-run wizard opening.

Bugfix Patch released, still 1.1.1, 2026-05-27

Illustrated Fix Map

  • [●━━━━:play_button:● Wire Path] Restored visible Blueprint node connections after a new related bug surfaced.
  • [:gear: Old β†’ Current] Replaced stale plugin defaults with the active UBlueLineEditorSettings config section.
  • [β–§ Missing PNG β†’ Removed Brush] Removed Slate style registrations for pie-menu textures that are not shipped with current plugin versions.
  • [β–£ Source Package β†’ Engine Rebuild] Tightened plugin packaging metadata and documentation.

Bug Fixes

  • Blueprint Wires Not Rendering: Fixed the BlueLine graph connection policy so it caches the correct wire layer, uses the correct arrow layer for arrowheads, and falls back to Unreal’s native spline draw path for direct draw cases introduced by UE 5.7.4. This resolves cases where connections existed between nodes but no lines were visible.
  • Startup Reflection Error: Initialized FNodeExtractionInfo::OriginalPosition and EventName, removing the editor startup reflection warning for uninitialized USTRUCT properties.
  • Missing Slate Resource Warnings: Removed unused BlueLine.PieMenu.OptionBg, BlueLine.PieMenu.OptionHover, and BlueLine.PieMenu.CenterHub style brushes because the referenced Icons/Pie*.png files are not part of the plugin package.
  • Stale Settings Defaults: Deleted Config/DefaultBlueLine.ini, which referenced the obsolete /Script/BlueLineGraph.BlueLineEditorSettings class and retired keys such as bEnableManhattanRouting, bDimWiresBehindNodes, and FormatterPadding.
  • Current Settings Defaults: Added Config/DefaultEditorPerProjectUserSettings.ini with the current /Script/BlueLineCore.BlueLineEditorSettings section and live settings keys used by the implementation.

1.1.2 update, 2026-06-05 :blueberries:

Symbol Legend

  • [:compass:] Navigation, focus, and command routing
  • [:broom:] Graph cleanup and layout health
  • [:test_tube:] Tests and verification
  • [:package:] Packaging and release material
  • [:artist_palette:] Documentation, visuals, and customer-facing polish
  • [:shield:] Safety, lifecycle, and crash prevention

Illustrated Fix Map

  • [:broom: Cycle ⇄ Comment Box] Graph cleaning now handles cyclic Blueprint chains without runaway rank growth, and comment boxes are preserved instead of being moved by cleanup passes.
  • [:compass: Focus β†’ Graph] Snippet insertion, graph commands, and bookmark navigation now rely on safer graph-focus resolution instead of brittle direct SGraphEditor assumptions.
  • [:shield: Raw Callback β†’ Static/Lambda Safe] Editor command lifetimes were hardened so shutdown unmaps commands and avoids stale module callbacks.
  • [:artist_palette: Static Docs β†’ Illustrated Manual] FAQ.html and Manual.html now include visual shortcut maps, SVG workflow diagrams, and clearer guidance.

Graph Health & Blueprint Safety

  • [:broom:] Graph Cleaner Cycles: Fixed rank assignment so each node is ranked once during graph cleanup, preventing infinite rank growth on cyclic execution chains.
  • [:broom:] Comment Preservation: Excluded UEdGraphNode_Comment nodes from island discovery, layout movement, and parent alignment so user-authored comment boxes stay in place.
  • [:broom:] Analyzer Noise Reduction: Graph analysis now ignores comment nodes and knot-only layout helpers for node counts, isolation checks, clusters, execution chains, wire crossings, bounds, and traversal depth.
  • [:shield:] Null Link Guards: Hardened graph analysis against null linked pins during traversal.
  • [:broom:] Large Graph Behavior: Existing large-graph bypass logging remains, but cleanup now avoids counting comment/knot-only nodes as layout complexity.

Snippets, Bookmarks & Focus Handling

  • [:compass:] Snippet Delete Safety: Fixed a TMap pointer lifetime bug by copying snippet name/category before removing the snippet entry.
  • [:compass:] Snippet Insert Fallback: Insert commands now use FBlueLineContextUtils::GetCurrentGraphFromFocus() instead of requiring a directly focused SGraphEditor.
  • [:compass:] Snippet Manager Targeting: The dockable snippet tab now resolves the current graph through shared focus utilities before insertion.
  • [:compass:] Bookmark Widget Cast: Bookmark graph-editor lookup no longer static-casts SGraphEditorImpl as SGraphEditor; only actual SGraphEditor widgets are cast.
  • [:compass:] Shortcut Conflict Fix: Bookmark jump shortcuts changed from Shift+1..9 to Alt+Shift+1..9 to avoid Unreal editor mode-switch conflicts.

Routing, Wires & Auto-Route

  • [:shield:] Wire Snap Drag Detection: Wire snapping now detects connection drags through the active drag operation type instead of relying only on custom pin widget state.
  • [:shield:] Non-Invasive Pin Factory: Pin customization remains opt-in and no longer owns the full drag-detection contract.
  • [:shield:] Auto-Route Transactions: New connection auto-routing now wraps graph edits in FScopedTransaction, modifies graph/nodes correctly, and notifies graph changes only when routing actually occurs.
  • [:shield:] Stale Connection Cleanup: Auto-route processed-connection tracking now removes links that no longer exist.
  • [:shield:] Baseline Loaded Graphs: Connection interceptor baselines already-loaded graphs on enable so existing links are not mistaken for newly created ones.

Commands, Modules & Shutdown

  • [:shield:] BlueLineLevel Shutdown: Level command mappings are explicitly unmapped before command lists are reset.
  • [:shield:] Smart Tags Command Lifetime: ExecuteAutoTagGraph is now static, command binding uses CreateStatic, and shutdown unmaps AutoTagGraph.
  • [:shield:] Setup/ToolMenus Safety: Core menu registration remains owner-scoped and unregisters startup callbacks on shutdown.

Demo Nodes & Smart Tags

  • [:shield:] Demo Nodes Hidden By Default: Added bExposeDemoNodes=false under advanced debug settings and hid demo K2 nodes from the Blueprint action menu unless explicitly enabled.
  • [:shield:] Demo Node Pin Allocation: Removed manual Pins.Reset() calls from demo K2 node pin allocation.
  • [:shield:] Demo Compile Warning: The AWS demo node now emits a clear warning that it is a demo node with no runtime behavior.
  • [:artist_palette:] Demo Documentation Scope: The docs now explain that generated demo helpers are for throwaway Blueprint/K2 test graphs and that internal demo nodes are hidden from normal action search.

Wireless Nodes & Build Dependencies

  • [:shield:] Wireless Rewire Safety: K2Node_BlueLineWirelessUsage now uses FKismetCompilerContext::MovePinLinksToIntermediate() instead of manually relinking downstream pins.
  • [:shield:] Direction Validation: Wireless usage expansion validates that the source pin is an output pin before moving links.

Settings, Config & Level Tools

  • [:shield:] GridSnapSize Clamp: Fixed settings validation so clamped GridSnapSize values are assigned back to the setting.
  • [:compass:] Selection Radius Settings: Level selection now reads DefaultSelectionRadius from UBlueLineEditorSettings instead of legacy editor ini keys.
  • [:shield:] Debug Draw Safety: Level preview code no longer calls FlushPersistentDebugLines, avoiding accidental clearing of unrelated debug visualizations.
  • [:package:] Settings Defaults Gap Noted: The docs now call out release/package expectations more clearly; DefaultEditorPerProjectUserSettings.ini should still be kept synchronized with newly added settings before final distribution.

Automation & Regression Tests

  • [:test_tube:] Headless UI Test Guard: BlueLineGraphUITests.cpp now skips interactive graph UI shortcut testing under commandlet/headless/-NullRHI conditions instead of hanging.
  • [:test_tube:] Cycle + Comment Regression: Added BlueLine.Graph.Cleaner.CyclesAndComments, covering cyclic layout cleanup and comment immobility.
  • [:test_tube:] Automation Count: The headless BlueLine suite now runs 12 tests, with the interactive UI test skipped as expected in headless mode.

Documentation & Illustrated HTML

  • [:artist_palette:] FAQ Visual Refresh: FAQ.html now has an illustrated hero, quick-reference shortcut strip, graph cleanup visual, bookmarks/snippets panel, Smart Tags illustration, and Fab packaging visual.
  • [:artist_palette:] Main Docs Visual Map: Docs/Manual.html now includes a current default shortcut map and an illustrated Blueprint workflow board.
  • [:artist_palette:] Bookmarks Diagram: Added a visual model showing Alt+1-9 storage, Alt+Shift+1-9 navigation, and Saved/BlueLineBookmarks.json.
  • [:artist_palette:] Snippets Diagram: Added a visual model showing selection capture, Shift+Alt+S, snippet JSON storage, and Shift+Alt+I insertion into the focused graph.
  • [:artist_palette:] Current Shortcut Wording: Updated stale docs from old Shift+R, Shift+C, Shift+S, plain 1-9, and Ctrl+1-9 wording to the current conflict-safe bindings.

1.1.3 update, 2026-06-15

:rocket: Features & Refinements

β€’ Orthogonal Routing Refinement: Re-engineered the underlying routing logic for Manhattan and Circuit wire styles. Wires now trace direct, clean orthogonal lines ( horizontal β†’ vertical β†’ horizontal ) and bypass node-avoidance math, permanently eliminating any extraneous routing loops.
β€’ Context Menu Expansion: Added the β€œToggle Wire Style” action directly into the Blueprint right-click context menu (under the BlueLine grouping, right next to Rigidify) for immediate visual access.

:bug: Bug Fixes

β€’ Wire Toggle Action Fix: Repaired a broken assignment within the Toggle Wire Style internal execution logic. Toggling styles now correctly refreshes the graph instantly and permanently saves your choice to the editor configuration ( SavedConfig ).
β€’ Pie Menu Execution Bug: Fixed a bug in the Level Editor Pie Menu where releasing the X key failed to register. Pie actions like Pivot to Bottom, Pivot to Center, and Select by Material can once again be executed seamlessly using quick-flicks (holding Alt , tapping X , swiping, and releasing X ).
β€’ Shortcut Conflicts: Re-mapped the Toggle Wire Style hotkey from Shift+W to Alt+W to permanently resolve a hardcoded engine conflict with Unreal’s native Blueprint β€œFast Pan Up” navigation.

:books: UI & Documentation

β€’ Setup Wizard: Refined the setup wizard UI.