Server Tweaks / VS RmlUi

Tags:
UI
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:

Simple Voice Chat

v1.2.7

VS Director

v1.0.0-v1.0.2

Simple Voice Chat: Voice Changer

v0.3.0

VS Director Client

v1.0.2
   

 

 

 

RmlUi for Vintage Story

中文 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.

Features

  • 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.

Using VSRmlUi in a mod

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.

Folder browser

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.

Building

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.

Repository layout

  • src/VSRmlUi/ — managed mod and public API
  • native/ — C++ RmlUi bridge
  • examples/ — example Vintage Story mod
  • tests/ — native, packaging, and integration checks
  • licenses/ — notices and licenses for bundled third-party components

License and notices

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 IdentifierFor Game version Downloads Released Changelog Download 1-click mod install*
1.0.6 vsrmlui
1.22.0 - 1.22.7
70 Sep 28th at 5:45 PM vsrmlui_1.0.6.zip 1-click install

中文:

  • 增加音频分析、加载动画、节点编辑器、旋钮、开关、MIDI/OSC 接口、VR UI 平面、日期选择器和 3D 方向指示器预设及预览。
  • 更新滑块、复选框和下拉菜单样式;增加 Tabler 图标与点击反馈。
  • 合并经过 ABI Smoke Test 检查的 Windows x64、Linux x64、macOS x64 和 macOS ARM64 原生产物。原生 ABI 仍为 2。

English:

  • Added presets and previews for audio analyzers, loading animations, node editors, knobs, switches, MIDI/OSC interfaces, VR UI panels, date pickers, and 3D orientation indicators.
  • Updated slider, checkbox, and dropdown styles; added Tabler Icons and click feedback.
  • Integrated ABI smoke-tested native builds for Windows x64, Linux x64, macOS x64, and macOS ARM64. The native ABI remains at 2.
1.0.5 vsrmlui
1.22.0 - 1.22.7
40 Sep 27th at 7:30 AM vsrmlui_1.0.5.zip 1-click install

修复游戏未索引 vsrmlui:icons/ 资源类别
增加真实游戏资源管理器的图标索引回归检查

1.0.4 vsrmlui
1.22.0 - 1.22.7
25 Sep 26th at 12:26 PM vsrmlui_1.0.4.zip 1-click install
  • 重做默认工具 UI 主题,新增黑灰亮蓝、夜间、日间暖棕和高对比配色。
  • 新增工作台布局和顶部标签页工具窗口模板。
  • 统一控件高度、按钮对齐、图标按钮悬停状态和弹窗样式。
  • 启用 RmlUi SVG 插件,固定使用 LunaSVG 3.5.0。
  • 内嵌 19 个 Tabler outline SVG 图标,并提供稳定资源路径和 RmlIcons C# 常量。
  • 新增颜色弹窗、文件夹弹窗、输入诊断和各主题的渲染预览。
  • 增加 ImGui、Tabler 和 LunaSVG 的许可证说明。
  • 原生 ABI 保持为 2,但由于启用了 SVG 插件,所有平台 native 库均已重新构建。
  • 完成 Windows、Linux、macOS 四平台 native artifact 校验。

 

  • Redesigned the default tool UI theme with graphite, night, warm brown day, and high contrast variants.
  • Added workbench and top-tab tool window templates.
  • Unified control heights, button alignment, icon button hover states, and modal dialog styling.
  • Enabled the RmlUi SVG plugin with pinned LunaSVG 3.5.0 support.
  • Bundled 19 Tabler outline SVG icons with stable asset paths and RmlIcons C# constants.
  • Added themed previews for the workbench, tabbed tools, color dialog, folder dialog, modal dialog, and input diagnostics.
  • Added license notices for ImGui, Tabler, and LunaSVG.
  • Kept native ABI version 2, while rebuilding all platform native libraries for SVG support.
  • Validated native artifacts for Windows, Linux, and macOS targets.
1.0.3 vsrmlui
1.22.0 - 1.22.7
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 FontSettings uses system font aliases (such as Microsoft YaHei Light).

