Skip to main content

Godot Plugin Changelog

New updates and improvements to the StoryFlow plugin for Godot.

Godot Plugin v1.2.1

June 20, 2026

Typed Map Get/Set API & Flexible Dialogue UI Roots

Adds typed get and set methods for map variables on StoryFlowComponent so game scripts read and write maps as typed Dictionaries, and lets the dialogue UI scene be rooted on any node type instead of only Control for worldspace dialogue.

What's New

New Features
  • Typed map get/set API: read and write map variables from GDScript as typed Dictionary values. Eight typed getters cover the supported key and value combinations: get_string_to_bool_map, get_string_to_int_map, get_string_to_float_map, get_string_to_string_map and the integer-key get_int_to_bool_map, get_int_to_int_map, get_int_to_float_map, get_int_to_string_map, each returning a Dictionary. The string_to_* getters read both string-keyed and enum-keyed maps, and the *_to_string_map getters resolve string and enum values through the string table while returning image, audio and character values as raw asset keys. Iterate a returned map in insertion order with Dictionary.keys()
  • Typed map setters: set_string_to_bool_map, set_string_to_int_map, set_string_to_float_map, set_string_to_string_map and the matching set_int_to_*_map methods write a whole Dictionary into a map variable. Writes emit variable_changed and live-refresh the active dialogue. A missing variable or a key or value type mismatch logs a warning and is a no-op. Every accessor takes an optional is_global flag to target global variables
  • Flexible dialogue UI roots: the built-in dialogue UI scene can now be rooted on any node type rather than only Control, so dialogue can be hosted under a Node3D or other non-Control parent for worldspace and in-scene presentation
Show Full Changelog

Godot Plugin v1.2.0

June 12, 2026

Map Variables, Modulo Nodes & Array Setter APIs

Adds full map variable support with eleven new node types, save persistence and a get_map_variable API, new modulo arithmetic nodes, typed array setter APIs for game code and fixes for Set node value outputs, array character variables, enum conversions and setArrayElement.

What's New

New Features
  • Map variable support: script and global variables can now be maps, stored as Godot Dictionaries with key and value type metadata. All eleven map node types are implemented: getMap, setMap, getMapValue, setMapValue, hasMapKey, mapSize, mapKeys, mapValues, removeMapKey, clearMap and forEachMap
  • setMap aliases the target variable to the source map’s storage like the HTML runtime, so a later clearMap or setMapValue on one variable is observed through the other. Assigning from read-only sources such as runScript outputs snapshots the entries into a fresh map instead
  • forEachMap iterates map entries with Key and Value outputs usable by connected nodes on each iteration, integrated with the existing loop stack and continuation rules
  • Map variables persist in save data, keeping their key and value type metadata and entry order. Saves from versions without map support load with sensible defaults
  • Maps flow through runScript map parameter and output ports, so sub-scripts can receive maps from and return maps to the calling script
  • Added get_map_variable(variable_name) on StoryFlowComponent, which reads a script or global map variable from game code and returns it as a Dictionary
  • Modulo nodes: added the integer modulo and float moduloFloat arithmetic nodes. Both return 0 when the divisor is 0, matching the divide nodes
  • Typed array setter APIs on StoryFlowComponent: set_bool_array_variable, set_int_array_variable, set_float_array_variable, set_string_array_variable, set_enum_array_variable, set_image_array_variable, set_audio_array_variable and set_character_array_variable let game code write array variables by display name, mirroring the Unity and Unreal plugins. Writes notify listeners and live-refresh any active dialogue, like every variable change
Improvements
  • Execution traces now match the HTML runtime more closely: variable reads emit a VAR GET line on every data pull and evaluation lines use the editor’s node type names, making cross-runtime debugging output directly comparable
