InputBooster
InputBooster is a client-side Fabric mod that improves input handling when Minecraft is running at low FPS or experiencing short stutters.
When Minecraft is under load, quick clicks or key presses can sometimes be missed. InputBooster checks inputs more frequently and can temporarily buffer some inputs so they can be handled on the next valid game tick.
Features
- Higher-frequency input polling
- Short input buffering
- Input recovery during short FPS drops
- Duplicate hit protection
- CPS limiter
- Sprint and W-tap assistance
- Auto-strafe and movement helpers
- Optional input replay recording and playback
- Per-server profiles
- In-game input statistics
- Safe mode
- Custom keybinds
The mod is client-side and does not require anything on the server.
Requirements
- Minecraft:
1.21.x / 26.1.x - Fabric Loader:
0.16.0+ - Fabric API
- Java 21+
Installation
Install Fabric Loader and Fabric API for your Minecraft version, then put the InputBooster .jar file into your mods folder.
If you find a bug or compatibility problem, please report it on GitHub with your Minecraft version, Fabric Loader version, InputBooster version, and any relevant logs.
InputBooster is developed and maintained by Ahaduzzaman Khan.
All Versions
+ Add VersionThe helper that calls the accessor mixins (MixinAccess) was inside the
package declared by inputbooster.mixins.json. Mixin never loads anything
from a mixin package unless it is a mixin itself.
The three accessor mixins (GuiAccessor, KeyMappingAccessor,
MinecraftClientAccessor) were declared as abstract classes. Mixin only
treats a mixin as a loadable accessor when it is an interface, so the
class form could never have been called either. The
Could not read every key binding; using vanilla defaults for the rest
warning you saw at startup was this same failure, already swallowed.
What we changed
MixinAccess moved to dev.inputbooster.access.
The three accessors are now interfaces, which is the form Fabric API itself
ships (KeyMappingHelper and ScreenAccessor work the same way).
A swallowed failure in the key-binding reader is now logged with its cause
instead of being reduced to a silent fallback.
New tests fail the build if a non-mixin class is added to the mixin package,
if a runtime-called accessor is not a loadable interface, or if any class
outside the mixin package references one that Mixin cannot load.
The corner HUD fix from 3.1.6 is included and now works.
The helper that calls the accessor mixins (MixinAccess) was inside the
package declared by inputbooster.mixins.json. Mixin never loads anything
from a mixin package unless it is a mixin itself.
The three accessor mixins (GuiAccessor, KeyMappingAccessor,
MinecraftClientAccessor) were declared as abstract classes. Mixin only
treats a mixin as a loadable accessor when it is an interface, so the
class form could never have been called either. The
Could not read every key binding; using vanilla defaults for the rest
warning you saw at startup was this same failure, already swallowed.
What we changed
MixinAccess moved to dev.inputbooster.access.
The three accessors are now interfaces, which is the form Fabric API itself
ships (KeyMappingHelper and ScreenAccessor work the same way).
A swallowed failure in the key-binding reader is now logged with its cause
instead of being reduced to a silent fallback.
New tests fail the build if a non-mixin class is added to the mixin package,
if a runtime-called accessor is not a loadable interface, or if any class
outside the mixin package references one that Mixin cannot load.
The corner HUD fix from 3.1.6 is included and now works.
CRITICAL - the client crashed on startup. Moving the accessor mixins from
interfaces to classes (3.1.4) was not enough: Mixin merges every member of a
class-form mixin into the target, so the public static helper methods added
in 3.1.4 aborted the game with "contains non-private static method". The
helpers now live in MixinAccess, a plain utility class, and each mixin holds
nothing but its accessor or invoker.
Accessor mixins are now minimal by contract. MixinDeclarationTest
additionally fails the build if a mixin declares a static method or a
non-private constructor. Verified to fail when a static helper is put back.
Changed
One branch per Minecraft version. fabric-26.2 builds only 26.2 and
fabric-26.3 only 26.3; each pins minecraft_version, the dependency range
and the Fabric API version in fabric/gradle.properties, so no build-time
overrides are needed.
NeoForge is paused. The CI job is gone; the NeoForge sources stay in the
repository but are not built or released until they are ported separately.
All 3.1.0 - 3.1.4 releases are marked as prereleases, because each of them
shipped a jar that could not start the game.
docs/MINECRAFT_VERSION_COMPATIBILITY.md documents every 26.2 / 26.3 API
difference the mod touches and the mixin rules above, with the verification
method.
- Minecraft 26.1 | NeoForge 26.1.0.1-beta**
This is the first release of InputBooster targeting Minecraft 26.1, ported from the 1.21.11 NeoForge beta.
## What's New
### Overlay
The HUD overlay has been stripped down to a single clean readout:
- Shows current poll rate in Hz (e.g.
200 Hz) - Shows
1000 Hz ⚡during burst mode - Background resizes dynamically as the value changes
- Click sounds are now **off by default** — enable in the Features tab if desired
## Changes
### Build
- Updated to **Minecraft 26.1** and **NeoForge 26.1.0.1-beta**
- Now requires **Java 25**
### Bug Fixes & Porting
- Fixed crash on load caused by invalid
NeoForge.EVENT_BUS.register(this)call - Fixed
MinecraftClientAccessormixin crash — pick-block no longer relies on a private method invoker that broke after Mojang removed obfuscation in 26.1 - Fixed all rendering calls broken by the
GuiGraphics→GuiGraphicsExtractorrename - Fixed
displayClientMessageremoval — action bar messages now usegui.setOverlayMessage - Fixed
KeyMapping.click()requiring aKeyargument in 26.1 - Fixed
Screen#render→Screen#extractRenderStaterename
## Requirements
| | |
|---|---|
| Minecraft | 26.1.x |
| NeoForge | 26.1.0.1-beta or newer |
| Java | 25 |
| Side | Client only |
## Notes
- NeoForge 26.1 is still in **beta** — breaking changes may occur in future builds
- If upgrading from 1.21.x, delete your old
inputbooster.propertiesconfig to pick up the new defaults
add sound system press h to enable. (but it is in beta)
## 3.0.1-mc26 - Minecraft 26.1.x
This update focuses on making InputBooster feel more complete for everyday players while keeping the mod stable during combat and low-FPS gameplay.
### Added
- Module system for combat, movement, debug, profiles, anti-idle, and replay features.
- Per-server profile backend so settings can switch automatically for different servers.
- Input replay tools:
Rstarts or stops replay recording.Kplays the recorded replay.- Advanced CPS limiter modes:
FIXEDHUMANIZEDCOOLDOWNWEAPON_AWARE- Safe mode that disables active modules after repeated internal errors.
- Keybind conflict detection with event-log reporting.
- Event log backend for recent InputBooster activity.
- Config tools for presets, import, and export.
- Overlay lines for modules, replay status, safe mode, and latest debug event.
### Changed
- Updated mod version to
3.0.1-mc26. - Profile saves now include the new CPS mode, replay, safe mode, event log, keybind warning, and per-server profile settings.
- CPS limiter now uses the selected CPS mode instead of only a fixed cap.
### Fixed
- Prevented queued mod attacks from firing while InputBooster is inactive or not initialized.
- Prevented stale queued inputs from firing later after the mod is toggled back on.
- Reduced the chance of one physical click causing both a mod entity attack and a vanilla entity attack.
### Build
- New jar:
build/libs/inputbooster-3.0.1-mc26.jar
## 3.0.1 - Minecraft 1.21.11
This update focuses on making InputBooster feel more complete for everyday players while keeping the mod stable during combat and low-FPS gameplay.
### Added
- Module system for combat, movement, debug, profiles, anti-idle, and replay features.
- Per-server profile backend so settings can switch automatically for different servers.
- Input replay tools:
Rstarts or stops replay recording.Kplays the recorded replay.- Advanced CPS limiter modes:
FIXEDHUMANIZEDCOOLDOWNWEAPON_AWARE- Safe mode that disables active modules after repeated internal errors.
- Keybind conflict detection with event-log reporting.
- Event log backend for recent InputBooster activity.
- Config tools for presets, import, and export.
- Overlay lines for modules, replay status, safe mode, and latest debug event.
### Changed
- Updated mod version to
3.0.1. - Profile saves now include the new CPS mode, replay, safe mode, event log, keybind warning, and per-server profile settings.
- CPS limiter now uses the selected CPS mode instead of only a fixed cap.
### Fixed
- Prevented queued mod attacks from firing while InputBooster is inactive or not initialized.
- Prevented stale queued inputs from firing later after the mod is toggled back on.
- Reduced the chance of one physical click causing both a mod entity attack and a vanilla entity attack.
### Build
- New jar:
build/libs/inputbooster-3.0.1.jar
This is the first public release of InputBooster 3.0.0, built for **Minecraft 1.21.11** with **Fabric Loader 0.19.2**.
### 🐛 Fixed
#### Critical Crash Fixes
- Startup mixin crash —
CallbackInfoReturnable is required**
MinecraftClient.doAttack() was changed from void to boolean. Mixin's @Inject on a non-void method requires CallbackInfoReturnable<Boolean> instead of plain CallbackInfo. The onDoAttack handler in GameTickMixin was using CallbackInfo, causing a fatal mixin apply error that crashed the game on launch. Fixed by switching to CallbackInfoReturnable<Boolean> and replacing ci.cancel() with cir.setReturnValue(false).- Settings screen crash —
Can only blur once per frame**
render() method. The old code called renderBackground() manually at the top of InputBoosterScreen.render(), firing the blur shader twice in the same frame and crashing. Removed the manual call; super.render() handles it correctly.- Matrix stack compile errors (
push/pop/scalenot found)**
ctx.getMatrices() in MC 1.21.11 returns JOML's raw Matrix3x2fStack, which has no push(), pop(), or three-argument scale(). Attempts to cast it to net.minecraft.client.util.math.MatrixStack also failed at runtime. Removed matrix stack scaling entirely; overlay size and line spacing are now computed directly from the scale factor in pixel coordinates.#### Gameplay Fixes
- Double block break on a single click**
InputDrainer.apply() called attackBlock() for block targets while vanilla's handleBlockBreaking() loop was already calling attackBlock() every tick the button was held — two calls per tick. Fixed by removing the attackBlock() call from the drainer for block targets entirely. Block breaking is now driven exclusively by vanilla's continuous held-key loop. Entity hits remain one-shot events and are still fired from the drainer with attackHandledThisTick = true to suppress vanilla's duplicate.- CPS always showing 0**
recordClick() into the entity-only branch, block clicks were no longer counted toward CPS. Moved recordClick() up to drainAll() so it fires for every accepted ATTACK_PRESSED event regardless of target type.- P key can't re-enable mod / O key stops working when mod is off**
onClientTick had if (!active || !initialized.get()) return at the very top, which meant once P toggled the mod off the entire tick method exited before handleKeybinds() was ever reached. Both P and O became dead keys until the game was restarted. Fixed by moving the handleKeybinds() call before the active guard so both keys always work.#### HUD / Overlay Fixes
- Overlay visible during F3 screen**
mc.getDebugHud().shouldShowDebugHud() and returns early, hiding automatically when F3 is open and reappearing when it closes.### ✨ Added
#### HUD Overlay
- Always-on HUD panel** — renders on the game screen at all times, not only when F3 is open. Automatically hides when F3 is active to avoid clutter.
- Configurable corner position** — cycle through Top-Left, Top-Right, Bottom-Left, Bottom-Right from the Advanced settings tab.
- Configurable scale** — slider from 0.5× to 3.0× in the Advanced settings tab.
- Semi-transparent background box** — drawn behind all overlay lines for readability against any terrain.
- Full tabbed GUI with five tabs: Poll Rate, Features, Advanced, Stats, Profiles.
- Poll Rate tab** — AUTO/MANUAL mode toggle, poll rate slider (60–1000 Hz), six quick-preset buttons (100 / 200 / 350 / 500 / 750 / 1000 Hz), Burst Mode toggle, Combo Keys toggle.
- Features tab** — toggles for Sprint Fix, Auto-Sprint, W-Tap Assist, Anti-Idle, Auto-Strafe, CPS Limiter, and a Max CPS slider.
- Advanced tab** — HUD Overlay on/off, Overlay Position cycler, Overlay Scale slider, Action Bar Messages toggle, Debug Mode toggle, FPS Check Interval slider.
- Stats tab** — session uptime, recovered inputs, estimated missed inputs, latency info, poll thread status, 60-second CPS sparkline graph.
- Profiles tab** — save and load up to 5 named presets (PvP, Mining, Idle, Hybrid, Custom).
- Adaptive Burst Mode** — automatically spikes poll rate to 1000 Hz for 3 seconds when FPS drops more than 20% in one second, then returns to the configured rate.
- Session Stats tracker** — records session uptime, total recovered inputs, estimated missed inputs without the mod, and a rolling CPS history.
- Config Profiles** — save and load named configuration snapshots from the in-game screen.
- Latency Profiler** — tracks per-drain latency with rolling average and peak value, displayed in the HUD overlay.
- CPS Limiter** — configurable cap (1–20 CPS, default 20) with real-time display in the overlay.
- New keys:
overlay_position(integer 0–3, default0= Top-Left) andoverlay_scale(float 0.5–3.0, default1.0).
### 🔧 Changed
- HUD is now always-on** instead of F3-only. Toggle it via the Advanced tab in settings (O key).
- "F3 Overlay Info" setting renamed to "HUD Overlay"** to accurately describe its function.
- Poll rate range expanded from
[100, 500]Hz to[60, 1000]Hz. onDoAttackmixin now usesCallbackInfoReturnable<Boolean>andsetReturnValue(false)instead ofCallbackInfoandcancel().handleKeybinds()now runs before theactiveguard in the tick loop.
### 🗑️ Removed
- "Double-hit fix: ON"** line removed from the HUD overlay — the fix is always active and the line was noise.
- Manual
renderBackground()call removed fromInputBoosterScreen.render(). - Matrix stack push/pop/scale calls removed from
DebugOverlayManager(incompatible with MC 1.21.11 API).
## [2.0.2] - 2026-03-30
### 🐛 Fixed
- "Not Responding" on MC 1.21.11+** — polling thread now checks for interruption and logs errors instead of silently failing.
- CPS never recorded** —
CpsLimiter.recordClick()was never called fromInputDrainer. Fixed. - Silent polling errors** — changed error handling from silent to WARN-level logging.
- Null dereference** — added null checks in
InputDrainerandGameTickMixin. - WTapAssist silent failure** — added try-catch around
onWRelease()so feature errors don't block the drain loop. - Sleep efficiency** — polling thread sleep changed to millisecond precision for better CPU and battery usage.
- Colorful F3 display with status-based color coding (red / yellow / green / gray).
- Visual status indicators (✓ / ✗) for enabled/disabled features in F3.
## [2.0.1] - 2026-03-29
### 🐛 Fixed
- Double input drain** —
InputDrainer.drainAll()was called twice per tick. Removed redundant drain. - AtomicLong race condition** —
totalHitsandrecoveredInputswerevolatile longincremented with++from multiple threads. Replaced withAtomicLong. - WTapAssist dead code** —
FORWARD_RELEASEDevents were queued but never handled inInputDrainer. Wired up. - Unsafe MC reads from polling thread** — introduced
gameReady/gamePausedvolatile flags; polling thread reads flags instead of MC objects directly. - O(n) queue size** —
ConcurrentLinkedQueue.size()replaced withAtomicIntegerfor O(1) tracking. - Poll rate bounds mismatch** — internal clamp unified with documented range.
## [2.0.0] - 2026-03-27
### 🎉 First Public Release — Complete Rewrite
Internal v1.0 was never released due to memory leaks, Sodium/Iris crashes, config corruption, and thread-safety issues. v2.0 is a ground-up rewrite.
### ✨ Added
- Dynamic FPS-aware poll rate (100–500 Hz auto-scaling).
- F3 debug screen integration (poll rate, FPS, recovered inputs, CPS, feature states).
- Real-time CPS tracker with sliding-window algorithm.
- Auto-Strafe correction for diagonal movement at low FPS.
- Anti-Idle protection against AFK kicks during lag spikes.
- Lock-free concurrent input queue.
- Mixin-based event interception compatible with Sodium, Iris, Lithium.
- Graceful thread lifecycle (clean startup and shutdown hooks).
- Properties-file config with validation, bounds checking, and auto-creation.
- HUD overlay system — replaced with F3 integration.
- Experimental / unstable features.
- MC 1.19–1.20 legacy compatibility modes.
- Built-in macro system.
All notable changes to InputBooster will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [3.0.0] - 2026-05-23
### 🎉 Major Release — Minecraft 1.21.11 Full Port
This release is a complete port and overhaul targeting **Minecraft 1.21.11** with **Fabric Loader 0.19.2** and **Fabric API 0.141.3**. All known bugs from 2.x have been resolved and several new features have been added.
### 🔧 Build System
- Upgraded fabric-loom** from legacy version to
1.14.10— the latest stable release supporting MC 1.21.11 - Fixed Gradle plugin resolution** — added
resolutionStrategyinsettings.gradleto correctly resolvefabric-loomfrom Fabric Maven (https://maven.fabricmc.net/) - Gradle wrapper** pinned to
9.5.1for compatibility with loom 1.14.10 - Java toolchain** set to Java 21 (required for MC 1.21.11)
### 🐛 Fixed
#### Compilation Errors (MC 1.21.11 API Changes)
KeyBindingcategory API breaking change:**KeyBindingconstructor no longer accepts a rawStringfor the category parameter. Updated both keybindings (key.inputbooster.options,key.inputbooster.toggle) from"key.categories.misc"→KeyBinding.Category.MISCto match the new record-based category system introduced in 1.21.9+DrawContext.drawBorder()removed:** Method no longer exists in 1.21.11. Replaced with four explicitdrawHorizontalLine/drawVerticalLinecalls to draw the CPS graph border inInputBoosterScreen
- Black overlay covering the screen:**
DebugOverlayManagerwas callingctx.fill()to draw a semi-transparent black background (0x8B000000) behind each HUD text line. In 1.21.11,DrawContext.fill()renders without proper alpha blending, producing a solid black stripe across the entire screen. Removed the background fill and enabled text shadow (drawText(..., true)) for readability instead - "Burst Mode ended" message looping on screen:**
BurstModeManagersent the action bar message inside the tick loop without a sent-flag guard, causing it to fire every tick rather than once. Fixed with anendMsgSentboolean flag that prevents the message from repeating - Burst Mode triggering immediately on game load:**
lastFpswas initialized to-1, causing a massive artificial FPS drop on the very first tick which immediately triggered burst mode. Fixed by initializinglastFpsto0and only comparing when FPS is stable (> 10) lastFpsupdated with invalid zero FPS values:** FPS reads of0during early load were being stored aslastFps, corrupting future drop calculations. Fixed by only updatinglastFpswhenfps > 0
### ✨ Added
BurstModeManager—endMsgSentflag:** Ensures the "Burst Mode ended" action bar message is shown exactly once per burst cycleProfileManagersystem:** Saves and loads named poll rate profiles, allowing players to switch between preset configurationsSessionStatstracker:** Tracks per-session statistics including total hits, recovered inputs, average CPS, and session durationLatencyProfiler:** Measures and reports input-to-frame latency in the HUD overlay and F3 debug screen- In-game config screen (
InputBoosterScreen):** Full GUI screen accessible via keybind (defaultO) for toggling all features and adjusting poll rate without restarting - Combo key presets (
Ctrl+1throughCtrl+5):** Instantly switches poll rate to 100 / 200 / 350 / 500 / 1000 Hz in-game - Burst Mode (
BurstModeManager):** Automatically spikes poll rate to 1000 Hz for 3 seconds when FPS drops more than 20% in a single second, ensuring zero inputs are lost during lag spikes - CPS graph in settings screen:** Visual bar chart of recent CPS history with color-coded bars (green / yellow / red based on proximity to the CPS cap)
- Action bar notifications:** Optional in-game messages for burst mode activation/deactivation and poll rate changes via combo keys
### 🔄 Changed
- HUD overlay background** replaced from opaque
ctx.fill()box → text shadow for clean rendering on all GPU/driver combinations - Poll rate auto mode** now uses a 5-tier FPS threshold system (≤20 FPS → 500 Hz, ≤30 → 400 Hz, ≤60 → 200 Hz, ≤120 → 150 Hz, 120+ → 100 Hz)
- Config file** expanded with new keys:
burstModeEnabled,showActionBar,comboKeysEnabled,maxCps,debugMode - Mod version** bumped to
3.0.0across all metadata files
### 🗑️ Removed
ctx.fill()background behind HUD lines** — caused black overlay bug on 1.21.11- String-based
KeyBindingcategory** — replaced with typedKeyBinding.Categoryrecord DrawContext.drawBorder()call** — method removed from MC 1.21.11 API
### 🚀 Port — Minecraft 26.1.1 "Tiny Takeover"
This release ports InputBooster to **Minecraft 26.1.1**, the April 2026 "Tiny Takeover" hotfix drop (protocol 775, data version 4788). It is the first fully unobfuscated Minecraft release. No gameplay or feature changes were made — this is a pure compatibility update.
### 🔧 Changed
- Minecraft target:**
1.21.1→26.1.1(also supports26.1base drop) - Java toolchain:**
21→25(required by MC 26.1.x) - Mappings:** Yarn → Official Mojang mappings (no Yarn for 26.1.x yet)
- Fabric API:** Updated to
0.145.3+26.1.1 - fabric-loader:** Updated to
0.18.6 - Gradle wrapper:**
8.8→9.4.1(fabric-loom 1.15-SNAPSHOT requires ≥ 9.4.1) - Mod version string:**
2.0.4-26.1.1(encodes both mod version and MC target) - F3 integration:** in
2.0.4-26.1.1we removed **F3 integration** For some technical reason it will fixed in next update.
- Build failure:**
gradle buildwas failing with *"Plugin net.fabricmc:fabric-loom:1.9-SNAPSHOT requires at least Gradle 8.11. This build uses Gradle 8.8."* Resolved by upgradinggradle/wrapper/gradle-wrapper.propertiesto Gradle 8.11.
### 📝 Notes
26.1(data version 4786) and26.1.1(data version 4788) are both supported. To target the base26.1drop, change26.1.1→26.1inbuild.gradledependencies and fabric-api suffix accordingly.- Yarn mappings for 26.1.x do not yet exist. When they become available, the project can optionally switch from
loom.officialMojangMappings().
### 🐛 Fixed
#### Critical — "Not Responding" on MC 1.21.11 (Root Cause)
- DebugHudMixin crash on startup:** The
@InjectinDebugHudMixintargeted the intermediary method namemethod_1835(getLeftText), which was remapped in MC 1.21.11. With the defaultrequire=1, a failed injection throwsInvalidInjectionException, crashing the render thread and leaving a blank white "Not Responding" window. Fixed by addingrequire=0so the injection silently skips if the target method is not found in the current MC version. defaultRequire: 1in mixin config:**inputbooster.mixins.jsonhad"defaultRequire": 1, making every mixin injection fatal if unresolved. Changed to"defaultRequire": 0as a global safety net.
#### Thread Safety — Polling Thread Reading MC State Directly
- Unsafe MC options reads from background thread (critical):**
InputPollingThread.poll()was callingMinecraftClient.getInstance()and readingmc.options.attackKey.isPressed()and all other key bindings directly from the background polling thread. Minecraft'sKeyBindingobjects are not thread-safe — concurrent reads from a non-main thread cause lock contention and can deadlock the game. IntroducedKeySnapshot, a new immutable class that captures all key states on the main thread once per tick. The polling thread now reads exclusively from this snapshot. WTapAssistrace condition:**pendingWReleaseandwReleaseTickDelaywere plainboolean/intfields written by the polling thread viaonWRelease()and read by the main thread intick(). Withoutvolatile, the main thread could see stale values. Both fields markedvolatile.CpsLimiternot thread-safe:**clickTimestampswas anArrayDeque— not safe for concurrent access. Replaced withConcurrentLinkedDeque.
### ✨ Added
KeySnapshot.java** — New immutable class capturing all key binding states on the main thread each tick, published as avolatilefield onInputBoosterModfor the polling thread to read safely. Eliminates all direct MC object access from the background thread.
### 🔧 Changed
InputPollingThreadno longer imports or referencesMinecraftClientorGameOptions.InputBoosterModnow updateskeySnapshoteach tick alongsidegameReadyandgamePaused.DebugHudMixinpriority set to900and added null guard oncir.getReturnValue().
## [2.0.0] – 2026-03-27 ✅ Released
- Major Release – Complete Rewrite**
- First public release; full rewrite from internal v1.0
- FPS-aware dynamic input polling (100-500Hz)
- F3 debug integration: shows poll rate, recovered inputs, CPS, and feature states
- Auto-strafe correction, sprint-fix, W-tap assist, anti-idle protection
- Lock-free input queue and Mixin-based event handling for stability
- Config file simplified and modular; all features toggleable
- Full compatibility with Fabric performance mods (Sodium, Iris, Lithium)
- Fixed memory leaks, thread safety issues, config corruption
- Removed HUD overlay, experimental features, legacy compatibility, and built-in macros
## [Unreleased] – Planned Features
- Multi-language F3 display
- In-game Mod Menu config
- Performance profiling mode
- Conflict detection with other input mods