


A native Options screen UI library for SULFUR BepInEx mods.
This library allows other modders to register custom pages inside the game's native Options screen and build native-style UI for mod configuration, debug panels, help pages, and other in-game tools.
This is a library mod.
It usually does nothing by itself. Install it only if another mod requires it.
Source code and full documentation are available on GitHub:
https://github.com/ryuka-dev/SULFUR-Native-UI-Lib
The GitHub documentation is the latest source of truth for API usage, examples, performance rules, themed groups, localization, and config editor patterns.
Install this mod with BepInEx.
Place the DLL under:
BepInEx/plugins/SULFURNativeUILib/
Recommended structure:
BepInEx/plugins/SULFURNativeUILib/
└─ SULFUR Native UI Lib.dll
The source code is available here:
https://github.com/ryuka-dev/SULFUR-Native-UI-Lib
The repository contains only original library source code and documentation. It does not include SULFUR game files, Unity assemblies, BepInEx binaries, paid assets, or decompiled game source.
This is a developer library. End users only need it when another mod lists it as a dependency.
SulfurSettingHandle.AddSettingToggleEx, AddSettingTextEx, AddSettingNumberEx, and AddSettingCycleEx.AddSettingToggle, AddSettingText, AddSettingNumber, and AddSettingCycle APIs.Fixed
Changed
Added
AddInlineTextInput / AddInlineNumberInput): the label and input field sit on the same line, matching the vanilla Options layout, with optional password masking.Fixed
Fixed
Added
SulfurPopupApi.ShowBanner / HideBanner): a single centered, persistent on-screen message that can appear during normal gameplay and combat, styled to match the game's UI. It is display-only — it never pauses the game, captures input, or changes the cursor, so the calling mod keeps full control of any keypress.Added
SulfurToastApi.Show): short messages that slide into the top-right corner during gameplay, hold briefly, then animate away. Supports an optional title and custom duration, and multiple toasts stack with smooth slide/fade animations. Display-only and passive — it never pauses the game, captures input, or changes the cursor.Added
AddButtonRow(...) for mod developers: lays several small buttons out left-to-right in one row instead of one stacked row per button. AddSmallButton is unchanged for the single-button case.AddTextRow returns a SulfurTextHandle, AddButtonRow returns per-button SulfurButtonHandles, and AddList returns a SulfurListHandle for refreshable sections.Changed
AddButtonRow now returns IReadOnlyList<SulfurButtonHandle> instead of void. It was introduced in this same release and had not shipped before, so no released API is affected.Fixed
minWidth argument and the label-based auto-size had no effect on the rendered width, so every small button stayed at a fixed 120px and labels longer than ~10 characters were cut off with an ellipsis (e.g. Open-source repo → Open-sourc…). Buttons now size to their label, and an explicit minWidth widens them as intended.