NX CreativeNX CreativeDocs
Scriptsnx_phone

Configuration

Every owner-editable option in config.lua and config_server.lua for nx_phone, with defaults, types and purpose.

Most settings live in config.lua. It is not escrowed, so your edits survive updates. That file is also sent to every player who connects, so API keys, webhooks and TURN secrets go in config_server.lua, which stays on the server. See config_server.lua at the end of this page.

Every app has an Enabled switch. Turning one off hides its icon on every phone.

Quick setup

Core

Config.Frameworkstringdefault: 'auto'

Framework integration. 'auto' detects ESX, QBCore and QBox. Set 'esx', 'qbcore', 'qbox' or 'standalone' to choose one.

Config.Localestringdefault: 'en'

Language for the phone's text. English is the only language that ships.

Config.Debugbooleandefault: false

Extra logging and developer test commands. Leave it false on a live server.

Config.Targetstringdefault: 'auto'

The target script for the payphone, carrier counter and dropped-phone options. 'auto' uses the first one started of ox_target and qb-target, or name one of them.

Items

Config.Itemstringdefault: 'nx_phone'

The ox_inventory item that opens the phone.

Config.SimItemstringdefault: 'nx_sim'

The ox_inventory item that carries a phone number.

Phone numbers

Config.Sim.NumberFormatstringdefault: 'XXX-XXXX'

Shape of a new number. Each X is a random digit.

Config.Sim.DefaultCarrierstringdefault: 'Badger'

Carrier name shown on the lock screen.

Config.Sim.ReclaimDaysnumberdefault: 14

Days before a suspended number goes back into the pool.

Opening the phone

Config.OpenKeystringdefault: 'F1'

Default key that opens and closes the phone. Players can rebind it in GTA's key bindings. '' turns the keybind off.

Config.Commandstringdefault: 'phone'

Chat command that opens the phone. '' turns it off.

Config.WalkWhileOpenbooleandefault: true

Players can walk and sprint with W, A, S and D while using the phone with the cursor. Typing in a text field pauses it.

Lock screen

Config.Biometricbooleandefault: true

Allow Face ID unlock. Only the phone's owner can use it.

Config.MaxAccountsPerCharacternumberdefault: 3

How many accounts one character may add to a phone.

Config.Auth.SessionTtlSecondsnumberdefault: 28800

How long an unlock lasts, in seconds (8 hours).

Config.Auth.LockOnClosebooleandefault: true

Lock the phone every time it is put away, so the next open asks for the passcode.

Config.Auth.RequirePinbooleandefault: false

true makes a new phone set a passcode before it opens.

Config.Auth.PinMinLengthnumberdefault: 4

Shortest passcode a player may choose.

Config.Auth.PinMaxLengthnumberdefault: 6

Longest passcode a player may choose.

Apps

Config.Apps.Idstabledefault: all 34 built-in apps

Apps that exist on every phone. Remove an id to hide that app from every phone.

The shipped list:

Ids = { 'calls', 'messages', 'camera', 'gallery', 'maps', 'cards', 'notes', 'clock',
        'weather', 'calculator', 'exchange', 'contacts', 'recorder', 'browser', 'music',
        'mail', 'beacon', 'garage', 'home', 'shift', 'companies', 'airwave', 'facetime',
        'depot', 'yapp', 'ember', 'cipher', 'bulletin', 'stall', 'trace', 'gloss',
        'glimpse', 'flick', 'settings' },

calls is the Phone app, gallery is Photos, cards is Wallet, music is Waveform and beacon is Find My. To give an app to some jobs or gangs only, see Restricting an app to a job.

Config.Apps.Disabledtabledefault: {}

Turn apps off without removing them from the list, for example { camera = true }. SDK app ids work too.

Notifications

A phone shows notifications only from apps installed on it. A removed app stays silent, and its old notifications come back if it is installed again.

Config.Notifications.RetentionDaysnumberdefault: 30

How long a notification stays on the phone.

Config.Notifications.NearbyRangenumberdefault: 15.0

Metres within which other players hear a phone ring or buzz in someone's pocket. 0 means only the holder hears it.

Config.Notifications.NearbyVehicleRangenumberdefault: 3.0

The same range while the holder sits in a closed vehicle.

Placement

Where the phone sits on screen. Players move and resize it in Settings, and their choice is saved per character.

Config.Placement.Presetstringdefault: 'right'

Starting position for a player who never moved the phone: 'right', 'centre' or 'left'.

Config.Placement.Sizenumberdefault: 1.0

Starting size, from 0.7 to 1.15.

Config.Placement.Margintabledefault: { x = 40, y = 24 }

Pixels from the side and bottom edge of the screen.

Config.Placement.PeekNotificationsbooleandefault: true

A put-away phone rises a little to show a new notification.

Config.Placement.PeekSecondsnumberdefault: 4

How long a notification peek stays up.

Battery

Percentage points. A phone at 0% will not open until it is charged.

Config.Battery.DrainPerHourIdlenumberdefault: 2

Drain while the phone is closed in a pocket. Only while the player is online.

Config.Battery.DrainPerMinuteActivenumberdefault: 0.5

Drain while the screen is on. About three hours of use per charge.

Config.Battery.ChargePerMinuteInVehiclenumberdefault: 2

Charge while the phone is open in a vehicle with the engine running.

Calls

Voice runs on pma-voice call channels.

Config.Calls.RingSecondsnumberdefault: 30

A call not answered within this time is a missed call.

Config.Calls.MaxMinutesnumberdefault: 120

A call is hung up after this many minutes.

Config.Calls.PeekOnIncomingbooleandefault: true

A put-away phone shows the incoming call. The player presses the phone key to use it.

Config.Calls.Voice.ChannelBasenumberdefault: 700000

Calls use pma-voice channels 700001 to 799999. Keep other scripts' channels out of that range.

Config.Calls.Voice.MuteStrategystringdefault: 'targets'

'targets': a muted player still hears the other side. 'leave': muting drops the audio both ways.

Config.Calls.Voice.Speakerphonebooleandefault: true

People standing nearby hear the other side of a call on speaker.

Config.Calls.Voice.SpeakerRadiusnumberdefault: 15.0

Speakerphone range in metres.

Config.Calls.Voice.SpeakerTalkbooleandefault: true

On speaker, the other side also hears the people near the holder, unless the holder is muted.

Config.Calls.Servicestabledefault: 911

Service numbers that ring every on-duty player with one of the listed jobs. The first to answer takes the call.

Each entry:

