DreamShaderLang
Ecosystem and Tools

Package Authoring

Recommended flow from shared .dsh files to installable DreamShader packages.

Packages let teams share .dsh and .dsf libraries across projects.

Create Steps

  1. Create a package directory under a scoped name.
  2. Add dreamshader.package.json.
  3. Put public helpers under Library/.
  4. Add examples or test materials.
  5. Publish package metadata to the Package Store Index if the package should be discoverable.

Example Skeleton

dream-noise/
├─ dreamshader.package.json
├─ Library/
│  └─ Noise.dsh
└─ Examples/
   └─ M_NoiseDemo.dsm

Library Entry

Namespace DreamNoise
{
    Function float Remap01(float x)
    {
        return saturate(x * 0.5 + 0.5);
    }
}

Import from a project:

import "@typedreammoon/dream-noise/Library/Noise.dsh";

Example Material

import "@typedreammoon/dream-noise/Library/Noise.dsh";

Shader(Name="DreamMaterials/M_NoiseDemo")
{
    Properties = {
        float Strength = 1.0;
    }

    Outputs = {
        vec3 Color;
        Base.EmissiveColor = Color;
    }

    Graph = {
        float v = DreamNoise::Remap01(Strength);
        Color = vec3(v, v, v);
    }
}

Version Suggestions

ChangeVersioning suggestion
Add helper without breaking existing callsMinor version.
Fix implementation while keeping APIPatch version.
Rename or remove public helperMajor version.
Change generated output behavior significantlyDocument migration notes.

Public API Design

PracticeReason
Keep public names namespacedAvoid collisions in projects.
Export stable entry filesMaterials should not depend on internal layout.
Include examplesUsers can verify the package quickly.
Avoid project-specific asset pathsPackages should move across projects.

On this page