JEIOptimizer

⭐ — (15 endorsements) 📥 9,707 downloads 📌 v1.1.2-15.48 📅 6/28/2026
🟡 Updated this year

By bigenergy · forge

⬇ Download Mod Source: Modrinth ↗ 📅 Updated: 8/7/2026 📅 Created: 6/28/2026
⚠️ Install Order · 2 steps
1🛠️ Forge — Minecraft Forge (mod loader) Download ↗
2🛠️ Fabric — Fabric Loader Download ↗

Install in this order, then this mod last — most mods fail to load without their framework and dependencies in place.

🔍 Analysis

  • 👍 0.2% endorsement rate
  • 🏆 #357 of 359 forge mods in this game by downloads

📋 About This Mod

<h1 id="jeioptimizer">JEIOptimizer</h1> <p><strong>Builds JEI's ingredient filter index in parallel &mdash; cuts server join time by up to 17 seconds on large modpacks.</strong></p> <hr> <h2 id="the-story">The story</h2> <p>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 <em>"Joining world&hellip;"</em> while everyone else was already mining.</p> <p>Got tired of it. Spent a weekend with JEI's source code open instead of playing the game. This mod is what came out.</p> <hr> <h2 id="what-it-does">What it does</h2> <p>When you connect to a modded server, JEI rebuilds its entire item search index from scratch &mdash; because the server may ship custom recipes. On a 250-mod pack with ~50,000 items, this takes <strong>12+ seconds on the main thread</strong>. Your client just sits frozen.</p> <p>JEIOptimizer parallelizes JEI's <code>IngredientFilter</code> build across worker threads. Each search prefix (item name, mod ID, tag, tooltip, &hellip;) gets its own thread, running on independent data structures &mdash; no contention, no races, no risks.</p> <hr> <h2 id="real-world-measurements">Real-world measurements</h2> <p>Tested on a 250+ mod pack (AE2, Mekanism, Create, Cobblemon, Apotheosis, AllTheCompressed, &hellip;). Ryzen 5600X &middot; 10 worker threads &middot; NVMe &middot; 8 GB RAM allocated &middot; remote server (Hetzner DC).</p> <table> <thead> <tr> <th id="phase">Phase</th> <th id="vanilla_jei">Vanilla JEI</th> <th id="+_jeioptimizer">+ JEIOptimizer</th> <th id="reduction">Reduction</th> </tr> </thead> <tbody> <tr> <td>Building ingredient filter</td> <td>12.00 s</td> <td><strong>0.79 s</strong></td> <td><strong>&minus;94% (15&times; faster)</strong></td> </tr> <tr> <td>Starting JEI total</td> <td>25.84 s</td> <td>14.17 s</td> <td>&minus;45%</td> </tr> <tr> <td><strong>Total connect time</strong></td> <td><strong>~40 s</strong></td> <td><strong>~23 s</strong></td> <td><strong>&minus;42% (&minus;17 s)</strong></td> </tr> </tbody> </table> <p>Combined with the bonus tweak below (see <em>Free 8 more seconds</em>), you can drop server connect from <strong>40 s &rarr; ~23 s</strong> consistently.</p> <hr> <h2 id="how-it-works-technical">How it works (technical)</h2> <p>JEI's <code>IngredientFilter</code> builds a search index where each "prefix" (name, modId, tag, tooltip, &hellip;) has its own <code>GeneralizedSuffixTree</code>. Independent structures &rarr; safe to build in parallel.</p> <p><strong>Vanilla JEI:</strong></p> <pre><code>for each ingredient (50,000): for each prefix (7-10): compute tokens &rarr; insert into suffix tree</code></pre> <p>One thread = ~12 seconds.</p> <p><strong>JEIOptimizer:</strong></p> <pre><code>parallelStream over prefixes: for each ingredient: compute tokens &rarr; insert into own suffix tree</code></pre> <p>6-10 cores doing 7-10 prefixes simultaneously = ~0.8 seconds.</p> <h3 id="filter-modes-in-config">Filter modes (in config)</h3> <ul> <li><code>OFF</code> &mdash; vanilla JEI behavior</li> <li><code>BATCH</code> &mdash; small cache-friendly improvement, single-threaded</li> <li><code>PARALLEL_PREFIX</code> &mdash; parallel per-prefix build (safe)</li> <li><code>PARALLEL_FULL</code> &mdash; also parallelizes tokenization within prefix (<strong>default, fastest</strong>)</li> </ul> <hr> <h2 id="free-8-more-seconds-manual-jei-tweak">Free 8 more seconds (manual JEI tweak)</h2> <p>In <code>config/jei/jei-client.ini</code>, change:</p> <pre><code class="ini language-ini">tooltipSearchMode = DISABLED</code></pre> <p>JEI indexes the tooltip text of every item on every connect. Some mods do heavy I/O in tooltip rendering &mdash; eating ~8 of those original 12 seconds for nothing. Players almost always search by name, not tooltip text.</p> <p>If players want tooltip search via <code>#prefix</code>, use <code>REQUIRE_PREFIX</code> instead.</p> <hr> <h2 id="configuration">Configuration</h2> <p><code>config/jeioptimizer-client.toml</code> (auto-generated):</p> <pre><code class="toml language-toml"> mode = "PARALLEL_FULL" # Default. Safe, fastest. async = false # Experimental: build in background log_timing = true # Log timings for verification worker_count = 0 # 0 = auto (cores - 2) parallel_phases = # Experimental &mdash; see below parallel_creative_tabs = false # Experimental &mdash; see below</code></pre> <p><strong>Safe defaults out of the box.</strong> Drop the jar in, you get the win. No config touching required.</p> <hr> <h2 id="compatibility">Compatibility</h2> <ul> <li><strong>Minecraft:</strong> 1.21.1</li> <li><strong>Mod loader:</strong> NeoForge 21.x</li> <li><strong>JEI:</strong> 19.x (1.21.1 builds)</li> <li><strong>Side:</strong> Client-only &mdash; server installation not needed</li> </ul> <hr> <h2 id="what-this-wont-speed-up">What this WON'T speed

