Skip to content

Safe Placeholder-Aware Text

This is the locked Daisy ecosystem rule:

  • DaisyConfig owns typed config and text-source data
  • DaisyCore owns render-time behavior

DaisyConfig does not:

  • call PlaceholderAPI directly
  • run a second placeholder engine
  • create a second viewer-aware rendering runtime
  • turn managed lang files into a second render system

If config-backed text is used in:

  • command replies
  • menu items
  • sidebars
  • tablists

then DaisyCore still applies its normal runtime truth:

  • MiniMessage parsing
  • viewer-aware rendering
  • PlaceholderAPI integration
  • safe fallback behavior when PlaceholderAPI is absent

This keeps responsibility boundaries clean:

  • config stays data-only
  • rendering stays in the runtime layer
  • Placeholder-aware behavior does not leak into generic config loading

That is what makes the ecosystem safer and easier to reason about in production.

lang.yml -> DaisyConfig loads text -> DaisyCore renders text -> player sees final output

Not:

lang.yml -> DaisyConfig expands placeholders -> DaisyCore re-renders text again

The second model is exactly what Daisy avoids.

Safety boundary

DaisyConfig stores text. DaisyCore renders text. Placeholder-aware behavior belongs to DaisyCore only.