JoinGG

Folia for Minecraft servers: what it changes and who it is for

Folia ticks separate regions of the world on separate cores. What that breaks for plugins, which servers gain from it, and how to test a switch.

SweetMask · 5 min read

Folia is a fork of Paper that ticks separate parts of the world on separate CPU cores in parallel, so there is no single main thread any more. It is built for one kind of server: a large world with many players spread far apart, on a machine with plenty of physical cores. Smaller servers, and servers whose plugins have not been updated for it, belong on Paper.

What regionised multithreading does

On Paper, as in vanilla, one main thread runs the whole tick: every loaded chunk, entity and redstone line, twenty times a second. When a tick takes longer than 50 milliseconds, everything slows down together, and a player at spawn feels the lag from a farm on the far side of the map.

Folia groups nearby loaded chunks into independent regions. Each region has its own tick loop at the normal 20 ticks per second, and the regions are ticked in parallel on a pool of threads. They also keep their own schedules. PaperMC's documentation walks through an example in which one region falls behind its 20 TPS target while the next region's schedule is not affected at all. Folia merges regions that come close to each other and splits a region again when the chunks between its parts are no longer loaded, so two groups of players who walk towards each other end up in one region.

A few things belong to no region. Game rules, the time of day, weather, the world border and console commands are handled by a separate global region.

What breaks

Nearly every Bukkit plugin was written for one main thread. It schedules its work there and reaches into any world from there, because on Paper that is safe. On Folia, a region's data may only be touched by the thread ticking that region. The Folia README warns that sharing data between regions will corrupt it. Its author expects every existing plugin to need some level of change and tells server owners to set their expectations for compatibility at zero.

The changes plugin authors have to make are concrete. The Bukkit scheduler relies on a single main thread, so Folia replaces it with four schedulers. The global region scheduler runs tasks on the global region. The region scheduler runs a task in whichever region owns a given location, the entity scheduler runs tasks on an entity and follows it wherever it goes, and the async scheduler runs work outside the tick altogether. Some API is simply broken: the README lists all scoreboard API, world loading and unloading, and much of what touches portals, respawning and player login, and Entity#teleport is gone for good in favour of teleportAsync.

Folia also disables a list of vanilla commands, among them /datapack, /function, /scoreboard, /team, /tick and /reload. A server that leans on datapacks or command blocks has more to check than its plugins.

To tell whether a plugin supports Folia, look for folia-supported: true in its plugin.yml or paper-plugin.yml. Folia will not load a plugin without it. A jar is a zip archive, so you can open it and read the file, and Modrinth lets you filter plugins by Folia as a loader. Adding the line yourself to a plugin that was never written for Folia only stops Folia refusing it. The code underneath still assumes a main thread.

Which servers gain, and which do not

Folia's FAQ names the servers that benefit: types that spread players out naturally, such as SMP or skyblock, with a sizeable player count. For hardware it asks for, ideally, at least 16 physical cores rather than threads. Skyblock fits the model well, because islands sit far apart and players on different islands tick in different regions. On Paper, extra cores do little for the tick itself, which is why more cores will not fix a lagging server. Folia is built to change that.

The servers that gain little follow from the same model. A minigame hub or a lobby where everyone stands together is one region on one thread, much as it would be on Paper. A small survival server that already holds 20 TPS has nothing for Folia to fix, and a host with two or four cores has nowhere to run regions in parallel. Before reaching for Folia at all, make sure the lag really is the main thread running out of time, since the usual causes of lag are cheaper to deal with.

The servers on JoinGG show how narrow the fit is. In a snapshot taken on 28 September 2026, 10 of the 1,927 Minecraft listings that reported a single version (0.5%) named Folia, against 55.6% that named Paper. The version string is whatever a server chooses to send, so treat both figures as approximate.

Where Folia sits among Paper and the forks

Folia is PaperMC's own fork, and its README says it will not be merged into Paper for the foreseeable future. Being built on Paper, it gets new Minecraft versions after Paper does. At the end of September 2026, Paper's download page offered stable builds for 26.2 and experimental ones for 26.3, while Folia's offered 26.1.2 as stable and 26.2 as experimental. Purpur and the performance forks such as Leaf keep a main thread and run ordinary Paper plugins. The comparison of Paper, Purpur and Fabric covers the general choice between those, and between plugins and mods.

Testing Folia before the live world moves over

  1. List every plugin and check each one for folia-supported: true. For each one without it, find a Folia-ready replacement or drop the feature.
  2. Check the commands and datapacks you rely on against Folia's list of disabled commands.
  3. Copy the server and its world onto the machine you intend to use, as a staging copy, and pre-generate the world if you have not already. Folia's FAQ recommends it, since it cuts the chunk worker threads needed.
  4. Set threaded-regions.threads in config/paper-global.yml following the FAQ's allocation advice: threads for networking, chunk IO, chunk workers and garbage collection first, then tick threads from the remaining cores, up to about 80% of the machine. Adjust after watching real load, since plugins and the server use threads you cannot configure.
  5. Put real players on the copy, spread out the way they normally play. An empty test world tells you nothing about regions.
  6. Keep the Paper install and a backup of the world from before the switch, and treat the move as one-way until you have also tested going back on a copy.
Tags
minecraftfoliaserver performance
Share

SweetMask

Published · 5 min read

All articles

Keep reading