Services = {
    { number = '911', label = 'Emergency', jobs = { 'police', 'ambulance' }, emergency = true },
    -- { number = '555-0110', label = 'Detectives', jobs = { 'police' }, minGrade = 2, requireDuty = false },
},
  • number, label: the number players dial and the name shown on both phones and in Recents.
  • jobs: the framework job names that ring.
  • emergency = true: the line can be called without a SIM and without unlocking the phone, and the caller ID is always shown.
  • minGrade (optional): only players at this job grade or higher ring.
  • requireDuty (optional, default true): set false to ring off-duty players too.

Another resource can take over who rings for a line with SetServiceRouter.

A business's number belongs in Companies instead: it rings the employees who are open and gets a shared text inbox. Never put the same number in both lists.

Companies

The Companies app is a directory of your city's businesses. Players see which are open, then call, text or set a GPS route to one. A call rings the company's employees on duty and the first to answer takes it. Texts land in a shared company inbox: every employee on duty sees every customer thread and replies as the company. Every company with a job gets a phone number that never changes, or the one you set.

Companies come from three places. For each field, the first one that sets it wins:

  1. Your entries in Config.Companies.List.
  2. Other resources, through RegisterCompany.
  3. Your framework's jobs, when FrameworkJobs is on.
Config.Companies.Enabledbooleandefault: true

Turn the Companies app on or off. Off also hides its icon.

Config.Companies.OpenRulestringdefault: 'toggle'

'toggle': a company is open while an employee on duty has tapped Open in the app. 'duty': it is open while any employee is on duty.

Config.Companies.RingWhenClosedbooleandefault: true

A call to a closed company still rings its employees on duty. With nobody on duty the caller hears that the company is unavailable.

Config.Companies.InboxNeedsDutybooleandefault: true

Employees read and answer customer texts only while on duty.

Config.Companies.AutoReplybooleandefault: true

A call nobody took, or a text to a closed company, gets one automatic text back.

Config.Companies.AutoReplyMinutesnumberdefault: 10

At most one automatic text per customer per company in this many minutes.

Config.Companies.NumberPrefixstringdefault: '555-'

A company without a number gets this prefix plus four digits from 3000 to 9999. The same company always gets the same number. Keep it clear of Config.Callbox.NumberPrefix.

Config.Companies.FrameworkJobsbooleandefault: true

Also list every framework job that has no entry in List. Hide the ones that are not businesses with Hidden and HiddenTypes.

Config.Companies.Hiddentabledefault: emergency services and solo jobs

Job names never listed, for example { 'unemployed', 'police', 'ambulance' }. Emergency services have their own numbers in Config.Calls.Services.

Config.Companies.HiddenTypestabledefault: { 'leo', 'ems' }

Qbox and QBCore job types never listed.

Config.Companies.Listtabledefault: five example companies

One entry per company.

List = {
    { job = 'mechanic', label = 'LS Customs', number = '555-0100', location = vector3(-347.3, -133.4, 39.0) },
    { job = 'taxi', label = 'Downtown Cab Co.', location = vector3(903.5, -170.6, 74.1) },
    { job = 'cardealer', label = 'Premium Deluxe Motorsport', icon = 'mechanic', location = vector3(-56.7, -1096.6, 26.4) },
    { job = 'reporter', label = 'Weazel News', icon = 'news', location = vector3(-598.9, -929.9, 23.9) },
    { job = 'airport', label = 'LSIA', location = vector3(-1037.6, -2737.6, 20.2) },
    -- A place without a job: shown and routed to, never called or texted.
    -- { id = 'pillbox', label = 'Pillbox Hill Medical', icon = 'ambulance', alwaysOpen = true, location = vector3(298.6, -584.5, 43.3) },
},
  • job: the framework job whose employees answer. A place without a job takes an id instead (letters, digits, _ and -). It is shown and routed to, but has no number.
  • label: the name shown, up to 32 characters. Without it, the framework's label for the job is used.
  • number: a fixed phone number. Without it the company gets one from NumberPrefix.
  • location: a vector3. Directions sets the GPS here.
  • icon: a built-in emblem (police, sheriff, ambulance, mechanic, taxi, realestate, news, lawyer) or an https:// or nui:// image. Common job names get a matching emblem by themselves; the rest show their first letter.
  • description: up to 160 characters.
  • alwaysOpen = true: always open, for a place that needs no staff.
  • call = false, message = false: no calls, or no texts.
  • minGrade: the lowest job grade that answers calls and texts and can open the company.
  • hidden = true: keep it out of the directory.

Carrier counter

A counter with a map blip where players buy a SIM with a new number, or a replacement for their main number. A replacement moves the number to a new card, and the old card stops working wherever it is. Contacts, messages, Recents and voicemail stay with the number. Payment is taken from the bank, then cash. The option needs a target script (Config.Target).

Config.Carrier.Enabledbooleandefault: true

Turn the carrier counters on or off.

Config.Carrier.NewSimPricenumberdefault: 250

Price of a SIM with a new number. The number is issued on its first use. 0 is free.

Config.Carrier.ReplaceMainPricenumberdefault: 500

Price of a replacement SIM for the player's main number. 0 is free.

Config.Carrier.Rangenumberdefault: 2.0

Metres from a counter.

Config.Carrier.Bliptable | falsedefault: { Sprite = 459, Colour = 3, Scale = 0.75 }

The map blip at every counter. false shows none.

Config.Carrier.Storestabledefault: {}

Counter spots. None ship, so add your own.

Stores = {
    { label = 'Badger', coords = vector3(1137.4, -469.6, 66.7) },
},

Voicemail and Recorder

Recordings are stored on your media backend (config_server.lua). Without one, both features are off and the phone says so.

Config.Voicemail.Enabledbooleandefault: true

Turn voicemail on or off.

Config.Voicemail.MaxSecondsnumberdefault: 30

Longest message a caller can leave.

Config.Voicemail.GreetingMaxSecondsnumberdefault: 20

Longest custom greeting.

Config.Voicemail.MaxPerNumbernumberdefault: 30

A full mailbox takes no new messages.

Config.Voicemail.MaxPerCallernumberdefault: 5

Unheard messages one caller can leave in one mailbox.

Config.Voicemail.RetentionDaysnumberdefault: 30

Older messages are deleted. 0 keeps them.

Config.Voicemail.ExpirySecondsnumberdefault: 120

How long after the call a caller has to leave the message.

Config.Recorder.Enabledbooleandefault: true

Turn the Recorder app's voice memos on or off.

Config.Recorder.MaxSecondsnumberdefault: 180

Longest memo.

Config.Recorder.MaxPerDevicenumberdefault: 50

Memos one phone can keep.

Config.Recorder.Bystanders.Enabledbooleandefault: true

Mix nearby players' voices into a memo. Only players who have already allowed their microphone join, and nobody is asked mid-recording.

Config.Recorder.Bystanders.Rangestring | numberdefault: 'voice'

'voice' uses each speaker's own pma-voice range. A number sets a range in metres.

