JelloUI Documentation

JelloUI public API documentation for Minecraft Fabric addon developers.

View the Project on GitHub yoimasama/jelloui-docs

Addon lifecycle and entry point

Build setup

JelloUI 1.0.1+26.2 targets Minecraft 26.2, Java 25 and Mojang official names. Use net.fabricmc.fabric-loom and the standard Gradle configurations. Do not add Yarn mappings, modImplementation or a remapJar workflow.

This repository’s sibling projects compile against JelloUI with:

dependencies {
    implementation project(':')
}

The current build does not publish a repository coordinate for third-party consumers. When developing outside this repository, place the JelloUI jar in libs/ and keep it as a prerequisite mod rather than bundling it:

dependencies {
    compileOnly files('libs/jelloui-1.0.1+26.2.jar')
    runtimeOnly files('libs/jelloui-1.0.1+26.2.jar')
}

Declaring an addon

A mod becomes a JelloUI addon by implementing io.github.sst.remake.api.JelloAddonInitializer and declaring the class under the jelloui:addon entry point key in its fabric.mod.json:

{
  "environment": "client",
  "depends": {
    "jelloui": ">=1.0.1+26.2"
  },
  "entrypoints": {
    "jelloui:addon": [
      "com.example.ExampleAddon"
    ]
  }
}

JelloUI resolves every jelloui:addon entry point after its own bootstrap is finished and the JelloApi singleton is installed. By the time initializeJelloAddon(JelloApi api) runs, every registry is ready and you can register anything the API exposes.

Do not register JelloUI content from a generic Fabric client entry point. There is no ordering guarantee for client entry points relative to the JelloUI bootstrap. The jelloui:addon entry point exists precisely so addon initialisation never races the platform.

Implementing the initializer

import io.github.sst.remake.api.JelloAddonInitializer;
import io.github.sst.remake.api.JelloApi;
import io.github.sst.remake.api.registration.Owner;
import io.github.sst.remake.api.version.ApiVersion;

public final class ExampleAddon implements JelloAddonInitializer {
    @Override
    public void initializeJelloAddon(JelloApi api) {
        ApiVersion required = ApiVersion.VERSION_1_3_0;
        if (!api.version().isCompatibleWith(required)) {
            throw new IllegalStateException(
                    "JelloUI API " + required + " or a compatible version is required");
        }

        Owner owner = JelloApi.owner("example", "Example Addon");
        // ... register categories, modules, HUD widgets, keybinds, ...
    }
}

The class must be cheap to construct: Fabric instantiates it reflectively. Keep all registration work inside initializeJelloAddon.

Failure handling

JelloUI catches and logs a RuntimeException thrown by one addon’s entry point, then continues starting the remaining addons. The runtime does not automatically compare an addon’s required API version; perform the ApiVersion check shown above before registration. Once inside the API, callbacks invoked by JelloUI use the isolation rules described in error isolation.