Fzzy Config

Fzzy Config mod: a config library for Minecraft

Fzzy Config gives Minecraft mods their settings screens, checks the values players type, and keeps servers and clients in step. It runs on Fabric, Quilt, Forge and NeoForge.

Sent here because a mod said it needs Fzzy Config? Pick your Minecraft version below and install the jar alongside your other mods. That is the whole job.

Download What is it?

  • 37,313,509 downloads
  • 20 Minecraft versions
  • 4 mod loaders
  • 0.7.6 latest
A Fzzy Config settings screen in Minecraft, with toggles, a number field showing a green tick, and enum buttons
A config screen drawn by Fzzy Config, screenshotted by the mod's author.

What is the Fzzy Config mod?

The Fzzy Config mod is a library. It ships no blocks, items or gameplay of its own. Other mods depend on it to build their config screens, so you install it the way you install Fabric API: because something else asked for it.

For the mods that use it, Fzzy Config writes the settings file, draws the screen, refuses values that would break the game, and syncs the result between a server and everyone connected to it. Version 0.7.6 is the current release, and the mod has been downloaded 37,313,509 times since April 2024.

If you write mods yourself, it is also an API: a plain Java or Kotlin class with public fields becomes a TOML file and a full settings screen, with one registration call and no screen-builder code.

Type
Library mod, required by mods that use it
Needed on
Client and server
Loaders
Fabric, Quilt, Forge, NeoForge
Minecraft
1.20.1 to 26.2
Price
Free
Author
fzzyhmstrs

Download the Fzzy Config mod

Filter by loader and Minecraft version, then download that exact jar. Each row is one file: Fabric 1.21 and NeoForge 26.1 are different rows. One click starts that download.

Every published file

The live catalog, newest first. Chips come from the catalog itself, not a hardcoded Minecraft range.

Loader
Minecraft family
Minecraft version
Every Fzzy Config file, newest first
Version Loader Minecraft Size Published Download
Loading the catalog…

Each click asks this site for that exact catalog row. The jar is not stored here; the download is counted as it is fetched.

How to install Fzzy Config

  1. Download the jar above for your Minecraft version and mod loader.
  2. Download the mods listed beside it as well. Fzzy Config is written in Kotlin and will not load without a Kotlin loader for your platform.
  3. Put every jar in your mods folder. On Windows that is %appdata%\.minecraft\mods, on macOS ~/Library/Application Support/minecraft/mods, on Linux ~/.minecraft/mods.
  4. If you play on a server, the same jars go in the server's mods folder too.
  5. Start the game. Fzzy Config adds nothing visible on its own, so if it launches and your other mods load, it worked.

Config screens open through ModMenu on Fabric and Quilt, Catalogue on Forge and NeoForge, or the /configure command in game. If something fails to load, the crash log names the missing piece. Common questions.

What it does for the mods that use it

Settings screens, generated

The screen is built from the mod's config class, so there is nothing for the author to lay out by hand. Breadcrumbs, a search box, right-click context menus and a change manager that can apply, revert or restore defaults all come as standard. Screens open from ModMenu, Catalogue, or the /configure command.

The Fzzy Config screen listing several mod configs, with an orange warning that some settings require a restart

Servers and clients stay in step

Configs sync to clients when they join. An operator can push a change to a live server without a restart, and players can forward their own settings to someone who wants the same setup. Updates that look suspect are quarantined until an admin accepts them.

The Fzzy Config change manager open in Minecraft, offering apply changes, revert changes, restore defaults and change history

Bad values get corrected, not crashed on

Numbers, enums, colours, identifiers, tags, ingredients, keybinds and whole objects each get a widget that only accepts what fits. Edit the file by hand and put in something impossible, and Fzzy Config corrects it instead of throwing an exception at load. Identifiers and tags suggest as you type, and Tab completes them.

A colour picker popup in a Fzzy Config screen, with red, green, blue and alpha fields each showing a green tick

Configs survive mod updates

A mod author bumps a version number and writes one method, and old settings files migrate instead of resetting. Configs written for another library can be scraped across. Since 0.7.4, edits made to the file on disk apply live in game.

One mod, four loaders