Config.Recorder.Bystanders.MaxPeersnumberdefault: 6

Most nearby voices mixed into one memo.

Config.Recorder.Bystanders.AllowDirectbooleandefault: false

Nearby voices go through your TURN server. Without one, memos record only the holder. true removes that need, but direct links show nearby players each other's IP addresses.

Camera and Photos

Photos and videos are stored on your media backend. Without one, the camera still works but cannot save.

Config.Camera.Enabledbooleandefault: true

Turn the Camera app on or off.

Config.Camera.PhotoWidthnumberdefault: 1080

Photo width in pixels. Portrait photos are 3:4; held sideways the two sides swap.

Config.Camera.PhotoQualitynumberdefault: 0.9

Photo quality, from 0.5 to 1.

Config.Camera.VideoWidthnumberdefault: 720

Video width in pixels. Portrait videos are 9:16.

Config.Camera.VideoMaxSecondsnumberdefault: 30

Longest video.

Config.Camera.VideoBitratenumberdefault: 2000000

Highest video bitrate in bits per second. It is lowered automatically so the longest video fits the upload cap.

Config.Camera.Fovtabledefault: { wide = 70.0, normal = 50.0, tele = 25.0 }

Field of view for each zoom step.

Config.Camera.FocusKeystringdefault: 'LMENU'

Left Alt by default. With the phone open it switches between walking and using the cursor; in the camera it switches between aiming and the cursor. '' turns it off.

Config.Camera.AimSpeednumberdefault: 8.0

Degrees the camera turns per unit of mouse movement while aiming, at 1x zoom.

Config.Camera.Landscapebooleandefault: true

Show the Rotate button, so players can hold the phone sideways for landscape photos and video.

Config.Gallery.Enabledbooleandefault: true

Turn the Photos app on or off.

Config.Gallery.MaxItemsnumberdefault: 500

Photos and videos one phone can keep. Recently Deleted counts.

Config.Gallery.TrashDaysnumberdefault: 30

Days in Recently Deleted before an item is gone for good.

Config.Gallery.PhotoMaxKBnumberdefault: 3072

Largest photo file.

Config.Gallery.VideoMaxKBnumberdefault: 12288

Largest video file. MaxUploadKB in config_server.lua also caps it.

Utilities

Config.Clock.Enabledbooleandefault: true

Turn the Clock app on or off.

Config.Clock.MaxAlarmsnumberdefault: 20

Alarms one phone can keep.

Config.Clock.SnoozeMinutesnumberdefault: 9

How long Snooze waits.

Config.Clock.RingSecondsnumberdefault: 60

An unanswered alarm or timer stops after this.

Config.Notes.Enabledbooleandefault: true

Turn the Notes app on or off.

Config.Notes.MaxNotesnumberdefault: 500

Notes one phone can keep. Recently Deleted counts.

Config.Notes.MaxCharsnumberdefault: 20000

Longest note, in characters.

Config.Notes.TrashDaysnumberdefault: 30

Days a deleted note stays in Recently Deleted.

Config.Weather.Enabledbooleandefault: true

Turn the Weather app on or off.

Config.Weather.Sourcestringdefault: 'auto'

'auto' reads nx_fourseasons when it runs and the game's weather otherwise. 'fourseasons' or 'game' picks one.

Config.Maps.Enabledbooleandefault: true

Turn the Maps app on or off.

Config.Maps.TrackMsnumberdefault: 1000

How often, in milliseconds, the map moves your dot while Maps is open.

Config.Wallet.Enabledbooleandefault: true

Turn the Wallet app on or off.

Config.Wallet.Send.Enabledbooleandefault: true

Let players send money to a phone number. The money goes to the number's registered owner.

Config.Wallet.Send.Minnumberdefault: 1

Smallest send, in whole dollars.

Config.Wallet.Send.Maxnumberdefault: 50000

Largest single send.

Config.Wallet.Send.DailyMaxnumberdefault: 200000

Total one character may send per day.

Config.Wallet.Historynumberdefault: 20

Transactions shown per card.

With nx_realbanking 1.11.0 or later, Wallet also shows the company accounts a player may use, with the company's number, balance and history. Players allowed to make transfers can send money from them, and the recipient sees the company's name. The bank checks the player's rights on every read and send.

Config.Exchange.Enabledbooleandefault: true

Turn the Exchange app on or off. It shows prices only; trading stays on nx_computer.

Config.Exchange.PollSecondsnumberdefault: 10

Price refresh interval while the app is open.

Drop it, lose it, find it

Config.Drop.Enabledbooleandefault: true

Phones can be put on the ground and picked up. The /placephone command also needs this.

Config.Drop.OnDownbooleandefault: true

A player who goes down drops the phone they hold or carry.

Config.Drop.DownChancenumberdefault: 100

Percent chance that a downed player drops their phone.

Config.Drop.Commandstringdefault: 'dropphone'

Chat command that puts the phone on the ground. '' turns it off.

Config.Drop.AnyoneCanPickUpbooleandefault: true

false lets only the phone's owner pick it up.

Config.Drop.PickupDistancenumberdefault: 2.0

Pick-up distance in metres.

Config.Drop.RingRangenumberdefault: 25.0

Metres within which a ringing phone on the ground can be heard.

Config.Drop.KeepHoursnumberdefault: 0

Hours before a phone left on the ground is removed. 0 keeps it.

Config.Drop.ScreenUpPitchnumberdefault: -90.0

Tilt that lays the prop flat with the screen up. Use 90.0 if dropped phones land face down.

Config.Drop.PickupPromptbooleandefault: true

Show a pick-up prompt next to a phone on the ground, as well as the target option.

Config.Drop.PickupKeynumberdefault: 38

Control that picks the phone up (38 is E).

Config.Drop.PickupKeyLabelstringdefault: 'E'

What the prompt calls that key.

Config.Beacon.Enabledbooleandefault: true

Turn Find My on or off.

Config.Beacon.TrackSecondsnumberdefault: 20

How often a carried phone's position is saved.

Config.Beacon.SoundSecondsnumberdefault: 30

How long Play Sound rings.

Config.Beacon.ShowBlipbooleandefault: true

Put a blip on the map for a located phone.

Browser, Waveform, Mail and Setup

Config.Browser.Enabledbooleandefault: true

Turn the Browser app on or off.

Config.Browser.Homestringdefault: 'search.lc'

The page a new tab opens.

Config.Browser.MaxBookmarksnumberdefault: 50

Bookmarks per phone.

Config.Browser.Historynumberdefault: 100

Pages kept in History per phone.

Config.Browser.ImageHoststabledefault: {}

Hosts that site images may load from, for example { 'r2.fivemanage.com' }. An empty list allows no remote images.

