All Mods Resource Packs Data Packs Shaders Modpacks Plugins
F

FPSFlow

by McAffe13 • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

FPSFlow

Real FPS improvements — no placebo, no bloat.

FPSFlow is a client-side Fabric optimization mod that targets the biggest rendering bottlenecks in vanilla Minecraft. Every feature is measurably effective, individually toggleable, and automatically adjusts to your hardware via four built-in performance profiles.


✦ Features at a Glance

Feature What it does
🔍 Entity Culling Frustum, occlusion, and distance culling. Dual-point raycasting prevents false-positives on small entities. Auto-disables when EntityCulling is detected.
📐 Entity LOD Entities beyond a configurable distance render every 2nd tick. Server NPCs and entities within nameplate range are always fully exempt — no flicker, even in busy lobbies.
🏷️ Nameplate Culling Hides name tags beyond a configurable distance. Server-forced labels are never hidden.
🧱 Block Entity Culling Skips chests, furnaces, signs, banners, and item frames beyond the configured range.
✨ Particle Optimization Count cap + three-zone density LOD (full / ~50 % / none) based on distance from player.
🖼️ Painting Back-Face Culling Instantly skips paintings when the camera is behind them — they are never visible from the back.
🌙 Background FPS Limiter Caps frame rate when the window loses focus, is minimised, or on any loading/menu screen (reduces GPU spinning during startup).
🌍 Singleplayer Boost More aggressive adaptive culling in singleplayer — frees CPU for chunk generation threads so exploration stays smooth.
⚡ World Join Optimizer Culling distances ramp up from 35 % on join and return to 100 % over ~10 seconds — eliminates the initial FPS spike.
🎮 GUI & HUD Optimizer Dirty-flag hotbar caching (including CustomModelData); HUD throttling with immediate response to actual stat changes. Caches auto-clear on resource-pack reload to prevent stale item textures.

✦ Performance Profiles

One setting, four presets — changing the profile rewrites all other settings automatically.

Profile Entity Dist. BE Dist. LOD threshold Nameplate Particle (mid/max) BG FPS (unfoc/min/menu)
Quality 128 b Off 128 b Off Off 30/10/120
Balanced (default) 64 b 64 b 96 b 32 b 32/64 b 60/30/120
Performance 48 b 48 b 64 b 24 b 16/32 b 10/3/120
Ultra Performance 32 b 32 b 40 b 16 b 8/16 b 5/2/60

Set "profile": null in the config to use fully custom values.


✦ Compatibility

FPSFlow detects installed mods at startup and automatically disables overlapping features.

Mod Status
🟢 Sodium Fully compatible — FPSFlow adds entity/GUI optimizations on top
🟢 Lithium No overlap — both run independently
🟢 FerriteCore No overlap — both run independently
🟢 ModernFix No overlap — both run independently
🟢 ModMenu Optional — enables in-game config screen
⚡ EntityCulling (tr7zw) FPSFlow's built-in culling disables automatically — recommended companion for superior occlusion accuracy
⚡ ImmediatelyFast FPSFlow's HUD caching defers automatically

Recommended stack: Sodium + Lithium + FerriteCore + ImmediatelyFast + EntityCulling + ModMenu + FPSFlow


✦ Installation

  1. Install Fabric Loader for Minecraft 1.21.11
  2. Download and install Fabric API
  3. Drop the FPSFlow .jar into your mods/ folder
  4. (Optional) Install ModMenu for the in-game settings screen
  5. Launch — the config is written automatically on first run

✦ FAQ

Does FPSFlow conflict with Sodium, Lithium, or FerriteCore? No. FPSFlow is designed to complement these mods — install all of them together.

Can entities "pop in" with occlusion culling? Rarely. The cache refreshes every 10 ticks (configurable). FPSFlow samples the entity's eye position for the raycast — naturally above the geometric centre, which avoids false-positives for small entities like floating heads and armor stands.

