Skip to main content
The Bridge global ships a complete UI library. Every component is a single line of LuaBridge.Notify(...), Bridge.Progress(...), Bridge.Menu.Open(...) — that renders on the bridge’s own NUI. No frontend to build, no extra resource to install, no markup to write.
Bridge.Notify.Success('Garage', 'Vehicle stored.')
local ok = Bridge.Progress({ label = 'Reeling in…', duration = 4000, canCancel = true })
if Bridge.Confirm.Open({ title = 'Sell vehicle?', intent = 'danger' }) then sell() end
The bridge’s own NUI is the default renderer. ox_lib is opt-in — set atlas:ui "ox" (and start ox_lib) to swap every call site over to it. You write the same Lua either way.

Themed by the accent

Every component reads the live server accent color (atlas:theme:color) automatically — toggles, progress fills, confirm badges, the radial wheel, and skill-check zones all tint to match. When an admin changes the accent, the UI follows without a restart. You never pass a color.

Provider selection

UI resolves to a provider per call, so a renderer that starts late is still picked up. The default is the bridge’s own NUI.
# server.cfg — all optional
setr atlas:ui "auto"   # auto | own | ox | framework | custom
ValueRenderer
own (default)The bridge’s own NUI — zero dependencies.
oxox_lib (must be started).
frameworkThe framework’s native notify (notifications only; everything else falls back to own).
autoDetects in order: ox_lib started → ox; a non-default framework → framework; otherwise own.
customYour own renderer — fill the stubs in editable/ui.lua.
Anything a chosen provider does not implement falls back to the bridge’s own NUI automatically, so a call never silently does nothing. Radial and Interact are always the bridge’s own NUI regardless of provider.

Per-subsystem overrides

Pin a single component to a different renderer without changing the rest. Each is a provider id; blank inherits atlas:ui.
setr atlas:ui:notify     "own"
setr atlas:ui:progress   "ox"
setr atlas:ui:menu       ""
setr atlas:ui:textui     ""
setr atlas:ui:context    ""
setr atlas:ui:input      ""
setr atlas:ui:skillcheck ""
setr atlas:ui:confirm    ""
Bridge.Target reads its own convar, atlas:target (auto | ox | qb | own | custom) — not atlas:ui:target. See Target.

Components

https://mintcdn.com/atlasscripts/BwePy2Q7bMLnl0yQ/icons/box-filled.svg?fit=max&auto=format&n=BwePy2Q7bMLnl0yQ&q=85&s=c228a3b89453b292c0cedb29c252b3ab

Notifications

Toast feedback. The only UI callable from the server (targeted at a player).
https://mintcdn.com/atlasscripts/BwePy2Q7bMLnl0yQ/icons/box-filled.svg?fit=max&auto=format&n=BwePy2Q7bMLnl0yQ&q=85&s=c228a3b89453b292c0cedb29c252b3ab

Progress

Blocking progress bar with optional prop + animation. Returns completed/cancelled.
https://mintcdn.com/atlasscripts/BwePy2Q7bMLnl0yQ/icons/box-filled.svg?fit=max&auto=format&n=BwePy2Q7bMLnl0yQ&q=85&s=c228a3b89453b292c0cedb29c252b3ab

Text UI

A persistent help label ([E] Open shop). Show and hide.
https://mintcdn.com/atlasscripts/BwePy2Q7bMLnl0yQ/icons/box-filled.svg?fit=max&auto=format&n=BwePy2Q7bMLnl0yQ&q=85&s=c228a3b89453b292c0cedb29c252b3ab

Menus

Menu (toggles/steppers, stays open) and Context (a simple action list).
https://mintcdn.com/atlasscripts/BwePy2Q7bMLnl0yQ/icons/box-filled.svg?fit=max&auto=format&n=BwePy2Q7bMLnl0yQ&q=85&s=c228a3b89453b292c0cedb29c252b3ab

Input & Confirm

Blocking forms (Input) and yes/no dialogs (Confirm).
https://mintcdn.com/atlasscripts/BwePy2Q7bMLnl0yQ/icons/box-filled.svg?fit=max&auto=format&n=BwePy2Q7bMLnl0yQ&q=85&s=c228a3b89453b292c0cedb29c252b3ab

Skill Check

Blocking timing minigame — circle, bar, or key sequence.
https://mintcdn.com/atlasscripts/BwePy2Q7bMLnl0yQ/icons/box-filled.svg?fit=max&auto=format&n=BwePy2Q7bMLnl0yQ&q=85&s=c228a3b89453b292c0cedb29c252b3ab

Radial

A radial action wheel with optional submenus.
https://mintcdn.com/atlasscripts/BwePy2Q7bMLnl0yQ/icons/box-filled.svg?fit=max&auto=format&n=BwePy2Q7bMLnl0yQ&q=85&s=c228a3b89453b292c0cedb29c252b3ab

Target

Entity/zone targeting — ox_targetqb-target → own.

Server vs client availability

Almost all UI is client-only — it renders on a player’s screen, so it lives in your client VM. The one exception is Notify, which you can call from the server to push a toast to a specific player.
ComponentClientServer
Notify(first arg is the player src)
Progress
TextUI
Menu / Context
Input
Confirm
SkillCheck
Radial
Interact
Target
The blocking components — Progress, Input, Confirm, SkillCheck — yield until the player finishes. Always call them inside a CreateThread, command, or event callback, never at file top level.