Description
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
- Box model (
- JavaScript bridge — Fire Java callbacks directly from HTML
onclick/onchangeevents. 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:pathResourceLocation convention. - Resource-based pages — Load HTML pages directly from your mod's resource pack with
WebLibApi.openPageFromResource(...). - Advanced
WebPageAPI — 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!



