DreamFXLang
Diagnostics

Diagnostics

Every DFXnnnn code — how to read one, which pipeline stage each family belongs to, and a lookup table by code.

Every DreamFX diagnostic is a DFXnnnn carrying a file, line and column:

DFX/Effects/NS_Hello.dfs(31,17): error DFX3003: Module 'GravityForce' has no input named 'Gravty'.
Did you mean 'Gravity'? Available inputs: Gravity, CoordinateSpace
Log categoryLogDreamFX
Severitieserror / warning / info — all three are really used
Positionevery code carries file, line and column
In the editora failed build toasts with an Open in VSCode link straight to the line and column

The leading digit is the stage that raised it. That is both a reading cue and a pointer at where to look:

RangeStageMeans
DFX1xxxDriver and file I/Othe file could not be read, or the lexer stopped
DFX2xxxLexer and syntaxthe grammar: braces, semicolons, keywords
DFX3xxxDeclarations and structurethe syntax is fine, but a declaration disagrees with the real asset
DFX4xxxValues, types and expressionssomething on the right of an =
DFX5xxxGeneration and asset writingwriting the asset failed, or a deliberate degradation is being announced
DFX6xxxNiagara compilationthe asset was written and Niagara itself objects
DFX7xxxProvenance, drift and lintthe asset and the source are out of step, or lint sees a hazard
DFX8xxxDecompilerexport, Adopt, round-trip gaps

Half of these pages are machine-written: severity, message template and raise sites are scanned out of the plugin sources, and gen-diagnostics.ps1 -Check is the gate that stops them drifting. The human half — cause and fix — is written once. See ci.ps1 and gates.

The order to debug in

Look the code up

The tables below, or the family page. Codes are stable: DFX3003 is always the same failure mode.

Check against the real signature

dfx.ps1 schema <Module> -Stack <Stack> prints the input signature as the build sees it — static switches included. The authority on names is the asset, not memory.

Still wrong? Read the limits

Limits lists what is not covered and the 1.0.0 known issues.

Lookup by code

DFX1xxx — Driver and file I/O

CodeSeverityMessage
DFX1000errorCould not read source file '%s'.
DFX1001errorUnterminated string literal.
DFX1002errorUnterminated block comment.
DFX1003errorUnexpected character '%c' (U+%04X).
DFX1004errorUnterminated raw block: missing '}'.
DFX1005errorUnterminated back-quoted name. A name must close on the same line.

DFX2xxx — Lexer and syntax

CodeSeverityMessage
DFX2000errorUnknown document type '%s'. Expected System, Emitter, Module or DynamicInput.
DFX2001errorExpected '{' to open a raw block but found '%s'.
DFX2002errorExpected a name but found %s.
DFX2003errorExpected a number but found '%s'.
DFX2004errorExpected a value but found %s.
DFX2005error'#EndRegion' has no matching '#Region'.
DFX2006errorUnknown directive '#%s'. Expected Region or EndRegion.
DFX2007errorExpected a version after '@'.
DFX2008errorModule '%s' was given a positional argument. Module inputs must be written as 'Name = Value'.
DFX2010warning'#Region "%s"' was never closed with '#EndRegion'.
DFX2013error'%s' is a system-scope stack and must be written at the top level of a .dfs, not inside an emit…
DFX2015error'from' must be followed by a quoted path to a .dfe source file.
DFX2016error(built at runtime)
DFX2018errorA Module or DynamicInput must declare a 'Body = { }' block.
DFX2019errorHeader argument '%s' must be a quoted string.
DFX2020errorUnknown curve key attribute '%s'. Expected Interp, Tangent, Arrive or Leave.
DFX2021errorFile declares '%s' but its extension is '%s'. Rename the file to '%s' or change the declaration.
DFX2022errorUnexpected '%s' after the end of the document. A DreamFX file declares exactly one top-level ob…
DFX2023error'%s' is a module call, so it cannot be given a type. Types are written only on assignments.
DFX2024error'disabled' can only prefix a module call, and '%s' is an assignment.
DFX2025errorUnknown OnEvent argument '%s'. Expected Source, Event, Mode, SpawnNumber, MaxEventsPerFrame, Up…
DFX2026errorUnknown Stage argument '%s'. Expected Iteration, DataInterface, NumIterations, ExecuteBehavior…

DFX3xxx — Declarations and document structure

