FPSFlow
Improve FPS with smart rendering, entity culling, adaptive optimizations, and configurable performance profiles
- Загрузки
- 9K
- Подписчики
- 13
- Обновлён
- 29 июля 2026 г.
- Лицензия
- AGPL-3.0-only
Опубликован 8 июня 2026 г.
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": nullin 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
- Install Fabric Loader for Minecraft 1.21.11
- Download and install Fabric API
- Drop the FPSFlow
.jarinto yourmods/folder - (Optional) Install ModMenu for the in-game settings screen
- 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
🎨 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
Ченджлог
1.8.3Релиз1.21.11 · 29 июля 2026 г.
[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_versionupdated from1.8.3to1.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_versionupdated from1.8.2to1.8.3.
1.8.3Релиз26.1.1, 26.1.2, 26.2 · 29 июля 2026 г.
[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_versionupdated from1.8.3to1.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_versionupdated from1.8.2to1.8.3.
1.8.2Релиз1.21.11 · 26 июля 2026 г.
[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.1for Minecraft,>=0.155.1for Fabric API) infabric.mod.json. A singlegradle buildModernproduces one JAR that works on both Minecraft 26.1.2 and 26.2 without separate artifacts. - Build system improvements — Added
minecraft_depandfabric_depproperties tobuild.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.2prevented the mod from loading on 26.1.2. The runtime dependency is now>=26.1, accepting all 26.x releases.
1.8.2Релиз26.1.1, 26.1.2, 26.2 · 26 июля 2026 г.
[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.1for Minecraft,>=0.155.1for Fabric API) infabric.mod.json. A singlegradle buildModernproduces one JAR that works on both Minecraft 26.1.2 and 26.2 without separate artifacts. - Build system improvements — Added
minecraft_depandfabric_depproperties tobuild.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.2prevented the mod from loading on 26.1.2. The runtime dependency is now>=26.1, accepting all 26.x releases.
1.8.1Релиз1.21.11 · 24 июля 2026 г.
[1.8.1]
Added
- Lithium-inspired performance optimizations — FPSFlow 1.8.1 integrates several key optimization techniques adapted from CaffeineMC's excellent 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 fromDirection.values()in hot code paths by providing cached references. Every call toEnum.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.
- Compact Sine Table (
- Full Lithium attribution — All adapted code paths include Javadoc
@seereferences andInspired bycomments linking to the upstream Lithium repository.
Changed
- Version bumped to 1.8.1 — Gradle property
mod_versionupdated from1.8to1.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Релиз26.1.1, 26.1.2, 26.2 · 24 июля 2026 г.
[1.8.1]
Added
- Lithium-inspired performance optimizations — FPSFlow 1.8.1 integrates several key optimization techniques adapted from CaffeineMC's excellent 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 fromDirection.values()in hot code paths by providing cached references. Every call toEnum.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.
- Compact Sine Table (
- Full Lithium attribution — All adapted code paths include Javadoc
@seereferences andInspired bycomments linking to the upstream Lithium repository.
Changed
- Version bumped to 1.8.1 — Gradle property
mod_versionupdated from1.8to1.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Релиз26.1.1, 26.1.2, 26.2 · 23 июля 2026 г.
[1.8.0]
Changed
- Configurable Java target — The Java version is no longer hardcoded in
build.gradle.kts. It is now read from thejava_versionproperty ingradle.properties(default:21). Setjava_version=25to build with Java 25. The Mixin compatibility level (JAVA_21/JAVA_25) and theremapJarclassifier (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
targetJavaVersionswitch 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— Theminecraft_version_java25,yarn_mappings_java25,loader_version_java25,fabric_version_java25, andmodmenu_version_java25properties 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.comtohttps://maven.terraformersmc.comfor correct dependency resolution. - Improved
fabric.mod.json— Description updated to match the Modrinth page;fabricloaderandfabric-apidependency minimums tightened to>=0.19.3and>=0.141.4respectively. - Updated
how_to_build.md— Rewritten for the single configurable Java build path; references to the removedbuildJava21/buildJava25tasks 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) to0.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.mddocumenting short-term (Yarn) and long-term (Mojang mappings) strategies.
Fixed
- ModMenu integration was broken —
FPSFlowModMenuIntegration.createConfigScreen()returnednull, causing aNullPointerExceptionwhen a player clicked the Config button in ModMenu. The class now properly implementsModMenuFactoryand returns aFPSFlowConfigScreeninstance. - Duplicate translation keys in
en_us.jsonandde_de.json— Theentity_lodanditem_framekey 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.painting_backface_culling.tooltip, andnameplate_culling.enabled.tooltipto both language files. These keys were referenced by the config screen but had no translations, causing fallback to the raw key string. - Dead variable in
settings.gradle.kts— ThemcVersionvariable was read from Gradle properties but never used in thefabric-loomresolution strategy. Removed.
Removed
i18n_pending_keys.txtandREADME_UI_KEYS.txt— These development artifacts tracked missing translation keys. All keys are now present in both language files, so these files are no longer needed.gradlewandgradle/wrapper/— The Gradle wrapper is unnecessary when Gradle is installed system-wide. Users can build directly withgradle build.- Yarn OFFICIAL mapping mode — Temporarily removed; Loom 1.17.3 requires explicit Yarn mappings.
1.8Релиз1.21.11 · 23 июля 2026 г.
[1.8.0]
Changed
- Configurable Java target — The Java version is no longer hardcoded in
build.gradle.kts. It is now read from thejava_versionproperty ingradle.properties(default:21). Setjava_version=25to build with Java 25. The Mixin compatibility level (JAVA_21/JAVA_25) and theremapJarclassifier (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
targetJavaVersionswitch 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— Theminecraft_version_java25,yarn_mappings_java25,loader_version_java25,fabric_version_java25, andmodmenu_version_java25properties 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.comtohttps://maven.terraformersmc.comfor correct dependency resolution. - Improved
fabric.mod.json— Description updated to match the Modrinth page;fabricloaderandfabric-apidependency minimums tightened to>=0.19.3and>=0.141.4respectively. - Updated
how_to_build.md— Rewritten for the single configurable Java build path; references to the removedbuildJava21/buildJava25tasks 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) to0.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.mddocumenting short-term (Yarn) and long-term (Mojang mappings) strategies.
Fixed
- ModMenu integration was broken —
FPSFlowModMenuIntegration.createConfigScreen()returnednull, causing aNullPointerExceptionwhen a player clicked the Config button in ModMenu. The class now properly implementsModMenuFactoryand returns aFPSFlowConfigScreeninstance. - Duplicate translation keys in
en_us.jsonandde_de.json— Theentity_lodanditem_framekey 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.painting_backface_culling.tooltip, andnameplate_culling.enabled.tooltipto both language files. These keys were referenced by the config screen but had no translations, causing fallback to the raw key string. - Dead variable in
settings.gradle.kts— ThemcVersionvariable was read from Gradle properties but never used in thefabric-loomresolution strategy. Removed.
Removed
i18n_pending_keys.txtandREADME_UI_KEYS.txt— These development artifacts tracked missing translation keys. All keys are now present in both language files, so these files are no longer needed.gradlewandgradle/wrapper/— The Gradle wrapper is unnecessary when Gradle is installed system-wide. Users can build directly withgradle build.- Yarn OFFICIAL mapping mode — Temporarily removed; Loom 1.17.3 requires explicit Yarn mappings.
Комментарии
Загружаем…