1.0.2 vsrmlui
1.22.0 - 1.22.7
90 Sep 22nd at 6:41 PM vsrmlui_1.0.2.zip 1-click install
  • 重构字体系统:优先使用 Vintage Story 游戏字体,缺字时通过 SkiaSharp 动态加载系统字体。
  • 支持字体资产重扫描、文件名大小写差异、运行时字体覆盖,以及动态文本、输入框和剪贴板内容的缺字回退。
  • 支持 TTC/OTC 字体集合及非零 face index。
  • 移除模组包内所有字体文件及 Noto CJK 许可证文件。
  • Native ABI 从 1 升级至 2,新增 vr_font_face 接口并保留 vr_font 兼容入口。
  • RmlUi 缺字回退现在可按 Unicode 字符动态请求系统字体。
  • Native manifest 新增 bridge 源码指纹校验,并加强版本、RmlUi 修订版、SHA-256 和 smoke test 验证。
  • 统一版本号至 1.0.2,更新发布包:
    • vsrmlui_1.0.2.zip
    • vsrmlui-test_1.0.2.zip
  • 增加字体加载、系统字体回退、TTC、动态文本、中文渲染及 ABI 2 回归测试。
  • 增加旧 native/managed manifest 和残留字体文件的打包拒绝检查。
  • 更新 Windows、Linux 和 macOS 构建与发布流程。

升级注意

  • 必须同步替换 win-x64、linux-x64、osx-x64 和 osx-arm64 的 native 文件。
  • ABI 1 native 文件不能与 VSRmlUi 1.0.2 混用。
  • Linux 用户如需中文、日文或韩文显示,请确保系统安装对应字体,例如 Noto CJK。
  • 如果系统缺少目标字符的字体,VSRmlUi 会显示缺字并记录一次警告。

 

  • Redesigned the font system to prefer Vintage Story game fonts and dynamically load system fonts through SkiaSharp for missing glyphs.
  • Added support for font asset rescanning, filename casing differences, runtime font overrides, and missing-glyph fallback for dynamic text, text inputs, and clipboard content.
  • Added TTC/OTC font collection support with non-zero face indices.
  • Removed all bundled font files and the Noto CJK license file from mod packages.
  • Upgraded the native ABI from 1 to 2, added the vr_font_face entry point, and retained vr_font as a compatibility entry point.
  • Updated the RmlUi missing-glyph fallback to dynamically request system fonts by Unicode code point.
  • Added bridge-source fingerprint validation to native manifests, with stricter validation for versions, RmlUi revision, SHA-256 hashes, and smoke tests.
  • Unified the release version to 1.0.2 and updated the release packages:
    • vsrmlui_1.0.2.zip
    • vsrmlui-test_1.0.2.zip
  • Added regression coverage for font loading, system font fallback, TTC faces, dynamic text, Chinese glyph rendering, and ABI 2.
  • Added packaging checks that reject stale native/managed manifests and leftover font files.
  • Updated Windows, Linux, and macOS build and release workflows.

Upgrade Notes

  • All native files for win-x64, linux-x64, osx-x64, and osx-arm64 must be replaced together.
  • ABI 1 native binaries must not be mixed with VSRmlUi 1.0.2.
  • Linux users who need Chinese, Japanese, or Korean text should ensure that suitable system fonts, such as Noto CJK, are installed.
  • If no system font covers a requested character, VSRmlUi displays a missing glyph and logs one warning.
1.0.1 vsrmlui
1.22.0 - 1.22.7
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
1.22.0 - 1.22.7
12 Sep 18th at 5:42 AM Empty vsrmlui_1.0.0.zip 1-click install

Disclaimer

By downloading a mod you consent to our Terms of Use.

We tell you this specifically because we want to make sure you are aware that we cannot validate every mod, and you are responsible for any damages you might incur by installing or loading mods.

This prompt will not be shown to you again (for the current browser session) if you proceed.


4 Comments (oldest first | newest first) (threaded | flat)

HansJack , Sep 19th at 1:31 AM

On Linux systems, font loading may fail. I have fixed this issue; please wait for the update.

YangWenLi, Sep 18th at 10:44 PM

Cool!

HansJack , Sep 20th at 5:35 PM
@YangWenLi: 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.😋😋😋