CodeSeverityMessage
DFX3000error(built at runtime)
DFX3001error(built at runtime)
DFX3002errorCould not read the input schema of module '%s': %s
DFX3003errorModule '%s' has no input named '%s'.%s Available inputs: %s
DFX3004errorUnknown renderer type '%s'. Expected one of SpriteRenderer, MeshRenderer, RibbonRenderer, Light…
DFX3005errorEmitter '%s' is declared more than once. Emitter names are stable keys and must be unique.
DFX3006error'%s' is neither an allowed inline function (%s) nor a dynamic input: %s
DFX3007errorCould not read the input schema of dynamic input '%s': %s
DFX3008errorDynamic input '%s' has no input named '%s'. Available inputs: %s
DFX3009errorDynamic input '%s' is pinned to version %s, which its asset does not offer. Available version(s…
DFX3010errorProperty '%s': %s
DFX3020errorUnknown %s setting '%s'. Available settings: %s
DFX3021errorUser parameter '%s' is declared more than once.
DFX3030errorA Module or DynamicInput must declare Settings.Usage -- it decides which stacks the module can…
DFX3031errorA DynamicInput must declare Settings.Output -- its return type cannot be inferred from the body.
DFX3032errorA DynamicInput's Usage must be DynamicInput, not '%s'.
DFX3033errorInput '%s' is declared more than once.
DFX3034errorInput '%s' is marked [StaticSwitch] but is a %s. A static switch must be a bool, an int or an e…
DFX3035errorInput '%s' is a [StaticSwitch], so its default must be a compile-time constant.
DFX3036errorThe Body block is empty.
DFX3037error(built at runtime)
DFX3038error'%s' is not a stack a module can be placed in. Use one of: %s.
DFX3039errorA DynamicInput cannot return a data interface; its Output must be a value type.
DFX3040error(built at runtime)
DFX3041error'%s' could not be parsed; see the errors above.
DFX3042error'%s' declares a %s, but 'from' needs an Emitter document.
DFX3043error'%s' reads user parameters this system does not declare: %s. Add them to the Properties block.
DFX3044errorThe default for input '%s' has to be a literal or an enum entry. A module input default is stor…
DFX3045error'%s' is not a type a particle attribute can have.
DFX3046error'%s' is not a particle attribute DreamFX knows the type of. Write the type at its first use in…
DFX3047errorA DynamicInput computes a value; it cannot write '%s'. Move the write into a Module.

DFX4xxx — Values, types and expressions

CodeSeverityMessage
DFX4001errorInput '%s' expects %s, but a number was written.
DFX4002errorExpression for '%s': a vector literal must have 2 to 4 components.
DFX4003errorInput '%s' is an integer, but %s was written. Narrowing is not implicit -- write int(%s) if tru…
DFX4004errorInput '%s' has no resolvable Niagara type.
DFX4005errorProperty '%s': component %d is not a number.
DFX4006errorInput '%s' is a %s, which has no entry named '%s'. Valid entries: %s
DFX4007errorInput '%s' expects %s. '%s' is neither a literal of that type nor a parameter reference -- para…
DFX4010errorInput '%s' is set more than once on dynamic input '%s'.
DFX4020errorParameter '%s': 'Object' needs an inner type, e.g. Object<Texture>.
DFX4021errorParameter '%s': no UObject class named '%s'. Object<> takes a class name such as Object<Texture…
DFX4022errorCannot infer the type of '%s' from its value. A first assignment to a new attribute must use a…
DFX4023errorProperty '%s': box() takes 6 numbers -- minX, minY, minZ, maxX, maxY, maxZ.
DFX4024errorCannot type '%s = %s': the type of '%s' is not known here. Declare it in Properties, or assign…
DFX4025error'%s' is not a valid assignment target. Parameter names are namespace-qualified, e.g. Particles.…
DFX4026error'Bind %s -> %s': the target must be a qualified parameter -- either a namespace such as Particl…
DFX4027error'%s' is %s, but '%s' is %s. Linking binds a parameter directly -- there is no conversion. Decla…
DFX4028errorDefault for '%s' needs a declared type. A default has no module signature to infer one from, so…
DFX4029errorDefault for '%s' must be a literal, an enum or another parameter. A dynamic input computes a va…
DFX4030errorThe hlsl block for '%s' must be a single expression: no statements, no local variables, no retu…
DFX4031error'%s' is not an allowed inline function. Allowed: %s. Anything else belongs in a .dfm dynamic in…
DFX4032error'%s' in the expression for '%s' is not a parameter. Only namespace-qualified parameters (User.X…
DFX4033errorBuiltin '%s' takes positional arguments, not named ones.
DFX4034errorBuiltin '%s' takes %d argument(s), but %d were written.
DFX4035errorExpression for '%s' contains a value that has no HLSL form.
DFX4036errorThe hlsl block for '%s' is empty.
DFX4037error'%s' is %s; a curve { } literal only fits a curve data interface input.
DFX4038errorThe curve for '%s' has no keys.
DFX4039errorUnknown curve interpolation '%s'. Expected Auto, Cubic, Linear or Constant.
DFX4040errorParameter '%s': no asset at '%s'.
DFX4041errorParameter '%s': '%s' is a %s, which is not a %s.
DFX4042errorUnknown curve tangent mode '%s'. Expected Auto, User, Break or None.
DFX4091errorInput '%s': dynamic inputs, hlsl blocks, curves and inline expressions are not available yet (p…

DFX5xxx — Generation and asset writing

CodeSeverityMessage
DFX5001errorStack '%s' has no Niagara script usage mapping.
DFX5002warningThis system declares no emitters, so it will produce nothing.
DFX5003info'%s' is not declared in this source, so its existing modules are left as-is: %s
DFX5004infoNo Material was set, so the engine default was applied: %s. Write 'Material = "...";' to choo…
DFX5030errorSavePackage failed for '%s'.
DFX5031errorEmitter '%s' declares more than one OnEvent block. Only one event handler per emitter is repres…
DFX5032errorEmitter '%s' declares two Stage blocks named '%s'. Stages are identified by name; rename one.
DFX5033errorEmitter '%s' declares Stage blocks but simulates on the CPU. Simulation stages are a GPU featur…
DFX5034errorEmitter '%s' uses 'as %s' on two module calls. Node names are unique per emitter; rename one.
DFX5093error'MaterialParam' is reserved syntax and is not implemented in v1 (plan section 7).
DFX5097errorOnly System documents can be generated right now; this file declares a %s.
DFX5098errorData interface parameter '%s' takes its configuration as a quoted JSON object, the form the dec…
DFX5099info[Group] and [SortPriority] are kept in source only: the external edit API's user variable struc…
DFX5100error'%s' is a %s with no generated asset at '%s', and %s
DFX5101error(built at runtime)
DFX5102infoInput '%s' is marked [StaticSwitch]. Tier-one generation (plan 3.3) lowers the whole Body to a…
DFX5103errorPackage '%s' exists on disk but could not be loaded.
DFX5104errorPackage '%s' exists but holds no Niagara script named '%s'. Refusing to overwrite it.
DFX5105errorCould not create package '%s'.
DFX5106errorCould not wire the module graph. The Niagara schema rejected a parameter map connection.
DFX5107error'%s' no longer matches the module asset at '%s', and this build cannot regenerate it. Rebuild i…

DFX6xxx — Niagara compilation

CodeSeverityMessage
DFX6001error(built at runtime)
DFX6002warning(built at runtime)
DFX6003error(built at runtime)
DFX6004warning(built at runtime)
DFX6005errorNiagara compilation of '%s' did not succeed (status %s).
DFX6006errorNiagara could not compile the body of '%s': %s
DFX6007infoNothing in this source writes that parameter, so there is no graph parameter for a default to s…
DFX6008error'%s' finished its compile with stale scripts: %s. The compiled VM was not rebuilt from the grap…

DFX7xxx — Provenance, drift and lint

CodeSeverityMessage
DFX7001errorAsset '%s' carries no DreamFX provenance stamp: it was never generated from this source, or it…
DFX7002errorAsset '%s' is stale: it was generated from a different revision of this source. Run the DreamFX…
DFX7003warningAsset '%s' was generated by DreamFX %s; the current generator is %s. A rebuild is recommended.
DFX7004errorAsset '%s' does not exist: this source has never been built.
DFX7005error(built at runtime)
DFX7101warningEmitter '%s' simulates on the GPU but declares no FixedBounds. GPU emitters cannot compute thei…
DFX7102warningEmitter '%s' spawns by rate ('%s') with no upper bound. Set AllocationMode = Fixed and PreAlloc…
DFX7103warningEmitter '%s' uses randomness ('%s') but does not set Determinism = true, so it will look differ…
DFX7104warningThis renderer has no Material and DreamFX knows no default for its type, so it will not draw. S…

DFX8xxx — Decompiler

CodeSeverityMessage
DFX8000errorCannot decompile a null system.
DFX8001errorCould not read emitters: %s
DFX8002warningSkipping emitter '%s': %s
DFX8003errorCannot decompile a null emitter.
DFX8004errorCould not create a host system to read the emitter through: %s
DFX8005errorCould not copy emitter '%s' into a host system: %s
DFX8006errorCould not read emitter '%s': %s
DFX8010error'%s' cannot be adopted: '%s' has no DreamFXLang form yet, so adopting would destroy it on the f…
DFX8011error'%s' is already generated by an existing source, so a second one would silently overwrite it on…
DFX8012error'%s' was adopted, but re-exporting the rebuilt asset does not reproduce this file. First differ…
DFX8013errorThis file sits in the decompiled output directory but Name="%s" builds '%s', outside the '%s/…
DFX8014warningEmitter '%s' inherits from '%s'. The export flattens the inheritance: the merged stack is carri…
DFX8015warningEmitter '%s' carries %d event handler(s) this export cannot represent%s. The rebuilt emitter wi…
DFX8016warningEmitter '%s' carries %d simulation stage(s) this export cannot represent (custom stage class or…

On this page