Manifest reference
Fields accepted by sulkan.json in native format 1, with defaults and constraints.
Required root fields
Use JSON without comments or trailing commas. Unknown fields fail validation.
| Field | Type | Meaning |
|---|---|---|
version | integer | Must be 1 |
name | string | Pack display name |
resources | object | Named color images |
passes | array | 1–128 graphics or compute passes |
present | string | Final resource name; must have a producer |
See the complete minimal manifest.
Optional root fields
| Field | Default | Meaning |
|---|---|---|
budgetMiB | 512 | Integer 1–2048 MiB, active-generation budget |
options | empty | Numeric defines and settings choices |
textures | empty | PNG assets or $minecraft/clouds |
buffers | empty | Named storage buffers |
sceneTargets | empty | Up to 7 full-resolution scene attachments |
scenePrograms | empty | Pipeline selectors and shader pairs |
materials | empty | Block/state selectors mapped to IDs 1–65535 |
shadows | false | Opt into the shared shadow producer |
environment | both false | sky and clouds ownership booleans |
Environment ownership lets a ready pack suppress corresponding vanilla rendering. It does not generate sky/cloud effects automatically; the pack supplies them.
Image resources
{
"resources": {
"hdr": { "format": "RGBA16_FLOAT", "scale": 0.5 },
"history.color": { "format": "RGBA16_FLOAT", "history": true },
"volume": { "format": "RGBA16_FLOAT", "size": [32, 32, 16] },
"display": { "format": "RGBA8_UNORM", "mipmaps": true }
}
}
| Field | Default | Constraint |
|---|---|---|
format | required | Supported color GpuFormat enum name |
scale | 1 | Relative viewport scale in (0, 2] |
size | omitted | [width,height,depth]; use instead of scale |
history | false | Allocate previous-frame storage |
mipmaps | false | Allocate a complete mip chain |
Fixed width/height are 1–16384; depth is 1–2048, also limited by the device. Depth greater than 1 creates a 3D image and requires a compute writer. At most 256 images are allowed.
Common formats are RGBA8_UNORM, RGBA16_FLOAT, RGBA32_FLOAT, and R32_FLOAT. Integer intermediates are allowed, but present must be a normalized/floating-point 2D image.
Mips count toward memory. They are generated after the producer; attachments and storage writes address mip 0. Formats without supported blits fail validation.
Options
{
"options": {
"EXPOSURE": { "label": "Exposure", "default": 1.0, "values": [0.5, 1.0, 1.5, 2.0] },
"FIXED_GAIN": 1.25
}
}
Names match [A-Z][A-Z0-9_]*. Values are finite numbers. Choice lists have 1–128 entries and must contain the default. Bare numeric options have one allowed value.
Sulkan emits #define EXPOSURE … and _SULKAN_ENABLED_EXPOSURE_ (1 when positive, otherwise 0). Whole numbers become integer literals: cast to float(...) when needed. Overrides are saved per pack and compiled before activation.
Textures
{
"textures": {
"noise": { "source": "textures/noise.png", "filter": "linear", "wrap": "repeat" },
"clouds": { "source": "$minecraft/clouds", "filter": "nearest", "wrap": "repeat" }
}
}
filter is nearest (default) or linear. wrap is clamp (default) or repeat. Read a declared asset with $texture/noise in a post pass, or map a scene sampler to its declared name.
Paths and archives
All paths are manifest-root-relative and case-sensitive. Use forward slashes. Absolute paths, backslashes, .., duplicate ZIP entries, and oversized archives are rejected. Include one manifest, at root or inside one wrapper directory.
Quoted user includes resolve from the pack root. Reserved includes such as sulkan/frame.glsl are supplied by the loader.