The obligatory node graph
It replaces the thing that looks like this
Grab a title bar, go on
TODO: rewrite this page in BPScript
Sequence
Then 0
Then 1
Sequence
Then 0
Then 1
Begin PlayCustom Event
Technical reference / scripting language

BPScript

A Python-style language that compiles directly to Unreal's Blueprint bytecode. Write .bps files, compile in-editor, and ship standard Blueprint assets. Editor-only, with zero runtime cost.

Closed beta · coming soon Read the manual
Fig. 1 / Class definitionPlayerPawn.bps
extends Character

@export
var MaxHealth: float = 100.0
var Health: float = 100.0

event BeginPlay():
    Health = MaxHealth
    PrintString(f"Spawned with {Health} HP")

func TakeDamage(amount: float):
    Health = Clamp(Health - amount, 0.0, MaxHealth)
    if Health <= 0.0:
        Die()

func Die():
    PrintString("Player down")
    DestroyActor()
extends = parent class @export = editor property event = engine hook func = method
Get FeaturesPure
ANative bytecodeEmits raw Blueprint VM opcodes into the generated class. Output is byte-identical to a hand-built graph.
BPlain-text sourceOne class per .bps file. Real diffs, clean merges, no binary .uasset conflicts.
CZero runtime costEditor-only plugin. The packaged game ships only the assets, with no module and no per-platform steps.
DFull reflection accessEvery engine type, function, struct, enum and interface resolves through UE reflection.
ENetworking decoratorsReplication and RPCs through one-line decorators like @replicated, @server, @client and @multicast.
FPython-style syntaxIndentation-scoped. No braces, no semicolons. One class to a file.
GUser-defined typesDeclare your own struct, enum and mixin types alongside engine ones.
HCross-file importsPull classes and types across files with import, with circular-import detection.
For Each ExampleLoop Body
2a · User types
enum Rarity:
    Common
    Rare
    Legendary

struct Item:
    var Name: Name
    var Quality: Rarity

var Loot: Array[Item]
2b · Pattern match
func Label(state: int) -> String:
    return match state:
        0: "idle"
        1: "running"
        2: "jumping"
        _: "unknown"
2c · Networking
@replicated(notify=OnHealth)
var Health: float = 100.0

@server
@reliable
event RequestReload():
    Ammo = 30

func OnHealth():
    UpdateHud()
2d · Delegates
var OnDied: Delegate[Actor]

func Bind():
    OnDied.Add(self, "HandleDeath")

func HandleDeath(who: Actor):
    Respawn(who)
2e · Async / await
event BeginPlay():
    PrintString("waiting")
    await Delay(2.0)
    PrintString("done")
2f · Defer
func Process():
    defer Cleanup()
    if not Ready():
        return
    DoWork()
Source To AssetPure
You author

Plain .bps text

  • Plain .bps source files, one class to a file.
  • Edited and compiled inside the editor with F7.
  • The source of truth, kept under version control.
Your game ships

Standard Blueprint assets

  • Ordinary generated Blueprint .uasset files.
  • Other Blueprints and C++ call them like any class.
  • It does not replace the graph editor. Use both.
Get Editor ToolsTarget is Editor
I-1Highlight & completeSyntax highlighting plus context-aware autocomplete with signature hints.
I-2Live type-checkingKeystroke-time squiggles flag type mismatches before you compile.
I-3DebuggerBreakpoints, step controls, locals and a live call stack, inside the editor.
I-4Hot reloadRecompile while play-in-editor is running and keep the session alive.
I-5Navigate & refactorGo-to-definition, find-all-references, rename, and a file outline.
I-633 color themesRe-skin the whole editor from 33 built-in palettes. Preview them in the Themes section below.
Get ScreenshotsTarget is Editor
Plate 1Editor
A BPScript class in the code editorScreenshotCode editor
A .bps class in the code editor.
Plate 2Autocomplete
Autocomplete popup with inline signature hintsScreenshotCompletion + hints
Context-aware completion with inline signature hints.
Plate 3Type-check
Live type-check squiggle with a fix hintScreenshotLive squiggles
Keystroke-time type squiggles with a fix hint.
Plate 4Breakpoints
Setting a breakpoint from the gutter with optional fire conditionsScreenshotSet breakpoints
Set a breakpoint from the gutter, with optional fire conditions.
Plate 5Docs
The language reference rendered in the in-editor docs viewerScreenshotIn-editor docs
The language reference, rendered in the in-editor docs viewer.
Plate 6Symbols
F1 symbol page showing engine reflection docs for an engine functionScreenshotF1 symbol docs
F1 on an engine symbol opens its reflection docs.
Plate 7Settings
The BPScript editor preferences pageScreenshotPreferences
Configure your own custom themes or use one of mine.
Plate 8Debugger
The debugger stopped at a breakpoint, showing the locals tree, call stack and step controlsScreenshotLocals + call stack
Stopped at a breakpoint: the locals tree, call stack and step controls.
Get Key BindingsTarget is Editor
F7CompileCompile the active .bps file into its Blueprint asset.
Alt + GGo to definitionJump to the declaration of the symbol under the cursor.
Ctrl + TGo to symbolOpen the project-wide symbol search.
Ctrl + FFindSearch within the current file.
Ctrl + HReplaceFind and replace in the current file.
Ctrl + GGo to lineJump to a line number.
F1Symbol docsOpen the reference page for the symbol under the cursor.
Set Editor Theme33 Options

BPScript's code editor comes with 33 built-in color themes. Pick one here and the sample beside it recolors instantly. The whole sheet follows along.

Live previewtheme.bps
# change the dropdown to recolor
@export
var Speed: float = 600.0
var Names: Array[Name]

func Move(dir: Vector) -> bool:
    if Speed <= 0.0:
        return false
    var v = dir * Speed
    SetActorLocation(GetActorLocation() + v)
    return true
Begin SetupCustom Event
Closed beta underway. BPScript isn't publicly available yet. The steps below are how it works once you have beta access.
01
Enable the plugin. Add BPScript to an Unreal Engine 5.7 project.
02
Create a class. Make a new BPScript class from the Content Browser.
03
Write the source. Edit the .bps file in the in-editor code editor.
04
Compile. Press F7. You get a standard Blueprint asset, ready to use.
Open DocumentationTarget is Manual

The complete manual ships with the plugin and reads in-editor. The same pages are on this site. They cover the language reference, the editor, networking, hot reload, settings and subsystems.

Open the documentation
Compile To BytecodePure
01Lexer
02Parser
03Analyzer
04Emitter
05Assembler

A full compiler, run entirely inside the editor. It touches no graph internals. It writes Blueprint VM opcodes directly, then assembles a standard generated class.

Print CreditsDevelopment Only
Title
Blueprint VM, as text
Drawn by
Myles Martin
100%
Scroll or pinch to zoom · drag a title bar to move a node · press 0 to frame all
Unreal is a trademark of Epic Games, Inc.