ZeroDev Scripts

Changelog

Release notes for every product, as shipped inside the package. New versions are published to the same Keymaster asset and announced in #pulse-updates on the Discord.

Phone

Pulse Phone

32 releases, newest first, as written in the package's own CHANGELOG. Version 1.2.8 is current.

Updated 1.2Product page

v1.2.7

  • Simplified the customer configuration into six editable files while preserving existing settings and load order.
  • Moved optional developer examples into a separate companion download.
  • Added server-only FiveManage setup in config/apiKeys.lua; existing server.cfg credentials keep priority.

v1.2.6 Simpler setup and documentation

  • Common settings are grouped at the start of the main configuration; existing paths and values are preserved.
  • Short Quick Start with separate framework, inventory, media, call, configuration and troubleshooting guides.
  • Website and packaged help use the same sources, with advanced developer information kept separate.
  • No call, media, framework or gameplay behavior changes in this release.

v1.2.5

Fixed

  • A rejected voice-channel move now clears the affected call instead of leaving a connected screen without audio. Failed switches do not join a second channel; partial connections are released through the existing voice integration.
  • Voice resources that reject call operations are reported unavailable until restarted after correction.

Setup

  • Quick installation follows the server's existing framework and inventory. Advanced video connection settings are kept in the developer integration guide, with a short setup link in the beginner guide.

v1.2.4

Fixed

  • Call waiting, hold, swap, merge and participant updates share synchronized call state and recover cleanly after interrupted sessions.
  • Call audio routes use the selected voice integration, with private earpiece/Buds behavior and accessory fallback.
  • Video and Live sessions handle repeated signaling, peer recovery, foreground camera ownership and session cleanup. Live previews stay awake while composing a broadcast.
  • Camera preview avoids repeated GPU readbacks. Existing capture, recording and gallery persistence remain unchanged.
  • Framework and resource-provider selection validate the required APIs, respect overrides and recover from dependency restarts.
  • Answering or dismissing ringing now cancels queued vibration taps and motor sounds; dismissing an alarm also stops its vibration sound immediately.
  • Maps status-bar contrast follows the displayed map lighting, including game-time changes and independent day/night preferences.

Setup

  • Media, voice and RTC diagnostics give administrator configuration guidance. Server-only service settings support FiveManage and STUN/TURN configuration.

v1.2.3

Fixed

  • Closing the active app in the switcher no longer leaves an invisible Home Screen over the remaining cards. Cards can be dismissed consecutively without closing the phone.
  • Quitting the foreground app clears its keyboard, route and status-bar override. Quitting the lock-screen camera keeps the phone locked.
  • Phone tabs have consistent bottom clearance and hide scrolling content beneath the home indicator.
  • Unchanged hand attachments reuse their resolved bone and avoid repeated native reattachment. Changed grips and externally detached props still update normally.
  • Calendar and reminder requests wait for a phone identity. Character changes clear pending alerts and discard responses belonging to the previous owner.
  • Character selection returns a pending bootstrap response instead of reporting a stalled device query. Unboxing notifications retain their final instruction in longer translations.
  • Background phone helpers, including automatic SOS, wait until the character's phone has loaded.
  • A bought replacement handset receives a fresh battery instead of inheriting the old handset's empty charge. Background agenda, lost-phone checks and Home widgets pause when the battery is empty. Home widgets also wait for power-on and unlock.
  • Unique phones follow the selected inventory provider, recover from late inventory starts and avoid duplicate ox_inventory item-use handlers.
  • Missing required inventory produces an actionable setup error instead of silently disabling unique phones.

Installation

  • Reorganized the Quick Start around framework order, inventory definitions, item images, automatic database setup and first-launch checks.
  • Added a direct ESX + ox_inventory setup example and clearer explanations of carried items, unique handsets and first power-on.

v1.2.2

Fixed

  • Turning the on-screen 3D handset no longer rotates the phone through the character's fingers or changes the normal reading pose.
  • On-foot opening can settle briefly into a two-handed hold before returning to the original reading animation (Config.Anim.twoHandedDraw).
  • Interrupted gestures now release their listeners and reset exactly once, including phone closure, pointer cancellation and a replacement press. App-switcher cards can be dismissed repeatedly without retaining an abandoned drag.
  • Camera ownership no longer activates the native and scripted cameras together. Freezing immediately after a lens switch uses the newly selected lens pose.
  • A phone mounted in a ring light opens on the front lens with level, wider framing. Repeated mounting resets stale camera movement and freeze state.
  • Valet delivery waits for the driver's seat to replicate before starting its route, and bounds driving, parking, exit and handover tasks without forcing a player animation.
  • Valet parking uses a wider task-completion tolerance to avoid repeated precision maneuvers at the delivery point.
  • Qbox valet deliveries restore saved vehicle properties through ox_lib even when the optional QB compatibility bridge is disabled.
  • A delayed return-to-front action cannot close a newly opened handset inspection.
  • Store loading now waits for prepared models and a rendered frame, with Retry and Close recovery. Cached assets are reused, and graphics-context recovery covers the store until rendering resumes.
  • Closing the store during loading cannot open it again from a late response. Target integrations recover when started or restarted after the phone.
  • Unboxing cancels safely during character changes or resource shutdown, including pending remote scenes.
  • Earbuds and card-wallet props cannot reappear from a model request that completed after unequipping, changing characters or replacing the handset.
  • Ring lights cannot duplicate or reappear after removal while their model is loading. Failed accessory, unboxing and store-clerk requests release their streamed models.
  • Fitted cases cancel pending attachment when the handset changes, is put away, or the case is removed.
  • Cancelled App Hub downloads cannot finish installing into a later phone session.
  • Inspection easing uses frame time and stops reattaching a stationary handset.
  • Secondary text, app metadata and phone navigation labels have stronger contrast and weight.
  • Store preparation and recovery messages are available in all 25 supplied languages.
  • Initial Markets chart history uses bounded database batches instead of individual row requests, reducing startup database pressure.

v1.2.1

