Pulse Phone docs
Pulse Phone — Quick start
Install one resource named phone. Keep your existing framework and supported scripts; Pulse detects them when it starts.
PhoneHub + Pulse is a separate edition with its own licence and its own copy of this phone. If you bought that edition, follow its own install guide instead: a server runs one phone resource.
1. Check your server
| What | Needed? |
|---|---|
| OneSync on, game build 2699 or newer | Required |
| A database: oxmysql (or mysql-async, ghmattimysql) on MariaDB 10.6+ or MySQL 8 | Recommended. Without a SQL resource the phone keeps its data in the server's key/value store |
| One voice resource: pma-voice, mumble-voip, SaltyChat, TokoVOIP or YACA | Recommended. Without one, calls connect but carry no audio |
| screenshot-basic | Recommended, so the camera can save photos. The standard resource works |
| A framework and an inventory | Optional. Without them the phone runs standalone |
Start your database, framework, inventory, voice resource and screenshot-basic before Pulse. See requirements and your framework for the correct order.
Back up your database before the first start. Pulse creates its own tables. If another phone left tables with the same names, they are renamed to old_<name> (nothing is deleted); the details are in requirements.
2. Copy the phone folder
Download your purchase from your Cfx.re account. Copy the phone folder containing fxmanifest.lua into your server's resources. Keep its name. Your server key must belong to the account that owns the asset.
Uploading with FTP (a hosted server): use Binary mode (FileZilla: Transfer > Transfer Type > Binary), or upload the zip and extract it on the server. Auto mode changes the locked files and the phone refuses to start; the symptoms and the fix are in Troubleshooting. The folder you upload must match this table; the start-up check names any file that is missing or the wrong size.
The Pulse Phone 1.4.2 download:
| Folder or file | Files | Size |
|---|---|---|
ui/ |
3,932 | 78.3 MB |
stream/ |
40 | 30.5 MB |
config/ |
138 | 23.2 MB |
d6c1e95a/ (the locked code; its name differs per release) |
7 | 5.5 MB |
data/ |
2 | 1.4 MB |
bridge/ |
55 | 0.5 MB |
guides/ |
13 | 0.2 MB |
phone.sql |
1 | 0.2 MB |
fxmanifest.lua |
1 | 6 KB |
whole phone folder |
4,204 | 139.7 MB |
Updating an existing installation? Follow Updating first to preserve settings and player media. Stop the previous phone resource before switching to Pulse.
3. Add inventory items
Open Inventories and follow the instructions for the inventory you already use. Supplied definitions and pictures are in config/items/. Merge entries into your inventory; do not replace its whole item file.
ESX's default inventory and QBCore can register missing definitions automatically. Other inventories may require supplied entries. Copy item pictures where your inventory expects them. Standalone without an inventory needs no items.
4. Start Pulse
Keep automatic detection in config/config.lua. The first section contains framework, language, inventory selection, phone item and keys. Optional settings are indexed in Configuration.
Add this after your existing dependencies in server.cfg:
ensure phone
add_ace group.admin phone.admin allowRestart the server. Pulse creates its database tables when the SQL connection is available. Read its console check and follow any corrective instructions. Run phone:health to repeat it.
5. Open your phone
Join as an administrator, open F8 and enter phone:setup. Confirm the detected framework and inventory, then complete the guided setup. Press F1 or use /phone to open the phone. If your settings require an item, buy a phone and use its box from inventory first.
Settings saved in Settings → Server override matching file settings. Reset a saved override there if you want the file value to apply again.
6. Optional: the lighter screenshot-basic
Your download also contains a screenshot-basic folder. It is the CitizenFX screenshot-basic (MIT licence) with one change: the original keeps redrawing the game image for its capture layer every frame, even when nobody is taking a photo, and this copy draws only while a photo is being taken. The resource name, its exports (requestScreenshot, requestScreenshotUpload, requestClientScreenshot) and its events are unchanged, and it comes already built, so it does not need to build itself on first start. The changed files are listed in screenshot-basic/ZERODEV-CHANGES.md.
Pulse works with either copy, so this step is optional. Other scripts on your server use screenshot-basic too, so switch on a test server first if you have one:
- Rename your current
screenshot-basicfolder (for example toscreenshot-basic.bak) and move it out ofresources, so you can put it back. - Copy ours into
resourceswith the same name,screenshot-basic, and keep the sameensure screenshot-basicline. - Restart the server and try every script that takes screenshots: the phone camera, and any report, evidence or bodycam tool you run.
- If anything behaves differently, delete our copy, put your old folder back as
screenshot-basicand restart.
Set up the features you use
- Calls, video and Live: supported voice resources, call controls and production video connection setup.
- Photos and videos: built-in storage, FiveManage and other upload options. Private service keys stay in your server configuration. On a hosted server whose web port is not reachable, photos need FiveManage: two lines in
server.cfg(set phone_media_provider "fivemanage"andset phone_fivemanage_token "<token>"). - Configuration: shops, apps, accessories, languages and optional features.
- Troubleshooting: find the symptom and follow its fix.
- Developer integrations: custom scripts and advanced connection settings.
Normal installation does not require editing bridge/, ui/ or stream/. Keep the complete resource together, including its model and map assets.