Bug Fixes
  • Fixed Set nodes used as value sources returning type defaults instead of the variable’s value. setBool, setInt, setFloat, setString, setEnum, setImage, setAudio, setCharacter and setCharacterVar now expose their value on output ports exactly like their Get counterparts, setCharacterVar also works as an array source and setBackgroundImage as an image source
  • Fixed setCharacterVar destroying array-typed character variables on write. The handler had no array branch, so it coerced the input to a scalar and overwrote the array on first write
  • Fixed input edge matching where a scalar handle could swallow its array sibling on nodes carrying both inputs, causing arrayContains and findIn needles and array element indexes to resolve against the wrong edge and return defaults
  • Fixed intToEnum and stringToEnum conversions always evaluating to empty strings. Enum value lists were dropped on import and the conversion nodes were unreachable from the evaluator chain. Enum values are now also resolved from the downstream node when the editor exports conversion nodes without data, matching the HTML runtime
  • Fixed setArrayElement reading its inline index and value from the wrong data fields
  • Fixed whole-number inline values on float nodes evaluating to 0. Editor JSON carries no type hint on inline values, so whole numbers imported as integers and were rejected by float inputs
Show Full Changelog

Godot Plugin v1.1.1

May 20, 2026

Character APIs, Array Variables & Forward-Compat Warnings

Adds new public GDScript APIs for reading character portraits, custom variables and character arrays from game code, resolves string variables through the string table, and warns instead of silently skipping unsupported node types from newer editor versions.

What's New

New Features
  • Character read APIs on StoryFlowComponentget_character(character_path) returns the live StoryFlowCharacter object, get_character_variables(character_path) lists the names of a character’s custom variables, and get_character_portrait(character_path, asset_key = "") resolves a portrait to a Texture2D walking the character → script → project asset pools. Useful for rendering multi-character UIs without reaching into private manager state
  • Added get_character_array_variable(variable_name) — reads a script or global variable whose element type is character and returns the array of character paths, each usable with the other character APIs above
  • Added get_array_variable(variable_name) — generic reader for any array variable, returning Array[StoryFlowVariant] with string and enum elements resolved through the string table
  • Added character_variable_changed(character_path, variable_name, value) signal — emitted when a setCharacterVar node mutates a character’s Name, Image or custom variable, so non-speaker UIs can react to off-screen character updates
  • get_character_variable now handles the built-in "Image" field symmetrically with "Name", returning the character’s current portrait asset key
Improvements
  • get_string_variable now routes its result through the string table, so callers receive localized text rather than raw string keys — matches the Unity plugin’s behavior
  • Unsupported node types from newer editor versions now emit a push_warning and fall through to the default output instead of being silently skipped, so scripts authored against a newer plugin keep flowing on older runtimes. Warnings also fire from boolean, integer, float, string, enum and array evaluator chains, deduplicated per dialogue run via the execution context
Show Full Changelog

Godot Plugin v1.1.0

April 8, 2026

Data-Only Sync, Portrait UI & Execution Fixes

Adds support for data-only WebSocket sync (skip asset copying for fast iteration), a new Portrait dialogue UI with detached character image, and fixes for media loading, RunScript evaluation, array operations, and variable access outside dialogue.

What's New

New Features
  • Data-only sync support — when the StoryFlow Editor syncs with “Data Only” enabled, the plugin reuses previously imported assets from the output directory instead of requiring source files in the build directory, enabling fast script-only iteration without re-copying images and audio
  • Added StoryFlowDialogueUIPortrait scene — alternative dialogue UI with the character portrait rendered as a large image anchored to bottom center of the screen, separate from the dialogue panel. Portrait scales responsively with viewport height. Assign to dialogue_ui_scene on StoryFlowComponent to use it
  • Portrait height ratio and bottom offset are exposed as @export properties for easy customization
Bug Fixes
  • Fixed image import failing for files with mismatched extensions (e.g. PNG data saved as .jpg) — importer now detects actual format from file header magic bytes
  • Fixed media assets (images, audio) not loading correctly during WebSocket sync when file paths contained subdirectories
  • Fixed background image not persisting across dialogue nodes as expected
  • Fixed PlayAudio not resolving audio assets from resolved asset sources
  • Fixed RunScript output nodes not evaluating return values back to the calling script
  • Fixed array Push, Pop, RemoveAt, and Insert operations not correctly modifying the source array
  • Fixed script parameter passing not propagating values through RunScript node connections
  • Fixed variable access (get_variable, set_variable) failing when called outside of active dialogue — global variables now fall back to the manager’s runtime state
  • Fixed character variable lookup failing due to variables being keyed by internal ID instead of display name