New

  • Case and wallet colours. The rugged Pulse Case now comes in 12 colours and the Card Wallet in 8 leathers, each its own item with its own picture. The store shows one card per product with colour swatches, the 3D preview recolours as you pick, and the case or wallet appears in that colour on the phone in hand for everyone. Paste the new entries from config/items/ (the start-up check lists any that are missing).
  • The store shows the real 3D models. Each handset gets its own fitted case (the Flip takes none), and the Buds, Ring Light, Card Wallet, Beacon, VPN dongle, SIM and top-up cards turn on the counter.
  • The fitted case and the card wallet show on the phone's own 3D view, in their colours.
  • Pulse Tablet OS. The police and EMS tablets sign on with their own boot screens, show off-duty and offline states with Retry, and have a Control Centre with the phone's real controls.
  • Pulse Drive can be dragged anywhere on screen by the grab bar above it, and is smaller and lower by default so the road stays in view.

Changed

  • The Pulse Tablet is a department device only: the personal tablet is gone from the stores and the item lists. Police and EMS tablets are unchanged.
  • The VPN dongle is sold only while Shade is on, and using it says whether it is connected.
  • The Card Wallet says when it goes on and comes off.

Fixed

  • A ring light set down after a character select (esx_multicharacter and others) is now drawn: the player's routing bucket was heard once, during the select, and every light stayed hidden.
  • The first ring light placed after a restart could vanish for the player who placed it: the server checked the player's routing bucket before the light was saved, found no light, and stopped checking. It now corrects the bucket as soon as the light is saved.
  • TMC: the phone now finds the character ID under every name TMC builds use (citizenid, csn, cid and their spellings). A server whose TMC used another name never opened the phone ("bootstrap did not finish within 9 s"). If none matches, the console names the fields TMC has.
  • The right Pulse Bud sat inside the head: both ears now show a bud.
  • Setting up a ring light always shows the stand and its circle on the ground in front of you, even when the camera is aimed at the sky or past arm's reach.
  • Swiping up on the open app in the App Switcher now closes it the first time.
  • The store's finish swatches no longer overlap.
  • The tablet showed 1% battery until the phone had been opened.
  • setr phone_debug 1 prints a step-by-step trace of the ring light, the wallet and the Buds on F8, for support.

v1.2.0

The biggest Pulse update yet. Everything new is on by default where it is safe to be, and the risky parts (Shade, SIM cards, the trap phone, savings and loans) are off until you turn them on. phone:health now tells you exactly what was detected and what is left to do.

New devices and accessories

  • Pulse Tablet. A second device in three versions (pulse_tablet, pulse_tablet_police, pulse_tablet_ems) with real engraved models, a built-in scanner and printer, split view and the phone's own apps at tablet size.
  • Police: an MDT (people and plate lookup, warrants, BOLOs, incident reports) and Citations: scan an ID or plate, pick offences, and print a real ticket item handed to the player. Fines go through your billing script if one runs (okokBilling, esx_billing, wasabi, jim-payments), else Pulse's own invoices.
  • EMS: a body scan with a medical body map and estimated vitals, a treatment log, and a printed insurance report. Reads injuries from qbx_medical, wasabi_ambulance, ars_ambulancejob, qb-ambulancejob and esx_ambulancejob.
  • Department stores: a Police Quartermaster and an EMS Medical Supply counter. Move them into your own MLO with one line: stand there and run /deptstorepos.
  • 3D accessories: Pulse Buds (private calls and music), a Ring Light with a phone clamp, a leather Card Wallet, and rugged and clear cases, all as real models.
  • Phone damage: cracked screens from falls, crashes and hits, water damage, cases, a screen protector, a waterproof pouch, and a Repairs counter.

New apps and features

  • Maps, rebuilt: a GPU map with smooth zoom, rotate and tilt; Standard, Shaded, Places and Night styles; turn-by-turn with lane hints and re-routing; live traffic and player reports on your route; speed cameras and prices; Share ETA; walking routes into the AR camera; Look Around.
  • Group video calls for up to 8 (speaker view from 5); the call carries on when the host leaves, with rejoin, remove and audio only.
  • Economy: invoices and fines (exports.phone:CreateInvoice), business invoices and payroll, optional savings and loans, a Money overview, and one shared money system that never charges twice and recovers after a restart.
  • Creator apps in App Hub: SDK v2 with permissions, storage, landscape apps, reviews, screenshots and a Creators shelf in App Hub.
  • Creator tools: QR code scanning, cinematic camera moves, and creator subscriptions in the social apps.
  • Eats, Scanner, Realty, Events, Groups, Jobs & Directory, a dispatcher call centre, live multiplayer games (8-Ball, chess, trivia, racer), Pulse Drive, Song ID, AR camera and navigation, tap phones together, Shade, Slipstream racing, SIM cards with prepaid credit, Pulse Beacons, crash SOS and Medical ID, moderation tools, hide caller ID, message edit and polls, party music and a server music library.
  • Emergency alerts to every phone or an area, from admins and allowed jobs.
  • Accessibility: a screen reader with captions, colour filters, button shapes, bold text and better layouts at large text sizes.

For owners

  • ND Core is supported, alongside ESX, QBCore, Qbox, ox_core, TMC, vRP and standalone.
  • Settings > Server in game for admins: a setup assistant, a health check, live configuration with change history, and an update notice.
  • A 3-step quick start at the top of the install guide, per-inventory paste blocks, and troubleshooting for every new feature.

Fixed

  • The open key could do nothing when another script used the same command name. Pulse now opens on its own key binding, and the console names any script that clashes.
  • /phone and the open key now open the phone you are actually carrying.
  • Esc closing the phone no longer also opens the pause menu.
  • Incoming calls now respect Do Not Disturb and Focus.
  • Sitting in a passenger seat with the phone out no longer makes a driver appear in an empty car.

Faster

  • The interface starts faster: its main file is about half the size, and apps start loading the moment you press their icon.
  • Every background check now runs on one shared scheduler that sleeps when there is nothing to do.

v1.1.3

