Before you start
1
Open or find an issue
Describe the bug or the feature first. Large changes SHOULD be agreed on before you write code.
2
Branch off dev
The default branch is
dev. Name branches <type>/<issue>-<short-description>, such as feat/205-character-slot-selection.3
Follow the conventions
Read Conventions and match the code around your change.
4
Pass both checks
LuaLS strict check with zero problems, and every test suite. See Testing.
5
Open a pull request
The title MUST be a Conventional Commit, such as
feat(accounts): add loan accounts. CI checks it.Design rules that never bend
Headless
Headless
No NUI, no notifications, no drawing. ug-core returns codes and emits events. UI resources display them.
No ug-lib dependency
No ug-lib dependency
ug-core and ug-lib never depend on each other. Runtime dependencies are OneSync and oxmysql only.
One global
One global
UgCore is the only global. Private code lives in UgCore.Internal.Every net event validated
Every net event validated
Through
UgCore.Network or UgCore.Callback, with a schema and a rate limit. No raw RegisterNetEvent.