Skip to content

Use DaisyConfig with DaisyCore

Guide

Keep YAML ownership in DaisyConfig and keep viewer-aware rendering in DaisyCore.

1

Treat DaisyConfig as the storage layer

DaisyConfig owns typed YAML values, managed file lifecycle, reload-safe handles, and config-backed text storage. It does not become a second rendering runtime.

2

Install a simple DaisyConfig text source into DaisyCore

Requires DaisyConfig

val langHandle = yamlTextConfigHandle(plugin, "lang.yml")
val daisy =
DaisyPlatform.create(plugin) {
messages(langHandle.current.asDaisyTextSource())
commands()
menus()
scoreboards()
tablists()
}
3

Use module text sources when lang and settings already move together

val registry =
DaisyModules.load(plugin) {
module(
DaisyModuleDefinition(
category = "commands",
module = "spawn",
settings = spawnSettingsFile,
lang = spawnLangFile,
),
)
}
val spawn = registry.require<SpawnSettings>("commands", "spawn")
val daisy =
DaisyPlatform.create(plugin) {
messages(spawn.textSource)
commands()
menus()
scoreboards()
tablists()
}
4

Keep MiniMessage parsing and placeholders inside DaisyCore

Even when the text comes from a managed lang file or module bundle, DaisyCore still owns MiniMessage parsing, viewer-aware rendering, PlaceholderAPI integration, and fallback behavior.

5

Use config-backed text only when you need shared wording

val profileHandle = yamlConfigHandle("profile-ui.yml", profileUiCodec)
val langHandle = yamlTextConfigHandle(plugin, "lang.yml")
val daisy =
DaisyPlatform.create(plugin) {
messages(langHandle.current.asDaisyTextSource())
commands()
menus()
scoreboards()
tablists()
}
val sidebar =
sidebar {
title(profileHandle.current.sidebarTitle)
line("coins") {
textLang("profile.sidebar.coins", viewer = player, "coins" to "1,250")
}
}

You’ve separated storage from rendering

Managed YAML and module bundles do not turn DaisyConfig into a rendering system. Next read Safe Placeholder-Aware Text or jump to Text Bridge for the low-level integration details.