Guided walkthrough · Unreal Engine 5.5 – 5.8
The BlueLine
First Hour
Nine stations that take you from a freshly enabled plugin to the four-keystroke habit you'll actually use every day. Every step names the exact key, what you should see, and what to check when nothing happens.
Clean build · 16/16 tests passed
Clean build · packaged & verified
Clean build · 16/16 tests passed
Clean build · modern header guards
Turn it on, prove it's on
Before any hotkey does anything, BlueLine has to be enabled and awake. This station takes two minutes and saves you from debugging a plugin that was never loaded.
- Copy the plugin to
YourProject/Plugins/BlueLine. - Open the project. If prompted to rebuild missing modules, accept.
- Edit › Plugins, search BlueLine, tick the checkbox, restart the editor.
- Open any Blueprint, then right-click on empty graph space.
A BlueLine section in the context menu listing the commands above. Its presence is the proof the editor modules loaded — the hotkeys are wired to these same commands.
Check the master switch first: Edit › Editor Preferences › Plugins › BlueLine → Enable BlueLine. Almost every other setting is gated behind it, so with it off the whole toolkit goes quiet without an error.
BlueLine is editor-only. Four editor modules do the work — BlueLineCore (settings, styles, analysis), BlueLineGraph (formatting, routing, export, snippets), BlueLineSmartTags (semantic tagging) and BlueLineLevel (viewport tools) — alongside a minimal runtime module. Nothing here ships gameplay code into your packaged build.
Auto-Format — the safe first move
Learn this one first because it is the least destructive command in the plugin: it only ever moves nodes you selected, and it never touches anything else in the graph.
Auto-Format aligns the selected nodes grid-relative to their input connections. A node driven by a pin at some Y lands on that Y. That's the whole idea — it reads the wires you already made and tidies to them, rather than imposing a layout of its own.
- Marquee-select 3–5 nodes that sit in a ragged diagonal.
- Hover the graph so it has keyboard focus.
- Press Shift + Q.
- Press Ctrl + Z and watch it come back.
The selection settles into clean rows at a consistent horizontal pitch. Everything outside the selection stays exactly where it was.
Auto-Align now records GraphContext->Modify() before it rearranges, so the whole operation is a single undo transaction. In earlier versions the alignment could not be cleanly reversed.
Nothing is selected, or the graph panel doesn't have focus — click once inside it first. Also confirm bEnableAutoFormat is on.
Rigidify wires, and see them differently
Two commands that look similar and are not. One changes your graph by inserting real reroute nodes; the other only changes how wires are drawn.
Rigidify inserts Knot (reroute) nodes between selected nodes so the connection runs in true 90° segments. Those knots are real graph nodes: they survive save, they're visible to your team, and they compile exactly as a direct wire would.
NodePos + 16 — lands precisely on the grid intersection. Off-grid by 16px → dead on.A Knot's pin center is offset +16, +16 from its origin. The router previously placed the knot origin on the grid point, which put the actual pin 16 units down and to the right of the wire's line. Placing the origin at −16, −16 instead puts the pin where the eye expects it. This is why 1.2.0 routes look straight where 1.1.x looked subtly stepped.
Shift+Alt+W is the low-risk companion: it flips every open graph between BlueLine's Manhattan rendering and stock bezier splines. No nodes move, nothing is inserted — it's a view mode. Use it to check whether a graph is genuinely tidy or merely drawn tidily.
Shift+W is already Possess or Eject Player in the editor. The wire-style toggle deliberately takes the three-key chord to stay out of its way — it is the one BlueLine graph command that isn't a plain Shift pair.
Clean Graph — the whole-graph pass
The first command that operates on everything, not your selection. Run it on a graph you inherited and did not write.
Clean Graph analyses the active graph, splits it into disconnected islands, assigns each node a rank from the execution flow, then runs an evolutionary pass that shuffles within-rank ordering to minimise wire crossings. It only ever moves nodes — nothing is added, deleted or rewired.
Execution reading cleanly left-to-right, unrelated node islands pulled apart into their own bands, and noticeably fewer wires crossing each other.
Clean Graph deliberately skips the evolutionary crossing-minimisation pass above a size threshold and falls back to plain island/rank layout. That's intentional — it keeps the command responsive. You still get the structural pass, just not the crossing polish.
Because it touches the whole graph, this is the one to try on a copy first. Once you trust it, it becomes the command you hit before every code review.
The Linter — find what you can't see
Layout makes a graph readable. The linter tells you whether what you're reading is actually a good idea.
Findings are written straight onto the offending nodes as compiler messages prefixed [Smell]. Re-running the linter clears only its own previous findings — your real compiler errors and warnings are never touched.
What it looks for
- Tick abuseTick Abuse: Casting on Event Tick is expensive.A cast reachable from Event Tick, every frame.
- Tick abuseTick Abuse: Getting all actors on Event Tick is extremely expensive.Get All Actors Of Class in a per-frame path.
- NestingDeep Nesting: Branch depth is >= 4. Consider refactoring.Four or more branches or loops stacked inside each other.
- SequenceLong Sequence: Contains N execution pins. Consider extracting to a macro or function.A Sequence node that has become a to-do list.
- OrphanOrphaned Node: Node has no connections.Left-over experiments with nothing wired to them.
Warning badges appear on the flagged nodes, plus a notification counting the findings. A clean graph reports BlueLine Linter: no findings in <GraphName>.
The command ran without a focused graph editor. Click into the graph tab and try again.
Auto-Tag — comment boxes that mean something
Ordinary comment boxes carry a string. BlueLine's carry a gameplay tag, so the structure of your graph becomes queryable data rather than decoration.
Auto-Tag clusters connected nodes, scores each cluster's semantics against node names and types, and — where the score clears the confidence threshold — draws a comment box titled with the winning category. The resolved tag is persisted on the comment node itself, not just rendered in its title.
BlueLine.Type.Combat.Eleven native tags are registered at editor startup:
The analyzer used to measure a reroute Knot as a full 120×100 node, so any cluster containing knots got a comment box far larger than the nodes inside it. Knots are now measured at their true 32×32 and the boxes hug their contents.
Either the cluster is below the minimum size, or its semantic score never cleared SemanticConfidenceThreshold — a genuinely mixed cluster is left alone by design. Also check bEnableSmartTags and bEnableAutoTagCommand.
Bookmarks and snippets — stop scrolling
Two small features that quietly buy back the most time: jump instead of pan, and insert instead of rebuild.
Select a node, press Alt+3, and that spot is slot 3 for this graph. Alt+Shift+3 takes you back from anywhere. Bookmarks persist to Saved/BlueLineBookmarks.json, so they survive closing the editor.
Ctrl+1-9 belongs to viewport camera bookmarks and plain Shift+1-9 collides with level-editor mode switching. Alt to set and Alt+Shift to jump were picked to stay clear of both.
Select the node group you keep rewriting — a save/load pattern, a damage calculation, an interaction trace — and press Shift+S to name and store it. Shift+I opens the browser and drops it into the graph at the viewport center. Snippets live in Saved/BlueLineSnippets.json.
Inserted nodes appear at the center of your current view with their internal wiring intact, ready to hook into the surrounding graph.
Get code out of the graph
Two exits for logic that has outgrown its Event Graph: promote it to a subsystem, or get it into text you can read, diff and paste.
Select the nodes, press Shift+B, and pick a subsystem type — Game Instance, World or Local Player. BlueLine creates the Blueprint, copies the nodes with their internal links intact, assigns fresh GUIDs, anchors the copy at SourceBounds.Min + (100, 100), and compiles it.
Stale string concatenation used to produce duplicated package directories when creating the asset. The extractor now hands CreateAsset a clean /Game/… long package path, so the new subsystem lands exactly where you pointed it.
Exports your selection — or the entire graph if nothing is selected — to a readable text file. This is the fastest way to get a Blueprint into a code review, a bug report, or a conversation with someone who can't open your editor.
// BlueLine graph export — EventGraph Event BeginPlay → Call GetGameInstanceSubsystem (Class: BP_CombatSubsystem) → Call InitialiseCombat Damage float = 25.0 TargetActor Actor* = <linked> // Comment: runs once per possession
Leave the graph — the level pie menu
BlueLine's other half lives in the level viewport: one radial menu, four directions, opened under your cursor so your hand never leaves the mouse.
PieMenuDeadZone nothing is chosen — Esc always cancels.- UpPivot to CenterMoves the pivot to the center of the selection's bounding box.
- RightSnap to CursorEnters picking mode, traces against visible geometry and snaps the pivot to the nearest triangle vertex where CPU mesh data is available. Left-click commits, right-click or Esc cancels.
- DownPivot to BottomDrops the pivot to the lowest visible bound — the one you want for props and characters that sit on the floor.
- LeftSelect by MaterialPreviews every actor sharing the material under your cursor. Scroll to grow or shrink the radius; release to commit the selection.
The radial menu fades in centred on your cursor with four labelled slots. Hovering a slot expands its label from the short name to the full one.
The pie menu now verifies Client->GetScene() before building a scene family context, and level selection sessions are gated behind the BlueLine master switch. Both fixes remove crashes seen in unusual viewport states.
Make it a habit
Nine stations is a lot to hold at once, and you won't use most of them daily. This is the loop that matters — about sixty seconds, run before you commit a Blueprint.
Every shortcut
Where everything is configured
Every setting named in this tutorial lives there, grouped by module: Routing, Visuals, Formatting, Smart Tags, Level Editor, Export and Debug. The panel also carries Reset to Defaults, plus Export and Import Settings as JSON — the quickest way to put a whole team on one configuration.