-
Notifications
You must be signed in to change notification settings - Fork 0
Rubric Frontend Comparison
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.
- If you have no preference, install YACL. It's what Rubric's
AUTOpreferredFrontend 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.preferredFrontendrequests. AUTO picks YACL when both are present.
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.
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. |
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
setErrorSupplieris one wire-up away from full support for@Pattern,@NotNull, and theallowInvalid = falsecontract. - You need conditionally-disabled entries — Cloth's
RequirementAPI is a natural home for@Sync.SERVER-when-connected behavior.
If your pack ships Rubric:
- If YACL is already a dep of anything else you ship, leave it.
AUTOpicks it up. - If Cloth is a dep of anything else, leave it. Set
gui.preferredFrontend = CLOTHin a bundled defaultRubric.tomlif you want to force it (otherwiseAUTOpicks YACL when both are present, since YACL leadsAUTO_PRIORITY). - Neither installed: Rubric still works. Users get the
NoFrontendScreenplaceholder pointing at the file on disk.
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.
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.
Rubric
Reference
Runtime
GUI
Help