Does this work on servers? FPSFlow is purely client-side — works with any server, no server installation required. Servers that send a custom resource pack are fully supported: FPSFlow detects the pack reload and pauses render throttles for ~3 seconds so item-frame maps and hotbar items always show the correct textures after the pack loads.


✦ Partner

NexoMaker — Use code MCAFFE13 for 15% discount

🎨 Create Custom Minecraft Content with NexoMaker

Create custom items, mobs, blocks, recipes, and more — without coding.
Compatible with Nexo, ItemsAdder, and other modern custom-content systems.

💜 Use code MCAFFE13 to get 15% off! 👉 Get started with NexoMaker

⚠️ ItemsAdder or Nexo required for exported content.

✦ Source & License

GitHub — McAffe13/FPSFlow · Licensed under the Mozilla Public License 2.0

How to Install FPSFlow (Mod)

FPSFlow by McAffe13 is verified for Fabric across Minecraft versions 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2 (latest release: 1.8.3, file size: 272 KB). Follow the steps below to install it safely from ModCraft.tv:

  1. Click the Download button above and select your Minecraft version (1.21.11, 26.1, 26.1.1, 26.1.2, 26.2) and platform (Fabric).
  2. Make sure you have the compatible loader or environment installed for Fabric.
  3. Move the downloaded FPSFlow file into your Minecraft .minecraft/mods folder and launch the game.

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
1.21.11
Fabric
3mo ago 1
26.2 26.1.x
Fabric
3mo ago 1
1.21.11
Fabric
3mo ago 1
26.2 26.1.x
Fabric
3mo ago 1
1.21.11
Fabric
3mo ago 1
26.2 26.1.x
Fabric
3mo ago 1
26.2 26.1.x
Fabric
3mo ago 1
1.21.11
Fabric
3mo ago 1
1.21.11
Fabric
4mo ago 1
1.21.11
Fabric
4mo ago 1
1.21.11
Fabric
4mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
1.21.11
Fabric
5mo ago 1
[1.8.3] FPSFlow 1.8.3 by McAffe13 on Jul 29, 2026
Download
## [1.8.3]

### Fixed
  • ModMenu settings screen now shows the full FPSFlow configuration again in modern builds** — The modern compatibility screen now exposes the same settings layout as the 1.21.11 build instead of opening an empty or placeholder page.

### Changed
  • Version bumped to 1.8.4** — Gradle property mod_version updated from 1.8.3 to 1.8.4.

## [1.8.3]

### Fixed
  • Particle optimization is no longer enabled by default in the Balanced profile** — The default profile now keeps particle limits off unless you enable them manually, so visible effects like fishing particles are not filtered out on a fresh install.

### Changed
  • Version bumped to 1.8.3** — Gradle property mod_version updated from 1.8.2 to 1.8.3.
[1.8.3] FPSFlow 1.8.3 by McAffe13 on Jul 29, 2026
Download
## [1.8.3]

### Fixed
  • ModMenu settings screen now shows the full FPSFlow configuration again in modern builds** — The modern compatibility screen now exposes the same settings layout as the 1.21.11 build instead of opening an empty or placeholder page.

### Changed
  • Version bumped to 1.8.4** — Gradle property mod_version updated from 1.8.3 to 1.8.4.

## [1.8.3]

### Fixed
  • Particle optimization is no longer enabled by default in the Balanced profile** — The default profile now keeps particle limits off unless you enable them manually, so visible effects like fishing particles are not filtered out on a fresh install.

### Changed
  • Version bumped to 1.8.3** — Gradle property mod_version updated from 1.8.2 to 1.8.3.
[1.8.2] FPSFlow 1.8.2 by McAffe13 on Jul 26, 2026
Download
## [1.8.2]

