/
emberstextapi-client.toml/.json (per-client: which effects
render, performance) and emberstextapi-server.toml/.json (authoritative:
player markup permissions, message limits, anvil rename length). The old
emberstextapi-common.toml, emberstextapi-client.toml (old layout) and
emberstextapi.json are no longer read — settings must be re-applied in the
new files, which generate with defaults on first run.playerMarkup.mode is ALL,
PERMISSION (nodes emberstextapi.markup.use, .effect.<name>,
.category.<cat>, .bypass, with an OP-level fallback), or NONE. Effects
can be allowed/denied per-effect or per-category for both the client render
gate and the server markup gate. LuckPerms and FTB Ranks back the permission
nodes automatically.amplitude/amp, frequency/freq, duration/dur). Old ad-hoc
shorts (a/f/w, etc.) no longer work — see
docs/superpowers/specs/2026-05-18-effect-parameter-refinement-design.md
for the full rename table.ParamSchema; unknown params log a warning
instead of being silently ignored.obfuscate's speed is renamed to interval (ms per step).shatter's speed is renamed to duration (animation length in seconds).matrix's resolve is renamed to duration.vibrate's intensity is renamed to amplitude; speed to frequency.breathe's amount is renamed to amplitude; speed to frequency.circle's a is renamed to radius (the param was always a radius, not an
amplitude).drift's rx/ry are renamed to amplitudeX/amplitudeY.gradient's span is renamed to length; speed to frequency.fade's a is renamed to minAlpha.neon's p/f are renamed to frequency/falloff; c to color.✨Effect.getName() now returns "✨" (was "rainb").GradientEffect.getName() now returns "gradient" (was "grad").TurbulenceEffect.getName() now returns "turbulence" (was "turb").PendulumEffect.getName() now returns "pendulum" (was "pend").typewriter's cursor param is now boolean-only; use cursorChar to set
the glyph. The cursor=<char> overload is dropped.grow (continuous scale
oscillation), slam (one-shot drop-in with damped bounces), float
(slow sinusoidal drift), drift (independent X/Y wander), vibrate
(high-frequency jitter), spin (full Z-axis rotation), and slide
(one-shot slide-in or slide-out from any screen edge). All compose with
the existing rock/breathe effects and with each other.slide accepts an easing param: linear, easeInCubic, easeOutCubic,
easeInOutCubic. Defaults match prior behavior (easeOutCubic for
mode=in, easeInCubic for mode=out).drip (characters fall and trail
downward in staggered order), shatter (characters fragment outward at a
configurable trigger time), and matrix (characters scramble via random
glyph cycling then resolve in stagger order).outline span effect: renders a stroked outline around glyphs using a
second SDF draw pass with a configurable color (c) and width (w).
Requires an SDF font; logs a warning and skips the outline draw on vanilla
fonts.MessageEffect implementations can opt in
via perCharacter() to receive an applyToChar call for each rendered
glyph, enabling effects that vary per character. Existing whole-message
effects are unaffected.[sound ...] message effect plays a Minecraft sound at a configurable time
offset (at), volume, and pitch. Built-in presets (click, whoosh,
static, magic, pop, thud, shatter) map to vanilla sound ids;
any resource location works as well. drip, shatter, matrix, and
slam each accept an inline sound param that fires on their respective
key moment (first drip, shatter trigger, matrix resolve, slam land).Component.translatable string arguments now renders.
<...> tags in arguments passed to translatable(key, args...) are
parsed by the existing markup pipeline instead of being forwarded as
literal strings.EffectRegistry.getSchema(name) and MessageEffectRegistry.getSchema(name)
return the ParamSchema for an effect, enabling introspection and doc
tooling./emberstextapi reload reloads config from disk and re-syncs policy to
online players; /emberstextapi policy [player] prints a player's resolved
markup policy.emberstextapi-client.toml/.json (per-client: which effects
render, performance) and emberstextapi-server.toml/.json (authoritative:
player markup permissions, message limits, anvil rename length). The old
emberstextapi-common.toml, emberstextapi-client.toml (old layout) and
emberstextapi.json are no longer read — settings must be re-applied in the
new files, which generate with defaults on first run.playerMarkup.mode is ALL,
PERMISSION (nodes emberstextapi.markup.use, .effect.<name>,
.category.<cat>, .bypass, with an OP-level fallback), or NONE. Effects
can be allowed/denied per-effect or per-category for both the client render
gate and the server markup gate. LuckPerms and FTB Ranks back the permission
nodes automatically.amplitude/amp, frequency/freq, duration/dur). Old ad-hoc
shorts (a/f/w, etc.) no longer work — see
docs/superpowers/specs/2026-05-18-effect-parameter-refinement-design.md
for the full rename table.ParamSchema; unknown params log a warning
instead of being silently ignored.obfuscate's speed is renamed to interval (ms per step).shatter's speed is renamed to duration (animation length in seconds).matrix's resolve is renamed to duration.vibrate's intensity is renamed to amplitude; speed to frequency.breathe's amount is renamed to amplitude; speed to frequency.circle's a is renamed to radius (the param was always a radius, not an
amplitude).drift's rx/ry are renamed to amplitudeX/amplitudeY.gradient's span is renamed to length; speed to frequency.fade's a is renamed to minAlpha.neon's p/f are renamed to frequency/falloff; c to color.✨Effect.getName() now returns "✨" (was "rainb").GradientEffect.getName() now returns "gradient" (was "grad").TurbulenceEffect.getName() now returns "turbulence" (was "turb").PendulumEffect.getName() now returns "pendulum" (was "pend").typewriter's cursor param is now boolean-only; use cursorChar to set
the glyph. The cursor=<char> overload is dropped.grow (continuous scale
oscillation), slam (one-shot drop-in with damped bounces), float
(slow sinusoidal drift), drift (independent X/Y wander), vibrate
(high-frequency jitter), spin (full Z-axis rotation), and slide
(one-shot slide-in or slide-out from any screen edge). All compose with
the existing rock/breathe effects and with each other.slide accepts an easing param: linear, easeInCubic, easeOutCubic,
easeInOutCubic. Defaults match prior behavior (easeOutCubic for
mode=in, easeInCubic for mode=out).drip (characters fall and trail
downward in staggered order), shatter (characters fragment outward at a
configurable trigger time), and matrix (characters scramble via random
glyph cycling then resolve in stagger order).outline span effect: renders a stroked outline around glyphs using a
second SDF draw pass with a configurable color (c) and width (w).
Requires an SDF font; logs a warning and skips the outline draw on vanilla
fonts.MessageEffect implementations can opt in
via perCharacter() to receive an applyToChar call for each rendered
glyph, enabling effects that vary per character. Existing whole-message
effects are unaffected.[sound ...] message effect plays a Minecraft sound at a configurable time
offset (at), volume, and pitch. Built-in presets (click, whoosh,
static, magic, pop, thud, shatter) map to vanilla sound ids;
any resource location works as well. drip, shatter, matrix, and
slam each accept an inline sound param that fires on their respective
key moment (first drip, shatter trigger, matrix resolve, slam land).Component.translatable string arguments now renders.
<...> tags in arguments passed to translatable(key, args...) are
parsed by the existing markup pipeline instead of being forwarded as
literal strings.EffectRegistry.getSchema(name) and MessageEffectRegistry.getSchema(name)
return the ParamSchema for an effect, enabling introspection and doc
tooling./emberstextapi reload reloads config from disk and re-syncs policy to
online players; /emberstextapi policy [player] prints a player's resolved
markup policy.emberstextapi-client.toml/.json (per-client: which effects
render, performance) and emberstextapi-server.toml/.json (authoritative:
player markup permissions, message limits, anvil rename length). The old
emberstextapi-common.toml, emberstextapi-client.toml (old layout) and
emberstextapi.json are no longer read — settings must be re-applied in the
new files, which generate with defaults on first run.playerMarkup.mode is ALL,
PERMISSION (nodes emberstextapi.markup.use, .effect.<name>,
.category.<cat>, .bypass, with an OP-level fallback), or NONE. Effects
can be allowed/denied per-effect or per-category for both the client render
gate and the server markup gate. LuckPerms and FTB Ranks back the permission
nodes automatically.amplitude/amp, frequency/freq, duration/dur). Old ad-hoc
shorts (a/f/w, etc.) no longer work — see
docs/superpowers/specs/2026-05-18-effect-parameter-refinement-design.md
for the full rename table.ParamSchema; unknown params log a warning
instead of being silently ignored.obfuscate's speed is renamed to interval (ms per step).shatter's speed is renamed to duration (animation length in seconds).matrix's resolve is renamed to duration.vibrate's intensity is renamed to amplitude; speed to frequency.breathe's amount is renamed to amplitude; speed to frequency.circle's a is renamed to radius (the param was always a radius, not an
amplitude).drift's rx/ry are renamed to amplitudeX/amplitudeY.gradient's span is renamed to length; speed to frequency.fade's a is renamed to minAlpha.neon's p/f are renamed to frequency/falloff; c to color.✨Effect.getName() now returns "✨" (was "rainb").GradientEffect.getName() now returns "gradient" (was "grad").TurbulenceEffect.getName() now returns "turbulence" (was "turb").PendulumEffect.getName() now returns "pendulum" (was "pend").typewriter's cursor param is now boolean-only; use cursorChar to set
the glyph. The cursor=<char> overload is dropped.grow (continuous scale
oscillation), slam (one-shot drop-in with damped bounces), float
(slow sinusoidal drift), drift (independent X/Y wander), vibrate
(high-frequency jitter), spin (full Z-axis rotation), and slide
(one-shot slide-in or slide-out from any screen edge). All compose with
the existing rock/breathe effects and with each other.slide accepts an easing param: linear, easeInCubic, easeOutCubic,
easeInOutCubic. Defaults match prior behavior (easeOutCubic for
mode=in, easeInCubic for mode=out).drip (characters fall and trail
downward in staggered order), shatter (characters fragment outward at a
configurable trigger time), and matrix (characters scramble via random
glyph cycling then resolve in stagger order).outline span effect: renders a stroked outline around glyphs using a
second SDF draw pass with a configurable color (c) and width (w).
Requires an SDF font; logs a warning and skips the outline draw on vanilla
fonts.MessageEffect implementations can opt in
via perCharacter() to receive an applyToChar call for each rendered
glyph, enabling effects that vary per character. Existing whole-message
effects are unaffected.[sound ...] message effect plays a Minecraft sound at a configurable time
offset (at), volume, and pitch. Built-in presets (click, whoosh,
static, magic, pop, thud, shatter) map to vanilla sound ids;
any resource location works as well. drip, shatter, matrix, and
slam each accept an inline sound param that fires on their respective
key moment (first drip, shatter trigger, matrix resolve, slam land).Component.translatable string arguments now renders.
<...> tags in arguments passed to translatable(key, args...) are
parsed by the existing markup pipeline instead of being forwarded as
literal strings.EffectRegistry.getSchema(name) and MessageEffectRegistry.getSchema(name)
return the ParamSchema for an effect, enabling introspection and doc
tooling./emberstextapi reload reloads config from disk and re-syncs policy to
online players; /emberstextapi policy [player] prints a player's resolved
markup policy.emberstextapi-client.toml/.json (per-client: which effects
render, performance) and emberstextapi-server.toml/.json (authoritative:
player markup permissions, message limits, anvil rename length). The old
emberstextapi-common.toml, emberstextapi-client.toml (old layout) and
emberstextapi.json are no longer read — settings must be re-applied in the
new files, which generate with defaults on first run.playerMarkup.mode is ALL,
PERMISSION (nodes emberstextapi.markup.use, .effect.<name>,
.category.<cat>, .bypass, with an OP-level fallback), or NONE. Effects
can be allowed/denied per-effect or per-category for both the client render
gate and the server markup gate. LuckPerms and FTB Ranks back the permission
nodes automatically.amplitude/amp, frequency/freq, duration/dur). Old ad-hoc
shorts (a/f/w, etc.) no longer work — see
docs/superpowers/specs/2026-05-18-effect-parameter-refinement-design.md
for the full rename table.ParamSchema; unknown params log a warning
instead of being silently ignored.obfuscate's speed is renamed to interval (ms per step).shatter's speed is renamed to duration (animation length in seconds).matrix's resolve is renamed to duration.vibrate's intensity is renamed to amplitude; speed to frequency.breathe's amount is renamed to amplitude; speed to frequency.circle's a is renamed to radius (the param was always a radius, not an
amplitude).drift's rx/ry are renamed to amplitudeX/amplitudeY.gradient's span is renamed to length; speed to frequency.fade's a is renamed to minAlpha.neon's p/f are renamed to frequency/falloff; c to color.✨Effect.getName() now returns "✨" (was "rainb").GradientEffect.getName() now returns "gradient" (was "grad").TurbulenceEffect.getName() now returns "turbulence" (was "turb").PendulumEffect.getName() now returns "pendulum" (was "pend").typewriter's cursor param is now boolean-only; use cursorChar to set
the glyph. The cursor=<char> overload is dropped.grow (continuous scale
oscillation), slam (one-shot drop-in with damped bounces), float
(slow sinusoidal drift), drift (independent X/Y wander), vibrate
(high-frequency jitter), spin (full Z-axis rotation), and slide
(one-shot slide-in or slide-out from any screen edge). All compose with
the existing rock/breathe effects and with each other.slide accepts an easing param: linear, easeInCubic, easeOutCubic,
easeInOutCubic. Defaults match prior behavior (easeOutCubic for
mode=in, easeInCubic for mode=out).drip (characters fall and trail
downward in staggered order), shatter (characters fragment outward at a
configurable trigger time), and matrix (characters scramble via random
glyph cycling then resolve in stagger order).outline span effect: renders a stroked outline around glyphs using a
second SDF draw pass with a configurable color (c) and width (w).
Requires an SDF font; logs a warning and skips the outline draw on vanilla
fonts.MessageEffect implementations can opt in
via perCharacter() to receive an applyToChar call for each rendered
glyph, enabling effects that vary per character. Existing whole-message
effects are unaffected.[sound ...] message effect plays a Minecraft sound at a configurable time
offset (at), volume, and pitch. Built-in presets (click, whoosh,
static, magic, pop, thud, shatter) map to vanilla sound ids;
any resource location works as well. drip, shatter, matrix, and
slam each accept an inline sound param that fires on their respective
key moment (first drip, shatter trigger, matrix resolve, slam land).Component.translatable string arguments now renders.
<...> tags in arguments passed to translatable(key, args...) are
parsed by the existing markup pipeline instead of being forwarded as
literal strings.EffectRegistry.getSchema(name) and MessageEffectRegistry.getSchema(name)
return the ParamSchema for an effect, enabling introspection and doc
tooling./emberstextapi reload reloads config from disk and re-syncs policy to
online players; /emberstextapi policy [player] prints a player's resolved
markup policy.emberstextapi-client.toml/.json (per-client: which effects
render, performance) and emberstextapi-server.toml/.json (authoritative:
player markup permissions, message limits, anvil rename length). The old
emberstextapi-common.toml, emberstextapi-client.toml (old layout) and
emberstextapi.json are no longer read — settings must be re-applied in the
new files, which generate with defaults on first run.playerMarkup.mode is ALL,
PERMISSION (nodes emberstextapi.markup.use, .effect.<name>,
.category.<cat>, .bypass, with an OP-level fallback), or NONE. Effects
can be allowed/denied per-effect or per-category for both the client render
gate and the server markup gate. LuckPerms and FTB Ranks back the permission
nodes automatically.amplitude/amp, frequency/freq, duration/dur). Old ad-hoc
shorts (a/f/w, etc.) no longer work — see
docs/superpowers/specs/2026-05-18-effect-parameter-refinement-design.md
for the full rename table.ParamSchema; unknown params log a warning
instead of being silently ignored.obfuscate's speed is renamed to interval (ms per step).shatter's speed is renamed to duration (animation length in seconds).matrix's resolve is renamed to duration.vibrate's intensity is renamed to amplitude; speed to frequency.breathe's amount is renamed to amplitude; speed to frequency.circle's a is renamed to radius (the param was always a radius, not an
amplitude).drift's rx/ry are renamed to amplitudeX/amplitudeY.gradient's span is renamed to length; speed to frequency.fade's a is renamed to minAlpha.neon's p/f are renamed to frequency/falloff; c to color.✨Effect.getName() now returns "✨" (was "rainb").GradientEffect.getName() now returns "gradient" (was "grad").TurbulenceEffect.getName() now returns "turbulence" (was "turb").PendulumEffect.getName() now returns "pendulum" (was "pend").typewriter's cursor param is now boolean-only; use cursorChar to set
the glyph. The cursor=<char> overload is dropped.grow (continuous scale
oscillation), slam (one-shot drop-in with damped bounces), float
(slow sinusoidal drift), drift (independent X/Y wander), vibrate
(high-frequency jitter), spin (full Z-axis rotation), and slide
(one-shot slide-in or slide-out from any screen edge). All compose with
the existing rock/breathe effects and with each other.slide accepts an easing param: linear, easeInCubic, easeOutCubic,
easeInOutCubic. Defaults match prior behavior (easeOutCubic for
mode=in, easeInCubic for mode=out).drip (characters fall and trail
downward in staggered order), shatter (characters fragment outward at a
configurable trigger time), and matrix (characters scramble via random
glyph cycling then resolve in stagger order).outline span effect: renders a stroked outline around glyphs using a
second SDF draw pass with a configurable color (c) and width (w).
Requires an SDF font; logs a warning and skips the outline draw on vanilla
fonts.MessageEffect implementations can opt in
via perCharacter() to receive an applyToChar call for each rendered
glyph, enabling effects that vary per character. Existing whole-message
effects are unaffected.[sound ...] message effect plays a Minecraft sound at a configurable time
offset (at), volume, and pitch. Built-in presets (click, whoosh,
static, magic, pop, thud, shatter) map to vanilla sound ids;
any resource location works as well. drip, shatter, matrix, and
slam each accept an inline sound param that fires on their respective
key moment (first drip, shatter trigger, matrix resolve, slam land).Component.translatable string arguments now renders.
<...> tags in arguments passed to translatable(key, args...) are
parsed by the existing markup pipeline instead of being forwarded as
literal strings.EffectRegistry.getSchema(name) and MessageEffectRegistry.getSchema(name)
return the ParamSchema for an effect, enabling introspection and doc
tooling./emberstextapi reload reloads config from disk and re-syncs policy to
online players; /emberstextapi policy [player] prints a player's resolved
markup policy.
Use fancy text effects anywhere, including custom fonts!