Fabric and Quilt share a file. Forge and NeoForge get their own. The same API is behind all of them, along with a small networking layer for mods that need to send their own packets. Minecraft 1.20.1 through 26.2 are supported.

Keyboard and narrator support

Every screen can be driven from the keyboard, and the config screens use their own narrator implementation rather than the vanilla one. The author's listing notes it was "fully vetted and tested by a visually impaired member of the modding community".

What the screens look like

Screenshots taken by the mod's author, with their own captions.

A typical config screen. The breadcrumbs at the top track back to the previous config screens opened. The settings list is fully translatable and describable. settings can be searched for at the bottom.

Recent changes

The most recent releases, notes straight from the author. Every release back to 0.2.0 in April 2024 is on Modrinth.

Fzzy Config 0.7.6

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–26.2 (17 versions)

Breaking changes in 0.7.x

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • Various documentation updates for the Provider systems, including a wiki update

Changes

  • ValidatedField.translationProvider, ValidatedField.descriptionProvider, ValidatedField.attachProvider, and the associated Provider types are now static (as well as instance methods) so java users won't have to call .Companion. anymore (but can)

Fixes

  • Deprecated settings are properly read in from file for handling. They are still ignored in network traffic.
  • The options in ValidatedChoiceList and similar settings with an "inline" widget layout now properly show the tooltip for the individual options as well as the settings overall tooltip

Fzzy Config 0.7.5

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.11 (13 versions)

Breaking changes in 0.7.x

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • Several new utilities added to FcText
  • Added a basic Provider system to Validated Fields
    • Use ValidatedField.translationProvider to attach a custom translation provider function to a field.
    • Use ValidatedField.descriptionProvider to attach a custom description (tooltip) provider function to a field.
    • Use ValidatedField.attachProvider to attach an arbitrary value provider. This system is experimental and currently largely unused except for some widget names
    • For validation with titles like "Edit Map..." you can attach a WIDGET_TITLE provider to create custom widget labels
    • There will be much more work put into this and related systems in 0.8.0 and beyond
  • New ConfigDeprecated annotation. Use this to mark a setting as deprecated in the config.
    • It won't appear in GUIs
    • It won't be serialized to save files or networking
    • It WILL still be read in from files
    • This can be used in combination with a Version annotation to update a setting while still being able to use the old setting to update/inform the content of the new one.

Changes

  • ThreadingUtils (the file watcher utility) now uses kotlin coroutines internally and has more robust startup and shutdown processes
  • Updated change detection system; may introduce niche regressions. Please open an issue if you encounter any strange behavior with "actions"

Fixes

  • Fixed restart detection when syncing for mapped settings (ValidatedCondition, ValidatedMapped, etc.)
  • Fixed action reporting for changes made inside ValidatedAny
  • (1.20.1) fixed tooltips not showing up in config screens until you "click into" them (or tab in)
  • (1.20.1) fixed sliders "stealing" input outside their widget bounds

Fzzy Config 0.7.4-fix2

· Fabric, Quilt · Minecraft 1.21.9, 1.21.10, 1.21.11

Breaking changes in 0.7.x

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • Config updates made in the file (.toml, .json5, etc.) will be automatically updated live in-game, and synced as appropriate.
  • New onUpdateServer events that take a ServerUpdateContext. The old events are deprecated. They will stop working (no crashes) in 0.8.0, with full removal scheduled for 0.9.0
    • For registered events, migrate to the v2 API
  • New RegistryBuilder platform system for creating modded registries in a loader-agnostic way, along with other registry-related utils.
    • Call via PlatformApi#createRegistryBuilder. Much like registrars, a builder is created for a specific namespace.

Changes

  • ValidatedEnum now has more widget types, including INLINE and SCROLLABLE
  • ValidationResult.bimap error nesting order flipped, the output results error context is now the parent context

Fixes

  • Fixed desc and prefix keys being broken for Config classes
  • Config groups, especially deeply nested groups, behave properly now when opening and closing repeatedly

Fzzy Config 0.7.4-fix1

· Fabric, Quilt · Minecraft 1.20.1–1.21.11 (13 versions)

