Skip to content

LastMenu

Universal standalone menu system for FiveM — zero dependencies, one API, real-time reactivity.

What is LastMenu?

LastMenu is a complete UI library for FiveM. It unifies all common menu types (context, radial, input form, alert, notification, progress bar, target) under a consistent builder API, without requiring ox_lib, qbx_core or any other framework.

The Svelte 5 UI is pre-compiled into ui/assets/ — no npm install required on the game server.

Why LastMenu?

Common problemSolution
Dependency on ox_lib or a frameworkZero runtime dependencies
Different API per menu typeOne builder pattern for everything
No reactivity — close/reopen to refreshBuilt-in reactive polling engine
Locked to a framework (ESX / QBCore)Works in any environment
Watcher bugs crash the whole menuSafe Mode automatically disables faulty watchers
Back button returns to wrong levelNavigation stack preserves full depth

Getting Started

Start with Installation to set up LastMenu on your server, then check the Quick Start for practical examples.

Quick Overview

The entire LastMenu API follows the same pattern: one export call + a builder function.

local UI = exports['LastMenu']

-- Context menu
UI:context(function(menu)
    menu:title("My Menu")
    menu:button("Say hello", {
        icon = "hand",
        cb   = function() print("Hello!") end
    })
end)

-- Notification
UI:notify(function(n)
    n:message("Action successful.")
    n:type("success")
end)

-- Blocking form (inside a Citizen.CreateThread)
local values = UI:input_async(function(b)
    b:title("Purchase")
    b:field("Quantity", { type = "number", min = 1, max = 10 })
end)

Documentation Structure

SectionContent
Installationfxmanifest, server.cfg, first steps
Quick StartPractical examples by use case
Context MenuVertical menu — all item types
Radial MenuCircular quick-action wheel
Input FormMulti-field modal forms
Modal / AlertConfirmation dialogs
NotificationsNon-blocking toasts
Progress BarProgress bar with side-effects
Target Systemox_target / qtarget replacement
Reactivitydiff/patch polling engine
Async APIinput_async and alert_async (coroutine-style)
Sub-menus & StackNavigation stack and nesting
ThemingCSS custom properties
MigrationFrom ox_lib, RageUI, qb-menu
DebuggingBuilt-in diagnostic tools
Common PitfallsAnti-patterns to avoid
© 2026 LastMenu