CurseForge · Minecraft mod
JEIOptimizer
15× faster JEI ingredient filter build — drastically reduces "Joining world..." wait time on big modded servers.
Quick answer
Which JEIOptimizer release should I use?
jeioptimizer-1.20.1-1.2.2-15.62 targets 1.20.1 with Forge. The project page does not say whether this file belongs on the client, dedicated server, or both. All 2 required mods have matching files.
Where it goes
Is JEIOptimizer 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 jeioptimizer-1.20.1-1.2.2-15.62 need?
jeioptimizer-1.20.1-1.2.2-15.62. Change the file and its required mods may change too.
Install Just Enough Items (JEI), MezzConfig first. We found matching files for this game-version and loader setup. 2 come through another mod in the chain.
2 extra mods were pulled in by other dependencies. Indented rows show who needs each one. We only count dependency files that match this setup. A file for another loader does not fill the gap.
Before you install it
Add JEIOptimizer without breaking your instance.
Built for jeioptimizer-1.20.1-1.2.2-15.62. Pick another file and the loader, install side or required mods may change.
- 01
Stick to this file
Use jeioptimizer-1.20.1-1.2.2-15.62. It targets 1.20.1 with Forge; another release may have different loader, side or dependency requirements.
- 02
Bring the mods it needs
Install Just Enough Items (JEI), MezzConfig first. We found matching files for this game-version and loader setup. 2 come through another mod in the chain.
- 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 jeioptimizer-1.20.1-1.2.2-15.62. It opens that exact file at the source.
About this project
What does JEIOptimizer add?
JEIOptimizer
Builds JEI's search index in parallel — cuts server join time by up to 17 seconds on large modpacks.
The story
I was playing on a private AllTheMods server with friends. Every disconnect, every restart, every "let me grab a snack" meant 40 seconds of staring at "Joining world…" while everyone else was already mining.
Got tired of it. Spent a weekend with JEI's source code open instead of playing the game. This mod is what came out.
What it does
When you connect to a modded server, JEI rebuilds its entire item search index from scratch — because the server may ship custom recipes. On a 250-mod pack with ~50,000 items, this takes 12+ seconds on the main thread. Your client just sits frozen.
JEIOptimizer builds that index across worker threads instead. Each search prefix (item name, mod ID, tag, …) owns an independent data structure, so they can be built at the same time — no contention, no races.
Real-world measurements
Tested on a 250+ mod pack (AE2, Mekanism, Create, Cobblemon, Apotheosis, AllTheCompressed, …). Ryzen 5600X · 10 worker threads · NVMe · 8 GB RAM allocated · remote server (Hetzner DC).
| Phase | Vanilla JEI | + JEIOptimizer | Reduction |
|---|---|---|---|
| Building ingredient filter | 12.00 s | 0.79 s | −94% (15× faster) |
| Starting JEI total | 25.84 s | 14.17 s | −45% |
| Total connect time | ~40 s | ~23 s | −42% (−17 s) |
Combined with the tooltip tweak below, server connect drops from 40 s → ~23 s consistently.
How it works (technical)
JEI's search index is split into "prefixes" — name, mod ID, tag, tooltip, creative tab, colour, resource ID. Each one owns a separate suffix tree, which makes them safe to build independently.
Vanilla JEI: one thread walks every ingredient for every prefix, in sequence.
JEIOptimizer: the prefixes are built at the same time, one per worker thread.
The tooltip prefix is deliberately kept on the main thread. Building it calls ItemStack.getTooltipLines(), which runs arbitrary mod code — and plenty of mods touch main-thread-only state there. It still runs concurrently with the worker pool, so nothing is lost in wall-clock time, but nothing gets called off-thread that shouldn't be.
Filter modes (in config)
OFF— vanilla JEI behaviorBATCH— small cache-friendly improvement, single-threadedPARALLEL_PREFIX— parallel per-prefix build (safe)PARALLEL_FULL— also parallelizes tokenization within a prefix (default, fastest)
Recipe generation
JEI builds a number of synthetic entries at startup by driving a hidden menu once per combination — one entry per enchantable item × enchantment × level, plus repair entries for every damageable item in the pack.
Enabled by default (transparent): writing each input slot used to trigger a full recipe recalculation, and the first one could only ever see half the inputs. Those redundant recalculations are now skipped. Same entries, same values, less work.
Optional (changes what you see): the generated entries can be skipped entirely. On packs with hundreds of enchantments this is a large startup win, but those entries disappear from JEI. Off by default — real recipes are never affected either way.
[recipes]
skip_redundant_menu_updates = true # transparent, nothing is lost
skip_generated_enchantment_recipes = false
skip_generated_repair_recipes = false
Free 8 more seconds (manual JEI tweak)
In config/jei/jei-client.ini, change:
tooltipSearchMode = DISABLED
JEI indexes the tooltip text of every item on every connect. Some mods do heavy work in tooltip rendering — eating a large share of those original 12 seconds for nothing. Players almost always search by name, not tooltip text.
If you still want tooltip search via the $ prefix, use REQUIRE_PREFIX instead.
Configuration
config/jeioptimizer-client.toml (auto-generated):
[filter]
mode = "PARALLEL_FULL" # Default. Safe, fastest.
worker_count = 0 # 0 = auto (cores - 2)
log_timing = true # Log timings for verification
[plugins]
parallel_phases = [] # Experimental — see below
parallel_creative_tabs = false # Experimental — see below
[recipes]
skip_redundant_menu_updates = true
skip_generated_enchantment_recipes = false
skip_generated_repair_recipes = false
Safe defaults out of the box. Drop the jar in, you get the win. No config touching required.
Compatibility
- Minecraft: 1.19.2 · 1.20.1 · 1.21.1 · 26.1.2 · 26.2
- Mod loader: Forge (1.19.2, 1.20.1) · NeoForge (1.21.1 and newer)
- JEI: matching build for each version — see the file listing
- Side: Client-only — server installation not needed
JEI changes its internals between minor releases fairly often, so each build targets a specific JEI range. Grab the file that matches your pack.
What this WON'T speed up
Being honest about scope:
- ❌ Game launch (mod construction, model baking, resource pack reload)
- ❌ Server data sync (recipes, tags, registries) — network and mod serialization bound
- ❌ Per-mod runtime data regen — Create generates 2,124 recipes every connect, Cobblemon resyncs all fossils/marks/berries, Apotheosis reloads all affixes. These are mod-design choices.
JEIOptimizer removes JEI from the bottleneck. It's no longer the long pole — other mods still do their thing.
Experimental features (default OFF)
Tested but found to break things on real mod packs. Available as opt-in for those with carefully chosen mod sets:
plugins.parallel_phases— Parallel plugin recipe registration. Many JEI plugins (Theurgy, Ars Nouveau, Compact Machines) are not thread-safe and crash.plugins.parallel_creative_tabs— Parallel creative tab build. Many mods cache tab state non-thread-safely; in our test 22% of JEI items were lost.
Leave these off unless you know what you're doing.
FAQ
Q: Will this break JEI search? Default settings change how the index is built, not what. Same items, same recipes, same search results.
Q: I have a smaller modpack. Will I see less benefit? Yes. Below ~10,000 items the gain is marginal. Designed for 30k+ item packs.
Q: Why not submit a PR to JEI? Maybe later. Mezz (JEI's author) historically prefers conservative changes — parallelism in core code may not be welcomed. This mod exists so you don't have to wait for upstream.
Q: Server-side install needed? No. Pure client-side mixin. Putting it in mods/ on a server is a no-op.
Q: Does it work with EMI / REI? No, this targets JEI specifically. EMI has its own architecture (and is already fast).
Credits
Tested on a custom 250+ modpack and AllTheMods10, AllTheMons.
Thanks to Mezz for keeping JEI's source open and readable enough to optimize from the outside.
Project description from CurseForge.
Pick your setup
JEIOptimizer by Minecraft version and loader
Choose the version and loader you play, then open the matching release.
26.2
1 loader build26.1.2
1 loader build1.21.1
1 loader build1.20.1
1 loader build1.19.2
1 loader buildCheck the dependencies, then try the file in a copied instance before changing a world you care about.
Recent files
JEIOptimizer versions and loaders
jeioptimizer-1.20.1-1.2.2-15.62
jeioptimizer-1.20.1-1.2.2-15.62.jar
6 Oct 2026
jeioptimizer-26.2-1.2.0-30.38
jeioptimizer-26.2-1.2.0-30.38.jar
25 Sept 2026
jeioptimizer-26.1.2-1.2.0-29.43
jeioptimizer-26.1.2-1.2.0-29.43.jar
25 Sept 2026
jeioptimizer-1.21.1-1.2.0-19.56
jeioptimizer-1.21.1-1.2.0-19.56.jar
13 Sept 2026
jeioptimizer-1.20.1-1.2.1-15.59
jeioptimizer-1.20.1-1.2.1-15.59.jar
13 Sept 2026
jeioptimizer-1.20.1-1.2.0-15.57
jeioptimizer-1.20.1-1.2.0-15.57.jar
6 Sept 2026
jeioptimizer-26.2-1.1.2-30.30
jeioptimizer-26.2-1.1.2-30.30.jar
6 Sept 2026
jeioptimizer-26.1.2-1.1.2-29.35
jeioptimizer-26.1.2-1.1.2-29.35.jar
6 Sept 2026
jeioptimizer-1.21.1-1.1.2-19.53
jeioptimizer-1.21.1-1.1.2-19.53.jar
6 Sept 2026
jeioptimizer-1.20.1-1.1.4-15.57
jeioptimizer-1.20.1-1.1.4-15.57.jar
6 Sept 2026
jeioptimizer-1.20.1-1.1.3-15.49
jeioptimizer-1.20.1-1.1.3-15.49.jar
28 Aug 2026
jeioptimizer-1.20.1-1.1.2-15.48
jeioptimizer-1.20.1-1.1.2-15.48.jar
5 Aug 2026
Looking for an older file? The official CurseForge project page is in Resources.