Skip to content

shaders

Enables user-supplied GLSL post-process shaders, drop-in compatible with Shadertoy and Ghostty shader source.

[shaders]
enabled = false
post_process = "after_bloom" # only "after_bloom" is implemented today
preserve_alpha = false # true = keep window transparency/blur showing through the shader
# Paths MUST be absolute — they are opened verbatim, so launches from
# Finder / Explorer (whose CWD is the system root) won't find relative entries.
paths = [
# "/absolute/path/to/your/ghostty-shaders/starfield.glsl",
# "/absolute/path/to/your/ghostty-shaders/cursor_blaze.glsl",
]
Key Description
enabled Enable user-supplied custom GLSL post-process shaders (true/false)
post_process Where the chain runs: "after_bloom" (only implemented mode); "before_bloom" / "replace_bloom" are accepted but warn + fall back to after_bloom
preserve_alpha Keep the terminal’s alpha through the shader so window transparency/blur shows through it (true/false, default false). Default false forces opaque output (matching Ghostty). Best for passthrough/tint shaders (CRT, scanline); additive/emissive shaders may over-brighten in transparent regions.
paths Array of GLSL file paths. Absolute paths only — entries are opened verbatim, so launches from Finder / Explorer break with relative paths. Multiple entries form a chain: each pass’s output feeds the next; the final pass writes to the swapchain.

Shadertoy + Ghostty 1.1+ uniforms:

iResolution, iTime, iTimeDelta, iFrame, iFrameRate, iSampleRate, iDate, iWindowOffset, iWindowSize (drop-in for ext windows), iCurrentCursor, iPreviousCursor, iCurrentCursorColor, iPreviousCursorColor, iTimeCursorChange. iMouse is reserved but currently unimplemented (always zero).

iChannel0 aliases the terminal contents (back buffer) so existing Ghostty / Shadertoy shaders that sample texture(iChannel0, uv) work without modification.