Fixed

  • The phone item works with ox_inventory out of the box. ox_inventory ships its own phone item wired to a different phone script, so using it did nothing unless you edited ox_inventory. Using the phone item now takes out Pulse Phone with no edits (servers that run npwd are left untouched).
  • Using a phone item now opens the phone with the default settings too. Before, it only did when Config.Item.required was on.
  • The start-up check now checks every interface file, not just ui/index.html. A copy missing one (an incomplete upgrade, or an antivirus removing it) used to pass the check and then open a blank phone; it now fails the check, names the missing file and says how to fix it.

  • The Clear finish shows its internals. The see-through Clear handset's internal textures were never sent to players; they now load.

  • ESX: the store now says your inventory is full before charging, and hiring, firing or promoting in the Company app only reports success when the job actually changed.
  • QBCore: items split across several stacks now count and are taken correctly, duty changes from the phone now reach duty and dispatch scripts, and phone items that should not stack no longer do.
  • ox_inventory: the store and charging never take an item from a slot that changed in the meantime, and a renamed phone folder no longer breaks the item entries.
  • A phone held by someone other than its owner can no longer spend the owner's money anywhere (scheduled payments, rides, tips, promotions, carrier plans, valet, company funds). A scheduled payment only runs for the character who set it up.
  • Esc inside an app no longer also opens the pause menu, vehicle weapons no longer fire while using the phone, and typing no longer keys push-to-talk.
  • Calls no longer change your talk range on servers running a voice resource (pma-voice and others).
  • /phone now always gets you out if the screen stops responding while typing.
  • Reloading the phone's screen no longer leaves a camera running or the store or payphone holding the cursor.
  • Qbox: the phone no longer restarts itself while you choose where to spawn.
  • Saves that fail (photos, contacts, mail) now say so instead of seeming to work, and a failed database request is no longer blamed on another player's.
  • Right after an update, requests now wait until the new database columns exist.
  • Photos removed from the camera roll now also free their files on disk.
  • Group chats: a phone can start up to 50 groups and be in up to 200.
  • Several fixes for servers running more than one dispatch or vehicle-key script: the phone picks the real one, and says which in the console.
  • Other players' screens, dropped phones, the payphone and home routers all use less processing and network traffic.
  • The store's showroom shows the phone straight away. The 3D stage now stays ready between visits, the handset is prepared while you walk up to the store, and a model you have already looked at appears at once. Screen sizes read correctly (6.9-inch, not a long decimal).
  • App Hub downloads no longer sit on "Paused" when the phone's screen finished loading after the game first reported your signal.
  • The Nudge setting can no longer push the phone off the screen, and a phone already nudged off comes back on its own.
  • The box being unboxed can no longer be swapped for a different one halfway through the scene.
  • Power bank (ESX): using it attaches the power bank itself, not whichever pack came first. A double click no longer snaps it on and straight off again. Buying a power bank on QBCore no longer replaces the one you already carry.
  • Using a Reserve or cable with no phone now tells you why nothing happened.
  • A renamed Reserve Max item is still drawn as the bigger pack.
  • The start-up check warns when qb-core's own phone item is marked not usable (the stock entry is), which stops the phone opening from the inventory.
  • Merging a video call into a group call no longer leaves the other callers with a picture that fails after 15 seconds: group calls continue as voice calls and say so on the call screen.
  • When an inventory refuses an item the store hands over, the console now names the item and the fix (it used to show only "inventory full" to the player).

Added

  • Support codes. When the phone cannot open or its screen fails to load, F8 and the server console show a short code such as PX-7Q4M-K2TR-9VDB-A3HX-WN0C. Send it to us in a ticket and we can tell exactly what went wrong on your server.
  • The start-up check now also warns when photos are stored on Discord (its links expire after about a day), when pma-voice has calls turned off, and when strict entity lockdown would hide the handset from other players.
  • Config.Keys.openRawFallback: turn off the direct read of the open key if you only want the key binding.
  • Inventory pictures of the real phone. With ox_inventory, every phone shows its own model in the finish that was bought, from the back (the Flip folded), and every sealed box shows its colour - nothing to copy. New pictures for the phone item and both Reserve sizes are in config/items/images/ for other inventories.
  • More scripts connected automatically:
  • Dispatch: tk_dispatch, kartik-mdt, origen_police, 0r-dispatch, wasabi_mdt, codem-dispatchv2 and cd_dispatch3d.
  • Banking and bills: ak47_banking, wasabi_billing and billing_ui (bills from billing_ui are listed and paid from its own menu), with bank statement lines for okokBanking and Renewed-Banking.
  • Vehicle keys: 0r-vehiclekeys, VehicleKeyChain and brutal_keys.
  • Housing: rcore_housing, 0r_houses and ak47_qb_housing.
  • Dead and cuffed players (the phone closes and calls end): brutal, origen, wasabi, 0Resmon, ak47, jobs_creator and core_gangs scripts, and esx_policejob cuffs.
  • TMC framework, built in: Pulse Phone finds TMC's core on its own and connects characters, jobs and duty, cash and bank, items and the phone's usable items. Nothing to install and no config change; the start-up check shows Framework: TMC. If you were given the temporary pulse_tmc connector, remove ensure pulse_tmc and delete that folder (the console reminds you).
  • The start-up check now fails with a clear fix when two copies of Pulse Phone are running (an old folder left next to a new one), and warns when another phone script is still started.
  • Keep your number on a new handset. With unique phones, lost your phone? Mark it lost in Locate, then on your new phone go to Settings > General > Backups > Phone Number and move your old number over with the old phone's passcode. Your messages, calls, voicemail and contacts come with it; the old handset gets a fresh number, so whoever has it can't use yours. Server-checked, owner only, with a cooldown (Config.Backups.numberTransfer, numberTransferCooldown).
  • The Pulse Flip remembers being shut. Shut it before you put it away and it comes out shut: glance at the time and your notifications on the cover, then tap, push up or press Home to open it. Turn off Settings > Display & Brightness > Open When Taken Out to always take it out shut.
  • Video calls and Live now cap their video bitrate, so a picture never floods a slower connection.

v1.1.2

