[{"data":1,"prerenderedAt":1528},["ShallowReactive",2],{"/docs/scripts/free-phone/installation":3,"/docs/scripts/free-phone/installation-surround":1517,"/docs/scripts/free-phone/installation-implemented-suggestions":1527},{"id":4,"title":5,"body":6,"description":1508,"extension":1509,"head":1510,"implementedSuggestions":1510,"meta":1511,"navigation":402,"path":1512,"schemaOrg":1510,"seo":1513,"sitemap":1514,"stem":1515,"__hash__":1516},"docs/1.docs/scripts/4.free-phone/1.installation.md","Installation",{"type":7,"value":8,"toc":1488},"minimark",[9,14,18,23,86,93,109,117,121,528,532,535,543,546,550,584,588,591,595,688,692,699,790,793,797,819,851,857,861,882,912,915,922,926,975,985,989,996,1046,1053,1057,1067,1151,1164,1168,1175,1259,1269,1272,1276,1314,1318,1321,1370,1374,1377,1438,1442,1466,1484],[10,11,13],"h1",{"id":12},"free-phone","Free Phone",[15,16,17],"p",{},"Free Phone is a complete FiveM smartphone with an iPhone-inspired Sky UI, persistent devices,\nphysical or virtual SIM cards, calls, messages, social networks, media apps, server services,\ngames, and custom-app compatibility.",[19,20,22],"h2",{"id":21},"requirements","Requirements",[24,25,26,39],"table",{},[27,28,29],"thead",{},[30,31,32,36],"tr",{},[33,34,35],"th",{},"Type",[33,37,38],{},"Supported options",[40,41,42,55,63,71,79],"tbody",{},[30,43,44,48],{},[45,46,47],"td",{},"Database",[45,49,50,51],{},"MySQL or MariaDB with ",[52,53,54],"code",{},"oxmysql",[30,56,57,60],{},[45,58,59],{},"Framework",[45,61,62],{},"ESX Legacy, Qbox, or QBCore",[30,64,65,68],{},[45,66,67],{},"Inventory",[45,69,70],{},"ak47, CodeM, Core, Jaksam, JPR, LJ, MF, One, Origen, ox, PS, QB, QS, SMX, TGIANN, hex, or native ESX; see metadata requirements below",[30,72,73,76],{},[45,74,75],{},"Calls",[45,77,78],{},"YACA, PMA Voice, or SaltyChat",[30,80,81,84],{},[45,82,83],{},"Radio",[45,85,78],{},[15,87,88,89,92],{},"Start the selected framework, inventory, and voice resources before ",[52,90,91],{},"sky_phone",".",[15,94,95,96,99,100,103,104,92],{},"Free Phone uses its own framework bridge and file storage. It does not require ",[52,97,98],{},"sky_base"," or an\n",[52,101,102],{},"add_filesystem_permission sky_base write sky_phone"," entry. For other Sky resources installed on\nthe same server, follow ",[105,106,108],"a",{"href":107},"/docs/installation#filesystem-permissions","Filesystem permissions",[15,110,111,112,116],{},"Phone requires its own ",[105,113,115],{"href":114},"/docs/scripts/free-phone/configuration#administrator-access","administrator ACE setup",".\nPermissions granted to Sky Base do not grant Phone permission to register its command access.",[19,118,120],{"id":119},"install-the-resource","Install the resource",[122,123,125,130,141,145,152,203,214,244,248,255,272,276,292,295,309,313,329,343,347,370,373,377,380,434,437,440,479,510,514,517],"steps",{"level":124},"3",[126,127,129],"h3",{"id":128},"copy-free-phone","Copy Free Phone",[15,131,132,133,135,136,140],{},"Download the published release package, copy its resource into your FiveM resources directory,\nand keep the folder name exactly ",[52,134,91],{},". GitHub's automatically generated ",[137,138,139],"strong",{},"Source code","\narchives do not include the built frontend. Stop any other phone resource handling the same item.",[126,142,144],{"id":143},"configure-the-server","Configure the server",[15,146,147,148,151],{},"Open ",[52,149,150],{},"config/config.lua"," and choose the configuration owner first:",[153,154,160],"pre",{"className":155,"code":156,"filename":157,"language":158,"meta":159,"style":159},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Config.PhoneConfigurator = {\n    Enabled = true,\n}\n","config/config.lua — Part 1","lua","",[52,161,162,182,197],{"__ignoreMap":159},[163,164,167,171,175,179],"span",{"class":165,"line":166},"line",1,[163,168,170],{"class":169},"sTEyZ","Config.",[163,172,174],{"class":173},"sBMFI","PhoneConfigurator",[163,176,178],{"class":177},"sMK4o"," =",[163,180,181],{"class":169}," {\n",[163,183,185,188,191,194],{"class":165,"line":184},2,[163,186,187],{"class":169},"    Enabled ",[163,189,190],{"class":177},"=",[163,192,193],{"class":177}," true",[163,195,196],{"class":169},",\n",[163,198,200],{"class":165,"line":199},3,[163,201,202],{"class":169},"}\n",[15,204,205,206,209,210,213],{},"With the default ",[52,207,208],{},"true",", use ",[137,211,212],{},"/phonepanel → Phone configurator → General"," after starting\nthe server with the ACE setup below. Verify framework, inventory, language, phone item, unique\ndevice mode, physical SIM mode and voice provider, then save with the checkmark. Automatic\nprovider detection is available for framework and inventory.",[15,215,216,217,219,220,219,223,226,227,230,231,234,235,238,239,243],{},"Part 1 (",[52,218,174],{},", ",[52,221,222],{},"CommandPermissions",[52,224,225],{},"CustomTones",") always stays file-owned.\nPart 2 and ",[52,228,229],{},"media.lua"," are ignored in SQL mode, even on the first start. To configure by file,\nset the switch to ",[52,232,233],{},"false",", edit Part 2 and server-only ",[52,236,237],{},"config/media.lua",", then restart.\nSee ",[105,240,242],{"href":241},"/docs/scripts/free-phone/configuration","Configuration"," for the complete boundary,\nrestart behavior, permissions and key capture. Lua examples below identify the same fields;\nin SQL mode, change them in the panel.",[126,245,247],{"id":246},"add-inventory-items","Add inventory items",[15,249,147,250,254],{},[105,251,253],{"href":252},"/docs/scripts/free-phone/inventory-items","Inventory Items & Setup"," and choose your actual inventory. The guide covers all 17 Phone adapters with item locations, complete definitions or item-editor fields, images, metadata requirements, and version limits.",[15,256,257,258,261,262,219,265,268,269,92],{},"Set the matching adapter in ",[52,259,260],{},"/phonepanel → Phone configurator → General → Framework & integrations → Inventory",", save with the checkmark, and restart after changing it. Item definitions must use the same names as ",[52,263,264],{},"Phone.Item",[52,266,267],{},"Sim.RegisteredItem",", and ",[52,270,271],{},"Sim.AnonymousItem",[273,274,275],"h4",{"id":275},"ox_inventory",[15,277,278,279,283,284,287,288,291],{},"Use the ",[105,280,282],{"href":281},"/docs/scripts/free-phone/inventory-items#ox-inventory","complete ox definitions and required setup",". This includes both physical SIMs, ",[52,285,286],{},"consume = 0",", the ox-specific Phone client exports, and removal of the old NPWD phone handler if present. Upstream ox_inventory must provide the server ",[52,289,290],{},"usedItem"," event added in 2.38.0; older versions can close the inventory without completing Phone item use.",[273,293,294],{"id":294},"qb-inventory",[15,296,278,297,301,302,305,306,92],{},[105,298,300],{"href":299},"/docs/scripts/free-phone/inventory-items#qb-inventory","QB setup"," and its shared item template. It includes the phone and both SIMs for ",[52,303,304],{},"qb-core/shared/items.lua",", with the matching images in ",[52,307,308],{},"qb-inventory/html/images/",[273,310,312],{"id":311},"other-inventories","Other inventories",[15,314,315,316,320,321,324,325,328],{},"The ",[105,317,319],{"href":318},"/docs/scripts/free-phone/inventory-items#inventory-selector","inventory selector"," links to each provider's setup. TGIANN, for example, uses the ",[52,322,323],{},"tgiann"," adapter and requires ",[52,326,327],{},"hasMetadata = true"," on all three items.",[15,330,331,342],{},[137,332,333,334,337,338,341],{},"Do not copy ox's ",[52,335,336],{},"sky_phone.UsePhoneItem"," or ",[52,339,340],{},"sky_phone.UseSimItem"," use exports into another inventory."," These handlers call ox_inventory directly, even if another adapter is selected in Phonepanel. Use the provider's native item format and Phone's existing usable-item registration.",[273,344,346],{"id":345},"add-physical-sim-items","Add physical SIM items",[15,348,349,350,353,354,357,358,361,362,365,366,369],{},"With ",[52,351,352],{},"Sim.Enabled = true",", register ",[52,355,356],{},"sky_phone_sim_registered"," and ",[52,359,360],{},"sky_phone_sim_anonymous"," using your provider's definitions. Both need independent, non-stackable item identities. Copy their PNGs, along with ",[52,363,364],{},"phone.png",", from ",[52,367,368],{},"sky_phone/config/images/"," into the image location listed in the guide.",[15,371,372],{},"Native ESX and HEX automatically disable unique phones and physical SIMs. SMX's character/item-name metadata has separate limits; Core and MF require the version checks described in their setup sections. With physical SIMs disabled, the phone item is still required.",[126,374,376],{"id":375},"add-the-start-order","Add the start order",[15,378,379],{},"Add both Phone ACE capabilities before starting the resource, and start Free Phone after its dependencies:",[153,381,386],{"className":382,"code":383,"filename":384,"language":385,"meta":159,"style":159},"language-cfg shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","add_ace resource.sky_phone command.add_ace allow\nadd_ace resource.sky_phone command.remove_ace allow\n\nensure oxmysql\nensure es_extended\nensure ox_inventory\nensure pma-voice\nensure sky_phone\n","server.cfg","cfg",[52,387,388,393,398,404,410,416,422,428],{"__ignoreMap":159},[163,389,390],{"class":165,"line":166},[163,391,392],{},"add_ace resource.sky_phone command.add_ace allow\n",[163,394,395],{"class":165,"line":184},[163,396,397],{},"add_ace resource.sky_phone command.remove_ace allow\n",[163,399,400],{"class":165,"line":199},[163,401,403],{"emptyLinePlaceholder":402},true,"\n",[163,405,407],{"class":165,"line":406},4,[163,408,409],{},"ensure oxmysql\n",[163,411,413],{"class":165,"line":412},5,[163,414,415],{},"ensure es_extended\n",[163,417,419],{"class":165,"line":418},6,[163,420,421],{},"ensure ox_inventory\n",[163,423,425],{"class":165,"line":424},7,[163,426,427],{},"ensure pma-voice\n",[163,429,431],{"class":165,"line":430},8,[163,432,433],{},"ensure sky_phone\n",[15,435,436],{},"Replace the example framework, inventory, and voice resources with the providers used by your\nserver.",[15,438,439],{},"For QB-Core with qb-inventory, the corresponding order is:",[153,441,443],{"className":382,"code":442,"filename":384,"language":385,"meta":159,"style":159},"add_ace resource.sky_phone command.add_ace allow\nadd_ace resource.sky_phone command.remove_ace allow\n\nensure oxmysql\nensure qb-core\nensure qb-inventory\nensure pma-voice\nensure sky_phone\n",[52,444,445,449,453,457,461,466,471,475],{"__ignoreMap":159},[163,446,447],{"class":165,"line":166},[163,448,392],{},[163,450,451],{"class":165,"line":184},[163,452,397],{},[163,454,455],{"class":165,"line":199},[163,456,403],{"emptyLinePlaceholder":402},[163,458,459],{"class":165,"line":406},[163,460,409],{},[163,462,463],{"class":165,"line":412},[163,464,465],{},"ensure qb-core\n",[163,467,468],{"class":165,"line":418},[163,469,470],{},"ensure qb-inventory\n",[163,472,473],{"class":165,"line":424},[163,474,427],{},[163,476,477],{"class":165,"line":430},[163,478,433],{},[15,480,481,482,485,486,489,490,493,494,497,498,501,502,505,506,92],{},"Verify administrators' ACE membership against ",[52,483,484],{},"Config.CommandPermissions"," in Part 1.\n",[52,487,488],{},"admin"," maps to ",[52,491,492],{},"group.admin","; QBCore also registers ",[52,495,496],{},"qbcore.admin",". A framework role alone is\ninsufficient. Phone does not need ",[52,499,500],{},"add_principal"," / ",[52,503,504],{},"remove_principal"," resource capabilities;\nthe server/framework owns player membership. See the\n",[105,507,509],{"href":508},"/docs/scripts/free-phone/configuration#update-from-the-previous-permission-model","permission migration steps",[126,511,513],{"id":512},"start-and-verify","Start and verify",[15,515,516],{},"Restart the server and inspect the console. Free Phone creates and upgrades its database tables\nautomatically, then registers the configured phone item. A manual SQL import is normally not\nrequired.",[15,518,519,520,523,524,527],{},"In SQL mode, open ",[52,521,522],{},"/phonepanel",", review General and save. Restart after changing providers,\ndevice identity modes or keyboard defaults. Use the configured phone item or the default ",[52,525,526],{},"F1","\nshortcut to open the phone. Existing personal FiveM bindings still take priority.",[19,529,531],{"id":530},"manual-database-installation","Manual database installation",[15,533,534],{},"Hosts that require a manual schema import can run:",[153,536,541],{"className":537,"code":539,"language":540,"meta":159},[538],"language-text","sky_phone/sql/install.sql\n","text",[52,542,539],{"__ignoreMap":159},[15,544,545],{},"Keep runtime migrations enabled after the import because they install future schema upgrades.",[19,547,549],{"id":548},"first-start-checklist","First-start checklist",[551,552,553,557,563,566,569,572,575,578,581],"ul",{},[554,555,556],"li",{},"The server console reports the selected framework and inventory without errors.",[554,558,559,560,562],{},"An authorized administrator can open ",[52,561,522],{}," and save in SQL mode; an unprivileged player is denied.",[554,564,565],{},"General shows the intended values after reopening the panel and restarting the resource.",[554,567,568],{},"The configured phone item opens the phone.",[554,570,571],{},"Unique phones receive a persistent IMEI and do not stack.",[554,573,574],{},"A physical SIM provides cellular service, or automatic numbers work when SIMs are disabled.",[554,576,577],{},"Calls have audio through the configured voice provider.",[554,579,580],{},"Light and dark modes render correctly.",[554,582,583],{},"The server-owned pepper values have been replaced and stored safely before production use.",[19,585,587],{"id":586},"production-setup-guide","Production setup guide",[15,589,590],{},"Review the following settings before opening a production server. In SQL mode, change them\nin the Configurator and save. Lua snippets below show field names and file-mode examples;\ndo not replace complete configuration tables with these abbreviated examples.",[126,592,594],{"id":593},"configuration-files","Configuration files",[24,596,597,607],{},[27,598,599],{},[30,600,601,604],{},[33,602,603],{},"File",[33,605,606],{},"Purpose",[40,608,609,619,629,638,648,658,668,678],{},[30,610,611,616],{},[45,612,613,615],{},[52,614,150],{}," Part 1",[45,617,618],{},"Always file-owned: Configurator switch, fixed ACE groups and local custom tones",[30,620,621,626],{},[45,622,623,625],{},[52,624,150],{}," Part 2",[45,627,628],{},"File-mode values for framework, inventory, devices, SIMs, calls, apps, limits and providers; use the panel in SQL mode",[30,630,631,635],{},[45,632,633],{},[52,634,237],{},[45,636,637],{},"Server-only file-mode media values; use the Media panel section in SQL mode",[30,639,640,645],{},[45,641,642],{},[52,643,644],{},"config/functions.lua",[45,646,647],{},"File-owned death, cuff and phone-opening hooks",[30,649,650,655],{},[45,651,652],{},[52,653,654],{},"config/WebHooks.lua",[45,656,657],{},"Server-only logging defaults; the separate Webhooks editor stores SQL overrides",[30,659,660,665],{},[45,661,662],{},[52,663,664],{},"config/locales/en.lua",[45,666,667],{},"Canonical English locale and fallback structure",[30,669,670,675],{},[45,671,672],{},[52,673,674],{},"config/locales/de.lua",[45,676,677],{},"German locale overrides",[30,679,680,685],{},[45,681,682],{},[52,683,684],{},"config/music/",[45,686,687],{},"Server-owned MP3/OGG tracks and optional artwork",[126,689,691],{"id":690},"framework-inventory-and-locale","Framework, inventory, and locale",[15,693,694,695,698],{},"Use ",[137,696,697],{},"General → Framework & integrations",". In file mode, edit the existing Bridge fields:",[153,700,703],{"className":155,"code":701,"filename":702,"language":158,"meta":159,"style":159},"Config.Bridge.Framework = \"auto\" -- auto, esx, qbox, qb\nConfig.Bridge.Inventory = \"auto\"\nConfig.Bridge.Locale = \"en\" -- 15 bundled locales, including en and de\nConfig.Bridge.Debug = false\n","config/config.lua — file mode",[52,704,705,732,751,774],{"__ignoreMap":159},[163,706,707,709,712,714,716,718,721,725,728],{"class":165,"line":166},[163,708,170],{"class":169},[163,710,711],{"class":173},"Bridge",[163,713,92],{"class":169},[163,715,59],{"class":173},[163,717,178],{"class":177},[163,719,720],{"class":177}," \"",[163,722,724],{"class":723},"sfazB","auto",[163,726,727],{"class":177},"\" ",[163,729,731],{"class":730},"sHwdD","-- auto, esx, qbox, qb\n",[163,733,734,736,738,740,742,744,746,748],{"class":165,"line":184},[163,735,170],{"class":169},[163,737,711],{"class":173},[163,739,92],{"class":169},[163,741,67],{"class":173},[163,743,178],{"class":177},[163,745,720],{"class":177},[163,747,724],{"class":723},[163,749,750],{"class":177},"\"\n",[163,752,753,755,757,759,762,764,766,769,771],{"class":165,"line":199},[163,754,170],{"class":169},[163,756,711],{"class":173},[163,758,92],{"class":169},[163,760,761],{"class":173},"Locale",[163,763,178],{"class":177},[163,765,720],{"class":177},[163,767,768],{"class":723},"en",[163,770,727],{"class":177},[163,772,773],{"class":730},"-- 15 bundled locales, including en and de\n",[163,775,776,778,780,782,785,787],{"class":165,"line":406},[163,777,170],{"class":169},[163,779,711],{"class":173},[163,781,92],{"class":169},[163,783,784],{"class":173},"Debug",[163,786,178],{"class":177},[163,788,789],{"class":177}," false\n",[15,791,792],{},"Use explicit provider values when automatic detection could select the wrong resource. Debug mode\nadds diagnostic information; warnings and errors are always printed.",[126,794,796],{"id":795},"choose-a-device-mode","Choose a device mode",[153,798,800],{"className":155,"code":799,"language":158,"meta":159,"style":159},"Config.Phone.Unique = true\n",[52,801,802],{"__ignoreMap":159},[163,803,804,806,809,811,814,816],{"class":165,"line":166},[163,805,170],{"class":169},[163,807,808],{"class":173},"Phone",[163,810,92],{"class":169},[163,812,813],{"class":173},"Unique",[163,815,178],{"class":177},[163,817,818],{"class":177}," true\n",[24,820,821,831],{},[27,822,823],{},[30,824,825,828],{},[33,826,827],{},"Mode",[33,829,830],{},"Behavior",[40,832,833,842],{},[30,834,835,839],{},[45,836,837],{},[52,838,208],{},[45,840,841],{},"Each phone item has its own IMEI. Settings, apps, account link, local data, and SIM follow that item. The item must not stack.",[30,843,844,848],{},[45,845,846],{},[52,847,233],{},[45,849,850],{},"Each framework character receives one persistent virtual device. Any configured phone item opens that device.",[15,852,853,854,856],{},"With unique phones, using an item selects that exact handset. The ",[52,855,526],{}," key reopens the last selected\nIMEI; when no handset has been selected, the server chooses the first concrete phone slot.",[126,858,860],{"id":859},"choose-a-sim-mode","Choose a SIM mode",[153,862,864],{"className":155,"code":863,"language":158,"meta":159,"style":159},"Config.Sim.Enabled = true\n",[52,865,866],{"__ignoreMap":159},[163,867,868,870,873,875,878,880],{"class":165,"line":166},[163,869,170],{"class":169},[163,871,872],{"class":173},"Sim",[163,874,92],{"class":169},[163,876,877],{"class":173},"Enabled",[163,879,178],{"class":177},[163,881,818],{"class":177},[24,883,884,892],{},[27,885,886],{},[30,887,888,890],{},[33,889,827],{},[33,891,830],{},[40,893,894,903],{},[30,895,896,900],{},[45,897,898],{},[52,899,208],{},[45,901,902],{},"The phone itself opens without a SIM; cellular service requires an inserted registered or anonymous physical SIM item.",[30,904,905,909],{},[45,906,907],{},[52,908,233],{},[45,910,911],{},"Devices without a SIM receive a persistent automatic number. Physical SIM items are not required.",[15,913,914],{},"Test device- or SIM-mode changes on a database copy before applying them to an existing production\nserver.",[15,916,917,918,921],{},"These are separate switches under ",[137,919,920],{},"General → Devices & SIM cards",". Disabling physical SIMs\ndoes not prevent opening the phone and does not replace existing numbers. New number prefix and\nlength values affect newly generated numbers only.",[126,923,925],{"id":924},"configure-calls-and-radio","Configure calls and radio",[153,927,929],{"className":155,"code":928,"language":158,"meta":159,"style":159},"Config.Calls.VoiceProvider = \"pma\" -- auto, yaca, pma, pma-voice, saltychat, salty\nConfig.Radio.VoiceProvider = \"auto\" -- auto, yaca, pma, saltychat\n",[52,930,931,954],{"__ignoreMap":159},[163,932,933,935,937,939,942,944,946,949,951],{"class":165,"line":166},[163,934,170],{"class":169},[163,936,75],{"class":173},[163,938,92],{"class":169},[163,940,941],{"class":173},"VoiceProvider",[163,943,178],{"class":177},[163,945,720],{"class":177},[163,947,948],{"class":723},"pma",[163,950,727],{"class":177},[163,952,953],{"class":730},"-- auto, yaca, pma, pma-voice, saltychat, salty\n",[163,955,956,958,960,962,964,966,968,970,972],{"class":165,"line":184},[163,957,170],{"class":169},[163,959,83],{"class":173},[163,961,92],{"class":169},[163,963,941],{"class":173},[163,965,178],{"class":177},[163,967,720],{"class":177},[163,969,724],{"class":723},[163,971,727],{"class":177},[163,973,974],{"class":730},"-- auto, yaca, pma, saltychat\n",[15,976,977,978,981,982,92],{},"Start the selected voice resource before Free Phone. Radio's automatic selection checks YACA,\nPMA Voice, and SaltyChat. Configure restricted frequencies in ",[52,979,980],{},"Config.Radio.LockedChannels"," and\ndisplay-name permissions in ",[52,983,984],{},"Config.Radio.DisplayName.AllowedJobs",[126,986,988],{"id":987},"configure-media","Configure media",[15,990,991,992,995],{},"In SQL mode, enter FiveManage and GIPHY keys in the ",[137,993,994],{},"Media"," detail section and save.\nIn file mode, edit the server-only media file and restart:",[153,997,999],{"className":155,"code":998,"filename":237,"language":158,"meta":159,"style":159},"Config.Media.FiveManage.ApiKey = \"your-fivemanage-v3-media-token\"\nConfig.Media.GiphyApiKey = \"your-giphy-api-key\"\n",[52,1000,1001,1026],{"__ignoreMap":159},[163,1002,1003,1005,1007,1009,1012,1014,1017,1019,1021,1024],{"class":165,"line":166},[163,1004,170],{"class":169},[163,1006,994],{"class":173},[163,1008,92],{"class":169},[163,1010,1011],{"class":173},"FiveManage",[163,1013,92],{"class":169},[163,1015,1016],{"class":173},"ApiKey",[163,1018,178],{"class":177},[163,1020,720],{"class":177},[163,1022,1023],{"class":723},"your-fivemanage-v3-media-token",[163,1025,750],{"class":177},[163,1027,1028,1030,1032,1034,1037,1039,1041,1044],{"class":165,"line":184},[163,1029,170],{"class":169},[163,1031,994],{"class":173},[163,1033,92],{"class":169},[163,1035,1036],{"class":173},"GiphyApiKey",[163,1038,178],{"class":177},[163,1040,720],{"class":177},[163,1042,1043],{"class":723},"your-giphy-api-key",[163,1045,750],{"class":177},[15,1047,1048,1049,1052],{},"Without a valid FiveManage token, Camera uploads, video uploads, Voice Memo uploads, and FiveManage\nGallery imports are unavailable. Limit Gallery import origins through\n",[52,1050,1051],{},"Config.Media.Import.Websites","; direct URLs are accepted only from configured HTTPS hosts.",[126,1054,1056],{"id":1055},"configure-server-owned-music","Configure server-owned music",[15,1058,1059,1060,1062,1063,1066],{},"Place MP3 or OGG files anywhere below ",[52,1061,684],{},". Optional artwork can use WEBP, PNG, JPG, or\nJPEG. Define stable tracks in ",[52,1064,1065],{},"Config.Music.Tracks",":",[153,1068,1070],{"className":155,"code":1069,"language":158,"meta":159,"style":159},"Config.Music.Tracks = {\n    {\n        Id = \"night-drive\",\n        Title = \"Night Drive\",\n        Artist = \"Sky Records\",\n    },\n}\n",[52,1071,1072,1088,1093,1110,1126,1142,1147],{"__ignoreMap":159},[163,1073,1074,1076,1079,1081,1084,1086],{"class":165,"line":166},[163,1075,170],{"class":169},[163,1077,1078],{"class":173},"Music",[163,1080,92],{"class":169},[163,1082,1083],{"class":173},"Tracks",[163,1085,178],{"class":177},[163,1087,181],{"class":169},[163,1089,1090],{"class":165,"line":184},[163,1091,1092],{"class":169},"    {\n",[163,1094,1095,1098,1100,1102,1105,1108],{"class":165,"line":199},[163,1096,1097],{"class":169},"        Id ",[163,1099,190],{"class":177},[163,1101,720],{"class":177},[163,1103,1104],{"class":723},"night-drive",[163,1106,1107],{"class":177},"\"",[163,1109,196],{"class":169},[163,1111,1112,1115,1117,1119,1122,1124],{"class":165,"line":406},[163,1113,1114],{"class":169},"        Title ",[163,1116,190],{"class":177},[163,1118,720],{"class":177},[163,1120,1121],{"class":723},"Night Drive",[163,1123,1107],{"class":177},[163,1125,196],{"class":169},[163,1127,1128,1131,1133,1135,1138,1140],{"class":165,"line":412},[163,1129,1130],{"class":169},"        Artist ",[163,1132,190],{"class":177},[163,1134,720],{"class":177},[163,1136,1137],{"class":723},"Sky Records",[163,1139,1107],{"class":177},[163,1141,196],{"class":169},[163,1143,1144],{"class":165,"line":418},[163,1145,1146],{"class":169},"    },\n",[163,1148,1149],{"class":165,"line":424},[163,1150,202],{"class":169},[15,1152,1153,1154,357,1157,1160,1161,1163],{},"Name files after the track ID, for example ",[52,1155,1156],{},"night-drive.ogg",[52,1158,1159],{},"night-drive.webp",". Restart\n",[52,1162,91],{}," after adding tracks.",[126,1165,1167],{"id":1166},"set-production-security-values","Set production security values",[15,1169,1170,1171,1174],{},"On a new production server, use ",[137,1172,1173],{},"Phone configurator → Server"," to replace all four defaults\nwith long, random, different values before players create passcodes or social accounts:",[153,1176,1178],{"className":155,"code":1177,"language":158,"meta":159,"style":159},"Config.Server = {\n    PasscodePepper = \"replace-with-a-long-random-value\",\n    CrewLinkPasswordPepper = \"replace-with-a-separate-random-value\",\n    FlipTokPasswordPepper = \"replace-with-another-random-value\",\n    PicstagramPasswordPepper = \"replace-with-a-third-random-value\",\n}\n",[52,1179,1180,1191,1207,1223,1239,1255],{"__ignoreMap":159},[163,1181,1182,1184,1187,1189],{"class":165,"line":166},[163,1183,170],{"class":169},[163,1185,1186],{"class":173},"Server",[163,1188,178],{"class":177},[163,1190,181],{"class":169},[163,1192,1193,1196,1198,1200,1203,1205],{"class":165,"line":184},[163,1194,1195],{"class":169},"    PasscodePepper ",[163,1197,190],{"class":177},[163,1199,720],{"class":177},[163,1201,1202],{"class":723},"replace-with-a-long-random-value",[163,1204,1107],{"class":177},[163,1206,196],{"class":169},[163,1208,1209,1212,1214,1216,1219,1221],{"class":165,"line":199},[163,1210,1211],{"class":169},"    CrewLinkPasswordPepper ",[163,1213,190],{"class":177},[163,1215,720],{"class":177},[163,1217,1218],{"class":723},"replace-with-a-separate-random-value",[163,1220,1107],{"class":177},[163,1222,196],{"class":169},[163,1224,1225,1228,1230,1232,1235,1237],{"class":165,"line":406},[163,1226,1227],{"class":169},"    FlipTokPasswordPepper ",[163,1229,190],{"class":177},[163,1231,720],{"class":177},[163,1233,1234],{"class":723},"replace-with-another-random-value",[163,1236,1107],{"class":177},[163,1238,196],{"class":169},[163,1240,1241,1244,1246,1248,1251,1253],{"class":165,"line":412},[163,1242,1243],{"class":169},"    PicstagramPasswordPepper ",[163,1245,190],{"class":177},[163,1247,720],{"class":177},[163,1249,1250],{"class":723},"replace-with-a-third-random-value",[163,1252,1107],{"class":177},[163,1254,196],{"class":169},[163,1256,1257],{"class":165,"line":418},[163,1258,202],{"class":169},[1260,1261,1262],"warning",{},[15,1263,1264,1265,1268],{},"Keep each value private, different, and stable. Changing a pepper invalidates the passcodes or\npasswords protected by that value. This snippet identifies the panel fields; do not paste\nprivate values into shared ",[52,1266,1267],{},"config.lua",". Clients download that file even inside a server-only\nexecution block. File mode has no private pepper storage; use SQL mode for private peppers.",[15,1270,1271],{},"Players must treat Sky Cloud and social-app credentials as in-character roleplay credentials and\nmust never reuse real-world passwords.",[126,1273,1275],{"id":1274},"configure-optional-apps","Configure optional apps",[551,1277,1278,1284,1290,1296,1302,1308],{},[554,1279,1280,1281,92],{},"Select a Garage provider in ",[52,1282,1283],{},"Config.Garage.System",[554,1285,1286,1287,92],{},"Select a Housing provider in ",[52,1288,1289],{},"Config.Housing.System",[554,1291,1292,1293,92],{},"Define company jobs, profiles, services, phone numbers, permissions, and availability under\n",[52,1294,1295],{},"Config.Companies.Definitions",[554,1297,1298,1299,92],{},"Configure Weazel News editorial jobs and grades under ",[52,1300,1301],{},"Config.WeazelNews.AllowedJobs",[554,1303,1304,1305,92],{},"Add trusted external CrewLink ping resources to ",[52,1306,1307],{},"Config.CrewLink.ExternalPingResources",[554,1309,1310,1311,92],{},"Configure custom-app origins, storage ceilings, rate limits, and adapters under\n",[52,1312,1313],{},"Config.CustomApps",[126,1315,1317],{"id":1316},"disable-development-tools","Disable development tools",[15,1319,1320],{},"Before production, review:",[153,1322,1324],{"className":155,"code":1323,"language":158,"meta":159,"style":159},"Config.Phone.DevelopmentCommand = false\nConfig.TestData.Enabled = false\nConfig.Bridge.Debug = false\n",[52,1325,1326,1341,1356],{"__ignoreMap":159},[163,1327,1328,1330,1332,1334,1337,1339],{"class":165,"line":166},[163,1329,170],{"class":169},[163,1331,808],{"class":173},[163,1333,92],{"class":169},[163,1335,1336],{"class":173},"DevelopmentCommand",[163,1338,178],{"class":177},[163,1340,789],{"class":177},[163,1342,1343,1345,1348,1350,1352,1354],{"class":165,"line":184},[163,1344,170],{"class":169},[163,1346,1347],{"class":173},"TestData",[163,1349,92],{"class":169},[163,1351,877],{"class":173},[163,1353,178],{"class":177},[163,1355,789],{"class":177},[163,1357,1358,1360,1362,1364,1366,1368],{"class":165,"line":199},[163,1359,170],{"class":169},[163,1361,711],{"class":173},[163,1363,92],{"class":169},[163,1365,784],{"class":173},[163,1367,178],{"class":177},[163,1369,789],{"class":177},[19,1371,1373],{"id":1372},"migrate-from-lb-phone","Migrate from LB Phone",[15,1375,1376],{},"Free Phone detects supported LB Phone tables but never starts an import automatically.",[122,1378,1379,1383,1386,1390,1393,1411,1415,1427],{"level":124},[126,1380,1382],{"id":1381},"back-up-the-database","Back up the database",[15,1384,1385],{},"Create a complete backup before previewing or importing data.",[126,1387,1389],{"id":1388},"preview-the-migration","Preview the migration",[15,1391,1392],{},"Run from the server console:",[153,1394,1398],{"className":1395,"code":1396,"language":1397,"meta":159,"style":159},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","skyphone:migrate lb-phone dry\n","bash",[52,1399,1400],{"__ignoreMap":159},[163,1401,1402,1405,1408],{"class":165,"line":166},[163,1403,1404],{"class":173},"skyphone:migrate",[163,1406,1407],{"class":723}," lb-phone",[163,1409,1410],{"class":723}," dry\n",[126,1412,1414],{"id":1413},"import-and-verify","Import and verify",[153,1416,1418],{"className":1395,"code":1417,"language":1397,"meta":159,"style":159},"skyphone:migrate lb-phone\n",[52,1419,1420],{"__ignoreMap":159},[163,1421,1422,1424],{"class":165,"line":166},[163,1423,1404],{"class":173},[163,1425,1426],{"class":723}," lb-phone\n",[15,1428,1429,1430,1433,1434,1437],{},"Restart the resource and verify accounts, devices, calls, messages, media, and social apps. Use\n",[52,1431,1432],{},"force"," for an idempotent retry or ",[52,1435,1436],{},"remove"," to remove data created by the migration.",[19,1439,1441],{"id":1440},"update-safely","Update safely",[1443,1444,1445,1448,1451,1454,1457,1460,1463],"ol",{},[554,1446,1447],{},"Back up the database, including the Configurator and Webhooks SQL settings.",[554,1449,1450],{},"Back up file-owned configuration, custom tones, music and other assets.",[554,1452,1453],{},"Preserve all four production pepper values.",[554,1455,1456],{},"Replace the resource files.",[554,1458,1459],{},"Preserve Part 1. In SQL mode keep the saved Configurator row; file edits do not import into it. In file mode merge configuration options instead of overwriting the new config blindly.",[554,1461,1462],{},"Add both Phone resource ACE grants and verify administrator membership when updating from the old framework-role checks.",[554,1464,1465],{},"Restart Free Phone, review warnings/errors, then verify admin access, General settings, phone/SIM item use and player hotkeys.",[1467,1468,1469],"tip",{},[15,1470,694,1471,1473,1474,1478,1479,1483],{},[105,1472,242],{"href":241}," for General, command permissions,\nFiveM key capture and troubleshooting. Continue with the ",[105,1475,1477],{"href":1476},"/docs/scripts/free-phone/exports","Exports"," and\n",[105,1480,1482],{"href":1481},"/docs/scripts/free-phone/events","Events"," pages when integrating external resources.",[1485,1486,1487],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":159,"searchDepth":166,"depth":184,"links":1489},[1490,1491,1492,1493,1494,1506,1507],{"id":21,"depth":184,"text":22},{"id":119,"depth":184,"text":120},{"id":530,"depth":184,"text":531},{"id":548,"depth":184,"text":549},{"id":586,"depth":184,"text":587,"children":1495},[1496,1497,1498,1499,1500,1501,1502,1503,1504,1505],{"id":593,"depth":199,"text":594},{"id":690,"depth":199,"text":691},{"id":795,"depth":199,"text":796},{"id":859,"depth":199,"text":860},{"id":924,"depth":199,"text":925},{"id":987,"depth":199,"text":988},{"id":1055,"depth":199,"text":1056},{"id":1166,"depth":199,"text":1167},{"id":1274,"depth":199,"text":1275},{"id":1316,"depth":199,"text":1317},{"id":1372,"depth":184,"text":1373},{"id":1440,"depth":184,"text":1441},"Install Free Phone, configure inventory items and ACE access, choose SQL or file configuration, and verify the first startup.","md",null,{},"/docs/scripts/free-phone/installation",{"title":5,"description":1508},{"loc":1512},"1.docs/scripts/4.free-phone/1.installation","Dj2Oa7L6wNj2W-oGke4yJTMQYiBeWNUZXiYH0qxWhWs",[1518,1522],{"title":1519,"path":1520,"stem":1521,"description":159,"children":-1},"Custom Rewards","/docs/scripts/dailyrewards/custom-rewards","1.docs/scripts/3.dailyrewards/2.custom-rewards",{"title":1523,"path":1524,"stem":1525,"description":1526,"children":-1},"Features","/docs/scripts/free-phone/features","1.docs/scripts/4.free-phone/2.features","Explore the device system, built-in apps, media, social features, integrations, and developer platform included with Free Phone.",[],1791325890823]