Menu

Guidefor players4 min read

OptiFabric plus Fabric API 0.86.0+: why all your text turns into black squares

A specific version pairing breaks font rendering: OptiFabric with OptiFine on Fabric API 0.86.0 or newer turns every glyph in the game into a solid square. What causes it, which versions are safe, and why it was never fixed.

What the bug looks like

Every piece of text in the game renders as a solid square instead of a letter. Chat messages, item names, GUI labels, the F3 debug screen, sign text, all of it. Not missing text, not garbled text: every glyph replaced with the same blank box, as if the font atlas loaded but none of its characters did.

It shows up the moment the game finishes loading, not after some specific action, and it affects the vanilla font as well as any resource pack font. Players describe it exactly that way across four separate bug reports on OptiFabric's own GitHub: "all the text as squares," "text is squares," "font error," text that "gets squard."

The exact trigger

This happens specifically when running OptiFabric with OptiFine on Fabric API 0.86.0 or newer. It does not happen on OptiFine alone, and it does not happen on Fabric API without OptiFine installed. It is a three-way combination: the Fabric loader, Fabric API past a specific version, and OptiFabric's shim trying to hold OptiFine's rendering code together on top of it.

Reports against OptiFabric's issue tracker confirm the break on Fabric API 0.86.0, 0.86.1, 0.87.0, and 0.90.7, all on Minecraft 1.20.1, which is as far as OptiFabric's real support ever reached. Fabric API 0.85.0 is the last version confirmed not to trigger it.

Why it happens

Fabric API 0.86.0 shipped real changes to how it applies mixins to the game, including a new Model Loading API module that changed how model baking works under the hood. That is an ordinary API evolution from Fabric API's side, not a bug in it.

OptiFabric's whole job is patching OptiFine's closed-source rendering hooks onto Fabric's rendering pipeline, something OptiFine was never built to run on natively. It does this by intercepting other mods' mixins through a layer of intermediate mixin classes so OptiFine's code and Fabric's code can coexist without directly colliding. That shim assumed a mixin structure that Fabric API 0.86.0 changed. Once the assumption broke, the mixins responsible for font rendering stopped applying correctly, and every glyph came out as the fallback square instead of the character it was supposed to draw.

Two separate pull requests were opened against OptiFabric to address it. The first, titled Fix Fabric API 0.86.0+, targeted the Model Loading API conflict directly but ran into implementation problems and was closed. It was superseded by a second pull request that rewrote OptiFabric's mixin-patching system from scratch, dropping the old intermediate-mixin approach for direct bytecode-level patching. That second attempt tested successfully against Fabric API versions from 0.86.1 through 0.89.0. It never merged. It sat as a draft, and no released OptiFabric build ever shipped the fix.

The fix

Pin Fabric API to 0.85.0 on any instance running OptiFabric with OptiFine. Do not update it past that version. If your modpack manager or launcher pulls the latest Fabric API automatically, lock the version explicitly, since the newer builds will install without warning and the game will still start, just with unreadable text.

If another mod in your setup specifically requires a Fabric API feature added after 0.85.0, you have an unresolvable conflict: that mod, or OptiFabric plus OptiFine, not both. There is no later combination where all three work, because the fix that would have made that possible never shipped.

Why this belongs on a version-tracking site

This is not a fact you will find in either project's own documentation, because it belongs to neither project on its own. OptiFine's release notes describe OptiFine. Fabric API's release notes describe Fabric API. Neither one documents "these two specific version ranges do not work together," because from either side, that is someone else's compatibility surface, not theirs to write down.

That gap is exactly what a compatibility-tracking reference is for. "OptiFabric plus OptiFine breaks on Fabric API 0.86.0 and newer, use 0.85.0" is a fact about the intersection of three projects, sourced from bug reports and pull requests scattered across one repository's issue tracker, not from any changelog. It is precise, it is dated, and it will keep being true regardless of what either Fabric API or OptiFine ships next, because the shim that would have needed to keep up never got the fix merged.

The broader pattern

This is a concrete instance of the fragility covered in OptiFine's history and why Sodium, Lithium and Iris replaced it. That guide describes OptiFabric's eventual discontinuation as a structural consequence of the underlying model: a closed-source project's rendering hooks, held onto a loader they were never built for by a third-party shim, are only ever as stable as the last time someone volunteered to re-patch them.

This bug is that model failing in one specific, dated, reproducible way. Fabric API made an ordinary change. OptiFabric's shim did not account for it. The fix existed as a draft and was never merged. Two years later, the combination is still broken, because there was never a first-party reason for either side to fix it, only a volunteer maintainer's unfinished pull request. Sodium and Iris do not have this problem because they are built directly against Fabric API rather than shimmed onto it after the fact, which is a large part of why they are the current answer instead of OptiFine on Fabric.

Frequently asked

Which Fabric API versions actually break this?

0.86.0 and up, confirmed broken. Reports against OptiFabric's GitHub document the bug on 0.86.0, 0.86.1, 0.87.0, and 0.90.7, all on Minecraft 1.20.1. The last version confirmed to work is 0.85.0. If you are running OptiFabric with OptiFine, do not update Fabric API past 0.85.0.

Is this OptiFine's fault or Fabric API's fault?

Neither, really. Fabric API 0.86.0 shipped legitimate changes to how it applies mixins, including the new Model Loading API module. OptiFabric's shim, which patches other mods' mixins through a layer of intermediate mixins to make OptiFine's closed rendering hooks coexist with Fabric's rendering pipeline, was not updated to match. Fabric API did nothing wrong by its own users' standards. OptiFabric is the piece sitting between two systems that stopped agreeing with each other.

Has it been fixed?

No. A pull request titled Fix Fabric API 0.86.0+ was opened against OptiFabric, then closed and superseded by a second pull request that rewrote the mixin-patching system entirely. That second pull request tested working against Fabric API versions from 0.86.1 through 0.89.0, but it was never merged and stayed in draft. There is no released OptiFabric build where this is fixed.

Does downgrading Fabric API break other mods?

Possibly. Fabric API 0.85.0 predates the Model Loading API module and other changes that later mods may depend on. If something else in your modpack specifically needs a newer Fabric API, you have a straight conflict: that mod versus OptiFabric plus OptiFine. There is no combination of versions where all three work.

Does this affect Sodium and Iris instead of OptiFine?

No. This bug is specific to OptiFabric's mixin shim conflicting with Fabric API's mixin changes. Sodium and Iris are built natively against Fabric API rather than shimmed on top of it, so they update alongside it without this class of problem. That is one of the concrete reasons they replaced OptiFine on Fabric; see the related guide below.

Is OptiFabric still being developed?

Barely. Its GitHub repository has open requests going back to 2025 asking for support past Minecraft 1.20.4, still unanswered as of this writing. The project is not formally archived, but it has not kept pace, and a two-year-old font rendering bug that was never merged is a symptom of that, not an exception to it.

Space NodePartner

Host Minecraft servers

Deploy a Minecraft server in under a minute. Installed, tuned and ready to play.

  • Instant deployment
  • Automatic updates
  • Ryzen CPUs
  • NVMe SSD
Deploy a serverFrom €0.90 per GB

Referenced on this site

Last reviewed 2026-08-05. Version data on this site updates automatically; this guide is reviewed by hand when the ecosystem changes.

Is this information wrong or missing something? .