← Back to Projects
Unreal Engine

ConvoGraph

Production-ready dialogue and conversation system for Unreal Engine 5.6–5.8 with JSON authoring, condition-gated choices, voiced lines, localization and built-in save persistence

Unreal EngineC++BlueprintsDialogue SystemLocalizationGame Development

Overview

ConvoGraph is a code plugin that gives Unreal Engine 5 projects a subsystem-driven runtime for branching NPC conversations, condition-gated player choices, voiced dialogue with subtitles and full localization. Instead of a proprietary node-graph editor, writers author dialogue in plain JSON that is imported by drag-and-drop, while engineers trigger conversations from Blueprint or C++ in a few lines. It is built for teams where writers stay in text files and the data flows to code without opaque binary assets.

Key Features

  • Branching and linear modes — hubs, cycles and auto-advancing Branch nodes, with GameplayTag and variable condition gates on every node, extensible in C++ or Blueprint
  • JSON and DataTable authoring — .convo / .convotable files import via the Content Browser with reimport support, and the same JSON can be imported at runtime for mod and DLC content
  • Variables and persistence — {Token} substitution in dialogue text, with visited nodes, variables and history saved through the engine’s built-in USaveGame (no save plugin required)
  • Voice and subtitles — async voice-line prefetch, per-culture audio fallback and a timed subtitle component synchronized to clip duration
  • Localization — StringTable-first text with Localization Dashboard support for seven cultures out of the box
  • Headless-safe and extensible — no widget dependency in the subsystem, so it runs on dedicated servers and in automated tests, plus a vendor-neutral LLM generator hook with timeout and authored-text fallback

Technical Decisions

A single UDialogueSubsystem (a GameInstance subsystem) is the only entry point and holds no UI dependency, which keeps the runtime testable and server-safe while the game supplies its own widget, audio and camera. Graph analysis (reachable and orphaned nodes) and the JSON import pipeline are embedded as private, renamed Cg-prefixed modules so the plugin ships as one self-contained Fab package with no sibling-plugin dependencies, and the editor-only factories live in a separate cook-stripped module.