CurseForge · Minecraft mod
CleanJoin
Reduces server lag during large login waves by preloading chunks async, spreading initial entity packets over multiple ticks, and throttling distant mob AI on a worker thread.
Quick answer
Which CleanJoin release should I use?
cleanjoin-1.1.0.jar targets 1.21.1 with NeoForge. The project page does not say whether this file belongs on the client, dedicated server, or both. No extra mods listed for this file.
Where it goes
Is CleanJoin required on the client, server, or both?
The project page does not say whether this file belongs on the client, dedicated server, or both.
The source does not explicitly classify this release as client-only or server-only.
What else does cleanjoin-1.1.0.jar need?
cleanjoin-1.1.0.jar. Change the file and its required mods may change too.
This file does not list any required mods. Do not add a library just because a different file uses it.
This file does not list any required or optional mods.
Before you install it
Add CleanJoin without breaking your instance.
Built for cleanjoin-1.1.0.jar. Pick another file and the loader, install side or required mods may change.
- 01
Stick to this file
Use cleanjoin-1.1.0.jar. It targets 1.21.1 with NeoForge; another release may have different loader, side or dependency requirements.
- 02
Bring the mods it needs
This file does not list any required mods. Do not add a library just because a different file uses it.
- 03
Put it on the correct side
The project page does not say whether this file belongs on the client, dedicated server, or both.
- 04
Pick the file you checked
Use the “Get this file” button beside cleanjoin-1.1.0.jar. It opens that exact file at the source.
About this project
What does CleanJoin add?
CleanJoin is a performance mod for busy NeoForge servers, built around the moment a login wave hits: chunk loading, entity tracking and packet serialization all landing on the main thread in the same tick, dragging TPS down and tripping the watchdog.
It does its work server-side. Installing it on clients as well is optional and adds a smoother arrival on the player's end — clients without it connect and play normally.
On the server
Chunk preloading. When a player joins, the chunks around their arrival point are pulled in asynchronously instead of on demand, so the first seconds of movement and any follow-up teleport land on chunks that are already there. On Bukkit hybrids CleanJoin also reads EssentialsSpawn and Multiverse-Core configs to work out where a plugin is about to move the player, and preloads there instead of at the login position.
Paced entity sync. Vanilla hands a joining player every entity in view range inside a single tick — on a populated base that is the spike everyone feels. CleanJoin holds that burst back and releases it over the next two seconds, ordered by what actually matters: other players, hostile mobs and projectiles first, then everything else, with item frames, armour stands, dropped items and XP orbs last. Whatever the player is riding, and anyone riding it with them, is never delayed. Dimension changes are paced the same way.
Async mob AI throttling. Passive mobs that no player is near have their AI suspended until someone comes back within range, which takes their pathfinding and goal selection out of the tick loop during peak load. The distance analysis runs off the main thread on Java 21 virtual threads; only the flag itself is written back, on the main thread. Named, leashed and ridden mobs, mounts and villagers are never touched, and everything CleanJoin suspends is restored on chunk unload and on shutdown — nothing is left frozen in your save.
Every threshold, radius and rate is configurable in config/cleanjoin-server.toml, and each of the three systems can be turned off on its own.
On the client (optional)
Adding CleanJoin to the client does not change TPS — it changes the join second, the gap between "Joining world" and the first smooth frame:
- Sync overlay. A vanilla-styled fade with a progress bar while the world streams in, instead of a frozen frame.
- Chunk mesh throttling. Caps how often chunk meshes are rebuilt during the join. This is the stutter people actually report as "lag when joining".
- Particle suppression. New particles are dropped for the duration of the join. A real win on machine-heavy bases.
- Adaptive pacing. The client reports its frame time and the server adjusts how fast it feeds entities — a player at 15 FPS gets a longer, gentler window, a player at 200 FPS is done sooner.
All four can be switched off individually in config/cleanjoin-client.toml.
Compatibility
CleanJoin is built to run on Arclight and other Bukkit hybrids. It detects the Bukkit layer at runtime, routes every write back to game state through the main thread so it cannot race the Bukkit event system, and wraps NMS access defensively so a remapped method degrades to a no-op instead of taking the server down.
Server-only, client-only and both-sides installs are all valid combinations and none of them produce a version mismatch in the server list. Client-only does nothing on its own — the mod needs a server that paces.
One note for hybrid operators: the paced entity sync works by mixing into ChunkMap, which is an area Arclight patches heavily. If entities behave oddly right after a join on a hybrid server, that is the first thing to rule out — set dripFeed.enabled = false and the rest of the mod keeps working.
Project description from CurseForge.
Pick your setup
CleanJoin by Minecraft version and loader
Choose the version and loader you play, then open the matching release.
Check the dependencies, then try the file in a copied instance before changing a world you care about.
Recent files
CleanJoin versions and loaders
cleanjoin-1.1.0.jar
4 Sept 2026
cleanjoin V1
cleanjoin-1.jar
20 Mar 2026
Looking for an older file? The official CurseForge project page is in Resources.