Config.Browser.Sitestabledefault: { news = true, weather = true, directory = true, bank = true, help = true }

The built-in .lc sites. Set one to false to hide it.

Config.Browser.Headlinestabledefault: {}

Stories on news.lc, each { title, body }. With nx_computer, the laptop's city news is added.

Config.Browser.Directorytabledefault: {}

Extra business entries on lifeinvader.lc.

Directory = {
    { name = 'Pizza Planet', description = 'Hot pizza, fast', number = '555-0142', site = 'pizza.lc' },
},
Config.Music.Enabledbooleandefault: true

Turn the Waveform music app on or off.

Config.Music.AllowCustomUrlsbooleandefault: true

Players may add their own track links.

Config.Music.AllowedHoststabledefault: {}

Hosts (and their subdomains) that players' own links may use. An empty list accepts any https link, but then only the stations in Playlists play out loud, because out loud makes every nearby player's game fetch the link and shows their IP to that host.

Config.Music.MaxTracksnumberdefault: 200

Tracks one phone can add.

Config.Music.OutLoud.Enabledbooleandefault: true

Players can play music through the speaker for people nearby.

Config.Music.OutLoud.Rangenumberdefault: 20.0

Out-loud range in metres.

Config.Music.OutLoud.MaxVolumenumberdefault: 0.8

Highest out-loud volume, 0 to 1.

Config.Music.DuckDuringCallsnumberdefault: 0.15

Music volume during a call. 0 pauses it.

Config.Music.Playliststabledefault: {}

Stations every phone has. Tracks are direct audio links (mp3, ogg, m4a or webm).

Playlists = {
    { id = 'nx', name = 'NX Radio', tracks = {
        { title = 'Song', artist = 'Band', url = 'https://cdn.example.com/song.mp3', artwork = '' },
    } },
},
Config.Mail.Enabledbooleandefault: true

Turn the Mail app on or off.

Config.Mail.Domainstringdefault: 'auto'

Addresses are username@Domain. 'auto' uses the nx_mail_domain convar, else your sv_projectName as a .com. With nx_computer running, the laptop's domain wins.

Config.Mail.LegacyDomainstabledefault: { 'lsmail.lc' }

Old domains that still deliver.

Config.Mail.MaxPerBoxnumberdefault: 500

Mails one mailbox keeps.

Config.Mail.MaxBodynumberdefault: 8000

Longest mail body, in characters.

Config.Setup.Enabledbooleandefault: true

A new phone runs the setup screens on first boot.

Config.Setup.Languagestabledefault: { 'en' }

Languages offered on the first setup screen.

The screen

Players standing close to someone can read the phone in their hand.

Config.Screen.Enabledbooleandefault: true

Show phone screens to people nearby.

Config.Screen.Rangenumberdefault: 4.0

Metres within which players can read a phone in someone's hand.

Config.Screen.MaxVisiblenumberdefault: 6

Most phone screens one player's game draws at once, nearest first.

Config.Screen.PublishMsnumberdefault: 1000

How often, in milliseconds, an open screen is sent to people watching it.

Config.Screen.Selfbooleandefault: true

Your own screen shows on the phone in your hand in third person.

Config.Screen.Modestringdefault: 'picture'

'picture' shows a live picture of the real screen. 'text' shows a large-text view instead.

Config.Screen.PictureFpsnumberdefault: 4

Pictures per second while someone watches.

Config.Screen.Quadtabledefault: tuned for nx_phone_handset

Where the screen sits on the phone prop, in local metres: Offset, Width, Height, Lift, Normal, Up and LandscapeUp. Only change it if you swap Config.Prop.Model.

Config.Screen.StandBy.Enabledbooleandefault: true

A phone placed on a surface shows StandBy.

Config.Screen.StandBy.Commandstringdefault: 'placephone'

Chat command that lays your phone on the surface in front of you. '' turns it off.

Config.Screen.StandBy.Rangenumberdefault: 6.0

Metres within which a phone on a surface can be read.

Config.Screen.Protector.Itemstringdefault: 'nx_phone_protector'

The privacy screen item. Using it fits it to the phone in hand. '' turns privacy screens off.

Config.Screen.Protector.Anglenumberdefault: 30.0

Degrees off straight-on where a protected screen goes dark.

Garage, Home, Shift and Airwave

These apps read your other scripts through adapters in bridge/. Those files are not escrowed, so you can adjust them.

Config.Garage.Enabledbooleandefault: true

Turn the Garage app on or off.

Config.Garage.Adapterstringdefault: 'auto'

'auto' uses the first one started of jg-advancedgarages, cd_garage, qs-advancedgarages, okokGarage, mGarage, qbx_garages, qb-garages, esx and qb. Or name one of them.

Config.Garage.Keysstringdefault: 'auto'

Key script used for a valet car: 'auto', 'none', or a key script by name (qbx_vehiclekeys, qb-vehiclekeys, wasabi_carlock and others).

Config.Garage.Valet.Enabledbooleandefault: false

Bring a stored vehicle to the nearest road. Not available with qs-advancedgarages or okokGarage.

Config.Garage.Valet.Pricenumberdefault: 250

Valet price, taken from the bank and then cash. 0 is free.

Config.Home.Enabledbooleandefault: true

Turn the Home app on or off.

Config.Home.Adapterstringdefault: 'auto'

'auto' uses the first one started of qbx_properties, ps-housing, qs-housing, bcs_housing, loaf_housing, nolag_properties, vms_housing, esx_property and qb-houses. Or name one. 'none' turns it off.

Config.Home.Doorbell.Enabledbooleandefault: true

A doorbell ring notifies every online owner and key holder of the property.

Config.Home.Doorbell.Cooldownnumberdefault: 20

Seconds before the same door rings the phones again.

Config.Home.Doorbell.AnswerSecondsnumberdefault: 120

How long Let them in works after a ring.

Config.Home.Doorbell.Rangenumberdefault: 12.0

A housing script's ring must come from within this many metres of the door.

Config.Shift.Enabledbooleandefault: true

Turn the Shift job app on or off.

Config.Shift.Dutystringdefault: 'auto'

'auto' uses the Qbox, QBCore or ESX duty state. 'none' removes the duty switch, and everyone with the job gets alerts.

Config.Shift.OffDutyPrefixstringdefault: 'off'

For ESX without a duty flag: 'police' and 'offpolice' count as on and off duty when that job exists.

Config.Shift.Dispatch.Enabledbooleandefault: true

The dispatch inbox in Shift.

Config.Shift.Dispatch.KeepHoursnumberdefault: 12

Alerts older than this drop out of the inbox.

Config.Shift.Dispatch.MaxPerJobnumberdefault: 200

Alerts kept per job. The oldest go first.

