Skip to content
Eureka Phone: Duo

Server settings

Every setting is a server convar. The ones you will actually touch, grouped by what they change, plus the page's client settings and staff moderation.

The core reads its settings from convars at start. An invalid value prints one CONFIG_INVALID line per problem followed by DISABLED, and the phone registers nothing until it is fixed and the resource restarted. The full table, with every value range, is in the archive's docs/runbooks/configuration.md; this page lists what most servers change.

Set every value with set. setr lets clients read it and sets publishes it in the server list. Secrets (database passwords, object store keys) belong only in set convars in an untracked server.cfg, never in config/shared.lua or any client.lua, which clients download.

Required

Convar Values Notes
duo_framework qbox, qbcore, esx, standalone Where character identity comes from. No default.
duo_inventory ox_inventory How phone possession is proven. Define phone items with stack = false.
mysql_connection_string oxmysql URL The runtime account from Installation.

Phone, numbers and limits

Convar Default Notes
duo_phone_items phone Inventory items that count as a phone. List the item of every installed page: the Duo's is phone; with the iPhone-style page too, "phone,iphone".
duo_line_slots 2 SIM slots per phone (1 to 8).
duo_number_prefix unset Every new number starts with it, for example 555.
duo_number_length 7 Total digits, prefix included. Existing numbers never change.
duo_reserved_numbers unset Numbers never given to players, such as your service numbers.
duo_max_contacts 200 Contacts one character may keep.
duo_rate_limit_per_minute 20 Requests per player per minute, per action.
duo_adapter_verification required warn lets an unverified framework or inventory version run with a warning. Staging only.

Calls and voice

Convar Default Notes
duo_voice pma none turns calls off. Messaging never depends on voice.
duo_voice_resource pma-voice Set it if pma-voice runs under another folder name.
duo_call_ring_seconds 30 How long a call rings before it is missed.
duo_call_reconnect_seconds 30 How long a disconnected participant may rejoin; 0 ends their part at once.
duo_call_channel_min / duo_call_channel_max 1000000 / 1999999 The pma-voice channel range calls use.

Media (photos, attachments, AirDrop files)

Off by default. Turning it on needs an S3-compatible bucket; keep the bucket private, reads use signed URLs.

server.cfg
set duo_media_provider "s3"
set duo_media_s3_endpoint "https://<account>.r2.cloudflarestorage.com"
set duo_media_s3_region "auto"            # us-east-1 on AWS
set duo_media_s3_bucket "eureka-duo-media"
set duo_media_s3_access_key "<access key ID>"
set duo_media_s3_secret_key "<secret access key>"
set duo_media_s3_path_style "true"        # false puts the bucket in the host name

Add a CORS rule on the bucket for the origin https://cfx-nui-eureka_duo (and https://cfx-nui-<resource> for every other phone page you run) allowing GET and PUT with the headers Content-Type and x-amz-checksum-sha256. Storage per character is duo_media_quota_bytes (256 MiB by default); the largest image is duo_media_image_max_bytes (8 MiB).

Apps

Convar Default Notes
duo_apps all optional apps except DarkChat, rides and location Comma-separated app IDs, or none. The system apps (phone, messages, contacts, settings) are always on. See Apps and what they need.
duo_app_items unset Apps gated by an inventory item, as app:item, for example darkchat:burner_laptop.
duo_mail_domain duo.mail The domain of in-game mail addresses.
duo_wallet, duo_crypto, duo_billing off Each needs a money adapter verified on your framework; otherwise the app shows itself unavailable.
duo_garage, duo_keys, duo_housing, duo_valet unset / off Name the installed resource (qb_garages, qbx_vehicles, qb_vehiclekeys, qb_houses, qbx_properties). Each adapter runs only on a version a live test verified.
duo_emergency_location, duo_crews_pings off Live positions in 911 reports and crew pings. Need OneSync.
duo_onboarding true Setup on a phone with a new holder: language, passcode, Face Pass, Eureka ID.
duo_languages en Languages the setup offers, for example en,fr.
duo_airdrop true Needs OneSync; files also need media.

Services directory, 911 and job listings

Three server-only files in eureka_phone/config/ ship empty and are validated at start:

  • services.lua: Duo.ServiceDirectory, the official businesses in the services app ({ id, name, category, number?, jobs?, requests? }). Players advertise their own in the Yellow Pages.
  • emergency.lua: Duo.EmergencyServices, the services a 911 report can go to ({ id, label, jobs }), answered by on-duty holders of those jobs.
  • jobs.lua: Duo.JobListings, the job center's listings ({ id, job, title, description?, open? }). Accepting an application hires nobody; hire in game through your job resource.

The Duo page settings

The file is eureka_duo/config/client.lua. Downloaded by every client, so it holds no secret and grants nothing; the server checks every request again.

Setting Default Notes
models { 'phone' } The phone items this page shows. Must also be in duo_phone_items.
keys.fold F2, "Phone: fold or unfold" The Duo's own key. Players rebind it in the game's key bindings; a saved binding wins.
timeouts open 13 s, sync 10 s, default 6 s How long the bridge waits for the server. Keep each below the page's own timeouts.
maxPending 32 Requests in flight per player.
maxPayloadBytes 262144 Largest request. Keep it above twice duo_notes_max_bytes and duo_mail_max_bytes.
keepInput false true keeps game input while the phone is open, except while typing.

The key that opens the phone belongs to the core: phoneKey in eureka_phone/config/client.lua (F1, "Phone: open or close"). A change there needs restart eureka_phone, then ensure eureka_duo.

Staff moderation: duo_mod

One restricted server command moderates the social apps, listings, dating, DarkChat, crews, 911 and news. Grant it to a staff group by ACE; there is no network event, export or phone screen for it.

server.cfg
add_ace group.admin command.duo_mod allow

The console and RCON can always run it. The archive's docs/runbooks/configuration.md lists every subcommand.

Last updated October 2, 2026