Skip to content

Rubric Frontend Comparison

Oliver Yasuna edited this page Jul 1, 2026 · 2 revisions

Rubric — Frontend comparison: YACL vs Cloth

Both YACL and Cloth are supported first-class. Which one you prefer as a user is a matter of taste — they render different screens for the same underlying config. Which one a mod pack ships is often decided by which is already a transitive dep.

This page is meant for:

  • Users deciding which one to install.
  • Mod pack authors deciding which to ship.
  • Rubric hackers thinking about which frontend to extend for a given feature.

The short answer

  • If you have no preference, install YACL. It's what Rubric's AUTO preferredFrontend picks first, it's actively maintained, and it's what most players are likely to already have.
  • Install Cloth if you specifically prefer the older Forge-style aesthetic, if a mod pack already depends on it, or if you care about the niches Cloth handles better (see the table).
  • You can install both. Rubric picks whichever gui.preferredFrontend requests. AUTO picks YACL when both are present.

Positioning

YACL — modern, opinionated, sleek. Built ground-up in the last few years. Search bar in every screen. Category tabs across the top. Sliders and dropdowns feel more Minecraft 1.20-and-later. Actively iterating; occasional API churn between versions.

Cloth Config — older, born as the Fabric port of the Forge Config API GUI. Category list on the left with hierarchical sub-entries. More entry types out of the box (color, keybinding, text description, sub-categories that actually recurse). API is stabler over time.

Both are drop-in replacements for each other from a Rubric-user perspective — every annotation Rubric offers is honored on both, with the exceptions noted below.

Feature matrix

Matrix reads: how well does the Rubric-on-X adapter cover each API feature?

Legend:

  • ✅ Full support.
  • ⚠️ Partial or degraded (see notes).
  • ❌ Not supported; typically rendered as a disabled placeholder pointing to the on-disk file.
Feature YACL Cloth Notes
boolean toggle
int/long/float/double field
Bounded numeric slider (@Range)
String field
String dropdown from @OneOf Cloth uses StringDropdownMenu, disallows out-of-list values.
Enum dropdown
Color (@Widget(COLOR)) Both bind an RGB int under the hood.
Comments (@Comment) as tooltip/description ✅️
Reload-tier / sync-scope labels ([restart, server]) Both honor gui.showMetadataSuffixes.
@RequiresRestart / @Reload.RESTART ⚠️ ⚠️ Currently shown as a [restart] suffix. Both frontends have a native "requires restart" flag we haven't wired yet.
@Widget.allowInvalid = false Neither adapter blocks Save & Exit on invalid staged values today. Cloth's setErrorSupplier makes this a one-file change; YACL's would need more work. Tracked.
Nested SchemaCategory (deep tree) ⚠️ YACL groups only nest one level, so deeper tiers are flattened into one group per branch with dotted names. Cloth's SubCategoryListEntry recurses cleanly.
List<primitive> / List<String> Disabled placeholder. YACL has ListOption, Cloth has NestedListListEntry; wiring is future work.
List<POJO> of complex objects Placeholder in both. Cloth's list primitives will make this materially cheaper when we get to it.
Map<String, V> Placeholder in both. Neither library ships a first-class MapOption.
Codec-mediated scalars (UUID, Instant, Duration, ResourceLocation) ⚠️ ⚠️ Rendered as String via toString round-trip. Parse failure surfaces only on save.
@Sync.SERVER / @Sync.COMMON while connected — disable client edit Neither adapter disables the widget when the client is connected but not permitted. Server rejects the edit silently. Cloth's Requirement API makes this a natural fit when it lands.
Search bar Both frontends have a search bar; nothing Rubric-specific.

Where each frontend shines

Pick YACL if:

  • You like the modern MC 1.20+ aesthetic.
  • You're a player already running YACL for other mods (very common — YACL is a widespread transitive dep).
  • The Rubric configs you care about are shallow (top-level entries + one level of sub-categories).

Pick Cloth if:

  • You prefer the older Forge-style two-pane layout.
  • Your Rubric configs have deep nested categories (Cloth renders them cleanly; YACL flattens them).
  • You need frontend-side error hinting per entry now — Cloth's setErrorSupplier is one wire-up away from full support for @Pattern, @NotNull, and the allowInvalid = false contract.
  • You need conditionally-disabled entries — Cloth's Requirement API is a natural home for @Sync.SERVER-when-connected behavior.

In multi-user / mod pack contexts

If your pack ships Rubric:

  • If YACL is already a dep of anything else you ship, leave it. AUTO picks it up.
  • If Cloth is a dep of anything else, leave it. Set gui.preferredFrontend = CLOTH in a bundled default Rubric.toml if you want to force it (otherwise AUTO picks YACL when both are present, since YACL leads AUTO_PRIORITY).
  • Neither installed: Rubric still works. Users get the NoFrontendScreen placeholder pointing at the file on disk.

Rubric-side plumbing

Both adapters share a common utilities layer (ScreenProviders, ScreenBuildContext) so the frontend-specific code lives in YaclScreenProvider and ClothScreenProvider — each about 300 lines of "walk the schema, emit widgets." A future third frontend (e.g. an owo-ui port) would follow the same shape, but see Frontends for the SPI.

Follow the gaps

The feature matrix above is a moving target. Detailed per-frontend gaps and fillability tags live in the repo:

Both issues describe the same gap categories from each frontend's perspective, so you can see at a glance which frontend to extend for a given feature.

Clone this wiki locally