JEIOptimizer

Builds JEI's ingredient filter 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 parallelizes JEI's IngredientFilter build across worker threads. Each search prefix (item name, mod ID, tag, tooltip, …) gets its own thread, running on independent data structures — no contention, no races, no risks.


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 bonus tweak below (see Free 8 more seconds), you can drop server connect from 40 s → ~23 s consistently.


How it works (technical)

JEI's IngredientFilter builds a search index where each "prefix" (name, modId, tag, tooltip, …) has its own GeneralizedSuffixTree. Independent structures → safe to build in parallel.

Vanilla JEI:

for each ingredient (50,000):
 for each prefix (7-10):
 compute tokens → insert into suffix tree

One thread = ~12 seconds.

JEIOptimizer:

parallelStream over prefixes:
 for each ingredient:
 compute tokens → insert into own suffix tree

6-10 cores doing 7-10 prefixes simultaneously = ~0. 8 seconds.

Filter modes (in config)

  • OFF — vanilla JEI behavior
  • BATCH — small cache-friendly improvement, single-threaded
  • PARALLEL_PREFIX — parallel per-prefix build (safe)
  • PARALLEL_FULL — also parallelizes tokenization within prefix (default, fastest)

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 I/O in tooltip rendering — eating ~8 of those original 12 seconds for nothing. Players almost always search by name, not tooltip text.

If players want tooltip search via #prefix, use REQUIRE_PREFIX instead.


Configuration

config/jeioptimizer-client.toml (auto-generated):


 mode = "PARALLEL_FULL" # Default. Safe, fastest.
 async = false # Experimental: build in background
 log_timing = true # Log timings for verification

worker_count = 0 # 0 = auto (cores - 2)

parallel_phases = [] # Experimental — see below parallel_creative_tabs = false # Experimental — see below

Safe defaults out of the box. Drop the jar in, you get the win. No config touching required.


Compatibility

  • Minecraft: 1. 21. 1
  • Mod loader: NeoForge 21.x
  • JEI: 19.x (1. 21. 1 builds)
  • Side: Client-only — server installation not needed

What this WON'T speed

🤖 AI-enhanced — based on mod data

📊 Mod Details

Game
Minecraft Mods
Author
bigenergy
Version
1.1.2-15.48
Downloads
9,707
Endorsements
15
Category
forge
Created
6/28/2026
Updated
8/7/2026
Game Versions
1.20.1
Tags
game-mechanics, optimization, utility

🔧 How to Install Minecraft Mods Mods

Download from Modrinth. Use Prism Launcher or drop into your mods folder.

📖 Full step-by-step install guide for Minecraft Mods →

Visit the official mod page for specific installation instructions for this mod.

🎮 Need cheat codes or console commands? Check ur gaming wiki for Minecraft Mods commands, item IDs, and more.

❓ Frequently Asked Questions

Which Minecraft Mods versions does JEIOptimizer support?

The author lists 1.20.1. Other versions may work but are untested by the author.

What is the latest version of JEIOptimizer?

Version 1.1.2-15.48, published 2026-08-07 with 9,707 downloads recorded at the source.

Keep browsing — more Minecraft Mods mods await

📋 All Minecraft Mods Mods 🏆 Top 25 📂 More forge 👤 More by bigenergy 🔎 Similar Mods 🌐 Best forge (All Games) 🔀 Check Compatibility ⚖️ Compare Mods 🆕 New Mods