### Changed
  • Single modern build now supports both Minecraft 26.1.2 and 26.2** — The modern build target now uses a flexible dependency range (>=26.1 for Minecraft, >=0.155.1 for Fabric API) in fabric.mod.json. A single gradle buildModern produces one JAR that works on both Minecraft 26.1.2 and 26.2 without separate artifacts.
  • Build system improvements** — Added minecraft_dep and fabric_dep properties to build.gradle.kts, keeping the compile-time dependency pinned to a specific version while declaring a wider runtime compatibility range in the mod metadata.

### Fixed
  • Mod rejected on Minecraft 26.1.2** — The previous hard dependency on Minecraft >=26.2 prevented the mod from loading on 26.1.2. The runtime dependency is now >=26.1, accepting all 26.x releases.

[1.8.2] FPSFlow 1.8.2 by McAffe13 on Jul 26, 2026
Download
## [1.8.2]

### Changed
  • Single modern build now supports both Minecraft 26.1.2 and 26.2** — The modern build target now uses a flexible dependency range (>=26.1 for Minecraft, >=0.155.1 for Fabric API) in fabric.mod.json. A single gradle buildModern produces one JAR that works on both Minecraft 26.1.2 and 26.2 without separate artifacts.
  • Build system improvements** — Added minecraft_dep and fabric_dep properties to build.gradle.kts, keeping the compile-time dependency pinned to a specific version while declaring a wider runtime compatibility range in the mod metadata.

### Fixed
  • Mod rejected on Minecraft 26.1.2** — The previous hard dependency on Minecraft >=26.2 prevented the mod from loading on 26.1.2. The runtime dependency is now >=26.1, accepting all 26.x releases.

[1.8.1] FPSFlow 1.8.1 by McAffe13 on Jul 24, 2026
Download
## [1.8.1]

### Added
  • Lithium-inspired performance optimizations** — FPSFlow 1.8.1 integrates several key optimization techniques adapted from CaffeineMC's excellent [Lithium](https://github.com/CaffeineMC/lithium) mod, reimplemented from scratch to respect Lithium's license and ensure full compatibility with the FPSFlow codebase:
  • Compact Sine Table** (CompactSineTable.java) — A memory-efficient sine LUT that reduces table size from 256 KB to 64 KB using trigonometric identities (sin(-x) = -sin(x), sin(x) = sin(π/2 - x)). Reduces CPU cache pressure during rotation-heavy rendering while maintaining bit-for-bit compatibility with Minecraft's MathHelper.
  • Direction Constants Caching** (DirectionValuesMixin.java, FastDirection.java) — Prevents repeated defensive array copies from Direction.values() in hot code paths by providing cached references. Every call to Enum.values() in Java creates a new array allocation; this optimization eliminates that overhead in frequently-called redstone, block update, and entity collision code.
  • Fast BlockPos Utilities** (FastBlockPos.java) — Thread-local mutable BlockPos for iteration contexts plus efficient long-packing for hash-based collections, reducing GC pressure in chunk scanning and neighbor-iteration hot loops.
  • Collection Helper** (FastCollectionHelper.java) — Pre-sized HashMap/HashSet factories with optimal initial capacities, identity-based sets for entity classification, and utility methods that avoid the common allocation pitfalls found in vanilla's collection usage.
  • Full Lithium attribution** — All adapted code paths include Javadoc @see references and Inspired by comments linking to the upstream Lithium repository.

### Changed
  • Version bumped to 1.8.1** — Gradle property mod_version updated from 1.8 to 1.8.1.
  • OptimizationManager module list extended** — New lightweight utility modules are registered on startup (no tick overhead, no Minecraft class dependencies).

### Fixed
  • None.

[1.8.1] FPSFlow 1.8.1 by McAffe13 on Jul 24, 2026
Download
## [1.8.1]