Show Full Changelog

Godot Plugin v1.0.3

April 5, 2026

Inline Values, Character Variables & Editor Settings

Fixes comparison and arithmetic nodes ignoring inline values, character variable lookup failures, forEach loop issues, and editor dock settings not persisting.

What's New

Bug Fixes
  • Fixed inline values on comparison and arithmetic nodes being ignored — nodes like >=, >, +, etc. silently read their inline values as 0 instead of the configured number, causing incorrect evaluation results (e.g. 0 >= 15 becoming 0 >= 0)
  • Fixed character variable nodes (getCharacterVar) always returning empty values — the importer was keying variables by their internal ID instead of their human-readable name, causing lookup mismatches at runtime
  • Fixed getCharacterVar nodes not working as array sources for forEach loops
  • Fixed forEach loop context not persisting across iterations, causing variable state to reset each loop
  • Fixed boolean evaluation caches not clearing between forEach iterations, leading to stale condition results
  • Fixed character string keys not resolving through the global strings table
  • Fixed editor dock settings (port, output directory, build directory) resetting to defaults on Godot editor reload — settings are now persisted via ConfigFile
  • Fixed sync output directory not updating from the current field value on each sync
Show Full Changelog

Godot Plugin v1.0.2

March 29, 2026

Script Selector & Text Block Fixes

Adds a dropdown script selector to the StoryFlowComponent inspector and fixes text blocks not appearing in dialogue.

What's New

New Features
  • Script Path Dropdown: The script_path property in the StoryFlowComponent inspector now shows a dropdown listing all imported scripts, replacing the plain text field — script paths are cached during import and WebSocket sync
Bug Fixes
  • Fixed text blocks in dialogue nodes not appearing — visibility conditions were not being evaluated, and the built-in dialogue UI was not rendering text blocks at all
Show Full Changelog

Godot Plugin v1.0.1

March 22, 2026

String Variables & Media Loading Fixes

Fixes string variable interpolation, node input matching, and media assets failing to load at runtime.

What's New

Bug Fixes
  • Fixed string variables displaying raw localization keys instead of actual text in dialogue
  • Fixed connected node inputs (e.g. SET receiving value from RANDOM) not being found due to handle suffix mismatch
  • Fixed audio and image assets not loading at runtime when reimporting from the same directory
Show Full Changelog

Godot Plugin v1.0.0

March 19, 2026

Initial Release

The first official release of the StoryFlow plugin for Godot 4, bringing full dialogue runtime support to Godot projects.

What's New

New Features
  • Full Runtime Engine: Complete GDScript execution engine with 160+ node types
  • StoryFlow Component: Node for running dialogues with typed signals
  • StoryFlow Runtime: Autoload singleton for shared state management
  • Variable System: Boolean, integer, float, string, enum, image, audio, and character types
  • Array Operations: Full array support with ForEach loops across all variable types
  • Text Interpolation: Live variable interpolation with {varname} and {Character.Name} syntax
  • Script Execution: RunScript (call/return with parameters) and RunFlow (jump with exit flows)
  • Character System: GetCharacterVar/SetCharacterVar with built-in Name and Image fields
  • Audio Playback: Loop, reset, advance-on-end, and allow-skip support
  • Background Images: Dynamic background image support with persistence and reset
  • Save & Load: Slot-based persistence for global variables, characters, and once-only options
  • Built-in Dialogue UI: Default dialogue UI scene with auto-fallback
  • Editor Dock: StoryFlow dock panel with Live Sync and Import sections
  • JSON Importer: Import StoryFlow Editor projects preserving build directory structure
  • Live Sync: WebSocket client for real-time sync with StoryFlow Editor
  • Toolbar Button: StoryFlow logo button with Connect/Sync toggle
Show Full Changelog

Development Begins

December 1, 2025