DreamShaderLang
Getting Started

About DreamShader

What the plugin is, the three modules it ships, which engines it supports, and where the related repositories live.

DreamShader is an Unreal Engine plugin that compiles DreamShaderLang source files into standard material assets. DreamShaderLang is the language; the plugin owns parsing, generation, caching, diagnostics, decompilation and the editor integration.

Version1.5.0 — descriptor Version 150, IsBetaVersion false
EnginesUnreal Engine 5.35.8, Win64 verified with RunUAT BuildPlugin
ModulesDreamShader (Runtime), DreamShaderCompiler (Runtime), DreamShaderEditor (Editor)
Plugin dependenciesWebSocketNetworking, SQLiteCore
Descriptor flagsEnabledByDefault, CanContainContent
LicenseMIT
RepositoryTypeDreamMoon/DreamShader

What it is for

Unreal material graphs are hard to review, diff, reuse and migrate once they grow. DreamShader moves the repeatable parts into text:

Pain pointThe answer
Large graphs are hard to review and diffgraph structure lives in .dsm / .dsf files
Shared logic gets duplicated.dsh headers, .dsf function assets, Function / GraphFunction helpers, packages
Regenerating a material function breaks its callersFunctionInput / FunctionOutput pin identities are preserved by name
Substrate graphs need text authoringthe Substrate type, Base.FrontMaterial, and the Substrate.* builtins since UE 5.4
Existing graphs need migratingthe decompiler exports UMaterial / UMaterialFunction back to .dsm / .dsf
Generated assets lose their provenanceDreamShader.SourceFile and DreamShader.SourceHash are stamped into package metadata

It is not a replacement for the material editor, and not a shader pipeline. Graph is a node-graph builder with four operators and if / else; anything genuinely imperative belongs in a Function, whose body is real HLSL compiled into a Custom node. A one-off, highly visual graph is still faster to build in Unreal — and can be exported later if it stabilizes.

The three modules

ModuleTypePublic headersResponsibility
DreamShaderRuntime6The log category, the canonical path helpers, the parsed-source data model, the parser, UDreamShaderSettings, UDreamShaderMaterialInstance, and the engine-version macros.
DreamShaderCompilerRuntime3A pure abstraction layer: the compile request/result structs, the IDreamShaderCompiler interface, and a thin service wrapper. No generation code.
DreamShaderEditorEditor0Everything that actually builds assets: the generator, the decompiler, the bridge, the preview, the Material Content Browser, the commandlet, the workspace exporter.

All three load at the Default phase.

DreamShaderEditor exports nothing and cannot be linked against — it has no Public/ folder at all. The supported C++ extension point is IDreamShaderCompiler in DreamShaderCompiler. Everything else is reachable through the editor UI, the commandlet, or the bridge files.

The parser is engine-independent string processing: it creates no UObjects and loads no assets. Generation is the opposite — editor-only, game-thread, built on the material editing library.

Engine support

Verified with single-plugin RunUAT BuildPlugin on Win64 for 5.3, 5.4, 5.5, 5.6, 5.7 and 5.8. Feature availability differs, and the gate is compile-time — a binary built against 5.3 does not contain the Substrate code paths at all, so moving a project to a newer engine means rebuilding the plugin.

RequiresFeatures
5.4Substrate — Substrate.*, ShadingModel="Substrate", Base.FrontMaterial, the Strata aliases · generated Custom nodes keep their code collapsed · bHasPixelAnimation reset and export
5.5the periodicworld transform basis · UE.TransformPosition(PeriodicWorldTileSize=…)
5.6the firstperson transform bases · UE.TransformPosition(FirstPersonInterpolationAlpha=…) · plugin-mount validation for Root= and Path(…) · TextureSample.GatherMode round-trip
5.7Group / SortPriority on collection parameters · BlendInputRelevance on layer-blend inputs · per-platform, per-quality material-resource diagnostics

Everything not listed behaves identically on every engine from 5.3 to 5.8. Where a feature is missing, most source-reachable surfaces report an explicit message ending requires Unreal Engine 5.4 or newer. rather than degrading silently.

Who implements what

DreamShader ships as two independent products that talk through files under <Project>/Saved/DreamShader/Bridge/ and one loopback WebSocket.

SurfaceImplemented by
Parsing, generation, caching, diagnostics, decompilerthe Unreal plugin
Menus, toolbar, context menus, the Material Content Browser tabthe Unreal plugin
Preview rendering and the PNG framesthe Unreal plugin
DShader/Packages creation, import resolution, the compile exclusionsthe Unreal plugin
Highlighting, completion, hover, navigation, local diagnosticsthe editor extension
Preview camera control and frame acknowledgementthe editor extension
dreamshader.package.json, dreamshader.lock.json, install / update / storethe editor extension

No plugin C++ reads either package file. A package resolves purely because its files exist under DShader/Packages.

Repositories

Issues go to the plugin repository's issue tracker. Extension settings, commands and the package store are documented in the extension repositories, not here.

Next

On this page