Fixed

  • Switching from another phone: eight more of its old tables (contacts, voicemail, voice memos, mail accounts, group chats, album items, service messages, Bluetooth) are now moved aside at start-up, like the others, so Pulse Phone creates its own. Before, those apps failed on such a server. Nothing is deleted: the old tables are kept as old_phone_* for phoneimport.
  • Holding a burner no longer makes the smartphone's calendar ask the server in the background (it was refused and written to the security log).
  • A press on the handset's lower edge no longer throws a script error in the background.

v1.1.1

Fixed

  • Opening and closing the Camera is much smoother: it no longer restyles the whole interface (opening went from about 280 ms of stall to about 60 ms in game; closing from up to 570 ms to about 55 ms).
  • After using the Camera, going Home and letting the phone sleep, unlocking now returns to the Home Screen instead of reopening the Camera.

v1.1.0

Added

  • The Flip folds on screen, too. The handset on screen is a real two-part model: fold it shut from Control Centre (the new Fold tile) or by dragging its lower half up, and it closes on its hinge with the interface on the glass, then turns to show the cover screen (time, battery, the latest notifications, what's playing, an incoming caller). Tap it to open, right back where you were. The phone in the hand folds with it, and everyone nearby sees the same.
  • Each handset has its own look. Titanium, Ultra, Clear and Flip start with their own wallpaper, accent colour and lock-screen clock style (a player's own choice always wins).
  • Pulse Flip, the fourth handset. A clamshell that comes out of the pocket shut and snaps open in the hand, with the hinge's click; it folds again as it goes away and never at the ear. A large cover display with the cameras set into it, frosted glass on the lower back, a satin frame and a rounded hinge. It shows shut on the ground and in the box, and other players see it the same way. Sold in the Pulse Store (base price in Config.Store.modelPrices), or set with Config.Device.default = 'flip' or a unique item's phoneModel = 'flip'. It charges with the cable, plugged into the USB-C port on its bottom edge (shut, the plug sits on top of the folded phone). The Reserve doesn't fit a Flip and is refused with a message; one already on a phone comes off, and is returned, when the player switches to a Flip.
  • 35 finishes, with colours made for each model. The classic 13 on every handset, plus exclusives: Titanium (Midnight Green, Champagne, Glacier, Tuxedo, Aurora and Sunrise two-tones), Ultra (Obsidian, Royal Gold, Ultraviolet, Racing Red, Ice Chrome, Emerald), Clear (Neon Lime, Cyber Magenta, Ice Cyan, Amber Smoke, Ghost White tinted glass) and Flip (Lilac, Mint, Butter, Graphite, Cherry). Settings > General > About > Finish shows the phone's own.
  • Pulse Clear shows a detailed internal assembly through its back: logic board, shields, flex cables, a wound charging coil and the battery.
  • About 90% less to download. Every handset is one model coloured from a palette: the streamed files went from about 205 MB to about 21 MB.
  • Each phone boots as itself. The boot, restart and first-setup screens name the model (Pulse Ultra, Titanium, Clear, Flip), each with its own colour.
  • Notification peek. With the phone away, a new notification lifts it halfway into view for a few seconds; the phone key opens it on that notification. It stays down while driving (except emergency alerts), in Focus, Silent Mode and for muted apps, and can be turned off in Settings. A shut Flip shows it on its cover screen instead.
  • Hail trip glance and live trip card. During a ride, putting the phone away keeps a small card of the trip in view, with the next turn for drivers; the Island and Lock Screen show the trip too.
  • Vibe Live tips. Viewers tip a streamer from their bank with an amount sheet; tips show on the stream and the host sees the total. Retries can never pay twice.
  • Hardware polish. The wireless charging ring over Home and apps, a battery icon that turns red at 20% and shows charging, steadier signal and Wi-Fi bars, and low-battery warnings.
  • setr phone_framework also accepts the resource names people type (qbcore, qb-core, qbx_core, es_extended, ox_core).
  • New client export OpenStore(): opens the store counter from your own menu, NPC or target script.
  • The whole interface is translated into all 25 languages, including every new screen.
  • Pulse Home Wi-Fi. A router item (pulse_router) sold in the Pulse Store. Players place it in their home with a preview they aim and turn, and it stays there through restarts. On its Wi-Fi, data is free, works in dead zones, and calls and texts use Wi-Fi Calling with no signal. Owners manage the network in Settings > Wi-Fi: name, password or open network, restart, connected and blocked devices, pick up. Wrong passwords lock a phone out for a minute after five tries. Settings are in the new config/wifi.lua.
  • Where a router may go follows your housing script (a home the player owns or has a key to, including shell housing), or any interior without one. Scripts can supply their own rule with exports.phone:SetRouterPlacementCheck, and a housing provider can add CurrentHome.
  • Personal Hotspot. A phone shares its mobile data with players nearby. With the Carrier on, this needs a plan that includes hotspot data, and what others use counts on the sharing phone's plan.
  • Cellular Data in Control Centre now works: with it off and no Wi-Fi, apps that need data say so.
  • App Hub downloads need a connection (Wi-Fi, or cellular data with a plan and signal when the Carrier is on). Off Wi-Fi, their size counts against the plan's data.
  • New exports: IsOnWifi, SetRouterPlacementCheck, UseRouter, and the ox_inventory client export useRouter. New admin command: phone:wifi list | remove <id> | tp <id>.
  • Pulse Burner. A prepaid phone (pulse_burner) sold in the Pulse Store, with a number of its own and nothing a player can see linking it to the character. It does calls, texts, contacts and settings, and the server refuses everything else while it is in the hand. Calls and texts reach whoever carries it. On ox_inventory, qb-inventory and qs-inventory the burner is the item, so its number moves with it. Destroying it breaks it in half: the number is dead and its texts are deleted. Settings are in the new config/burner.lua.
  • Police phone taps (Intercept). Officers on duty tap a phone number for up to 72 hours. Texts to and from it and its call details (never call audio) appear live for every officer on duty. Limits, an audit trail, exports.phone:TapNumber / EndTap and the phone:tap:intercept event for MDTs. Settings are in the new config/taps.lua. Admin commands: phone:burner list | owner, phone:taps list | end.

Fixed

  • Unlocking is smoother: the Home Screen no longer restyles the whole interface as it comes in.
  • A photo whose file is missing from the server shows a clean placeholder tile instead of a broken image.
  • The Pulse Flip: folding from Control Centre or by hand starts at once, the Fold tile has a clear icon, and the charging cable no longer runs off the top of the screen when the Flip is shut.
  • Radio: next and previous from Control Centre, the Island and the Lock Screen wrap around the stations.
  • A notification from the app you are in now shows as a readable banner (for example the Camera's "Photo not saved").
  • The emergency choice sheet closes with Back, and the keyboard hides itself if it is left up with no text field.
  • Smoother everywhere: opening and closing apps, unlocking, the home-screen swipe and the keyboard no longer stall; scrolling photo libraries stays quick with hundreds of photos.
  • Every app works with mouse and keyboard: keypads (Phone, Wallet, Markets, Calculator, Radio, passcode) take typed digits, Enter sends or saves, Backspace and back close sheets instead of the screen under them, and sideways strips can be dragged with the mouse.
  • Typing a number on the phone no longer switches the weapon in the player's hand.
  • Videos no longer play as a black box, or keep drawing over the Home Screen after Home.
  • The Burner: a digit typed on the keyboard is a digit (not a letter), and typing no longer walks the character.
  • The Flip's cover screen has rounded corners, with no black corners showing.
  • Reminders updates at once when a reminder is completed from its alert.
  • Taking the phone out no longer raises it, drops it and raises it again: the draw settles straight into the hold on every model.
  • The phone's frame no longer shows four black square corners in the game.
  • The Pulse Flip's screen sits centred in its frame at every resolution.
  • The store counter at Legion Square no longer stands on the square's common spawn point, where players spawned inside the clerk.
  • The store: the router and burner turn on their own stands, the burner has its own picture, and the stand shows a loading shape instead of an empty plinth while a model loads.
  • Home Wi-Fi: on a server without a housing script, routers can be placed indoors (the default placement = 'auto' wrongly asked for a home). The router's owner no longer sees "Remove" on their own phone.
  • The burner's screen no longer fills with a giant warning icon in the game.
  • A dropped Flip keeps its finish; a dead or cuffed player can't take a burner out; switching character with the burner out no longer leaves its screen behind.
  • Item labels match on every inventory (the Reserve packs were named MagPack on ESX).
  • A server that ran another phone before no longer gets a phone that never finishes loading. Tables that phone left under Pulse Phone's names are moved aside (renamed to old_phone_*, nothing is deleted), so Pulse Phone can create its own. If the database refuses the rename, the start-up check now reports a failure with the fix instead of saying everything is fine.
  • A failed database statement is answered at once instead of after a 10-second wait. With oxmysql a failed query never answered, so a few in a row made the phone's first load time out ("request bootstrap timed out").
  • The example TURN relay from the install guide (turn.example.com) pasted into server.cfg no longer breaks every video call. It is ignored and the start-up check warns about it.
  • A custom framework bridge that does not supply a bank balance is no longer reported as the bank (its balances read "not implemented"). The start-up check says no bank was found instead, and the same for an inventory the bridge does not supply.
  • phone.sql now includes the tables for burners, taps and Home Wi-Fi, for hosts that do not let resources create tables.

Changed

  • Photos no longer has star ratings: the viewer, Info, filters, Top Rated and search are rating-free.

Updating

  • Replace the phone folder, keeping your config files. Your data is unaffected.
  • Copy the new config/wifi.lua, config/burner.lua and config/taps.lua into your config folder. The new tables are created by themselves.
  • Items: on ESX (default inventory) and QBCore the new pulse_router and pulse_burner items are added for you at start. On ox_inventory and other inventories the start-up check prints the exact lines to paste and the pictures to copy (INSTALL.md, section 4).

v1.0.19

  • Fix the display disappearing or flickering when tapping, opening or rotating the phone.
  • Project the interface directly from the same camera and model matrices as the handset, for Ultra, Titanium and Clear.
  • Preserve screen alignment in portrait, landscape and tilted inspection without nested browser transform errors.

v1.0.18

  • Preserve the selected Ultra, Titanium or Clear model in checkout requests and receipt labels.
  • Match bag illustrations to each handset's camera layout and transparent rear construction.
  • Add a checkout transport regression covering all three models, storage, accessories and the unboxing request.

v1.0.17

  • Fixed noisy side-rail shading in the store and preview loaders, and dark optical/flash covers.
  • Reapply the chosen finish when switching handset models; show the selected model's display size.
  • Include the complete wired cable and both connectors in modern showroom and world accessories.
  • Start unboxing timing after asset loading and track the player's moving hands with wider, sharp camera framing.
  • Default new devices to Pulse Titanium; retain legacy device records and integration identifiers.
  • Document the three models, charging accessories, upgrade steps and server acceptance checks.

v1.0.16

  • Added Pulse Ultra, Pulse Titanium and Pulse Clear choices to the phone store, with matching held and dropped models, finishes and unboxing.
  • Retained existing device records, numbers and legacy integration identifiers when changing models.
  • Added model-specific physical button controls, display fitting and charging accessory placement.
  • Improved release recovery when mouse focus changes, and portrait/landscape gallery playback controls.
  • Renamed the wireless charging accessory to Pulse Reserve; existing inventory IDs and exports remain compatible.

v1.0.15

Fixed

  • Photo, video, drawing and audio uploads preserve file contents through the FiveM media proxy. Upload size limits still apply to the original file size.
  • Gallery playback controls receive clicks through the toolbar's decorative padding.
  • Simultaneous server health checks keep their diagnostic results and warning counts separate.

Updating

  • Replace the resource with this release, preserving your settings and player media. Existing database tables are retained.

v1.0.14

Fixed

  • Removed duplicate cross-origin headers from photo and video requests through the FiveM media proxy.
  • Scrolling phone menus no longer opens the game's weapon wheel while the handset cursor is active.

Updating

  • Replace the resource with this release, preserving your settings and player media. Existing database tables are retained.

v1.0.13

Fixed

  • Character changes clear private interface state, pending saves, identity lookups, held devices, radio membership and bank sessions. vRP character lifecycle events reach the phone adapter.
  • Promoted posts use the Wallet payment provider and refund failed promotion writes.
  • Wallet and Markets purchases carry replay-protection nonces; read-only Wallet lists no longer require them.
  • Picking up another dropped phone preserves the phone already in hand.
  • Garage queries quote the stored column correctly, and ESX garage queries recover after a temporary database failure.
  • Phone opening keys respect text entry, and unique item actions recover after inventory restarts.
  • Nearby payments stay bound to the selected recipient across character switches.
  • Custom framework and provider exports accept FiveM callable function references across resources.
  • Wallet transfers stop safely when the spending-limit query fails.

Updating

  • Replace the resource with this release, preserving your settings and player media. Existing database tables are retained.

v1.0.12

Documentation pass. No gameplay changes beyond the photo-address start-up note.

Updating

  • Replace the phone folder as usual. Your config and data are unaffected.

Changed

  • The start-up check no longer warns "phone_media_origin not set" on a public server: the phone uses your server's Cfx.re https address by itself once the server registers.
  • Developer guides corrected: phone:number moves conversations and call history to the new number, UseMagPack takes the item name, the finish note, a duplicated sentence, and how to start an example (copy it into resources/ first). developers/ now also has INTEGRATIONS.md and CUSTOM_GARAGE.md.
  • INSTALL.md: the setr phone_media_origin line, vRP charging items, items for other inventories, which admin commands run where, and a radio note for updates.
  • Comments in the config, bridge and language files no longer point at files or guide sections that are not in the package.

v1.0.11

Fixes from a full audit of the package.

Updating

  • Replace the phone folder as usual. Your config and data are unaffected. If you copy your old config/radio.lua over the new one, set registerChannelChecks = false in it unless you want the phone to own pma-voice's checks for its restricted channels.

Fixed

  • Photos now load for every player without any setup: with no phone_media_origin set, the phone uses your server's own https Cfx.re address. Before, it fell back to a plain http link that other players saw as a broken image.
  • Notifications written by the server (Markets order filled, shared-album photos, group chat changes) showed raw %1$s placeholders in Japanese, Turkish, Dutch and Chinese. Reordered placeholders now work in server text too. The Turkish assistant battery line no longer shows "%%".
  • QBCore: a bank transfer to an offline player now fails (and is refunded) if QBCore refuses the credit, instead of reporting success.
  • A refund that itself fails is now written to the console and the security log so staff can restore it by hand.
  • The Circle social tables are now created on MySQL 8.0.17 and 8.0.18 too.
  • The developer demo's /devkit_dispatch command is now admin-only.
  • Corrected the licence text (owner, and which files you may edit), the starting-balance setting in INSTALL.md, console messages that pointed at documents not in the package, and the radio config notes.

v1.0.10

Voice and radio fixes found in live two-player testing.

Updating

  • Replace the phone folder as usual. Your config and data are unaffected.

Fixed

  • On servers running pma-voice, the start-up panel reported "3 voice resources running: pma-voice + mumble-voip + tokovoip_script" as a FAIL. pma-voice declares those names for compatibility; they are not separate scripts. Only real resources are counted now, so a pma-voice server shows "[OK] Voice pma-voice". Calls were never affected (they always used pma-voice).
  • The Radio app no longer interferes with your own radio script: Config.Radio.registerChannelChecks is now off by default (on, it replaced other radio scripts' pma-voice rules for channels 1-3), and leaving the Radio app only takes a player off the air if they are still on the channel the phone put them on.
  • On a normal voice call the phone is now held at the ear even while the call screen shows; it comes down only for speaker, a video call, the camera, the keyboard or another app, and goes back up when that app closes.
  • The selfie animation's fallback pointed at a stock clip that does not exist in current game builds; it now uses one that does (only used if the custom selfie clips fail to load).

v1.0.9

Install guide corrected. No code changes.

Updating

  • Replace INSTALL.md (or the whole phone folder as usual). Your config and data are unaffected.

Fixed

  • The long INSTALL.md still described a [compat] folder of stand-in resources that is no longer included. It now matches the package: scripts that use the common phone events need nothing, and calls to another phone's exports are switched to exports.phone:... (developers/EXPORTS.md).

v1.0.8

Better compatibility with other scripts, and a developer kit.

Updating

  • Replace the phone folder, then copy your old config/*.lua files back (not config/locales/) and your ownermedia/ files. Nothing else changes; the database updates itself.

Added

  • developers/ folder: the custom-app guide (CUSTOM_APPS.md), the full export and event reference (EXPORTS.md) and two ready-to-copy example apps (Field Notes, and Dev Kit with native sheets, Island activities and script calls). Nothing in it runs unless you copy it out.

Fixed

  • t1ger_keys: valet cars now arrive with keys, and locking from the phone also sets t1ger's own lock.
  • okokBanking: statement rows show the transaction reason.
  • okokGarage: the retrieve fee shows only when RetrieveFeeEnabled is on; on QBCore the framework's garage column is used when parking is empty.
  • esx_advancedgarage v1.0.0: Marker points, helicopters, civ cars, the renamed police pound price and the mechanic/journalist/government pounds are read.
  • Bills from qb-phone's phone_invoices show their reason, and a failed payment keeps every column of the bill.
  • Fuel: BigDaddy-Fuel, okokGasStation and x-fuel levels are read as well as set.

v1.0.7

A large reliability and security update. Read Updating first: this version adds config files, items and a [compat] folder, and the old locale files must not be copied back.

Updating

  • Follow INSTALL.md section 18, "Updating from an earlier version". In short: keep media/ and your ownermedia/ files; copy your five old config files over the new config/ folder (don't delete it first); do not copy back config/locales/, server/custom/ or client/custom/; add the new items from docs/items/.
  • New config files: config/api.lua, config/news.lua, config/payphone.lua, config/radio.lua, config/rides.lua, config/wallet.lua. New sections in config.lua (Config.Block, Config.Charging, Config.Carrier, Config.Retention, Config.Maps, Config.OwnerMedia, Config.Assistant) all have safe defaults when an older config.lua lacks them.
  • An older config.lua without Config.Charging no longer requires the cable: phones charge as before, and the console says so once.
  • An older config.lua without Config.Store.box hands phones over without the box.
  • The database updates itself at the first start (new tables, columns and indexes; key columns that were too narrow are widened). phone.sql has been regenerated and can also bring an older hand-imported database up to date.

Roleplay: dead, downed, cuffed, escorted, jailed

  • New Config.Block. The phone now recognises the state your death, police and prison scripts publish, even when the player has been revived into a dead animation or cuffed by a script that does not use the game's handcuffs: QBCore, Qbox, ESX, ox_core, qbx_medical, wasabi, ars, osp, rcore_police and others. Nothing to wire up.
  • Each state blocks the phone, allows only emergency calls (downed players, by default), or has no effect. A blocked player cannot open the phone or answer a call, by any key or button.
  • Dying or being cuffed during a call now ends the call (all lines, including calls on hold), and the phone is put away. After a revive the phone is no longer drawn back to the ear. What happens to a live call is set per state in Config.Block.calls.
  • A phone switched off by a script is always blocked; its calls are kept by default, so a cutscene does not end a call.
  • New client export SetRestriction(key, mode) for jail, cutscene or surgery scripts, and new state bags phoneBlocked and phoneEmergencyOnly.
  • With Config.Item.required the server now checks the phone item with any supported inventory, not only ox_inventory. Losing the phone item ends that player's calls and closes the phone.
  • Payphones follow the same rules.

Calls

  • Hanging up ends every line you have: the call in front, calls on hold and calls waiting.
  • Hanging up a call you have not answered declines it, instead of ending it for everyone.
  • Outgoing emergency calls are marked as emergency calls.
  • Stopping or restarting the resource ends calls cleanly: players are taken out of the voice call and the call history is closed.
  • Video calls: TURN relays can use short-lived credentials per call (phone_turn_secret, phone_turn_ttl), so copied credentials stop working.

Switching from another phone

  • The phone-compat resource is replaced by stand-in resources in [compat], one per phone name scripts look for (lb-phone, qb-phone, npwd, gksphone, qs-smartphone, qs-smartphone-pro, qs-base, high-phone, high_phone, yseries, yflip-phone, roadphone, 17mov_Phone, gcphone) plus pulse_compat, which they share. Ensure only the ones your scripts need, after the phone. Remove phone-compat. See docs/COMPATIBILITY.md, now included in the download.
  • Tables another phone left under one of this phone's table names are renamed to old_<name> at start instead of being silently reused. Nothing is deleted.

Storage and restarts

  • A database that is slow to start gets 30 seconds, with retries. The phone no longer switches to the key/value store without being told: if the database does not answer, requests fail with "storage unavailable" and the phone keeps retrying until it does. Allow the old behaviour with set phone_db_fallback "kvp".
  • Every database query has a 10-second deadline, so a failed query can no longer leave a request (or a wallet, carrier or ride action) waiting forever.
  • Tables are created, then columns added, then indexes built, each step finished before the next; a column that could not be added is reported instead of being reported as added.
  • Without a database, each table is saved on its own and only when it changed, instead of the whole store every 5 seconds.
  • A scheduled payment interrupted by a restart is never paid twice.
  • Carrier renewals are saved before the charge: a restart in the middle gives one free period, never a double charge.
  • Ride fares are recorded before the rider is charged.
  • Payphone money taken for a call that never connected is paid back automatically at the next start.
  • Player states left over from before a restart (the phone in hand, the screen, the torch) are cleared.
  • Framework character switches and logouts no longer carry the previous character's calls, carrier line or phone custody over.

Money

  • A company or shared-account move the bank does not confirm is marked "unconfirmed" and written to the log for staff. It is not refunded automatically.
  • Valet charges only once the car is claimed.
  • Standalone: only a player's own licence account opens with the starting balance.
  • loaf_housing: locking and unlocking doors from the phone needs loaf_keysystem.
  • At start, the store checks that the box and accessory items exist: a missing box item turns boxes off, a missing accessory is taken off sale, each with a console line.
  • Markets: price seeds can no longer be predicted, and margin the database does not confirm is logged for staff to refund instead of being lost.
  • Many fixes to double charges and races: ride cancel and tip, rating, company account, wallet codes and balance history on the key/value store.

Security

  • Closed several ways to get into a stolen, locked phone. Wrong-passcode attempts and the lockout now belong to the phone, so a dropped and picked-up phone keeps its lockout.
  • A player who leaves while holding someone else's phone drops it where they stood.
  • Uploads: a daily quota per player (Config.Media.dailyMb, 250 MB; 0 turns it off; it restarts with the server) and 12 upload requests a minute (Config.Security.rates.uploads).
  • Limits on backup size, social sign-in attempts and several other requests; tighter checks on media links and on values sent to the database.
  • A carrier client that never reports its signal counts as no service after 30 seconds.

Performance with many players

  • Apps stop their timers when the phone is closed or the app is in the background; the Locate widget refreshes only while the Home Screen is visible.
  • Other players' battery levels are sent less often (at once for charging, a dead phone, 0, 20 and 100 %, and below 20 %; otherwise up to 30 s late). Your own level stays exact.
  • Fewer database writes and scans: carrier usage, handset cycles, the phone-item sweep and market clean-up are batched or spread out; server caches are cleared when players leave.
  • Less work per frame on the client (nearby chargers, screens and torches, payphone search, signal checks, camera state).

Hail (rides)

  • Bonus hours can no longer be farmed with short trips: a trip must cover Config.Rides.limits.bonusMinDistance (500 m) and one driver and rider earn the bonus at most bonusPerPairPerDay (2) times a day.

New: storage sizes

  • The Pulse Store sells each finish in 128 GB, 256 GB, 512 GB and 1 TB (Config.Store.storage, prices per size, all configurable; enabled = false keeps one price). The size bought is the handset's storage: Settings > General > About and Storage show it, and Storage Full comes at it. It travels in the sealed box and on unique phone items.
  • The server prices every order itself; a size not on sale is refused with nothing charged. Sell-back pays for the size, and an item that doesn't say its size is valued at the smallest.

New: battery packs that stack

  • Two pack sizes: Pulse MagPack (fills 70 % of a phone) and Pulse MagPack Max (120 %), each its own item (Config.Charging.magpack.variants). Full packs stack, up to 20 per store line (magpack.stack).
  • Using one takes a single pack off the stack and snaps it onto the back of the phone, where everyone can see it. A spent pack comes off by itself and is used up ("Battery pack empty", consumeWhenEmpty). Taken off early, it becomes its own item showing what is left ("Pulse MagPack · 57%") and never merges back into the full stack.
  • Update your item entries from docs/items/: pulse_magpack is now stackable, and pulse_magpack_max is new. A pack size whose item isn't registered is switched off at start and the console says which.

New: cartoon avatars and stickers

  • Build a cartoon avatar (Settings > Edit Avatar, or Phone > My Card): face shape, hair, eyes, brows, facial hair, glasses and other accessories, and colours, in three art styles. It shows on your contact card, in Messages and on social profiles, and makes a set of stickers to send in Messages.
  • New table phone_avatars, created at start (and in phone.sql).

New: keys for everything

  • Every phone action can be bound to a key in the game's own key settings (Settings > Key Bindings > FiveM). New: torch, silent mode, camera, mute, speaker and hang up. They are unbound by default (Config.Keys.*), so they never take a key your server already uses.

New: integrations with your other scripts

  • The valet hands over keys through whichever vehicle key script runs (qbx_vehiclekeys, Renewed-Vehiclekeys, wasabi_carlock, MrNewbVehicleKeys, vehicles_keys, ak47, qb-vehiclekeys, qs-vehiclekeys, cd_garage and okokGarage keys), and a delivered car keeps the fuel level the garage stored (ox_fuel, Renewed-Fuel, LegacyFuel, lc_fuel, qs-fuelstations, cdn-fuel, ps-fuel and others). More garages are read for parked and impounded cars. Every script and how it is used: docs/INTEGRATIONS.md.

The phone itself

  • New sound set: ringtones, alerts, lock, unlock, keyboard clicks and charging sounds, all original. The volume sliders preview them.
  • App switcher: swipe up and hold to see every open app as a card, newest on the right; swipe across to go back to older apps, flick a card up to close it.
  • The on-screen keyboard works with the mouse everywhere: every key and emoji is clickable, it stays up until you close it with the key in its corner, and every text field brings it up. The emoji board opens much faster.
  • Buttons and bars no longer run into the screen's rounded corners.
  • The Island at the top of the screen stays in place over Notification Centre and Control Centre.
  • The frame around the screen is the same width on both sides.
  • Control Centre, Settings and folder changes are kept after a restart.
  • Camera: a frame the game hands over blank (all black, or black across part of the picture) is skipped, so the viewfinder no longer flickers black.
  • The cursor key (Left Alt) toggles on a quick tap, so Alt+Tab no longer leaves the cursor on.

Other fixes

  • Admin: phone:setnumber works again (same as phone:number); phone:resetpin also clears the phone's wrong-passcode count.
  • Many fixes across the apps: social feeds and profiles, Messages, Mail, Calendar, Photos, Camera, Wallet, Markets, Hail, Marketplace, Games, Weather, Radio and the lock screen, most of them for states that could get stuck on "Loading", lose a draft, or show the wrong result after a failed request.
  • Consistent titles, rows, switches and dividers across the apps.

v1.0.6

  • Photos keep working when the resource folder is renamed: media links use the folder's own name.

v1.0.5

  • Interface fixes, including the Action button: letting go before the hold fires now shows the hint instead of running the action.

v1.0.4

  • Photos and videos everywhere in the interface load through the server's media address.

v1.0.3

  • Photos no longer turn into broken images after the phone refreshes (a phone bought at the store, a reset).
  • Interface fixes.

v1.0.2

  • Packaging: the protected scripts are shipped as a few combined files. No change in behaviour.

v1.0.1

  • Re-release of 1.0.0 with a new version number. No change in behaviour.

v1.0.0 first release

Phone and apps

  • A full phone OS, in a flat view or as an optional 3D handset.
  • Calls with hold, swap and merge.
  • Video calls (WebRTC).
  • Voicemail.
  • Messages with group chats, reactions, unsend and pay-in-chat.
  • Mail, Contacts, Photos and Camera, the camera with a walkable rear view, selfie, tripod and zoom lenses.
  • Maps with a bundled city map, and Locate.
  • Wallet, Markets, Services, Garage and Home.
  • Social apps, Dark Chat, Marketplace and LS Pages, and Dating.
  • Notes, Reminders, Calendar, Clock, Weather, Calculator, Compass and Browser.
  • Music, Videos and an App Hub for add-on apps.

Integration

  • Frameworks: ESX, QBCore, Qbox and standalone; other frameworks through the custom bridge.
  • Voice: pma-voice, mumble-voip and saltychat.
  • Upload storage: Fivemanage, Discord, a custom endpoint, or the built-in store.
  • Housing adapters: qb-houses, qbx_properties, qs-housing, loaf_housing, vms_housing and rtx_housing.
  • Company management in Services: duty, staff list, hire, fire and grades, and the company account through Renewed-Banking, qb-banking or esx_addonaccount.
  • Unique phones: the phone number stored on the item, for ox_inventory, qb-inventory and qs-inventory.
  • Battery, charged in vehicles, at charger zones or with a power bank; a dead phone still makes emergency calls.
  • Public state bags, events and exports (docs/EXPORTS.md), and the phone-compat compatibility layer for scripts written for other popular phone resources.
  • Activity log to Discord or Fivemanage.
  • Server-side media link allow-list, rate limits and request checks.

MLO + Phone

PhoneHub + Pulse Phone

Integrated edition 1.4.2. The first public release note is posted here the day sales open.

NewProduct page

In game