Config.Shift.Dispatch.Mirrorbooleandefault: true

Copy alerts from ps-dispatch, cd_dispatch, qs-dispatch, rcore_dispatch and core_dispatch.

Config.Shift.Societystringdefault: 'auto'

Where the society balance comes from: 'auto', 'none', or one banking script by name (see bridge/jobs.lua).

Config.Shift.SocietyMinGradestring | numberdefault: 'boss'

Who sees the society balance: 'boss' for the job's boss grades, or a grade number.

Config.Shift.Emblemstabledefault: {}

The emblem shown for a job. Map a job to a built-in emblem (police, sheriff, ambulance, mechanic, taxi, realestate, news, lawyer), to your own square image, or to false for the plain Shift icon.

Emblems = {
    bcso = 'sheriff',
    burgershot = 'nui://my_assets/burgershot.png',
},

Common job names match a built-in emblem without an entry. Jobs with no emblem show their first letter.

Config.Shift.MultiJob.Enabledbooleandefault: true

Characters can hold several jobs, work one at a time and switch in Shift.

Config.Shift.MultiJob.Providerstringdefault: 'auto'

'auto', 'nx' (built in), 'qbox', 'ps-multijob' or 'core_multijob'.

Config.Shift.MultiJob.MaxJobsnumberdefault: 3

Jobs one character can hold.

Config.Shift.MultiJob.SwitchCooldownnumberdefault: 60

Seconds between two job switches.

Config.Shift.MultiJob.Fallbackstringdefault: 'unemployed'

Job a player is set to when they leave their active job.

Config.Shift.MultiJob.ExportResourcestabledefault: { 'nx_employeemanagement' }

Resources allowed to call the multijob exports (AddJob, RemoveJob, GetJobs, GetJobMembers, GetJobNames).

Config.Airwave.Enabledbooleandefault: true

Turn the Airwave radio app on or off.

Config.Airwave.Adapterstringdefault: 'auto'

Voice backend: 'auto', 'pma-voice', 'saltychat' or 'yaca-voice'.

Config.Airwave.MaxChannelnumberdefault: 500

Highest channel number.

Config.Airwave.Decimalsnumberdefault: 2

Channel precision: 100.25 needs 2. At most 3.

Config.Airwave.RequireItemstringdefault: ''

Item needed to use Airwave, for example 'radio'. '' needs none.

Config.Airwave.SweepSecondsnumberdefault: 10

How often players on a channel are re-checked for the item and job.

Config.Airwave.OnDutyOnlybooleandefault: false

Restricted channels need the job on duty, where the framework has duty.

Config.Airwave.EnforceInVoicebooleandefault: false

Also enforce Restricted inside pma-voice. pma-voice keeps one check per channel, so this replaces another radio script's checks on those channels. Leave it off when another radio script runs; the app enforces Restricted either way.

Config.Airwave.Restrictedtabledefault: channels 1 to 10 for police and ambulance

Channels only some jobs may join. Whole numbers cover their decimals.

Restricted = {
    { from = 1, to = 10, jobs = { 'police', 'ambulance' } },
    -- { from = 11, to = 12, jobs = { police = 2 } }, -- with a minimum grade
},

FaceTime, Depot, SDK and privacy

Config.FaceTime.Enabledbooleandefault: true

Turn FaceTime video calls on or off.

Config.FaceTime.MaxMembersnumberdefault: 4

People in one video call. Every phone sends to every other one.

Config.FaceTime.RingSecondsnumberdefault: 30

How long a video call rings before it counts as missed.

Config.FaceTime.Videotabledefault: { Width = 480, Height = 640, Fps = 20 }

What each phone sends, in portrait.

Config.FaceTime.MaxKbpsnumberdefault: 600

Upper limit per person you send to. It is lowered automatically in bigger calls.

Config.FaceTime.ChannelBasenumberdefault: 800000

Video calls use pma-voice channels 800001 to 899999. Keep it clear of Config.Calls.Voice.

Config.Depot.Enabledbooleandefault: true

Turn Depot, the app store, on or off.

Config.Depot.Lockedtabledefault: { 'calls', 'messages', 'contacts', 'camera', 'settings', 'depot', 'facetime' }

Apps every phone has and nobody can remove.

Config.Depot.Defaulttabledefault: { 'gallery', 'maps', 'clock', 'notes', 'weather', 'calculator', 'mail', 'browser', 'music', 'cards', 'beacon', 'yapp', 'companies', 'home' }

Apps a new phone comes with. The rest wait in Depot.

Config.Depot.AddToExistingtabledefault: { 'home', 'companies' }

Apps put once on phones that already exist, so a new default app reaches old phones too. Players can still remove them.

Config.SDK.Enabledbooleandefault: true

Let other resources add apps with RegisterApp. See the SDK page.

Config.Privacy.StreamerModebooleandefault: false

Streamer Mode default for new phones. Players switch it in Settings, Privacy.

Social and city apps

Config.Yapp.Enabledbooleandefault: true

Turn the Yapp social app on or off.

Config.Yapp.GovJobstabledefault: { 'police', 'ambulance', 'government' }

Jobs that get the government badge automatically.

Config.Yapp.ReservedHandlestabledefault: { 'admin', 'lspd', 'police', 'ems', 'gov', 'weazel', 'yapp' }

Handles only GovJobs may take.

Config.Yapp.HandleCooldownDaysnumberdefault: 30

Days before a profile can change its handle again.

Config.Yapp.HandleHoldDaysnumberdefault: 14

Days an old handle stays held after a change.

Config.Yapp.EditWindowSecnumberdefault: 300

Seconds a post can be edited after posting.

Config.Yapp.MaxEditsnumberdefault: 2

Edits allowed per post.

Config.Yapp.TrendMinutesnumberdefault: 5

Minutes between trending recalculations.

Config.Yapp.WordBlacklisttabledefault: {}

Lowercase words refused in posts, names, bios and handles.

Config.Ember.Enabledbooleandefault: true

Turn the Ember dating app on or off.

Config.Ember.MinAgenumberdefault: 18

Youngest age a profile can have. Never below 18.

Config.Ember.MaxAgenumberdefault: 99

Oldest age a profile can have.

Config.Ember.MinBionumberdefault: 10

Shortest bio, in characters.

Config.Ember.MaxBionumberdefault: 300

Longest bio, in characters (at most 300).

Config.Ember.MinPhotosnumberdefault: 1

Fewest photos per profile, taken from the player's own Photos.

Config.Ember.MaxPhotosnumberdefault: 6

Most photos per profile (at most 6).

Config.Ember.InactiveDaysnumberdefault: 7

Profiles unused this long leave everyone's deck.

Config.Ember.DeckBatchnumberdefault: 10

Cards sent to the phone at a time.