### Added
  • Lithium-inspired performance optimizations** — FPSFlow 1.8.1 integrates several key optimization techniques adapted from CaffeineMC's excellent [Lithium](https://github.com/CaffeineMC/lithium) mod, reimplemented from scratch to respect Lithium's license and ensure full compatibility with the FPSFlow codebase:
  • Compact Sine Table** (CompactSineTable.java) — A memory-efficient sine LUT that reduces table size from 256 KB to 64 KB using trigonometric identities (sin(-x) = -sin(x), sin(x) = sin(π/2 - x)). Reduces CPU cache pressure during rotation-heavy rendering while maintaining bit-for-bit compatibility with Minecraft's MathHelper.
  • Direction Constants Caching** (DirectionValuesMixin.java, FastDirection.java) — Prevents repeated defensive array copies from Direction.values() in hot code paths by providing cached references. Every call to Enum.values() in Java creates a new array allocation; this optimization eliminates that overhead in frequently-called redstone, block update, and entity collision code.
  • Fast BlockPos Utilities** (FastBlockPos.java) — Thread-local mutable BlockPos for iteration contexts plus efficient long-packing for hash-based collections, reducing GC pressure in chunk scanning and neighbor-iteration hot loops.
  • Collection Helper** (FastCollectionHelper.java) — Pre-sized HashMap/HashSet factories with optimal initial capacities, identity-based sets for entity classification, and utility methods that avoid the common allocation pitfalls found in vanilla's collection usage.
  • Full Lithium attribution** — All adapted code paths include Javadoc @see references and Inspired by comments linking to the upstream Lithium repository.

### Changed
  • Version bumped to 1.8.1** — Gradle property mod_version updated from 1.8 to 1.8.1.
  • OptimizationManager module list extended** — New lightweight utility modules are registered on startup (no tick overhead, no Minecraft class dependencies).

### Fixed
  • None.

[1.8] FPSFlow 1.8 by McAffe13 on Jul 23, 2026
Download
## [1.8.0]

### Changed
  • Configurable Java target** — The Java version is no longer hardcoded in build.gradle.kts. It is now read from the java_version property in gradle.properties (default: 21). Set java_version=25 to build with Java 25. The Mixin compatibility level (JAVA_21 / JAVA_25) and the remapJar classifier (mc1.21.11-java21 / mc1.21.11-java25) are derived automatically from this value — nothing is hardcoded.
  • Removed broken Java 21 / Java 25 multi-target build** — The previous targetJavaVersion switch that attempted to produce separate artifacts for different Minecraft generations never functioned correctly. The build now uses a single, configurable Java version.
  • Removed Java 25 properties from gradle.properties** — The minecraft_version_java25, yarn_mappings_java25, loader_version_java25, fabric_version_java25, and modmenu_version_java25 properties have been removed. All builds now use the single set of Fabric properties.
  • Simplified build.gradle.kts** — Dead code removed, all comments translated to English, ModMenu removed from compile-time dependencies. The integration class now uses a matching method signature that ModMenu calls via reflection, eliminating the compile-time dependency that caused build failures when ModMenu artifacts were unavailable.
  • Fixed TerraformersMC Maven repository URL** — Changed from https://terraformersmc.com to https://maven.terraformersmc.com for correct dependency resolution.
  • Improved fabric.mod.json** — Description updated to match the Modrinth page; fabricloader and fabric-api dependency minimums tightened to >=0.19.3 and >=0.141.4 respectively.
  • Updated how_to_build.md** — Rewritten for the single configurable Java build path; references to the removed buildJava21 / buildJava25 tasks eliminated.
  • Updated settings.gradle.kts** — Removed version lock for fabric-loom and simplified plugin repository configuration.
  • Fabric API version corrected** — Changed from 0.19.3+26.2 (invalid) to 0.141.4+1.21.11 (correct for MC 1.21.11).
  • Build verified with Java 25** — Successfully compiled and remapped fpsflow-1.8.0-mc1.21.11-java25.jar.
  • Version migration guide** — Added VERSION_MIGRATION.md documenting short-term (Yarn) and long-term (Mojang mappings) strategies.

