Folia
StarChat is Folia-native. The same JAR runs on Paper, Purpur and Spigot too — the plugin auto-detects Folia at runtime and routes work through the correct region thread.
What "Folia native" actually means
Folia removes the single global server tick. Instead, it splits the world into regions, each with its own thread. Plugins that weren't built for this break in subtle ways — scheduling tasks on the wrong thread, mutating entities outside their region, leaking across thread boundaries.
StarChat's FoliaScheduler abstracts this. Every async task, every region task, every global task goes through the scheduler — which auto-detects Folia and uses the right API.
Detection log line
On boot, StarChat tells you which scheduler it picked:
[StarChat] FoliaScheduler ready (mode: Folia) ← Folia detected
[StarChat] FoliaScheduler ready (mode: Paper/Bukkit) ← regular Paper / SpigotListener priorities
Configure StarChat's chat listener priority in settings.yml:
Features:
listenerPriority: NORMAL
# LOWEST | LOW | NORMAL | HIGH | HIGHEST | MONITOROn Folia 1.21.x, async chat events are dispatched per-region. StarChat keeps its filter and formatting logic async (it doesn't touch the world), so it doesn't fight other plugins for thread time.
Region-aware tasks
Anything the plugin runs that touches an entity (mention sound, title on the mentioned player) is routed through the entity's region scheduler:
// Pseudocode of FoliaScheduler.run(Entity, Runnable)
if (FOLIA_PRESENT) {
entity.getScheduler().run(plugin, scheduledTask -> task.run(), null);
} else {
Bukkit.getScheduler().runTask(plugin, task);
}What's safe across versions
- Folia 1.20.6+: full support, all features.
- Folia 1.21.x: full support, including async chat improvements.
- Paper 1.18+: full support, regular Bukkit scheduler.
- Purpur 1.18+: full support — Purpur is a Paper fork.
- Spigot 1.18+: full support, with the caveat that Spigot lacks some Adventure APIs — RGB and hover/click still work, MiniMessage tags do too.
Performance benchmark
On a Folia 1.21.4 dev server with 200 simulated players spamming chat (every 200ms), StarChat's pipeline averaged 0.04 ms per message end-to-end including the filter, formatter, and broadcast — measured with spark profiler. Zero main-thread blocks.
Common Folia gotchas
- DiscordSRV on Folia. Use DiscordSRV
1.27+which is Folia-aware. StarChat's passthrough works either way. - Vault on Folia.Most economy plugins still aren't Folia-safe. If you use the minigame economy reward, prefer
EssentialsXor a Folia-native economy.