promotional bannermobile promotional banner

Joinqueue

Async Join Queue for NeoForge 1.21.1/1.21.8. Prevents crashes and TPS drops during mass logins by holding players in a thread-safe queue. Admits players at a stable rate. Features a custom position screen. Required on both server and client.
Back to Files

joinqueue-1.2.0+1.21.8-fabric.jar

File namejoinqueue-1.2.0+1.21.8-fabric.jar
Uploader
epicskydexepicskydex
Uploaded
Sep 17, 2026
Downloads
6
Size
61.4 KB
Mod Loaders
Fabric
File ID
8904604
Type
R
Release
Supported game versions
  • 1.21.8

Curse Maven Snippet

Fabric

modImplementation "curse.maven:joinqueue-1480521:8904604"

Learn more about Curse Maven

What's new

First release built from a single source tree for six Minecraft versions, and a large round of bug fixes: several of them are the reason players were dropped from the queue or bounced the moment it was their turn.

⚠️ Update the server and all players together

The queue protocol changed. Forge and NeoForge refuse a connection when the two sides do not match, so an old client cannot join a 1.2.0 server and a 1.2.0 client cannot join an old server. JoinQueue is required on client and server.

Supported

Minecraft Loader
1.20.1 Forge 47.x, Fabric
1.21.1 NeoForge 21.1.x, Fabric
1.21.8 NeoForge 21.8.x, Fabric

Critical fixes

  • Waiting players were disconnected after about 30 seconds. The mod raised the server's keep-alive interval to two minutes, which meant the client sent nothing in between - and the server closes any connection it has not heard from for 30 seconds. Everyone in line was dropped, reconnected, and started again at the back. Queue positions barely moved as a result.
  • Players were disconnected at the very moment the queue let them in. Minecraft checks "is the server full?" a second time when the player actually joins. If the queue was at its limit right then, that check refused the player who had just waited for their turn. The queue now keeps a promise it made: a released player is let in even while the queue is full.
  • The queue stopped sending anything to a player whose position did not change. Sitting at position 9 meant hearing nothing at all, which ran into the client's own 30 second timeout. The server now sends at least every 5 seconds.
  • Preparing a player froze the whole server. Chunk preloading waited for chunks on the main thread, which stalled every tick - once per release. Chunks are now loaded in the background.
  • On Minecraft 1.21.2 and newer, the first player never got in. An empty server stops ticking after 60 seconds, and a queue that is not ticked never releases anyone.
  • "Leave Queue" did not actually leave. The connection stayed open: the player kept their place in line and was pulled into the world later, out of the main menu.
  • The player limit could be bypassed in some cases, and VIPs could overtake each other.

New

  • min_release_tps - the TPS the server has to hold for players to be let in. Below it, releases stop and the queue switches itself on, so a lag spike is not made worse by more joins. Default 8.0, maximum 20, and 0 turns the TPS check off completely. /joinqueue status shows the current TPS and the limit in force.
  • One place in line per player. A second login with the same account is refused instead of taking another slot, so nobody can push the line back by opening several clients.
  • Forge 1.20.1 only: a workaround for a race in Forge itself that left clients stuck on "Connecting to the server..." until they timed out. It is not caused by JoinQueue - it happens just as often with the mod switched off - but a queue is where it hurts most, so the Forge build now repairs it.

Also fixed

  • A typo in the config file used to overwrite it with defaults, wiping the staff and VIP lists. A broken file is now backed up to joinqueue.json.bak first.
  • The default staff list shipped with "steve" and "notch" on it. On an offline-mode server that let anyone with those names skip the queue and the player limit. It is empty now.
  • max_queue_size only applied while the server was full; it applies always (VIPs excepted).
  • Players who joined while the queue was paused kept seeing the pause message after it resumed.
  • After being released, the client briefly showed the title screen instead of the joining screen.
  • Queue timers no longer use the wall clock, so a system time change cannot stall the queue.
  • Malformed queue packets are ignored instead of breaking the connection.
  • Version ranges in the mod metadata were too wide and let the mod load on versions it was not built for.

Notes for server admins

  • Check max_queue_size in config/joinqueue.json. 0 means unlimited.
  • /joinqueue status now also reports the TPS limit; /joinqueue reload applies config changes without a restart.
  • Staff and VIP lists match by player name.
  • On Fabric the mod is not forced onto clients. A player without it still waits in line correctly, they just see the normal loading screen instead of the queue screen.

This mod has no additional files