### Fixed
  • ModMenu integration was broken** — FPSFlowModMenuIntegration.createConfigScreen() returned null, causing a NullPointerException when a player clicked the Config button in ModMenu. The class now properly implements ModMenuFactory and returns a FPSFlowConfigScreen instance.
  • Duplicate translation keys in en_us.json and de_de.json** — The entity_lod and item_frame key blocks were duplicated, with the first occurrence silently overwritten by the second. All duplicate blocks have been merged into single, complete entries.
  • Missing translation keys** — Added entity_culling.painting_backface_culling, `entity_culling.pai
...
[1.8] FPSFlow 1.8 by McAffe13 on Jul 23, 2026
Download
## [1.8.0]

### Changed
  • Configurable Java target** — The Java version is no longer hardcoded in build.gradle.kts. It is now read from the java_version property in gradle.properties (default: 21). Set java_version=25 to build with Java 25. The Mixin compatibility level (JAVA_21 / JAVA_25) and the remapJar classifier (mc1.21.11-java21 / mc1.21.11-java25) are derived automatically from this value — nothing is hardcoded.
  • Removed broken Java 21 / Java 25 multi-target build** — The previous targetJavaVersion switch that attempted to produce separate artifacts for different Minecraft generations never functioned correctly. The build now uses a single, configurable Java version.
  • Removed Java 25 properties from gradle.properties** — The minecraft_version_java25, yarn_mappings_java25, loader_version_java25, fabric_version_java25, and modmenu_version_java25 properties have been removed. All builds now use the single set of Fabric properties.
  • Simplified build.gradle.kts** — Dead code removed, all comments translated to English, ModMenu removed from compile-time dependencies. The integration class now uses a matching method signature that ModMenu calls via reflection, eliminating the compile-time dependency that caused build failures when ModMenu artifacts were unavailable.
  • Fixed TerraformersMC Maven repository URL** — Changed from https://terraformersmc.com to https://maven.terraformersmc.com for correct dependency resolution.
  • Improved fabric.mod.json** — Description updated to match the Modrinth page; fabricloader and fabric-api dependency minimums tightened to >=0.19.3 and >=0.141.4 respectively.
  • Updated how_to_build.md** — Rewritten for the single configurable Java build path; references to the removed buildJava21 / buildJava25 tasks eliminated.
  • Updated settings.gradle.kts** — Removed version lock for fabric-loom and simplified plugin repository configuration.
  • Fabric API version corrected** — Changed from 0.19.3+26.2 (invalid) to 0.141.4+1.21.11 (correct for MC 1.21.11).
  • Build verified with Java 25** — Successfully compiled and remapped fpsflow-1.8.0-mc1.21.11-java25.jar.
  • Version migration guide** — Added VERSION_MIGRATION.md documenting short-term (Yarn) and long-term (Mojang mappings) strategies.

### Fixed
  • ModMenu integration was broken** — FPSFlowModMenuIntegration.createConfigScreen() returned null, causing a NullPointerException when a player clicked the Config button in ModMenu. The class now properly implements ModMenuFactory and returns a FPSFlowConfigScreen instance.
  • Duplicate translation keys in en_us.json and de_de.json** — The entity_lod and item_frame key blocks were duplicated, with the first occurrence silently overwritten by the second. All duplicate blocks have been merged into single, complete entries.
  • Missing translation keys** — Added entity_culling.painting_backface_culling, `entity_culling.pai
...
[1.7.14] FPSFlow 1.7.14 by McAffe13 on Jun 24, 2026
Download
## [1.7.14]

### Fixed
  • Crash on launch on Minecraft 26.1.2 caused by lingering net/minecraft/class_#### (intermediary) references in the release artifact mapping/remap pipeline.
  • Mixin loading is now fail-soft (defaultRequire=0) so missing/renamed targets from mapping drift no longer hard-crash the mod.
  • Updated mixin Java compatibility level to JAVA_21 to match the project/toolchain.