Breaking changes in 0.7.x

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • Config updates made in the file (.toml, .json5, etc.) will be automatically updated live in-game, and synced as appropriate.
  • New onUpdateServer events that take a ServerUpdateContext. The old events are deprecated. They will stop working (no crashes) in 0.8.0, with full removal scheduled for 0.9.0
    • For registered events, migrate to the v2 API
  • New RegistryBuilder platform system for creating modded registries in a loader-agnostic way, along with other registry-related utils.
    • Call via PlatformApi#createRegistryBuilder. Much like registrars, a builder is created for a specific namespace.

Changes

  • ValidatedEnum now has more widget types, including INLINE and SCROLLABLE
  • ValidationResult.bimap error nesting order flipped, the output results error context is now the parent context

Fixes

  • Fixed desc and prefix keys being broken for Config classes
  • Config groups, especially deeply nested groups, behave properly now when opening and closing repeatedly

Fzzy Config 0.7.4

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.11 (13 versions)

Breaking changes in 0.7.x

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • Config updates made in the file (.toml, .json5, etc.) will be automatically updated live in-game, and synced as appropriate.
  • New onUpdateServer events that take a ServerUpdateContext. The old events are deprecated. They will stop working (no crashes) in 0.8.0, with full removal scheduled for 0.9.0
    • For registered events, migrate to the v2 API
  • New RegistryBuilder platform system for creating modded registries in a loader-agnostic way, along with other registry-related utils.
    • Call via PlatformApi#createRegistryBuilder. Much like registrars, a builder is created for a specific namespace.

Changes

  • ValidatedEnum now has more widget types, including INLINE and SCROLLABLE
  • ValidationResult.bimap error nesting order flipped, the output results error context is now the parent context

Fixes

  • Fixed desc and prefix keys being broken for Config classes
  • Config groups, especially deeply nested groups, behave properly now when opening and closing repeatedly

Fzzy Config 0.7.3

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.11 (13 versions)

Breaking changes in 0.7.x

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • Added new CustomWidget interface. This will be used for abstracting all FC widgets away from directly interacting with Element, Widget, etc. to reduce porting headache going forward. Updates related to CustomWidget will be sprinkled into the next versions.
  • New CustomTextWidget utilizing said CustomWidget interface.
  • Added syncConfig method to the NetworkApi for manually syncing a server-side config to clients.
  • Added uk_ua translation

Changes

  • CustomMultilineTextWidget now has an align-right method
  • Relevant has gained three new methods for modifier checks, needsCtrl, needsShift, needsAlt
  • PopupWidget's wrapped LayoutWidget now contributes to re-sizing the popup based on the dimensions it would like.

Fixes

  • Validated Collections now resolve their contents lazily on serialize, allowing for proper implementation of mapped registry objects (items, blocks, etc.) in loaders that defer their registration.
  • ConfigGroup now acts properly with nested collapsedByDefault
  • ConfigApi.buildTranslations can now "see" inside objects that may be wrapping a translated object (such as ValidatedAny)
  • Configs packet size limit increased to avoid problems with serializing large configs.
  • (1.21.9) fixed keybinds showing as "Button 70" etc.
  • ValidationResult.reportTo no longer reports an error context has header information only.

Fzzy Config 0.7.2

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.10 (12 versions)

Dependency has been changed to KotlinLangForge temporarily. I intend to revert back if KFF is updated. Or maybe I'll just package the kotlin libs myself, I'm getting tired of Forge kotlin libs.

Breaking changes in 0.7.x

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • ValidatedColor has a new presets feature. These presets will be displayed in a "sub-pane" to the right of the main color popup.
    • There are pre-defined presets based on MC color enums, or you can define your own presets using ValidatedColor#withColorPresets
  • New ValidatedNumber#setFormat extension function lets you define a custom DecimalFormat for your number settings
  • PopupWidgets can now have "child" layouts that appear as sub-panes either to the right or below the main popup.
    • Create a child layout with a pair of pushChildLayout and popChildLayout in the Builder.
    • This child layout can have completely different spacing, padding, and so on.
    • All the elements added to this child will be navigable alongside the main popup.

