UI for Beat Saber mods

Reactive

Write the view in C#, next to the code that drives it. Values that change live in states, and whatever reads a state follows it, with no markup to parse and nothing to refresh by hand.

Counter.cs
var count = Remember(0);
new Label {
sText = count.Map(x => $"{x}")
},
new BsPrimaryTextButton {
Text = "+1",
OnClick = () => count.Value++
}
A label counting up as a +1 button is clicked

A step up from BSML

Everything BSML makes you wire by hand, Reactive handles for you. Each of these opens the part of the introduction that shows how.