FearlessStudios

FS-DevTools

Set up a permission-controlled in-game developer workbench.

Start Here

  1. Enable OneSync and start FS-Lib before the built FS-DevTools release.
  2. Grant open plus only the capabilities the intended developers need.
  3. Open /devtools and start with the coordinate or entity inspection tools.

Expected result: an authorized developer can open the workbench and use the granted tools. Players have no access by default. This guide reflects local version 1.1.0.

Installation

Use a current FiveM server artifact with OneSync enabled. Copy the built resource, including its packaged UI, into your resources directory:

ensure FS-Lib
ensure FS-DevTools

# Replace the placeholder with the intended developer's identifier.
add_principal identifier.license:YOUR_LICENSE_HERE group.fsdeveloper
add_ace group.fsdeveloper fsdevtools.open allow
add_ace group.fsdeveloper fsdevtools.coordinates allow
add_ace group.fsdeveloper fsdevtools.inspect allow

FS-Lib and OneSync are required. No framework is required. ox_lib and lation_ui are optional notification providers.

Configuration

Edit the installed config.lua, then restart. Keep installation-specific settings separately when updating a packaged release.

SettingDefaultMeaning and when to change it
Config.CommanddevtoolsCommand without a slash. No default keyboard shortcut is assigned. Rename if it conflicts.
Config.Notificationsfs_libNotification provider. Choose ox_lib or lation_ui only when installed and started; failed optional providers fall back to FS-Lib.
Config.ProtectedResourcesFS-Lib, sessionmanager, spawnmanager, mapmanager, hardcapResources the resource desk cannot start/stop/restart. Add your framework and other critical resources. FS-DevTools protects itself automatically.
Config.Acefsdevtools.* names belowPer-tool permission strings checked on the server. Change only to match your own permission scheme.

Example: add an installed framework to the protected list rather than replacing the existing protections:

Config.ProtectedResources[#Config.ProtectedResources + 1] = 'qb-core'

Capability permissions

All names below have the fsdevtools. prefix. Grant open alongside individual capabilities. The all grant enables everything, including code execution, and should be reserved for fully trusted developers.

SuffixAllows
inspectEntity inspection
entitiesFreeze/delete eligible non-player entities
coordinatesCoordinate tools
animationsAnimation previews
propsProp previews
particlesParticle previews
populationShared ambient-population controls
onesyncOneSync tools
trafficnodesTraffic-node tools
spawnvehicleVehicle spawning
resourcesResource desk actions
execute.clientClient Lua execution
execute.serverServer Lua execution

The resource desk Refresh action also needs add_ace resource.FS-DevTools command.refresh allow. Do not grant it merely to enable coordinate tools.

Usage

  1. Run /devtools. Select a tool from the right-side rail; unavailable capabilities need their own ACE grants.
  2. In Entities, use Scan scene and select an entry to inspect its properties. Hold target / Release target controls selection locking.
  3. Use Alt to switch UI/game focus. The workbench hides by default during game focus; Preferences → Keep workbench visible changes that behavior.
  4. Press Escape to close. In the code editor, Escape belongs to editor popups; tab out first to close the workbench.

Population Apply affects every connected player, including later joins; Reset restores defaults. It changes ambient spawning, not existing entities, and lasts until reset or resource restart.

Troubleshooting

The workbench will not open

Check FS-Lib, OneSync, fsdevtools.open and at least the intended capability. No default key is assigned; try the command and then set a personal FiveM binding.

A resource action times out

A timeout does not cancel server work. Check actual resource state and server logs before retrying. Resource actions allow up to 60 seconds for the game/server response.

Entity deletion or freezing is refused

Player peds and player-occupied vehicles are protected. Server validation also checks networked targets. Do not assume a visible entity is eligible.

Settings disappear after a restart

Personal favorites and preferences are saved locally, but snippets/output are in memory. World overrides and overlays do not automatically reactivate.

Advanced reference: Lua execution

Execution is privileged, not sandboxed. Snippets can access Lua globals, exports and FiveM natives in FS-DevTools. Resource-desk protections do not constrain authorized Lua. Grant execution only to trusted developers.

Use finite snippets. A timeout ends the UI wait, not running Lua; a blocking loop can hang the runtime. Client scope runs only for the requester; server scope resolves networked context afresh.

print('Requested by', context.playerId)
if context.entity then
    return GetEntityModel(context.entity)
end

context.entity is a handle for the selected runtime; context.netId is available for networked entities. Do not reuse client handles as server handles. Prints appear in F8 for client scope or the server console for server scope, as well as captured UI output.

Task guides