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 (
F2by 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,
utf8mb4and 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
unzipandsha256sum.
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