Skip to content

Phone

Configuration

Everything is in config/config.lua, with a comment on each option. Secrets (the upload token and log webhook) go in config/keys.lua, which only the server reads. Framework, inventory, bank, voice and housing differences live in config/bridge/, one file each.

The options most servers touch

OptionWhat it does
localeLanguage file from config/locales/
frameworkauto detects Qbox, QBCore, ESX, ox_core or ND_Core and falls back to standalone
autoInstallAppsWhether community apps may install themselves on every phone, or always go through the App Store first (the default)
bankWhich bank script holds company money. auto finds it
keybind, command, walk, cursorKeyHow the phone opens, and whether players can move with it out
itemThe phone item: which inventory, whether it's required, whether each item is its own phone
numbersPrefixes and length of phone numbers
callsRing time and voice script
rtcSTUN/TURN servers for video calls and live streams. Add a TURN server if video fails for players behind strict routers
mapLeave it alone: San Andreas ships with the phone. On a server with its own map, image is a URL to one picture and bounds are the game coordinates of its edges
placesPlaces listed in Maps
companiesJobs players can call or message from Services
garageValet and impound fees, and whether impounded vehicles can be released from the phone
housingWhich housing script is behind Home. auto finds it
transferBringing data across from an old phone. none switches it off
musicSongs for Music (direct links to audio files). The app is hidden while the list is empty
cryptoMade-up coins bought with bank money
mailDomainThe part after @ in Mail addresses
licenceThe heading on the licence card in Wallet. Empty uses the language file's text
debugPrints every request to the server console

Language

English (en, the default) and French (fr) ship. To add one:

  1. Copy config/locales/en.json to config/locales/<code>.json, e.g. de.json. "ui" is the interface, "server" is messages from Lua.
  2. Set meta.name to the language's own name and meta.intl to its locale code (e.g. de-DE). Dates and numbers follow it.
  3. Translate the values, never the keys. Keep {name}, {amount} and %s as they are; where a line has several %s, they stay in the same order.

Missing strings fall back to English, so a half-done translation still works.

Theme

web/dist/theme.json can be edited on a live server without rebuilding. Anything in it is laid over the built-in look; leave a key out to keep the default.

KeyWhat it controls
fontCSS font stack: a system font or the bundled Inter
iconRadiusIcon corner radius as a fraction of size: 0.225 a rounded square, 0.5 a circle
island"pill", or "hole" (a punch hole that widens only for calls, recording and music)
framesFrame colours offered in Settings: { "id": "#hex" }
wallpapersWallpapers offered in Settings: { "id": "<any CSS background-image>" }
colors.light, colors.darkColour token overrides, e.g. { "--blue": "#0b8a7a" }
appsPer-app name, bg, fg and icon (an image URL), keyed by app id
defaultsdark, wallpaper, lockWallpaper, frame, apps, dock for a fresh phone

themes/slate.json is a second look made with nothing but this file. Copy it over theme.json to use it.

Sounds

The ringtones, text tones and effects are in web/dist/sounds/. To replace one, put an .mp3 with the same name there. Players pick ringtones and set volume, Silent Mode and Do Not Disturb in Settings; only the player holding the phone hears it.