A free, open-source in-game developer panel for FiveM. Built for the people writing the scripts — not the ones running the server.
Install · Config · Permissions · Workflows · License
ShadowForge DevTools is a clean, modular developer panel for FiveM that helps you inspect entities, copy coordinates, build target zones, place props, inspect vehicles and peds, and ship code faster.
It is not an admin panel. There are no kicks, no bans, no warns. Every feature is aimed at people who are actually writing or debugging scripts.
- Entity Inspector — raycast onto any prop / vehicle / ped / player and read or modify it live.
- Coordinate Tools — copy player / camera / aim / ground-Z coords in
vector3,vector4,vec3,vec4, Lua table, or JSON. Save named locations and teleport back. - Zone Builder — design box / sphere / poly zones in-game with a real-time preview, then export to
ox_target,ox_lib zones,qb-target, or JSON. - Object Placer — spawn props and move them around with WASD / R-F / Q-E. Snap-to-ground, freeze, cleanup, and bulk-export Lua.
- Vehicle Tools — inspect any vehicle's model, plate, class, health, fuel, colors, mods. Copy spawn snippets, Qbox-style shared entries, and
ox_targettemplates. - Ped Tools — inspect / spawn peds, set scenarios, copy
CreatePedandaddLocalEntitytemplates. - Player / Dev Tools — heal, armor, godmode, invisible, noclip, dev blips, waypoint TP, copy own model hash. All permission-locked and individually toggleable in config.
- World Tools — set time, freeze time, override weather (local or broadcast), blackout, and read street / zone / interior info.
- Resource Tools — see framework + dependency status; controlled
ensure/start/stopfor resources you whitelist inConfig.SafeResources. - Debug Overlay — live HUD with FPS, coords, heading, speed, zone, weapon, aimed entity. Each field individually toggleable.
- Snippet Generator — ready-to-paste templates for events, commands,
ox_libUI (progress bar, context menu, input dialog, notify),ox_targetzones / models, qb-target, ACE checks, Discord webhooks, and more. - Discord logging — optional, per-action toggles, validates blank webhook and never errors.
Drop your own screenshots in screenshots/ and they will appear here once published.
| Main panel | Inspector | Zone builder |
|---|---|---|
![]() |
![]() |
![]() |
- Download or clone the repo into your
resources/folder:resources/ [shadowforge]/ shadowforge-devtools/ - Add it to your
server.cfg:ensure ox_lib ensure shadowforge-devtools
- Grant the ACE permission to whoever should use it:
add_ace group.admin shadowforge.devtools allow add_ace group.admin shadowforge.devtools.dangerous allow
- Open the panel in-game with
F6,/sfdev, or/sfdevtools.
Don't want permissions at all? Set
Config.Permissions.require = false— useful for dev servers.
| Required | Purpose |
|---|---|
ox_lib |
Context menus, input dialogs, notifications, callbacks, KVP-friendly clipboard |
| Optional | What unlocks |
|---|---|
ox_target |
Snippet generator targets ox_target syntax |
ox_inventory |
Item-count detection in player stats |
qbx_core |
Auto-detected; pulls job/money/citizenid |
qb-core |
Auto-detected; pulls job/money/citizenid |
es_extended |
Auto-detected; pulls job/identifier/accounts |
Missing optional dependencies are fine — the panel detects what's running and adapts.
| Command | Effect |
|---|---|
/sfdev |
Open the panel |
/sfdevtools |
Open the panel |
| Keybind | Default | Purpose |
|---|---|---|
sfdev_open |
F6 |
Open the panel |
Both command names and the keybind are configurable in config.lua.
Most servers only need to edit a handful of values. See docs/config.md for the full reference.
Config.Permissions.require = true -- gate the panel behind ACE
Config.Permissions.ace = 'shadowforge.devtools'
Config.Modules.player_tools = true -- enable / disable module-by-module
Config.PlayerTools.allowGodmode = false -- lock down dangerous self-toggles
Config.Discord.enabled = true -- optional logging
Config.Discord.webhook = 'https://...'
Config.SafeResources = { -- only these can be ensured/started/stopped from the panel
'my_test_resource',
}See docs/examples.md for guided walkthroughs:
- Inspect a prop you can see — raycast and read the model hash.
- Copy coords as
vector4— the fastest way out of "I need this position in code." - Create an
ox_targetzone — pick the spot, size it, copy the snippet. - Place a prop with the keyboard — design a scene, then export it as Lua.
- Export a vehicle config — generate a Qbox-style shared entry from the car you're sitting in.
Is this an admin panel? No. There are no punishment / moderation tools. Player Tools (heal, godmode, noclip) exist for your character only and are off by default if you want them off.
Will players abuse this?
Only if you grant them shadowforge.devtools. Keep Config.Permissions.require = true and add the ACE permission only to your dev/admin groups. Truly destructive actions sit behind a separate shadowforge.devtools.dangerous ACE.
Does it work on Qbox / QBCore / ESX / Standalone? Yes. Framework auto-detection runs on resource start; the panel pulls richer player data when a framework is present and gracefully shows nothing when one isn't.
Why ox_lib? Because it's the de-facto standard for FiveM tooling, ships excellent context menus and input dialogs, and is actively maintained. No NUI to write or skin.
Can I extend it with my own module? Yes — see "Extending" below.
Drop a new file in modules/, add it to fxmanifest.lua before client.lua, and call:
SFD.RegisterModule({
id = 'my_tool',
label = 'My Tool',
description = 'What it does',
icon = 'wand-magic-sparkles',
open = function()
lib.registerContext({
id = 'my_tool_main',
title = 'My Tool',
menu = 'sfd_main_menu',
options = {
{ title = 'Do thing', onSelect = function() SFD.Notify.success('Hi!') end },
},
})
lib.showContext('my_tool_main')
end,
})It will appear in the main panel automatically. Common helpers you can use:
| Helper | What it does |
|---|---|
SFD.Notify.success/error/info/warning(msg) |
ox_lib notifications |
SFD.Copied(label, payload) |
Copy text + notify the user |
SFD.SetClipboard(text) |
Clipboard with F8 fallback |
SFD.HasPermission(level) |
'base' or 'dangerous' — server-checked, cached |
SFD.LogServer(action, data) |
Optional Discord/server log |
SFD.FormatVec3 / FormatVec4 |
Pretty coordinate strings |
- The custom cursor / NUI is intentionally not used — everything routes through
ox_libso the resource stays small and themeable. - Object placement movement is camera-relative, not screen-space. If that feels unintuitive on first try, hold Shift for fast moves and Alt for precision.
- Routing-bucket reading and some framework helpers require the player to be initialized. Cold-load timing edge cases will return
nilinstead of stale data.
- Optional NUI front-end (no functional gain, just visual polish)
- More framework data: ox_inventory item counter, vehicle-key snippets
- ESX and QBCore-specific snippet templates in the generator
- "Recording" mode that captures a scene of moves into a single Lua snippet
- Per-user persisted settings (favorited modules, custom keybinds)
PRs welcome — open an issue first if it changes behavior.
Full contribution guide in CONTRIBUTING.md. Short version:
- Fork the repo, branch from
main. - Follow the existing module pattern: register via
SFD.RegisterModule, gate dangerous actions throughSFD.HasPermission('dangerous'), log viaSFD.LogServer. - Avoid pulling in any new dependencies. ox_lib only.
- Open a PR with a short description and, if possible, a screenshot.
Have an idea but not sure it fits? Float it in Discussions first.
Open an issue with:
- Server build (
versionfrom console) - Framework + version (Qbox / QBCore / ESX / standalone)
- Steps to reproduce
- F8 console output if anything errored
Found a security issue? Don't open a public issue — see SECURITY.md for private disclosure.
MIT — see LICENSE. Use it, change it, ship it. Attribution appreciated, not required.
- Built on
ox_lib. - Snippet templates target
ox_target,qbx_core,qb-core, andes_extended. - Maintained by ShadowForge.



