Folia support
BackendFolia runs the same Paper loader and connector. Every read of the world happens on the thread that owns it.
The clip shows, in order:
- Folia runs the same Paper loader.
- Each read on the thread that owns it.
- No single TPS on Folia.
Folia splits the world into regions and ticks each one on its own thread. There is no main thread, and a plugin may only touch a player or a chunk from the thread that owns it. The connector checks for Folia when it starts and follows those rules. Folia support is on every plan.
#How it works
There is no separate Folia jar. The Paper loader and the Paper connector both look for Folia's region server class at startup. When it is there, all scheduled work goes to Folia's own schedulers instead of the Bukkit scheduler, which Folia does not have.
The startup line in the console names Folia, so you can see which path is in use.
#Setup
Install the Paper loader and pair it, exactly as on Paper. The config file and deployment modes are the same.
#What runs where
| Work | Thread on Folia |
|---|---|
| Heatmap look and region visits | The region thread that owns each player |
| Spawn distance | The region thread that owns each player |
| The chunk a player quits from | The player's thread, inside the quit event |
| WorldGuard region outlines and the world list | The global region thread |
| Votes from NuVotifier | The thread NuVotifier fires on. Only the name is looked up; no world is read |
| Heartbeats, sending, the spool | Folia's async scheduler, never a region thread |
#Limits
- A Folia server has no single TPS or MSPT. Health shows Not available for those numbers instead of a made up value.
- Lag profiling needs one tick to measure, so it stays off on Folia.
- Folia sends no quit events when it shuts down. The connector closes every open session itself at shutdown.