Config.Ember.MaxMessagenumberdefault: 500

Characters per chat message.

Config.Ember.LikesPer10Minnumberdefault: 60

Likes per 10 minutes, per account and per character.

Config.Ember.MessagesPerMinutenumberdefault: 30

Messages per minute, per account and per character.

Config.Ember.Genderstabledefault: { 'woman', 'man', 'nonbinary' }

Gender ids (a-z, 0-9). A new id needs a phone.ember.gender.id label in the locale file.

Config.Cipher.Enabledbooleandefault: true

Turn Cipher, the anonymous chat rooms, on or off. Players appear only under an alias.

Config.Cipher.AllowCustomAliasbooleandefault: true

Players may pick their own alias (3 to 20 characters, unique).

Config.Cipher.MaxRoomsPerAccountnumberdefault: 5

Rooms one account can own.

Config.Cipher.MaxJoinedRoomsnumberdefault: 20

Rooms one account can be in. Starter rooms are not counted.

Config.Cipher.MaxMembersnumberdefault: 50

Members per room. Starter rooms have no cap.

Config.Cipher.RetentionDaysnumberdefault: 14

Messages older than this are deleted.

Config.Cipher.NotifyCooldownSecondsnumberdefault: 30

At most one banner per room per phone in this time.

Config.Cipher.SeedRoomstabledefault: { { key = 'underground', name = 'The Underground' } }

Starter rooms every player joins automatically. Keep each key the same once the server is live.

Config.Bulletin.Enabledbooleandefault: true

Turn the Bulletin news app on or off. With nx_computer running, Bulletin is the front page of the laptop's Newsroom, and the laptop's settings decide who writes.

Config.Bulletin.Jobstabledefault: { reporter = 0, weazel = 0 }

Jobs that can write articles, each with its lowest grade. Standalone only.

Config.Bulletin.EditorGradenumberdefault: 2

From this grade, a writer can edit anyone's article and send Breaking news. Standalone only.

Config.Bulletin.BreakingCooldownMinnumberdefault: 10

One Breaking alert per this many minutes, across the server.

Config.Bulletin.BreakingHoursnumberdefault: 6

How long the front page shows the Breaking banner.

Config.Bulletin.Categoriestabledefault: { 'city', 'crime', 'business', 'sport', 'weather', 'opinion' }

Article categories.

Config.Stall.Enabledbooleandefault: true

Turn the Stall classifieds app on or off. With nx_computer running, Stall shows the laptop's classifieds board and uses its limits.

Config.Stall.ExpiryDaysnumberdefault: 14

A listing comes down after this many days.

Config.Stall.MaxActivenumberdefault: 10

Live listings per account.

Config.Stall.PostCooldownSecnumberdefault: 30

Wait between two posts.

Config.Stall.PostCostnumberdefault: 0

Charged per post, from the bank and then cash. 0 is free.

Config.Stall.MaxPhotosnumberdefault: 4

Photos per listing (0 to 4).

Config.Trace.Enabledbooleandefault: true

Turn Trace, the person and vehicle lookup, on or off.

Config.Trace.VisiblePersontabledefault: { 'number', 'job' }

What a person search shows. Any of number, job, grade, gender and age.

Config.Trace.VisibleVehicletabledefault: { 'model', 'color', 'owner' }

What a plate search shows. Any of model, color and owner (name only).

Config.Trace.HiddenJobstabledefault: { 'police' }

Jobs never listed. Their cars show no owner.

Config.Trace.HiddenPersonstabledefault: {}

Character identifiers never listed.

Config.Trace.HiddenPlatestabledefault: {}

Plates that never answer.

Config.Trace.SearchCostnumberdefault: 1000

Charged per search, from the bank and then cash, whether anything is found or not. 0 is free.

Call Screening and robocalls

Config.Screening.Enabledbooleandefault: true

Players can turn on Call Screening in Settings. A caller who is not in their contacts states who they are before the phone rings.

Config.Screening.Defaultstringdefault: 'off'

Setting for new phones: 'off', 'ask' (the caller types a reason first) or 'silence' (straight to voicemail).

Config.Screening.ReasonSecondsnumberdefault: 20

Time the caller has to answer.

Config.Screening.MaxReasonnumberdefault: 120

Characters in a typed reason.

Config.Screening.VoiceClipbooleandefault: true

Callers may also record a short clip. Needs the media backend.

Config.Screening.ClipSecondsnumberdefault: 10

Longest voice clip.

Config.Screening.SpamReportsnumberdefault: 3

Different accounts that must report a number before it shows Spam Risk.

Config.Screening.SpamDaysnumberdefault: 14

Reports older than this stop counting.

Config.Robocalls.Enabledbooleandefault: true

The robodialer in Cipher: pay to call many numbers with a recorded pitch. A victim who presses 1 is connected to the campaign's own number.

Config.Robocalls.Jobstabledefault: {}

Only these jobs may run campaigns. An empty list allows anyone.

Config.Robocalls.PricePerCallnumberdefault: 25

Paid up front for every number dialled.

Config.Robocalls.MoneyAccountstringdefault: 'black_money'

'cash', 'bank' or 'black_money'. Falls back to cash where there is no black money.

Config.Robocalls.MaxTargetsnumberdefault: 20

Numbers one campaign dials.

Config.Robocalls.CallGapSecondsnumberdefault: 20

Seconds between two calls of one campaign.

Config.Robocalls.VictimCooldownMinutesnumberdefault: 30

A number gets at most one robocall in this time.

Config.Robocalls.CampaignCooldownMinutesnumberdefault: 30

Wait between two campaigns of one character.

Config.Robocalls.MaxPitchnumberdefault: 200

Characters in a pitch.

Config.Robocalls.PitchClipSecondsnumberdefault: 20

Longest recorded pitch. Needs the media backend.

Gloss, Glimpse and Flick

Config.Gloss.Enabledbooleandefault: true

Turn the Gloss photo app on or off.

Config.Gloss.MaxPhotosnumberdefault: 10

Photos per post.

Config.Gloss.MaxCaptionnumberdefault: 500

Characters in a caption.

Config.Gloss.MaxCommentnumberdefault: 300

Characters in a comment.

Config.Gloss.StoryHoursnumberdefault: 24

A story disappears after this.

Config.Gloss.WordBlacklisttabledefault: {}

Lowercase words refused in captions, comments, names and bios.

Config.Glimpse.Enabledbooleandefault: true

Turn the Glimpse snap app on or off.

Config.Glimpse.SnapHoursnumberdefault: 24

Opened snaps and chat lines vanish after this unless saved.

Config.Glimpse.StoryHoursnumberdefault: 24

A story disappears after this.

Config.Glimpse.StreakHoursnumberdefault: 36