[1.7.13] FPSFlow 1.7.13 by McAffe13 on Jun 23, 2026
Download

## [1.7.13]

### Fixed
  • Crash on launch on Minecraft 26.1.2 caused by lingering net/minecraft/class_#### (intermediary) references in the release artifact mapping/remap pipeline.

[1.7.12] FPSFlow 1.7.12 by McAffe13 on Jun 22, 2026
Download

## [1.7.12]

### Changed
  • Minecraft 1.21.11+ support** — The release now targets Minecraft 1.21.11 with matching Yarn mappings, Fabric Loader, and Fabric API dependency versions.

### Fixed
  • Launch crash due to intermediary net/minecraft/class_#### references** — The default release artifact now stays in the named runtime namespace expected by Minecraft 1.21.11, while Loom's intermediary remap is written as fpsflow-<version>-intermediary.jar. Maven publishing also uses the named jar artifact, preventing accidental uploads of a class_####-mapped build.
[1.7.11] FPSFlow 1.7.11 by McAffe13 on Jun 13, 2026
Download
## [1.7.11]

### Fixed
  • Item flickering on texture-pack servers** — When a server sends a resource pack, Minecraft reloads all textures and re-bakes item models asynchronously. The map item-frame throttle (ItemFrameEntityRendererMixin) kept cancelling updateRenderState calls during this window, leaving frames holding a stale render state that referenced invalidated texture handles — causing visible flickering. A new ResourcePackReloadTracker registers as a Fabric resource reload listener and activates a 60-tick cooldown after every reload; the throttle skips itself while the cooldown is active so render states are always refreshed immediately after a pack change. HUDCache is also reset on reload, so the hotbar dirty-flag system re-evaluates every slot on the first post-reload frame.
  • Hotbar cache miss for CustomModelData items** — itemStackHash only covered item type, count, damage, and enchantment presence. Texture-pack servers commonly assign the custom_model_data component to items to drive custom model selection; two visually different items sharing the same base data but different CustomModelData values produced identical hashes, causing incorrect "nothing changed" cache hits. The hash now includes CustomModelData.

[1.7.10] FPSFlow 1.7.10 by McAffe13 on Jun 13, 2026
Download
## [1.7.10]

### Fixed
  • Crash in ParticleManagerMixin on servers with many entities** — Minecraft 1.21.11 changed the value type of the internal particles map from Queue<Particle> to an internal collection class (class_11940) that does not implement Queue. The @Shadow field declaration and the per-tick particle count loop now use a raw Map with an instanceof Collection<?> check, which is compatible with both the old and new type.

[1.7.9] FPSFlow 1.7.9 by McAffe13 on Jun 13, 2026
Download
## [1.7.9]

### Fixed
  • Crash with Voxy / extreme camera clipping** — When an entity's eye position coincided exactly with the camera position, normalize() produced a NaN direction vector, causing Minecraft's DDA raycast to freeze or crash the render thread. rayCast() now returns false immediately when the squared distance between endpoints is below 1 × 10⁻⁶, and adds a secondary NaN guard after each passable-block step.

[1.7.8] FPSFlow 1.7.8 by McAffe13 on Jun 13, 2026
Download
## [1.7.8]

### Fixed
  • Update checker never detected new releases** — The Modrinth API URL contained unencoded [, ], and " characters (loaders=["fabric"]). Java's URI.create() rejects these with an IllegalArgumentException that was silently swallowed, so the HTTP request never executed. The URL now uses percent-encoded form (loaders=%5B%22fabric%22%5D).
  • Update notification could be missed on slow title screens** — The old implementation slept 10 seconds after the HTTP response, then checked mc.player. If the player hadn't joined a world yet, the notification was silently dropped. The notification is now stored and shown 3 seconds after the next world join via ClientPlayConnectionEvents.JOIN.
Download FPSFlow
Select game version
Select platform