Changes

  • Configs marked with SaveType.SEPARATE can now be opened out of the world (if it's entries can be) without caring about permissions checking, because the clients version will be considered separately anyway
  • Deprecated the constructor of LayoutWidget in favor of a builder pattern. Migrate any custom LayoutWidget impls asap; removal scheduled for 0.8.0

Fixes

  • (1.21.6+) the Changes widget now properly displays its number of changes
  • (1.21.6+) popups properly blur the underlying screen content again
  • Fixed ValidatedCondition not passing widget size changes to it's delegate widget *

Fzzy Config 0.7.1

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.8 (10 versions)

Breaking changes in 0.7.0

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • New @IgnoreCommentsForDesc annotation. Use on your config class to have the translation parser ignore @Comment and @TomlComment for in-game descriptions.

Changes

  • Configs marked with SaveType.SEPARATE can now be opened out of the world (if it's entries can be) without caring about permissions checking, because the clients version will be considered separately anyway

Fixes

  • Fixed issue with config parser incorrectly ignoring transients in certain cases
  • Config GUI entries no longer show their tooltips from behind the header/footer
  • Config groups now scroll correctly when collapsed/opened
  • Fixed potential concurrency issue with config registration on Neoforge. All versions have the fix just in case.
  • Expressions now print their constants properly in "plain" format (0.0000003) vs (3E-7) so they properly back-parse their printed version.

Fzzy Config 0.7.0

· Fabric, Forge, NeoForge, Quilt · Minecraft 1.20.1–1.21.7 (9 versions)

Breaking changes in 0.7.0

  • ValidatedEnumMap is removed
  • Removed all methods and properties marked as Deprecated and for removal 0.7.0
    • SmallSpriteDecoration#<init>
    • SpriteDecorated#textureSet & textures is now a required override
    • SpriteDecoration#<init>
    • CustomButtonWidget#<init> & builder is now only non-override method for adding custom button
    • Removed ActiveButtonWidget
    • Removed TextlessActionWidget
    • DynamicListWidget.EntryPos and implementations made internal
    • PopupWidget position elements; LayoutWidget no longer inherits from the PopupWidget variant
    • Removed deprecated overrides of PopupController from PopupParentElement
    • SuggestionWindowListener and SuggestionWindowProvider moved out of internal sub-package
    • Removed ImmutableRelPos
    • RenderUtil#renderBlur
  • Throughout FzzyConfig Translatable.Result has been replaced with Translatable.ResultProvider. This affects EntrySearcher as well as Searcher.SearchContent

Additions

  • New Translatable.Name, Translatable.Desc, and Translatable.Prefix annotations for data generation of lang files
    • Corresponding ConfigApi.buildTranslations and ConfigApiJava.buildTranslations methods for hooking a config into a data generator
    • Also created a simple registered objects translation builder at ConfigApi.platform().buildRegistryTranslations Used for either RegistrySupplier objects built by a Registrar or Identifier used in a traditional registration system
  • Added ConfigScreenProvider, allowing for registering of custom screen implementations in place of the Fzzy Config built in
    • API Call registerScreenProvider added for registering your provider
  • afterClose event in PopupWidget
  • isPressed method in Relevant interface (which is used by FzzyKeybind and ValidatedKeybind), which allows for assertive checking for a key state, above the existing reactive response method relevant
  • Overhauled the error handling system in ValidationResult with a new ErrorEntry system and dramatically improved process flow for building complex errors and passing exceptions and other context information
    • Also introduced more functional methods like inmap, outmap, and bimap

Changes

  • Upgraded CustomMultilineTextWidget to handle click and hover events, as well as now implementing a custom MultilineText implementation
  • ValidatedField bails out of deserialization only on critical errors, now letting correction take its course more often
  • The Registrar system is no longer marked as experimental. Any further changes to the system will follow the standard released content deprecation and update system
  • Methods using the old error handling system of string lists are marked for removal 0.8.0
  • Slight improvements of overall memory footprint

Fixes

  • ConfigGroup.Pop properly pops multiple times if attached to one setting multiple times
  • Clicking off of a context menu into a slider properly updates the slider value
  • Search and Restore Defaults options in the context menu work again
  • ClickableTextWidget and CustomMultilineTextWidget now properly show hover events

See every release on Modrinth

For mod developers

You write a class. Fzzy Config writes the TOML, draws the screen, validates the values and handles the sync. There is no screen builder to implement and nothing to register beyond one call.

1. Add the repository and dependency

Fzzy Config lives on the author's own maven. The artifact is me.fzzyhmstrs:fzzy_config, with an underscore rather than a hyphen. Forge and NeoForge builds also need the Kotlin for Forge repository.

repositories {
    maven {
        name = "FzzyMaven"
        url = uri("https://maven.fzzyhmstrs.me/")
    }
    // Forge and NeoForge only
    maven { url = uri("https://thedarkcolour.github.io/KotlinForForge/") }
}

dependencies {
    // NOTE: underscore, not hyphen
    modImplementation("me.fzzyhmstrs:fzzy_config:$fzzyConfigVersion")
}

2. Write a config class and register it

Fields need to be public, non-final and non-static. Wrap one in a Validated type when you want bounds, choices or suggestions; leave it plain when you do not care.

class MyConfig : Config(Identifier.of(MOD_ID, "my_config")) {

    var enableFeature = true

    // bounded 0.0 to 10.0, corrected if the file says otherwise
    var speed = ValidatedDouble(5.0, 10.0, 0.0)

    // its own screen, with a breadcrumb back here
    var advanced = AdvancedSection()

    class AdvancedSection : ConfigSection() {
        @RequiresRestart
        var renderDistance = ValidatedInt(8, 32, 2)
    }
}

// reads the file, creates it if missing, registers screen and sync
val CONFIG = ConfigApi.registerAndLoadConfig(::MyConfig)

The docs on this site cover config classes, every validation type, every annotation and the extras that ship alongside. The licence is TDL-M, which permits use as a dependency but not bundling: no jar-in-jar, no Gradle include.

Read the docs API reference Source on GitHub

Common questions

What is the Fzzy Config mod?

Fzzy Config is a library mod for Minecraft Java Edition. It gives other mods their settings screens and config files. On its own it adds no blocks, items or gameplay, so you will not see anything new in game after installing it.

Do I need to install Fzzy Config?

Only if another mod asks for it. It is a dependency, like Fabric API. If a mod's page lists Fzzy Config as required, or the game refuses to start with a message naming fzzy_config, then yes. Otherwise there is nothing to gain from installing it by itself.

Which file should I download?

Match your Minecraft version first, then your mod loader. Fabric and Quilt use the same file. Forge and NeoForge use a separate one, marked +forge on 1.20.1 and +neoforge from 1.20.4 onward. The picker above does the matching for you.

Does Fzzy Config need to be on the server as well?

Yes. Fzzy Config is required on both client and server. Part of what it does is keep the two in agreement, so a server running mods that use it needs the jar in its mods folder too.

What else do I need to install alongside it?

Fzzy Config is written in Kotlin, so it needs a Kotlin language loader for your platform. On Fabric and Quilt that means Fabric API and Fabric Language Kotlin. On NeoForge for Minecraft 26.2 it is KotlinLangForge; on earlier NeoForge versions and on Forge 1.20.1 it is Kotlin for Forge. The download panel names the right ones for the file you picked.

How do I open a mod's config screen?

Through ModMenu on Fabric and Quilt, through Catalogue on Forge and NeoForge, or by typing the /configure command in game. Fzzy Config registers the screens itself, so mod authors do not have to.

Which Minecraft versions does Fzzy Config support?

Minecraft 1.20.1 through 26.2. That is 20 stable versions, every one of which has a download on this page, plus 14 snapshots and pre-releases that are published but not listed here. Note that 1.20.4 and 1.20.6 stopped receiving updates at version 0.5.9 and were dropped as of 0.6.0, so those two are still downloadable but frozen.

Minecraft crashes or the mod does not load. What now?

Check three things in order: that the Fzzy Config file matches your exact Minecraft version, that it matches your loader, and that the Kotlin loader it needs is installed as well. Most reports come down to one of those. If it still fails, the crash log will name the missing piece, and the author takes bug reports on GitHub.

Is Fzzy Config free, and is it safe?

It is free, and the full source is on GitHub under the Timefall Development Licence, Modified. Downloads on this page are the author's own published files, served straight from their official host.