A streak breaks when this long passes without a snap both ways.

Config.Glimpse.BestFriendsnumberdefault: 8

Size of the best friends list.

Config.Glimpse.Mapbooleandefault: true

The friend map. Everyone starts hidden and chooses who sees them.

Config.Glimpse.MapUpdateSecondsnumberdefault: 10

How often positions on the friend map update.

Config.Flick.Enabledbooleandefault: true

Turn the Flick video app on or off.

Config.Flick.MaxSecondsnumberdefault: 60

Longest video.

Config.Flick.MaxCaptionnumberdefault: 300

Characters in a caption.

Config.Flick.MaxCommentnumberdefault: 300

Characters in a comment.

Config.Flick.Musicbooleandefault: true

A Waveform station track can play over a video (Config.Music.Playlists).

Config.Flick.WordBlacklisttabledefault: {}

Lowercase words refused in captions, comments, names and bios.

Payphones

Payphones in the world. Anyone can call out, and each booth keeps a number people can call back. The "Use payphone" option needs ox_target.

Config.Callbox.Enabledbooleandefault: true

Turn payphones on or off.

Config.Callbox.Modelstabledefault: 11 payphone models

Prop models that work as payphones, for example 'prop_phonebox_01a'. The payphone options sit on the booth prop itself, and only on one that stands there: a booth a car knocked down, one a map or another script hides, or one lying on its side offers nothing.

Config.Callbox.PricePerMinutenumberdefault: 5

Cash per started minute. 0 is free.

Config.Callbox.FreeNumberstabledefault: { '911' }

Numbers that are always free to call.

Config.Callbox.Rangenumberdefault: 2.5

Metres. Walking further away hangs up.

Config.Callbox.NumberPrefixstringdefault: '555-2'

Booth numbers are this prefix plus three digits.

Config.Callbox.Whitelistbooleandefault: true

Only known payphone spots in the base map can become booths.

Config.Callbox.ExtraBoothstabledefault: {}

Payphones your custom maps add, as vector3 positions, for example vector3(-36.35, -1379.17, 28.33). These only let a booth prop at that spot register when Whitelist is on; they never place a target by themselves. A custom booth model also goes in Models.

Config.Callbox.MaxBoothsPerCharacternumberdefault: 20

New booths one character may ever register by using them first. 0 means no cap.

Config.Callbox.RequireReachbooleandefault: true

Show the payphone options only on a booth the player can actually reach, not one buried in a wall or a shelf.

Config.Callbox.Handsettabledefault: the casino phone receiver

The receiver prop held during a payphone call: Model, Bone, Offset and Rotation.

Config.Callbox.Animtabledefault: cellphone@ call pose

The call pose: Dict, DictFemale and Base.

MDT, Live Activities, Tap to Pay and Backups

Config.MDT.Enabledboolean | stringdefault: 'auto'

The police MDT companion: seized phones, tower dumps and device traces, always under a warrant. 'auto' turns it on while an allowed MDT resource runs.

Config.MDT.ExportResourcestabledefault: { 'nx_computer' }

Resources allowed to call the MDT exports.

Config.MDT.Jobstabledefault: { 'police' }

The officer must hold one of these jobs. An empty list skips the check.

Config.MDT.TowerSizenumberdefault: 1000

Metres per side of a cell tower square.

Config.MDT.PingRetentionDaysnumberdefault: 7

Days tower pings are kept.

Config.MDT.ExtractSecondsnumberdefault: 45

Time to read an open phone, or one whose passcode is known.

Config.MDT.CrackMinutesnumberdefault: 20

Time to crack a locked phone. 0 turns cracking off.

Config.LiveActivities.Enabledbooleandefault: true

Turn Live Activities on or off.

Config.LiveActivities.MaxPerPlayernumberdefault: 8

Live activities at once per player.

Config.LiveActivities.MaxPerOwnernumberdefault: 2

Live activities per resource per player.

Config.LiveActivities.MaxOnLocknumberdefault: 3

Cards shown on the lock screen.

Config.LiveActivities.DefaultTTLnumberdefault: 3600

Seconds before an activity ends by itself, unless it sets its own ttl (at most 8 hours).

Config.LiveActivities.DefaultStalenumberdefault: 600

Seconds without an update before a card dims.

Config.TapToPay.Enabledbooleandefault: true

A billing job takes card payments on its phone and the customer confirms on theirs. Needs nx_realbanking; off without it.

Config.TapToPay.Rangenumberdefault: 1.5

Metres between the two phones.

Config.TapToPay.Minnumberdefault: 1

Smallest payment.

Config.TapToPay.Maxnumberdefault: 25000

Largest payment. nx_realbanking's own invoice limits apply too.

Config.TapToPay.ExpireSecondsnumberdefault: 90

A charge nobody paid expires after this.

Config.TapToPay.RequireDutybooleandefault: true

The merchant must be on duty, when the job system reports duty.

Config.TapToPay.RefundHoursnumberdefault: 24

How long a payment can be refunded. 0 means no refunds.

Config.TapToPay.RefundMinGradeboolean | numberdefault: false

Who may refund: false for the boss only, or a grade number and up.

Config.TapToPay.DeclineCooldownSecondsnumberdefault: 5

After a customer declines, the same charge is not offered to them again for this many seconds.

Config.TapToPay.HistoryHoursnumberdefault: 24

Hours of charges shown in the merchant's history.

Config.TapToPay.KeepDaysnumberdefault: 30

Days charge records are kept.

Config.TapToPay.ExportResourcestable | nildefault: nil

Resources allowed to use CreateTerminalCharge and GetTerminalCharge. nil allows any resource.

Config.Backup.Enabledbooleandefault: true

Phone backups. A backup is restored during setup of a new or erased phone.

Config.Backup.AutoDefaultbooleandefault: true

New phones back up automatically unless the owner turns it off.

Config.Backup.AutoEveryHoursnumberdefault: 24

Hours between automatic backups.

Config.Backup.MaxBytesnumberdefault: 262144

Largest backup, in bytes (256 KB).

Config.Backup.KeepPerDevicenumberdefault: 3

Backups kept per phone.

Config.Backup.MaxPerCharacternumberdefault: 10

Backups kept per character.

Config.Backup.KeepDaysnumberdefault: 60

Older backups are deleted, except each phone's newest.

Config.Backup.ManualCooldownSecondsnumberdefault: 60

Wait between two manual backups.

Config.Backup.ExtraPrefstabledefault: {}

Extra setting keys to include in backups, for example { 'x.myapp.' } for an SDK app.

Look

Config.Accentstringdefault: '#2b7fff'

The accent colour of the phone's interface. Use a hex colour.

The phone in your hand

Config.Prop.Enabledbooleandefault: true

Show a phone prop in the player's hand.

