WebLib — HTML/CSS/JS GUIs for Minecraft NeoForge 1.21
WebLib (web_lib) is a lightweight library mod that lets mod developers build fully-featured Minecraft GUI screens using standard HTML and CSS, with a simple JavaScript-to-Java callback bridge — all rendered natively via Minecraft's own GuiGraphics, with zero external browser dependencies.
Stop wrestling with Minecraft's widget system. Write your mod's menus the way web developers write interfaces.
Features
- HTML rendering — Supports a rich set of elements:
div, p, h1–h6, span, button, input, select, img, ul/ol/li, pre, hr, code, and more.
- Full CSS engine — Cascade, inheritance, specificity, and a broad property set including:
- Box model (
margin, padding, border, width, height)
- Flexbox (
flex-direction, justify-content, align-items, flex-wrap, gap)
- Colors (
#RGB, #RRGGBB, #RRGGBBAA, rgb(), rgba(), named colors)
- Text styling, overflow, z-index, relative positioning, and more
- Selectors: type, class, ID, attribute, pseudo-classes (
:hover, :active, :focus, :nth-child, :not, etc.), and all combinators
- JavaScript bridge — Fire Java callbacks directly from HTML
onclick/onchange events. Pass arguments, access and mutate the DOM from Java.
- Built-in JS functions —
alert(), navigate(), reload(), setStyle(), setInnerText(), toggleClass(), setVar(), console.log() — no registration needed.
- Multi-page navigation — Build multi-screen UIs with back ◀ / forward ▶ / reload ↺ browser chrome, or go headless.
- External CSS & JS files — Reference stylesheet and script files from your mod's assets using the standard
namespace:path ResourceLocation convention.
- Resource-based pages — Load HTML pages directly from your mod's resource pack with
WebLibApi.openPageFromResource(...).
- Advanced
WebPage API — Build, inject CSS, mutate, and layout pages programmatically before opening them.
For Mod Developers
Adding WebLib to your mod is a single dependency declaration:
[[dependencies.yourmod]]
modId = "web_lib"
type = "required"
versionRange = "[1.0,)"
ordering = "AFTER"
side = "CLIENT"
Then open any screen with a single call:
WebLibApi.openPage("<html><body><h1>Hello, Minecraft!</h1></body></html>");
Register Java functions that HTML can call:
WebLibApi.registerFunction("myMod.openShop", (args, ctx) -> {
Minecraft.getInstance().tell(() -> Minecraft.getInstance().setScreen(new MyShopScreen()));
return null;
});
Requirements
- Minecraft: 1.21
- Mod Loader: NeoForge
- Side: Client-only
- License: Apache 2.0

Source Code
Available on GitHub under the Apache 2.0 License. Contributions welcome!
