Iām posting a changelog here for clarity 
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
- Select nodes in any Blueprint graph
- Press Shift+B or right-click ā "Extract to Subsystem"
- Choose destination in the save dialog
- New Blueprint created inheriting from
BlueLineGameInstanceSubsystem
- 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
- Open any Blueprint graph
- Press Shift+E or right-click ā "Export to Text"
- Choose save location in the file dialog
- 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<UEdGraphNode*>& SelectedNodes);
static bool CanExtractNodes(const TArray<UEdGraphNode*>& 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