Config.Prop.Modelstringdefault: 'nx_phone_handset'

The prop model. nx_phone_handset ships with the resource.

Config.Prop.Bonenumberdefault: 28422

Hand bone the prop attaches to. 28422 is the right hand, 60309 the left.

Config.Prop.Offsetvector3default: vector3(0.0, -0.005, 0.0)

Small position nudge. The model sits correctly at zero.

Config.Prop.Rotationvector3default: vector3(0.0, 180.0, 0.0)

Rotation that turns the screen toward the face.

Config.Prop.OffsetLandscapevector3default: vector3(0.0, -0.005, 0.0)

Position nudge while the phone is held sideways for the camera.

Config.Prop.RotationLandscapevector3default: vector3(0.0, 90.0, 0.0)

Rotation while the phone is held sideways.

Config.Anims.Holdstringdefault: 'classic'

How the phone is held while reading. 'classic' is the cellphone@ hold; 'relaxed' is the lower, looser texting hold with male and female variants.

Config.Anims.Dictstringdefault: 'cellphone@'

Animation dictionary for the classic hold. cellphone@female has female variants.

Config.Anims.TextInstringdefault: 'cellphone_text_in'

Raising the phone. TextIdle and TextOut set holding and putting it away.

Config.Anims.CallInstringdefault: 'cellphone_call_in'

Raising the phone to the ear. CallIdle and CallOut set the call pose and hanging up.

Config.Anims.BlendInnumberdefault: 8.0

Blend-in speed. BlendOut (-8.0) is the blend-out speed.

Config.Anims.FlagEnternumberdefault: 1048634

Playback flags for raising the phone. FlagIdle and FlagExit cover holding and putting it away. The shipped flags let players walk and aim while holding the phone; change them only if you know GTA's animation flags.

Config.Anims.ReassertMsnumberdefault: 500

How often, in milliseconds, the idle pose is re-applied if it blends off.

nx_computer

Config.DependOnComputerboolean | stringdefault: 'auto'

Share accounts, mail and the laptop's apps with nx_computer. 'auto' turns it on when nx_computer is running. true always expects it (the self-check warns if it is missing), and false keeps the two separate.

Phone extras

Config.CallBarOnClosebooleandefault: true

Putting the phone away during a call lowers it to the bottom of the screen with a call bar.

Config.CreateAccountsbooleandefault: true

Players may create new accounts in Settings, Accounts, up to MaxAccountsPerCharacter.

Config.PhoneName.BlockedWordstabledefault: {}

Words a phone name may not contain, for example { 'admin', 'police' }. Letters and digits are compared.

config_server.lua

This file loads on the server only and never reaches players. Keep every key, token, secret and webhook here.

Media storage

Config.Server.Media.Backendstringdefault: 'fivemanage'

Where photos, videos and recordings are stored. 'fivemanage' is the only backend that works today.

Config.Server.Media.MaxUploadKBnumberdefault: 8192

Largest single upload, in KB.

Config.Server.Media.RetentionDaysnumberdefault: 0

Delete uploads older than this. 0 keeps them.

Config.Server.Media.PresignSecondsnumberdefault: 60

How long a phone's upload link stays valid, in seconds.

Config.Server.Media.PresignsPerHournumberdefault: 30

Upload links one player may request per hour for voicemail, greetings and memos.

Config.Server.Media.VerifyWindowSecondsnumberdefault: 600

How long the server keeps checking that an upload arrived. The storage CDN can take minutes to show a new file.

Config.Server.Media.FiveManage.Urlstringdefault: ''

A self-hosted, Fivemanage-compatible server (https only). '' uses the official Fivemanage API. The server must also let your ApiKey look a file up (GET <Url>/file/<id>, returning the file with the metadata the phone sent) and delete it. Without the lookup no photo, video or voice note is ever confirmed: the phone says the storage did not confirm the upload, and the server console names the lookup address.

Config.Server.Media.FiveManage.ApiKeystringdefault: ''

Your own Fivemanage API key (Dashboard, Tokens). One API v3 key covers images, video and audio. Leave it empty to keep uploads off.

Config.Server.Media.FiveManage.ImageTokenstringdefault: ''

Older v2 key name, used only when ApiKey is empty.

Config.Server.Media.CdnHoststabledefault: {}

Hosts uploaded files are served from. An empty list means r2.fivemanage.com plus the host of FiveManage.Url. List a self-hosted server's file host here if it differs. '.example.com' matches any subdomain.

The FiveMerr, S3 and SelfHost blocks in the file are placeholders for backends that are not supported yet.

Rate limits

Per-player caps. Each entry is { calls, seconds }: how many times one player may do that within the window.

Config.Server.RateLimits.Defaulttabledefault: { 30, 10 }

Any action without its own entry.

Config.Server.RateLimits.Opentabledefault: { 10, 10 }

Opening the phone.

Config.Server.RateLimits.Calltabledefault: { 10, 60 }

Placing a call.

Config.Server.RateLimits.Messagetabledefault: { 20, 10 }

Sending a message.

Config.Server.RateLimits.Mediatabledefault: { 6, 60 }

Uploading a photo or video.

Config.Server.RateLimits.Contactstabledefault: { 20, 10 }

Adding or editing contacts.

Config.Server.RateLimits.ApiMessagetabledefault: { 60, 10 }

The SendMessage export, counted per calling resource, not per player.

FaceTime

Config.Server.FaceTime.Icetabledefault: Google's public STUN server

STUN and TURN servers handed to the phones in a video call. Sent only to the members of that call.

Config.Server.FaceTime = {
    Ice = {
        { urls = 'stun:stun.l.google.com:19302' },
        -- { urls = 'turn:turn.example.com:3478', username = 'user', credential = 'secret' },
    },
}
Config.Server.FaceTime.RelayOnlyboolean | nildefault: nil

Force every call through your TURN server so players only see the relay's address. nil turns it on when a TURN server is configured. Needs a TURN entry or TurnSecret, or calls cannot connect.

Config.Server.FaceTime.TurnSecretstringdefault: not set

A coturn use-auth-secret. The server then mints short-lived TURN logins per call, which is safer than a fixed username and password that every caller receives.

Config.Server.FaceTime.TurnUrlstabledefault: not set

The TURN server URLs used with TurnSecret, for example { 'turn:turn.example.com:3478' }.

Config.Server.FaceTime.TurnTtlnumberdefault: 3600

Seconds a minted TURN login stays valid.

Webhooks

Config.Server.Webhookstabledefault: all ''

Discord webhook URLs. '' turns a log off.

  • Yapp: new posts and reports.
  • Cipher: rooms created and every message (an admin log).
  • Bulletin: articles published or edited.
  • Stall: listings posted or removed.
NX Docs