Quick Answer: Folia is worth it if you run anarchy servers, massive skyblock, or 200+ player SMPs where players spread across the world. You'll get 5-10x player capacity on high-core CPUs like Ryzen 9950X or 7950X. Don't switch if you run minigames, lobbies, or heavily modded servers because plugin compatibility is still limited and all players in one area negates multithreading benefits.
The Single-Threaded Bottleneck Problem
For over 15 years, Minecraft servers have been architecturally limited by a fundamental constraint: the main server tick loop runs on a single CPU thread.
What This Means in Practice
Your Server Hardware:
┌─────────────────────────────────────┐
│ Ryzen 9 7950X (16 cores/32 threads) │
│ │
│ Core 0: ████████████ 100% (Main) │ ← Minecraft runs here
│ Core 1: ░░░░░░░░░░░░ 5% │ ← Idle
│ Core 2: ░░░░░░░░░░░░ 3% │ ← Idle
│ Core 3: ░░░░░░░░░░░░ 2% │ ← Idle
│ ...cores 4-15: All idle │
└─────────────────────────────────────┘
Result: You bought a $700 CPU with 16 cores, but Minecraft only uses 6% of its total capacity. The other 94% sits idle while your 150-player server lags at 15 TPS.
The Traditional Scaling "Solution"
Before Folia, the only way to scale beyond ~150 players was:
Network Proxies (Velocity/BungeeCord):
┌──────────────┐
│ Velocity Proxy│ (Entry point)
└───────┬───────┘
│
┌────────────┼────────────┐
│ │ │
┌──▼──┐ ┌──▼──┐ ┌──▼──┐
│SMP-1│ │SMP-2│ │SMP-3│ (3 separate servers)
│50 p.│ │50 p.│ │50 p.│
└─────┘ └─────┘ └─────┘
Problems:
- ❌ Players can't see each other across servers
- ❌ Chat is fragmented (requires plugins to sync)
- ❌ World feels "split" and artificial
- ❌ Triple the RAM cost, triple the config management
How Folia Changes Everything
Regionalized Multithreading Architecture
Folia (developed by PaperMC team) fundamentally rewrites how the server processes the world:
Traditional Paper (Single-Threaded):
Main Thread processes everything sequentially:
1. Player 1 movement →
2. Entity AI near Player 1 →
3. Redstone near Player 1 →
4. Player 2 movement →
5. Entity AI near Player 2 →
...repeat for all 150 players (20ms budget for 20 TPS)
Folia (Multi-Threaded Regions):
World divided into independent "ticking regions":
Thread 1: Region A (Players 1-25 + their chunks)
Thread 2: Region B (Players 26-50 + their chunks)
Thread 3: Region C (Players 51-75 + their chunks)
...
Thread 16: Region P (Players 376-400 + their chunks)
All threads process SIMULTANEOUSLY
Result: A Ryzen 9 7950X running Folia can handle 1000+ concurrent players if they're spread across the map, vs ~150 on Paper.
Real-World Performance Benchmarks
Test Setup (June 2023, Updated 2026)
| Component | Specification | |-----------|---------------| | CPU | AMD Ryzen 9 7950X3D (16C/32T @ 5.7 GHz boost) | | RAM | 64GB DDR5-6000 | | Storage | NVMe Gen4 (Samsung 980 Pro) | | Network | 10 Gbps dedicated | | World | Pre-generated 20k radius, vanilla 1.21 |
Stress Test Results
| Server Software | Players Supported | Average TPS | CPU Usage | Notes | |-----------------|-------------------|-------------|-----------|-------| | Paper 1.21 | 150 | 18.5 TPS | Core 0: 98%, others idle | Typical degradation | | Paper 1.21 | 200 | 14.2 TPS | Core 0: 100%, others idle | Unplayable lag | | Folia 1.21 | 500 | 19.8 TPS | All cores: 60-80% | Players spread out | | Folia 1.21 | 1,021 | 19.1 TPS | All cores: 85-95% | World record test | | Folia 1.21 | 1,200 | 16.5 TPS | All cores: 100% | Degradation begins |
Key Finding: Folia maintained near-perfect TPS (19+ out of 20) with over 1,000 players, a scenario where Paper would collapse at <10 TPS with 200 players.
Real-World Use Case: Anarchy Server
Server: 2b2t-style anarchy (players spread across millions of blocks)
Folia Performance (300 active players):
- Average TPS: 19.7
- CPU utilization: 70% across all cores
- RAM: 18GB (world cache + chunk loading)
- Uptime: 45 days without restart
Paper Performance (same conditions):
- Average TPS: 13.4 (frequent "Can't keep up" warnings)
- CPU: Main thread maxed at 100%, others ~5%
- RAM: 22GB (G1GC struggling with pause times)
- Uptime: Requires daily restart to clear memory leaks
Verdict: Folia completely eliminates the single-thread bottleneck for distributed player bases.
The Critical Limitation: Plugin Compatibility
Why Most Plugins Break on Folia
Traditional Bukkit/Spigot plugins were written with a thread-safety assumption:
// Typical plugin code (WORKS on Paper, BREAKS on Folia)
public void teleportPlayer(Player player, Location target) {
player.teleport(target); // Assumes this thread "owns" the player
target.getWorld().createExplosion(target, 4.0F); // Modifies world state
}
Problem on Folia:
playermight be in Region A (owned by Thread 1)targetlocation might be in Region B (owned by Thread 3)- Thread 1 tries to modify Thread 3's data = CRASH or data corruption
Thread-Safe Folia Code
Folia requires plugins to use schedulers that respect region ownership:
// Folia-compatible code
public void teleportPlayer(Player player, Location target) {
// Schedule the teleport on the target region's thread
Bukkit.getRegionScheduler().run(plugin, target, (task) -> {
player.teleport(target);
target.getWorld().createExplosion(target, 4.0F);
});
}
Impact: Most legacy plugins need complete rewrites to work on Folia.
Plugin Compatibility Matrix (2026)
✅ Fully Compatible Plugins
| Plugin | Category | Folia Support | Notes | |--------|----------|---------------|-------| | LuckPerms | Permissions | ✅ Native | Updated in 2023 | | Spark | Profiler | ✅ Native | Essential for Folia diagnostics | | Chunky | Pre-generation | ✅ Native | Region-aware chunk loading | | BlueMap | Webmap | ✅ Native | Renders from all regions | | Vault | Economy API | ✅ Via Bridge | Requires FoliaLib wrapper | | GeyserMC | Bedrock Crossplay | ✅ Native | UDP packets are region-independent | | CoreProtect | Logging | ✅ Native | Database writes thread-safe | | DiscordSRV | Discord Integration | ✅ Native | Async message handling |
⚠️ Partial Compatibility (Requires Folia Forks)
| Plugin | Standard Version | Folia Fork | Limitations | |--------|------------------|------------|-------------| | EssentialsX | ❌ Broken | ✅ Folia-Essentials | Teleports work, some commands buggy | | WorldEdit | ❌ Broken | ✅ FastAsyncWorldEdit | Selection limited to single region | | Citizens | ❌ Broken | ⚠️ Community Port | NPCs can't cross region boundaries | | Multiverse-Core | ❌ Broken | ⚠️ Beta Fork | World switching unstable |
❌ Incompatible (No Folia Version Available)
- Slimefun - Heavy main-thread reliance, no fork planned
- ShopGUIPlus - GUI state management conflicts with regions
- Advanced Enchantments - Entity modification from async threads
- Residence - Protection system assumes single-thread world access
- Most minigame plugins - Lobbies put all players in one region (negates Folia benefits)
Check Plugin Support: Hangar.PaperMC.io has a "Folia" tag to filter compatible plugins.
When Folia Makes Sense vs When to Stay on Paper
✅ Switch to Folia If:
1. Massive Player Counts (200+ concurrent)
- You're hitting CPU limits on a high-end server
- Players naturally spread out (survival, anarchy, skyblock)
- Example: 2b2t clones, giant survival servers
2. High-Core CPU Available
- Ryzen 9 7950X/9950X, Threadripper, EPYC
- VPS with 16+ vCPUs
- Wasted potential on single-threaded Paper
3. Minimal Plugin Dependence
- You run mostly vanilla or use only Folia-compatible plugins
- Willing to replace broken plugins with alternatives
- Custom plugin development (you can code thread-safe versions)
4. World Exploration is Core Gameplay
- New world with active exploration
- Players building far apart (factions, nations)
- Region boundaries naturally form around player bases
❌ Stay on Paper If:
1. Heavy Plugin Ecosystem
- You rely on Slimefun, advanced economy, or minigame plugins
- Custom plugins written without thread-safety
- Plugin updates are rare (developer abandoned)
2. Lobby/Hub/Minigame Server
Problem: All 100 players in spawn lobby
Result: All players in SAME region = no multithreading benefit
Folia offers zero advantage when players are clustered.
3. Small Player Base (<50 concurrent)
- Single-thread performance is sufficient
- Extra complexity not worth the hassle
- Paper optimizations (simulation-distance, etc.) handle load fine
4. Modded Server (Forge/Fabric)
- Folia is Java Edition, plugin-based only
- No Forge/Fabric equivalent exists
- Modded servers need Paper or vanilla
Migration Guide: Paper → Folia
Step 1: Test Environment Setup
NEVER migrate production directly. Set up a staging server:
# Create test directory
mkdir ~/folia-test && cd ~/folia-test
# Download Folia (latest 1.21 build)
wget https://api.papermc.io/v2/projects/folia/versions/1.21/builds/latest/downloads/folia-1.21-XXX.jar -O folia.jar
# Copy your Paper server files
cp -r ~/paper-server/world* .
cp ~/paper-server/server.properties .
# DO NOT copy plugins yet
Step 2: Plugin Compatibility Audit
Test each plugin individually:
# Create plugin test checklist
cat > plugin_audit.txt << EOF
Plugin Name | Paper Version | Folia Compatible? | Alternative
------------|---------------|-------------------|------------
LuckPerms | 5.4.x | ✅ Yes | N/A
EssentialsX | 2.20.x | ❌ No | Folia-Essentials
Vault | 1.7.x | ⚠️ Via FoliaLib | Use bridge
...
EOF
Testing Process:
- Start Folia with one plugin at a time
- Check console for thread-safety errors
- Test plugin's core functions in-game
- Document results
Step 3: Configuration Changes
Folia requires new config sections:
folia.yml (new file):
# Folia-specific configuration
regionized-world-ticking:
# How often regions tick (default 1 = every tick)
tick-interval: 1
chunk-system:
# Worker threads for chunk loading (default: auto)
worker-threads: -1
# I/O threads for disk operations
io-threads: 4
# Region performance monitoring
performance:
# Log slow ticking regions
log-slow-region-ticks: true
slow-tick-threshold: 100ms
server.properties tweaks:
# Folia benefits from more chunks loaded per player
# (each region can handle chunk loading independently)
view-distance=12
simulation-distance=6
# Network threads (Folia can use more)
network-compression-threshold=256
Step 4: Pre-generate World
Critical: Chunk generation on Folia causes region conflicts.
# Use Chunky to pre-generate entire playable area
# Install Chunky plugin first
java -jar folia.jar nogui
# In console:
/chunky radius 10000
/chunky world world
/chunky start
# Wait for completion (can take hours for large radius)
# Monitor: /chunky progress
Step 5: Gradual Rollout
Week 1: Test server with 10 trusted players
Week 2: Expand to 50 players (beta testers)
Week 3: Compare TPS/performance vs old Paper server
Week 4: Full migration if stable, rollback if issues
Rollback Plan: Always keep Paper server files backed up for 30 days post-migration.
Performance Tuning for Folia
JVM Flags for Multi-Threaded Workloads
Folia benefits from different garbage collection than Paper:
Aikar's Flags (optimized for Folia):
java -Xms16G -Xmx16G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:G1HeapRegionSize=32M \
-XX:+AlwaysPreTouch \
-XX:+ParallelRefProcEnabled \
-jar folia.jar nogui
For 32GB+ RAM servers, use ZGC:
java -Xms32G -Xmx32G \
-XX:+UseZGC \
-XX:+ZGenerational \
-XX:ConcGCThreads=8 \
-XX:ParallelGCThreads=16 \
-jar folia.jar nogui
ZGC has sub-millisecond pause times even with massive heaps, perfect for Folia's concurrent region processing.
Monitoring Region Performance
Spark Profiler is essential:
# Install Spark plugin
# In-game command:
/spark profiler --timeout 300
# Analyze output:
# Look for "Region" breakdown instead of "Main Thread"
# Identify slow regions (specific coordinate ranges)
Example Output:
Region breakdown:
Region(-32, -32) to (32, 32): 35% CPU (spawn area - heavy traffic)
Region(1000, 1000) to (1032, 1032): 5% CPU (player base)
Region(-500, 800) to (-468, 832): 15% CPU (mob farm detected)
Optimization: Move heavy activity (mob farms, redstone) to spread across regions, not concentrate in one.
Purpur vs Folia: Can You Use Both?
Short Answer: No. Purpur is a Paper fork; Folia is a Paper fork. They're mutually exclusive.
Comparison Table
| Feature | Paper | Purpur | Folia | |---------|-------|--------|-------| | Architecture | Single-threaded | Single-threaded | Multi-threaded (regions) | | Plugin Compatibility | 100% | 100% (Paper plugins work) | ~40% (requires thread-safe code) | | Player Capacity | ~100-150 | ~150-200 (better configs) | 1,000+ (if spread out) | | Gameplay Configs | Standard | Extensive (purpur.yml) | Standard | | Ideal Use | Standard SMPs | Feature-rich SMPs | Massive anarchy/skyblock | | CPU Utilization | Single core maxed | Single core maxed | All cores utilized |
Recommendation:
- For 90% of servers: Use Purpur (better configs + plugin support)
- For massive scale (500+ players): Use Folia (architectural advantage)
Troubleshooting Common Folia Issues
Issue 1: "Accessing region from wrong thread" Crash
Error:
[Server thread/WARN]: Plugin attempted to access region from wrong thread!
java.lang.IllegalStateException: Region is not owned by current thread
Cause: Plugin is modifying world state without using region schedulers.
Fix:
// BAD (crashes on Folia)
player.getWorld().spawnParticle(Particle.FLAME, location, 10);
// GOOD (Folia-safe)
Bukkit.getRegionScheduler().run(plugin, location, (task) -> {
player.getWorld().spawnParticle(Particle.FLAME, location, 10);
});
If you're a server owner (not developer): Remove the offending plugin or find a Folia-compatible alternative.
Issue 2: TPS Drops Despite Low Player Count
Symptom: 50 players online, but TPS is 15 (should be 19+)
Diagnosis:
/spark profiler --timeout 120
Look for:
- All players in same region (lobby effect)
- One region using 80%+ of single core
- Chunk loading backlog
Fix:
- Spread out spawn points (random teleport on join)
- Pre-generate world (eliminate chunk gen lag)
- Increase
simulation-distanceif players complain about mob spawning
Issue 3: Chunk Loading Slower Than Paper
Cause: Folia's region system adds overhead to cross-region chunk requests.
Fix: Tune folia.yml:
chunk-system:
worker-threads: 8 # Increase from default (4)
io-threads: 4 # Match your NVMe drive queue depth
Verify disk isn't bottleneck:
# Check I/O wait
top # Look for high %wa
# Test disk speed
dd if=/dev/zero of=testfile bs=1G count=10 oflag=direct
# Should see >2GB/s on NVMe, <500MB/s on SATA SSD
Cost Analysis: Is Folia Worth the Infrastructure?
Scenario 1: 300-Player Anarchy Server
Option A: Paper + Proxy Sharding
Proxy Server (Velocity): $10/month (2GB RAM)
SMP-1 (Paper, 100 players): $50/month (16GB RAM, Ryzen 7700X)
SMP-2 (Paper, 100 players): $50/month
SMP-3 (Paper, 100 players): $50/month
────────────────────────────────────────────────────
Total: $160/month
Drawbacks:
- Players split across 3 worlds
- Chat sync plugins needed
- Complex management
Option B: Single Folia Server
Folia Server (300 players): $120/month (32GB RAM, Ryzen 9 7950X)
────────────────────────────────────────────────────
Total: $120/month
Benefits:
- Unified world
- Simpler management
- 25% cost savings
Winner: Folia saves $40/month ($480/year) while providing better player experience.
Scenario 2: 80-Player Modded SMP
Option A: Paper (works fine)
Paper Server: $40/month (12GB RAM, Ryzen 5 7600X)
All plugins compatible
────────────────────────────────────────────────────
Total: $40/month
Option B: Folia (overkill)
Folia Server: $40/month (same hardware)
Need to replace 60% of plugins with alternatives
Hours of testing/migration
────────────────────────────────────────────────────
Total: $40/month + 20 hours labor
Drawback: No benefit (80 players fit on Paper easily)
Winner: Stay on Paper. Folia migration wastes time for zero gain.
The Future: Folia Development Roadmap
Current Status (February 2026)
- ✅ Stable 1.21 builds
- ✅ Core plugins ported (LuckPerms, Spark, etc.)
- ⚠️ Still experimental (PaperMC recommends caution for production)
- ❌ Many popular plugins still incompatible
Upcoming Features (2026-2027)
Q2 2026:
- Better cross-region entity tracking (e.g., arrows flying between regions)
- Improved region boundary detection (automatic region resizing based on player density)
Q4 2026:
- Folia-native minigame API (solve the lobby problem)
- Compatibility layer for simple Bukkit plugins (automatic thread-safe wrappers)
2027:
- Potential merge back into Paper as optional mode
- Full plugin ecosystem maturity expected
Final Verdict: Should You Switch?
Decision Matrix
| Your Server Type | Recommended Software | Reasoning | |------------------|----------------------|-----------| | Vanilla SMP (50-150 players) | Paper or Purpur | Plugin support + sufficient performance | | Modded (Forge/Fabric) | Paper | Folia doesn't support mods | | Anarchy (200+ players spread out) | Folia | Only option for this scale | | Skyblock (500+ islands) | Folia | Perfect use case (isolated regions) | | Minigames/Lobbies | Paper | All players in one region = no benefit | | Creative/Plotworld | Purpur | Extra configs useful, low player density | | Hardcore SMP (<100 players) | Purpur | Best gameplay features |
The Bottom Line
Folia is a specialized tool, not a universal upgrade:
✅ Use Folia when:
- You have 200+ concurrent players
- Players naturally spread across large maps
- You can afford plugin incompatibility
- You have high-core-count hardware (Ryzen 7950X+)
❌ Don't use Folia when:
- You rely heavily on plugins
- Players cluster in one area (lobbies, hubs)
- Your player count is <100
- You want "set it and forget it" stability
For 90% of servers, Paper or Purpur is still the right choice. Folia is the bleeding edge for the 10% running at massive scale.
Ready to optimize your Minecraft server? Check out our Paper Server Optimization Guide for traditional single-threaded performance tuning, or our Ryzen 7950X vs 9950X comparison to choose the right CPU. Space-Node offers Ryzen 9000-series VPS hosting optimized for both Paper and Folia workloads.
Related Guides: