Server Tweaks / VS RmlUi
- Tags:
- Author:
- HansJack
- Side:
- Both
- Created:
- Sep 18th at 3:22 AM
- Last modified:
- Sep 28th at 5:45 PM
- Downloads:
- 352
-
Recommended download (for Vintage Story 1.22.0 - 1.22.7):
vsrmlui_1.0.6.zip 1-click install
Welcome, traveler of the modding community.
I’m the founder of the unofficial Chinese community for Vintage Story.
Our community is built on Discourse. In the future, we plan to provide player-driven localization support, with the hope of helping break down language barriers, allowing more players in the Chinese-speaking community to discover and join Vintage Story, and contributing to the game’s growth in the Chinese region.
The community was founded on March 26, 2026, and has now grown to more than 1,600 members. Due to financial difficulties within my family, everything related to the community has been maintained through my own efforts and the support of the community. I have spent countless days and nights developing related projects and preparing for a 100-player game simulation project planned for the future.
However, circumstances change. Due to changes in my personal situation, I can now only continue maintaining the community itself and its server-related projects. I will no longer provide maintenance or technical support for players outside the Chinese community.
If you are currently using any of my previous projects, please consider switching to an alternative project so that you can continue to receive active maintenance, updates, and support. I apologize for any inconvenience this may cause, and I sincerely thank everyone who has used and supported my projects along the way.
RmlUi interface framework for Vintage Story mods. Provides RML/RCSS documents and a managed C# API.
This project is currently being developed primarily for the VS Director UI redesign, with a focus on complex replay-editing interfaces and tool panels. It has already produced very promising results.
The project is categorized under Games Mods so that other mod developers who need to build complex interfaces can also try it for their own projects.
The project has only recently been released and is still in the early stages of development. Only part of the planned functionality has been implemented so far, so some areas may still be incomplete or subject to change.
This project is suitable for:
- Developers who are willing to try an early-stage project and are comfortable compiling, debugging, and troubleshooting it themselves.
- Mod authors who plan to build polished, complex UIs such as advanced settings pages, tool panels, or replay editors, such as VS Director.
- Developers who would like to contribute improvements or fork the project.
Mods currently using the RmlUi project:
| v1.2.7 | |
| v1.0.0-v1.0.2 | |
| v0.3.0 | |
| v1.0.2 | |
中文 README · Platform notes · Validation record
VSRmlUi is a client-side UI foundation for Vintage Story. It exposes RmlUi documents through a small C# API, so mods can build windows, modal dialogs, and HUDs with RML and RCSS.
The current release is 1.0.2, targeting Vintage Story 1.22, .NET 10, and OpenGL 3.3+. Native loading and build scripts support Windows, Linux, and macOS. The merged package contains win-x64, linux-x64, osx-x64, and osx-arm64; the official Vintage Story Linux client has no ARM64 distribution, so Linux ARM64 native is not packaged.
- Load RML from mod assets or strings and manage documents independently.
- Window, modal, and HUD display modes with focus, mouse, keyboard, and Escape handling.
- CSS-like styling through RCSS, localization through Vintage Story language keys, and shared font/image caches.
- UTF-8 and Unicode input, including clipboard operations provided by the game.
- Native RmlUi integration with managed lifetime and stale-handle checks.
Add the dependency to modinfo.json:
"dependencies": {
"vsrmlui": "1.0.2"
}
Reference artifacts/sdk/VSRmlUi.dll with Private set to false, and target the same .NET version as the game.
For universal mods such as VS Director, install the RmlUi dependency on both the client and server. RmlUi declares Universal and requiredOnClient: true so it appears in the client's missing-mod download list when joining a server; declaring dependencies alone does not add it to that download list. Automatic downloads also require the matching version to be available on the mod database. The UI runtime starts only on the client; requiredOnServer: false lets other client-only mods use it without a server installation.
The managed release version and native artifacts are tracked independently. A commit that changes only managed code, tests, or documentation may still run the native job because of the current CI path filters, but it does not require new native files. Existing native artifacts remain valid while native/, the C ABI, linked dependencies, target architectures, and the pinned upstream RmlUi revision are unchanged. Rebuild native artifacts when any of those inputs change. Release 1.0.2 is based on commit ddaa4b51b6b80f6b9d7c236e56c99c1d03274f0e; this release removes the bundled Noto font, adds runtime system-font fallback and TTC face-index support, and raises the native ABI to 2, so all four native artifacts must be rebuilt.
The package contains no font files. Startup first uses the game's font assets; when a glyph is missing, SkiaSharp finds a local system font and passes its data to RmlUi in memory. Linux installations without a font covering the requested language log one actionable warning and render the glyph as missing until the client is restarted after installing a suitable font such as Noto CJK.
A minimal client-side example is:
using VSRmlUi;
var ui = api.ModLoader.GetModSystem<RmlUiModSystem>().Service;
if (ui is null) return;
using var page = ui.LoadDocument("mymod", "mymod:dialog/settings.rml");
page.GetElementById("save")!.On("click", _ =>
{
var name = page.GetElementById("name")!.Value;
page.GetElementById("status")!.Text = $"Hello, {name}";
});
page.Show();
All UI operations must run on the client thread. Use api.Event.EnqueueMainThreadTask when a background task needs to update a document. See the Chinese README and examples/ for the complete API and resource layout.
RmlControls.ColorPicker and BindColorPicker provide an inline swatch and hex field. Clicking the swatch opens a classic dark color dialog built entirely in RmlUi: 48 basic colors, 16 custom slots, draggable hue/saturation spectrum and luminance strip, synchronized RGB/HSL/HEX fields, alpha slider, and original/new previews. OK commits the draft; Cancel or Escape discards it. Custom slots are saved separately in ModConfig/vsrmlui-colors.json. Pass allowAlpha: false for RGB-only fields, or use RmlColorDialog.Show(parent, hex, accepted, allowAlpha) directly. The optional dialogOpened callback exposes the child document for host window-stack integration. No Windows native dialog is invoked.
RmlFolderDialog.Show(parent, api, initialPath, path => config.OutputDirectory = path) opens a local folder picker built with Rml UI. It supports drives, the user directory, parent navigation, typed addresses, and subfolders. Directory enumeration runs in the background and displays at most 2,000 entries per folder. Unreadable directories cannot be selected. Confirmation returns an absolute path; cancellation or Escape leaves the caller's value unchanged. Closing the parent also closes the picker. The picker selects existing folders and does not move files or persist configuration.
Requirements: Python 3.10+, .NET 10 SDK, CMake 3.24+, and a native toolchain. The build expects a local Vintage Story installation and a checkout of the pinned RmlUi source revision.
Windows:
./build.ps1 -GameDirectory E:/vintagestory/Vintagestory -RmlUiSource E:/vintagestory/RmlUi
Linux or macOS:
python3 build.py --game-directory /path/to/game --rmlui-source /path/to/RmlUi
The build creates artifacts/vsrmlui_1.0.2.zip after all native libraries are available. A successful example build also creates artifacts/vsrmlui-test_1.0.2.zip. Install the main mod and then the test mod; press Ctrl+F9 (use the modifier shown by the game on macOS) in the client to open the input diagnostics window. It includes single-line and multiline text, number/select/checkbox/range controls, and an event log for IME committed text, AltGr, emoji, paste, and editing shortcuts.
The scripts build the native bridge, managed mod, example, tests, and SDK. Packaging produces artifacts/vsrmlui_1.0.2.zip only when all required native libraries are available. Platform-specific CI and bundling details are documented in PLATFORMS.zh-CN.md.
src/VSRmlUi/— managed mod and public APInative/— C++ RmlUi bridgeexamples/— example Vintage Story modtests/— native, packaging, and integration checkslicenses/— notices and licenses for bundled third-party components
The release packages include COPYRIGHT.txt, the project MIT license, and the complete licenses/ directory, including third-party attribution and license texts.
Original VSRmlUi code is released under the MIT License © 2026 VSCN-Studio. RmlUi, FreeType, GLAD, and Khronos headers are distributed under their respective licenses; see licenses/THIRD-PARTY.md and the files in licenses/ for required notices.
Vintage Story is a trademark of Anego Studios. This project is an independent mod library and is not affiliated with or endorsed by Anego Studios.
Copyright (c) 2026 VSCN-Studio.
| Mod Version | Mod Identifier | For Game version | Downloads | Released | Changelog | Download | 1-click mod install* |
|---|---|---|---|---|---|---|---|
| 1.0.6 | vsrmlui | 70 | Sep 28th at 5:45 PM | vsrmlui_1.0.6.zip | 1-click install | ||
|
中文:
English:
| |||||||
| 1.0.5 | vsrmlui | 40 | Sep 27th at 7:30 AM | vsrmlui_1.0.5.zip | 1-click install | ||
|
修复游戏未索引 vsrmlui:icons/ 资源类别 | |||||||
| 1.0.4 | vsrmlui | 25 | Sep 26th at 12:26 PM | vsrmlui_1.0.4.zip | 1-click install | ||
| |||||||
| 1.0.3 | vsrmlui | 36 | Sep 25th at 3:44 PM | vsrmlui_1.0.3.zip | 1-click install | ||
|
修复 Linux/macOS 数字键盘输入数字和小数点时可能误触发导航键的问题;修复 FontSettings 使用系统字体别名(如 Microsoft YaHei Light)时的字体查找问题。 Fixed an issue on Linux/macOS where entering numbers or decimal points using the numeric keypad could accidentally trigger navigation keys; fixed font lookup issues when | |||||||
| 1.0.2 | vsrmlui | 90 | Sep 22nd at 6:41 PM | vsrmlui_1.0.2.zip | 1-click install | ||
升级注意
Upgrade Notes
| |||||||
| 1.0.1 | vsrmlui | 79 | Sep 18th at 7:22 PM | vsrmlui_1.0.1.zip | 1-click install | ||
|
修复加入服务器时,RmlUi 因被标记为客户端可选而未进入缺失模组下载清单的问题。 Fixed RmlUi being omitted from the missing-mod download list when joining a server because it was marked as optional on clients. | |||||||
| 1.0.0 | vsrmlui | 12 | Sep 18th at 5:42 AM | Empty | vsrmlui_1.0.0.zip | 1-click install | |









On Linux systems, font loading may fail. I have fixed this issue; please wait for the update.
Cool!
Have you considered using VS RmlUi in your project? It’s still in the early stages, so it’s missing some features, and compatibility and cross-platform support are still being improved. However, if your project needs a complex, modern, application-style UI, I think it’s one of the most promising UI frameworks currently available for Vintage Story, especially for things like advanced settings, tool panels, and editors.😋😋😋
I tend to make all my own dependencies, but I always support these sort of porjects. Best of luck!