Exports
1. Notify
Trigger detailed notifications with titles, icons, sounds, animations, and per-call positioning.
Basic
exports['mizu_interface']:Notify('This is a simple notification.')2. Progress Bar
Handles animations, props, control locks, cancel keys, and completion callbacks.
exports['mizu_interface']:ProgressBar({
duration = 5000,
label = 'Repairing Vehicle...',
icon = 'wrench',
type = 'success',
canCancel = true,
disable = {
movement = true,
car = true,
mouse = false,
combat = true,
inventory = true
},
animation = {
animDict = 'veh@break_in@0h@p_m_one@',
anim = 'low_force_entry_ds',
flags = 16
},
prop = {
model = 'prop_tool_wrench',
bone = 28422,
coords = vec3(0.0, 0.0, 0.0),
rotation = vec3(0.0, 0.0, 0.0)
},
propTwo = {
model = 'prop_tool_spanner',
bone = 60309,
coords = vec3(0.0, 0.0, 0.0),
rotation = vec3(0.0, 0.0, 0.0)
},
onFinish = function(isCanceled)
if not isCanceled then
print('Repair complete!')
end
end,
onCancel = function()
print('Canceled!')
end
})Both naming conventions work for control locks, for example movement and disableMovement.
Cancel Progress
exports['mizu_interface']:CancelProgress()3. Text UI
The TextUI uses a dead-man switch and hides automatically if it is not refreshed within Config.TextUI.Timeout.
Simple
exports['mizu_interface']:TextUI('E', 'Interact')
exports['mizu_interface']:TextUI('TAB', 'Open Trunk', 'info')
exports['mizu_interface']:TextUI('G', 'Open Door', '#2ecc71', 'solid')Hide Text UI
exports['mizu_interface']:HideTextUI()4. Skill Check
A promise-based multi-round timing minigame that returns true or false.
Basic
local success = exports['mizu_interface']:SkillCheck('medium')
if success then
print('Passed!')
else
print('Failed.')
endCancel Skill Check
exports['mizu_interface']:CancelSkillCheck()5. Radial Hub
Open a nested SVG pie menu. Each slice can execute a client event, server event, command, or open another submenu.
exports['mizu_interface']:OpenRadialHub({
center = { icon = 'user-gear', title = 'ACTIONS' },
slices = {
{
icon = 'car',
title = 'VEHICLE',
type = 'info',
items = {
{ icon = 'key', title = 'KEY', type = 'success', action = 'myresource:client:ToggleLock', actionType = 'client' },
{ icon = 'power-off', title = 'ENGINE', type = 'warning', action = 'qb-vehiclekeys:client:ToggleEngine', actionType = 'client' }
}
},
{
icon = 'box',
title = 'INVENTORY',
type = 'success',
action = 'qb-inventory:client:openInventory',
actionType = 'client'
}
}
})Close Radial Hub
exports['mizu_interface']:CloseRadialHub()Radial Compatibility Stubs
These exist so scripts expecting qb-radialmenu style APIs do not hard-crash.
local id = exports['mizu_interface']:AddOption({ title = 'Example' })
exports['mizu_interface']:RemoveOption(id)
exports['mizu_interface']:setupSubItems(id, {})
exports['mizu_interface']:setupAppItems('phone', {})6. Context Menu
Use OpenContextMenu or the compatibility alias openMenu.
exports['mizu_interface']:OpenContextMenu({
title = 'Vehicle Actions',
icon = 'fas fa-car',
color = '#f39c12',
theme = 'classic',
position = 'right',
items = {
{
title = 'Engine Toggle',
description = 'Turn the engine on or off',
icon = 'fas fa-power-off',
action = 'myresource:client:ToggleEngine',
actionType = 'client',
shouldClose = true
},
{
title = 'Repair Preview',
description = 'Read-only diagnostic entry',
icon = 'fas fa-wrench',
readOnly = true
}
}
})exports['mizu_interface']:openMenu({
title = 'Alias Call',
items = {
{ title = 'Open Locker', action = 'myresource:openLocker', actionType = 'client' }
}
})Close Context Menu
exports['mizu_interface']:CloseContextMenu()7. Input Dialog
Returns submitted form data or nil when the dialog is closed.
local result = exports['mizu_interface']:Input({
header = 'Character Setup',
color = '#3498db',
icon = 'keyboard',
inputs = {
{ type = 'text', name = 'firstname', label = 'First Name', required = true },
{ type = 'number', name = 'age', label = 'Age', min = 18, max = 99 },
{ type = 'select', name = 'origin', label = 'Origin', options = { 'Los Santos', 'Blaine County' } }
}
})
if result then
print(json.encode(result))
end8. NPC Dialog
Returns the selected value or nil.
local result = exports['mizu_interface']:Dialog({
npcName = 'Officer Vega',
job = 'LSPD',
icon = 'shield-halved',
color = '#0984e3',
interactionMethod = 'both',
startNode = 'start',
nodes = {
start = {
text = 'Need anything from dispatch?',
options = {
{ label = 'Request backup', value = 'backup', type = 'close' },
{ label = 'Open records', next = 'records' },
{ label = 'Nothing', value = 'leave', type = 'close' }
}
},
records = {
text = 'State your query.',
options = {
{ label = 'Return', next = 'start' }
}
}
}
})9. Action Panel
Use it for accept/decline confirmations, optional single-button flows, or timed warnings.
local choice = exports['mizu_interface']:ActionPanel({
title = 'Danger Zone',
text = 'You are about to enter a lethal-force area.',
icon = 'skull-crossbones',
color = '#e74c3c',
acceptLabel = 'Enter',
declineLabel = 'Leave',
position = 'top-center',
autoAccept = false,
duration = 5000
})10. Chat Exports
The package includes a full chat replacement with its own export surface.
Send Chat Message
Client-side:
exports['mizu_interface']:SendChatMessage('server', 'System', 'Welcome to the server.', '#3498db')Server-side:
exports['mizu_interface']:SendChatMessage('server', 'Server', 'Maintenance starts in 10 minutes.', '#e30909')Suggestions
exports['mizu_interface']:AddChatSuggestion('/garage', 'Open your garage', {
{ name = 'id', help = 'Garage ID' }
})
exports['mizu_interface']:RemoveChatSuggestion('/garage')The lowercase alias used by many legacy resources is still available:
exports['mizu_interface']:addSuggestion('/garage', 'Open your garage', {
{ name = 'id', help = 'Garage ID' }
})Chat Window Control
exports['mizu_interface']:OpenChat('ooc', 'Hello there')
exports['mizu_interface']:CloseChat()
exports['mizu_interface']:ClearChat()Mask State
local isMasked = exports['mizu_interface']:IsPlayerMasked()Notes
openMenuis an alias ofOpenContextMenu.addSuggestionandIsPlayerMaskedare runtime compatibility exports in code.SendChatMessageexists on both client and server.- Radial compatibility exports are intentionally shallow stubs. They prevent crashes, but they do not dynamically rebuild the internal radial tree.