Skip to content
Eureka Phone: Duo

Overview

The Duo is a foldable, dual-screen phone for FiveM. This section covers the phone core it runs on, its page resource, and how to run them.

Eureka Phone ships two resources, and the Duo is one of its two interfaces:

Resource What it is Scripts
eureka_phone The phone core: the server, every app, the framework and inventory adapters, the database schema, the page router and the NUI bridge. Server and client
eureka_duo The Duo's page: the foldable dual-screen interface, its client settings and its own keys. It runs the core's bridge and has no server script. Client only

Every phone design sold by Eureka is a page resource on this one core. A server that installs the Duo and the iPhone-style phone runs one core: one number per character, and texts and calls between both designs.

What the Duo does

  • Two screens, one phone. Apps, conversations and tools spread across both halves; a fold key (F2 by default) folds and unfolds the device. The second page can run across both halves or as one screen.
  • System apps always on: phone, messages, contacts and settings, with SIM slots per phone (duo_line_slots, 2 by default), group conversations, receipts and voicemail.
  • Optional apps chosen per server with duo_apps: notes, mail, photos, camera, reminders, wallet, invoices, crypto, a microblog and a photo feed, classifieds and a marketplace, dating, crews, DarkChat, garage, keys, homes, services directory, 911, job center, news, rides and location sharing. See Apps and what they need.
  • Setup on first use: language, passcode, Face Pass, Eureka ID, appearance and performance settings. AirDrop sends contact cards and files to a phone nearby.
  • Calls through pma-voice. Without it, calls are unavailable and everything else keeps working.
  • Media on your own object store (any S3-compatible service) for photos, attachments and AirDrop files. Without it the phone runs without media.

Requirements

  • An FXServer artifact and a game client build recorded as verified in the release's docs/compatibility.md. OneSync for valet, rides, location sharing, crew pings and AirDrop.
  • oxmysql and MariaDB 10.11+ or MySQL 8.0+ with InnoDB, utf8mb4 and a UTC server time zone.
  • A framework with an adapter: Qbox (qbx_core), QBCore (qb-core), ESX (es_extended) or standalone (one character per license).
  • An inventory with an adapter: ox_inventory. Phone items must be defined with stack = false.
  • pma-voice for calls (optional).
  • An S3-compatible object store for media (optional): AWS S3, Cloudflare R2, MinIO or Garage.
  • Node.js 22+ on the machine that applies database migrations, and a bash shell with unzip and sha256sum.

The phone fails closed. With the default duo_adapter_verification "required", it stops at start (ADAPTER_UNVERIFIED, DISABLED) on a framework or inventory version that has not passed the live adapter smoke test. Run it on a staging server with set duo_adapter_verification "warn" first, work through the release smoke test, and only then open it to players.

Where things live

Path Who edits it Notes
server.cfg You Every duo_* setting is a convar set with set. See Server settings.
eureka_phone/config/offers.lua, valet.lua, services.lua, emergency.lua, jobs.lua You Server-only lists: billing offers, valet points, the services directory, 911 services, job listings.
eureka_phone/config/client.lua You The key that opens the phone (F1) and the flashlight look. Downloaded by clients: no secrets.
eureka_duo/config/client.lua You The Duo page's items (models), its fold key and the bridge's timings. Downloaded by clients: no secrets.
eureka_duo/web/dist The release The built page. A folder without it starts, but the phone key does nothing.
sql/migrations, tools/migrate The release The schema and the migration tool. Never run the SQL by hand.

Last updated October 2, 2026