[{"data":1,"prerenderedAt":1185},["ShallowReactive",2],{"/blog/fivem-framework-setup":3,"blog-post-metadata":1153},{"id":4,"title":5,"authors":6,"badge":12,"body":14,"date":1126,"description":1127,"extension":1128,"head":1129,"image":1141,"language":1139,"meta":1143,"navigation":370,"path":1144,"schemaOrg":1145,"seo":1148,"sitemap":1149,"stem":1150,"translationKey":1151,"__hash__":1152},"posts/3.blog/fivem-framework-setup.md","ESX, QBCore and Qbox: Set Up Your Framework and Create Jobs",[7],{"name":8,"to":9,"avatar":10},"Alec S.","/",{"src":11},"/web/pb3.webp",{"label":13},"Framework Setup",{"type":15,"value":16,"toc":1117},"minimark",[17,26,31,52,88,105,109,128,207,225,229,232,312,319,512,526,535,562,578,582,592,755,775,781,785,797,937,951,968,972,994,1001,1022,1033,1036,1090,1094,1107,1113],[18,19,20,21,25],"p",{},"A working framework is the foundation of your FiveM server. Before adding garages, tablets or businesses, get character creation, the database and job assignment working. This guide covers a fresh installation and one small example job in ",[22,23,24],"strong",{},"ESX Legacy, QBCore or Qbox",". Follow the section for your framework; installing all three together is not part of the setup.",[27,28,30],"h2",{"id":29},"start-with-a-clean-installation","Start with a clean installation",[18,32,33,34,37,38,45,46,51],{},"Prepare a Cfx.re account, a server registration key, a suitable FXServer artifact and a running ",[22,35,36],{},"MariaDB"," service. Use the database version supported by your chosen framework; Qbox explicitly requires MariaDB and does not support MySQL or XAMPP. On managed hosting, use the provider's server and txAdmin controls. See the ",[39,40,44],"a",{"href":41,"rel":42},"https://docs.fivem.net/docs/server-manual/setting-up-a-server-txadmin/",[43],"nofollow","official FiveM server setup guide"," and ",[39,47,50],{"href":48,"rel":49},"https://docs.qbox.re/installation",[43],"Qbox requirements",".",[53,54,55,59,79,82,85],"ol",{},[56,57,58],"li",{},"Open txAdmin and choose a fresh recipe deployment in a new server data directory.",[56,60,61,62,67,68,73,74,51],{},"Select your framework's official recipe: ",[39,63,66],{"href":64,"rel":65},"https://github.com/esx-framework/esx-recipes",[43],"ESX Legacy",", ",[39,69,72],{"href":70,"rel":71},"https://github.com/qbcore-fivem/txAdminRecipe",[43],"QBCore"," or ",[39,75,78],{"href":76,"rel":77},"https://github.com/Qbox-project/txAdminRecipe",[43],"Qbox",[56,80,81],{},"Enter the server key and correct MariaDB connection details. Use a dedicated database account with access to this server's database.",[56,83,84],{},"Run the recipe, review the generated configuration and start the server. Keep the recipe's dependencies and resource order.",[56,86,87],{},"Join, create a character, reconnect and confirm that the character still loads before adding other resources.",[18,89,90,91,67,96,73,101,51],{},"Recipes download resources and run their installation SQL. Do not import a second full framework schema afterward or deploy a fresh recipe over an existing server. Back up both files and database before later changes. For framework-specific installation steps, follow ",[39,92,95],{"href":93,"rel":94},"https://docs.esx-framework.org/en/tutorial/install",[43],"ESX's installation guide",[39,97,100],{"href":98,"rel":99},"https://qbcore.org/docs/guides/windows-installation",[43],"QBCore's Windows guide",[39,102,104],{"href":48,"rel":103},[43],"Qbox's installation guide",[27,106,108],{"id":107},"understand-what-a-job-actually-contains","Understand what a job actually contains",[18,110,111,112,115,116,120,121,45,124,127],{},"Every job has an ",[22,113,114],{},"internal key",", a display label and numbered grades. We use ",[117,118,119],"code",{},"sky_example",", with grades ",[117,122,123],{},"0",[117,125,126],{},"1",", throughout. Keep that key identical in the framework, job script and any integrations. A label such as “Example Company” is only the name players see.",[129,130,131,147],"table",{},[132,133,134],"thead",{},[135,136,137,141,144],"tr",{},[138,139,140],"th",{},"Framework",[138,142,143],{},"Job definitions",[138,145,146],{},"Grade keys in this guide",[148,149,150,171,189],"tbody",{},[135,151,152,155,164],{},[153,154,66],"td",{},[153,156,157,158,45,161],{},"MariaDB: ",[117,159,160],{},"jobs",[117,162,163],{},"job_grades",[153,165,166,167,67,169],{},"SQL values ",[117,168,123],{},[117,170,126],{},[135,172,173,175,180],{},[153,174,72],{},[153,176,177],{},[117,178,179],{},"qb-core/shared/jobs.lua",[153,181,182,183,67,186],{},"Strings: ",[117,184,185],{},"['0']",[117,187,188],{},"['1']",[135,190,191,193,198],{},[153,192,78],{},[153,194,195],{},[117,196,197],{},"qbx_core/shared/jobs.lua",[153,199,200,201,67,204],{},"Numbers: ",[117,202,203],{},"[0]",[117,205,206],{},"[1]",[18,208,209,210,67,215,45,220,51],{},"Registering a job creates its framework identity. Gameplay, garages, storage, boss menus and business accounts need their own compatible resources and configuration. A framework job is not a finished business. The locations above follow the ",[39,211,214],{"href":212,"rel":213},"https://github.com/esx-framework/esx_core/blob/main/%5BSQL%5D/legacy.sql",[43],"ESX schema",[39,216,219],{"href":217,"rel":218},"https://github.com/qbcore-fivem/qb-core/blob/main/shared/jobs.lua",[43],"QBCore jobs file",[39,221,224],{"href":222,"rel":223},"https://github.com/Qbox-project/qbx_core/blob/main/shared/jobs.lua",[43],"Qbox jobs file",[27,226,228],{"id":227},"esx-legacy-create-the-job-in-mariadb","ESX Legacy: create the job in MariaDB",[18,230,231],{},"Open the database configured for this server, not another server's database. First check whether the example key already exists:",[233,234,240],"pre",{"className":235,"code":236,"filename":237,"language":238,"meta":239,"style":239},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SELECT name FROM jobs WHERE name = 'sky_example';\nSELECT grade FROM job_grades WHERE job_name = 'sky_example';\n","Check existing jobs","sql","",[117,241,242,282],{"__ignoreMap":239},[243,244,247,251,254,257,261,264,266,270,273,276,279],"span",{"class":245,"line":246},"line",1,[243,248,250],{"class":249},"sbssI","SELECT",[243,252,253],{"class":249}," name",[243,255,256],{"class":249}," FROM",[243,258,260],{"class":259},"sTEyZ"," jobs ",[243,262,263],{"class":249},"WHERE",[243,265,253],{"class":249},[243,267,269],{"class":268},"sMK4o"," =",[243,271,272],{"class":268}," '",[243,274,119],{"class":275},"sfazB",[243,277,278],{"class":268},"'",[243,280,281],{"class":259},";\n",[243,283,285,287,290,293,296,298,301,304,306,308,310],{"class":245,"line":284},2,[243,286,250],{"class":249},[243,288,289],{"class":259}," grade ",[243,291,292],{"class":249},"FROM",[243,294,295],{"class":259}," job_grades ",[243,297,263],{"class":249},[243,299,300],{"class":259}," job_name ",[243,302,303],{"class":268},"=",[243,305,272],{"class":268},[243,307,119],{"class":275},[243,309,278],{"class":268},[243,311,281],{"class":259},[18,313,314,315,318],{},"Only run the following inserts when ",[22,316,317],{},"both checks return no rows",". If the job exists, inspect and edit its existing records instead of inserting duplicates.",[233,320,323],{"className":235,"code":321,"filename":322,"language":238,"meta":239,"style":239},"INSERT INTO jobs (name, label)\nVALUES ('sky_example', 'Example Company');\n\nINSERT INTO job_grades\n    (job_name, grade, name, label, salary, skin_male, skin_female)\nVALUES\n    ('sky_example', 0, 'employee', 'Employee', 100, '{}', '{}'),\n    ('sky_example', 1, 'boss', 'Manager', 200, '{}', '{}');\n","Create the example job",[117,324,325,339,365,372,380,391,397,456],{"__ignoreMap":239},[243,326,327,330,333,336],{"class":245,"line":246},[243,328,329],{"class":249},"INSERT INTO",[243,331,332],{"class":259}," jobs (",[243,334,335],{"class":249},"name",[243,337,338],{"class":259},", label)\n",[243,340,341,344,347,349,351,353,355,357,360,362],{"class":245,"line":284},[243,342,343],{"class":249},"VALUES",[243,345,346],{"class":259}," (",[243,348,278],{"class":268},[243,350,119],{"class":275},[243,352,278],{"class":268},[243,354,67],{"class":259},[243,356,278],{"class":268},[243,358,359],{"class":275},"Example Company",[243,361,278],{"class":268},[243,363,364],{"class":259},");\n",[243,366,368],{"class":245,"line":367},3,[243,369,371],{"emptyLinePlaceholder":370},true,"\n",[243,373,375,377],{"class":245,"line":374},4,[243,376,329],{"class":249},[243,378,379],{"class":259}," job_grades\n",[243,381,383,386,388],{"class":245,"line":382},5,[243,384,385],{"class":259},"    (job_name, grade, ",[243,387,335],{"class":249},[243,389,390],{"class":259},", label, salary, skin_male, skin_female)\n",[243,392,394],{"class":245,"line":393},6,[243,395,396],{"class":249},"VALUES\n",[243,398,400,403,405,407,409,411,413,415,417,420,422,424,426,429,431,433,436,438,440,443,445,447,449,451,453],{"class":245,"line":399},7,[243,401,402],{"class":259},"    (",[243,404,278],{"class":268},[243,406,119],{"class":275},[243,408,278],{"class":268},[243,410,67],{"class":259},[243,412,123],{"class":249},[243,414,67],{"class":259},[243,416,278],{"class":268},[243,418,419],{"class":275},"employee",[243,421,278],{"class":268},[243,423,67],{"class":259},[243,425,278],{"class":268},[243,427,428],{"class":275},"Employee",[243,430,278],{"class":268},[243,432,67],{"class":259},[243,434,435],{"class":249},"100",[243,437,67],{"class":259},[243,439,278],{"class":268},[243,441,442],{"class":275},"{}",[243,444,278],{"class":268},[243,446,67],{"class":259},[243,448,278],{"class":268},[243,450,442],{"class":275},[243,452,278],{"class":268},[243,454,455],{"class":259},"),\n",[243,457,459,461,463,465,467,469,471,473,475,478,480,482,484,487,489,491,494,496,498,500,502,504,506,508,510],{"class":245,"line":458},8,[243,460,402],{"class":259},[243,462,278],{"class":268},[243,464,119],{"class":275},[243,466,278],{"class":268},[243,468,67],{"class":259},[243,470,126],{"class":249},[243,472,67],{"class":259},[243,474,278],{"class":268},[243,476,477],{"class":275},"boss",[243,479,278],{"class":268},[243,481,67],{"class":259},[243,483,278],{"class":268},[243,485,486],{"class":275},"Manager",[243,488,278],{"class":268},[243,490,67],{"class":259},[243,492,493],{"class":249},"200",[243,495,67],{"class":259},[243,497,278],{"class":268},[243,499,442],{"class":275},[243,501,278],{"class":268},[243,503,67],{"class":259},[243,505,278],{"class":268},[243,507,442],{"class":275},[243,509,278],{"class":268},[243,511,364],{"class":259},[18,513,514,517,518,521,522,525],{},[117,515,516],{},"job_name"," links each grade to the job. The ",[117,519,520],{},"grade"," column is the rank used for assignment; the row's automatic ",[117,523,524],{},"id"," is not the rank. A job without grades is ignored. Reload the job catalog through the server console:",[233,527,533],{"className":528,"code":530,"filename":531,"language":532,"meta":239},[529],"language-text","refreshjobs\n","Server console","text",[117,534,530],{"__ignoreMap":239},[18,536,537,538,541,542,541,545,548,549,551,552,45,557,51],{},"Current ESX Legacy starts ",[117,539,540],{},"oxmysql",", then ",[117,543,544],{},"esx_lib",[117,546,547],{},"es_extended","; older tutorials may omit ",[117,550,544],{},". Keep the dependencies supplied by your recipe. See the ",[39,553,556],{"href":554,"rel":555},"https://github.com/esx-framework/esx-recipes/blob/legacy/server.cfg",[43],"current recipe configuration",[39,558,561],{"href":559,"rel":560},"https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/server/modules/jobs/registry.lua",[43],"job loading implementation",[18,563,564,565,568,569,571,572,577],{},"For an ",[117,566,567],{},"esx_society"," integration, the internal grade name ",[117,570,477],{}," is recognized by its default boss configuration. The visible label “Manager” alone grants nothing. Society registration, accounts and dependency order remain separate setup steps. Follow the ",[39,573,576],{"href":574,"rel":575},"https://docs.esx-framework.org/en/esx_addons/esx_society",[43],"society documentation"," if your job resource uses it.",[27,579,581],{"id":580},"qbcore-add-an-entry-to-the-jobs-table","QBCore: add an entry to the jobs table",[18,583,584,585,587,588,591],{},"Open ",[117,586,179],{},". Insert this ",[22,589,590],{},"inside the existing jobs table",", alongside the other job entries and before its closing brace. Keep the existing table declaration and all existing jobs; this is an entry, not a replacement file.",[233,593,597],{"className":594,"code":595,"filename":179,"language":596,"meta":239,"style":239},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","['sky_example'] = {\n    label = 'Example Company',\n    defaultDuty = false,\n    offDutyPay = false,\n    grades = {\n        ['0'] = { name = 'Employee', payment = 100 },\n        ['1'] = { name = 'Manager', payment = 200, isboss = true },\n    },\n},\n","lua",[117,598,599,618,634,646,657,666,703,744,749],{"__ignoreMap":239},[243,600,601,604,606,608,610,613,615],{"class":245,"line":246},[243,602,603],{"class":259},"[",[243,605,278],{"class":268},[243,607,119],{"class":275},[243,609,278],{"class":268},[243,611,612],{"class":259},"] ",[243,614,303],{"class":268},[243,616,617],{"class":259}," {\n",[243,619,620,623,625,627,629,631],{"class":245,"line":284},[243,621,622],{"class":259},"    label ",[243,624,303],{"class":268},[243,626,272],{"class":268},[243,628,359],{"class":275},[243,630,278],{"class":268},[243,632,633],{"class":259},",\n",[243,635,636,639,641,644],{"class":245,"line":367},[243,637,638],{"class":259},"    defaultDuty ",[243,640,303],{"class":268},[243,642,643],{"class":268}," false",[243,645,633],{"class":259},[243,647,648,651,653,655],{"class":245,"line":374},[243,649,650],{"class":259},"    offDutyPay ",[243,652,303],{"class":268},[243,654,643],{"class":268},[243,656,633],{"class":259},[243,658,659,662,664],{"class":245,"line":382},[243,660,661],{"class":259},"    grades ",[243,663,303],{"class":268},[243,665,617],{"class":259},[243,667,668,671,673,675,677,679,681,684,686,688,690,692,695,697,700],{"class":245,"line":393},[243,669,670],{"class":259},"        [",[243,672,278],{"class":268},[243,674,123],{"class":275},[243,676,278],{"class":268},[243,678,612],{"class":259},[243,680,303],{"class":268},[243,682,683],{"class":259}," { name ",[243,685,303],{"class":268},[243,687,272],{"class":268},[243,689,428],{"class":275},[243,691,278],{"class":268},[243,693,694],{"class":259},", payment ",[243,696,303],{"class":268},[243,698,699],{"class":249}," 100",[243,701,702],{"class":259}," },\n",[243,704,705,707,709,711,713,715,717,719,721,723,725,727,729,731,734,737,739,742],{"class":245,"line":399},[243,706,670],{"class":259},[243,708,278],{"class":268},[243,710,126],{"class":275},[243,712,278],{"class":268},[243,714,612],{"class":259},[243,716,303],{"class":268},[243,718,683],{"class":259},[243,720,303],{"class":268},[243,722,272],{"class":268},[243,724,486],{"class":275},[243,726,278],{"class":268},[243,728,694],{"class":259},[243,730,303],{"class":268},[243,732,733],{"class":249}," 200",[243,735,736],{"class":259},", isboss ",[243,738,303],{"class":268},[243,740,741],{"class":268}," true",[243,743,702],{"class":259},[243,745,746],{"class":245,"line":458},[243,747,748],{"class":259},"    },\n",[243,750,752],{"class":245,"line":751},9,[243,753,754],{"class":259},"},\n",[18,756,757,758,766,767,769,770,774],{},"Keep grade keys as strings, including grade zero. Check commas and braces around neighboring entries, save, then perform a planned full server restart so dependent resources load the same definitions. FiveM's ",[39,759,762,765],{"href":760,"rel":761},"https://docs.fivem.net/docs/server-manual/server-commands/#refresh",[43],[117,763,764],{},"refresh"," command"," rescans resources and manifests; it does not reload a running Lua jobs table. Do not create ESX-style ",[117,768,160],{}," SQL rows for QBCore. Its ",[39,771,773],{"href":217,"rel":772},[43],"job definitions"," live in Lua, while character data still uses the database.",[18,776,777,780],{},[117,778,779],{},"isboss"," marks the manager grade; it does not grant framework-admin command permissions. A compatible management resource must still provide and configure the actual menu and its location.",[27,782,784],{"id":783},"qbox-use-its-own-jobs-file-and-numeric-grades","Qbox: use its own jobs file and numeric grades",[18,786,584,787,789,790,796],{},[117,788,197],{}," and insert this ",[22,791,792,793],{},"inside the table returned by ",[117,794,795],{},"return { ... }",", before the final closing brace. Preserve its other entries. Qbox uses numeric grade keys here; do not paste QBCore's string keys unchanged.",[233,798,800],{"className":594,"code":799,"filename":197,"language":596,"meta":239,"style":239},"['sky_example'] = {\n    label = 'Example Company',\n    defaultDuty = false,\n    offDutyPay = false,\n    grades = {\n        [0] = { name = 'Employee', payment = 100 },\n        [1] = { name = 'Manager', payment = 200, isboss = true, bankAuth = true },\n    },\n},\n",[117,801,802,818,832,842,852,860,888,929,933],{"__ignoreMap":239},[243,803,804,806,808,810,812,814,816],{"class":245,"line":246},[243,805,603],{"class":259},[243,807,278],{"class":268},[243,809,119],{"class":275},[243,811,278],{"class":268},[243,813,612],{"class":259},[243,815,303],{"class":268},[243,817,617],{"class":259},[243,819,820,822,824,826,828,830],{"class":245,"line":284},[243,821,622],{"class":259},[243,823,303],{"class":268},[243,825,272],{"class":268},[243,827,359],{"class":275},[243,829,278],{"class":268},[243,831,633],{"class":259},[243,833,834,836,838,840],{"class":245,"line":367},[243,835,638],{"class":259},[243,837,303],{"class":268},[243,839,643],{"class":268},[243,841,633],{"class":259},[243,843,844,846,848,850],{"class":245,"line":374},[243,845,650],{"class":259},[243,847,303],{"class":268},[243,849,643],{"class":268},[243,851,633],{"class":259},[243,853,854,856,858],{"class":245,"line":382},[243,855,661],{"class":259},[243,857,303],{"class":268},[243,859,617],{"class":259},[243,861,862,864,866,868,870,872,874,876,878,880,882,884,886],{"class":245,"line":393},[243,863,670],{"class":259},[243,865,123],{"class":249},[243,867,612],{"class":259},[243,869,303],{"class":268},[243,871,683],{"class":259},[243,873,303],{"class":268},[243,875,272],{"class":268},[243,877,428],{"class":275},[243,879,278],{"class":268},[243,881,694],{"class":259},[243,883,303],{"class":268},[243,885,699],{"class":249},[243,887,702],{"class":259},[243,889,890,892,894,896,898,900,902,904,906,908,910,912,914,916,918,920,923,925,927],{"class":245,"line":399},[243,891,670],{"class":259},[243,893,126],{"class":249},[243,895,612],{"class":259},[243,897,303],{"class":268},[243,899,683],{"class":259},[243,901,303],{"class":268},[243,903,272],{"class":268},[243,905,486],{"class":275},[243,907,278],{"class":268},[243,909,694],{"class":259},[243,911,303],{"class":268},[243,913,733],{"class":249},[243,915,736],{"class":259},[243,917,303],{"class":268},[243,919,741],{"class":268},[243,921,922],{"class":259},", bankAuth ",[243,924,303],{"class":268},[243,926,741],{"class":268},[243,928,702],{"class":259},[243,930,931],{"class":245,"line":458},[243,932,748],{"class":259},[243,934,935],{"class":245,"line":751},[243,936,754],{"class":259},[18,938,939,940,943,944,946,947,51],{},"Save and perform a planned full server restart. ",[117,941,942],{},"bankAuth"," is separate from ",[117,945,779],{}," and is used by compatible banking integrations; neither flag creates an account or menu. Match your setup to the ",[39,948,950],{"href":222,"rel":949},[43],"official Qbox job definitions",[18,952,953,954,957,958,45,963,51],{},"Qbox includes multijob support. Its job limit and whether ",[117,955,956],{},"/setjob"," replaces or adds membership are configurable. Use its supported membership commands when managing several jobs; do not assume an external QBCore multijob resource is compatible. See ",[39,959,962],{"href":960,"rel":961},"https://docs.qbox.re/resources/qbx_core/commands",[43],"Qbox commands",[39,964,967],{"href":965,"rel":966},"https://docs.qbox.re/resources/qbx_core/convars",[43],"multijob configuration",[27,969,971],{"id":970},"assign-test-and-reconnect","Assign, test and reconnect",[18,973,974,975,978,979,982,983,985,986,989,990,993],{},"Join with a test character and use an account with the required framework/ACE command permissions. A txAdmin login alone does not establish those permissions. If Qbox has ",[117,976,977],{},"requireOptIn"," enabled, use ",[117,980,981],{},"/optin"," before admin commands. Replace ",[117,984,126],{}," below with ",[22,987,988],{},"your connected test character's current server ID","; ",[117,991,992],{},"/job"," reports the job of the player entering it:",[233,995,999],{"className":996,"code":997,"filename":998,"language":532,"meta":239},[529],"/setjob 1 sky_example 0\n/job\n/setjob 1 sky_example 1\n/job\n","In-game chat",[117,1000,997],{"__ignoreMap":239},[18,1002,1003,1004,67,1009,45,1013,1016,1017,51],{},"Check that both grades show the expected job and rank. The assignment syntax is documented for ",[39,1005,1008],{"href":1006,"rel":1007},"https://docs.esx-framework.org/en/esx_core/es_extended/commands",[43],"ESX",[39,1010,72],{"href":1011,"rel":1012},"https://github.com/qbcore-fivem/qb-core/blob/main/server/commands.lua",[43],[39,1014,78],{"href":960,"rel":1015},[43],"; Qbox's conditional opt-in check is in its ",[39,1018,1021],{"href":1019,"rel":1020},"https://github.com/Qbox-project/qbx_core/blob/main/server/commands.lua",[43],"command implementation",[18,1023,1024,1025,1028,1029,1032],{},"For QBCore and Qbox, this example starts off duty and disables off-duty pay. Use your installed job resource's duty action; there is no universal ",[117,1026,1027],{},"/duty"," command to assume. Login settings also affect whether saved duty or ",[117,1030,1031],{},"defaultDuty"," wins. Then reconnect and verify the saved job, grade and intended duty behavior.",[18,1034,1035],{},"Before opening the job to players, test its permissions with both grades. An employee should not access features reserved for management. Wait for your configured paycheck interval instead of expecting payment immediately after assignment; the example amounts are placeholders for your economy. If a check fails, read the first relevant console error and resolve it before adding another resource.",[129,1037,1038,1048],{},[132,1039,1040],{},[135,1041,1042,1045],{},[138,1043,1044],{},"Symptom",[138,1046,1047],{},"First check",[148,1049,1050,1058,1066,1074,1082],{},[135,1051,1052,1055],{},[153,1053,1054],{},"Job cannot be assigned",[153,1056,1057],{},"Exact key, existing grade and loaded definitions",[135,1059,1060,1063],{},[153,1061,1062],{},"Command denied",[153,1064,1065],{},"Framework permissions and ACE configuration",[135,1067,1068,1071],{},[153,1069,1070],{},"Resource fails after a Lua edit",[153,1072,1073],{},"First console error, commas and braces",[135,1075,1076,1079],{},[153,1077,1078],{},"Correct job but no menu",[153,1080,1081],{},"Job resource, configured location, grade and duty",[135,1083,1084,1087],{},[153,1085,1086],{},"Wrong paycheck",[153,1088,1089],{},"Grade pay, duty rules and payroll/account configuration",[27,1091,1093],{"id":1092},"connect-your-sky-job-afterward","Connect your Sky job afterward",[18,1095,1096,1097,1101,1102,1106],{},"Once framework assignment works, follow the ",[39,1098,1100],{"href":1099},"/docs/installation","Sky installation guide"," and configure your installed job resource with the same framework key and grades. Use ",[39,1103,1105],{"href":1104},"/docs/base/jobs-base/features","Jobs Base shared features"," for the relevant shared settings. Only configure an off-duty job pair when your chosen Sky setup uses one, and create both jobs with every required grade.",[18,1108,1109,1112],{},[22,1110,1111],{},"Last checked: 25 October 2026."," Sources above are the official framework documentation, maintained recipes and GitHub implementations. Check your installed version before applying examples from a newer release.",[1114,1115,1116],"style",{},"html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}",{"title":239,"searchDepth":246,"depth":284,"links":1118},[1119,1120,1121,1122,1123,1124,1125],{"id":29,"depth":284,"text":30},{"id":107,"depth":284,"text":108},{"id":227,"depth":284,"text":228},{"id":580,"depth":284,"text":581},{"id":783,"depth":284,"text":784},{"id":970,"depth":284,"text":971},{"id":1092,"depth":284,"text":1093},"2026-10-25T00:00:00.000Z","A practical FiveM starter guide: install your framework, create jobs and grades correctly, understand duty and boss access, and check that everything saves.","md",{"script":1130},[1131],{"type":1132,"key":1133,"data-nuxt-schema-org":370,"nodes":1134},"application/ld+json","schema-org-graph",[1135],{"headline":5,"author":1136,"datePublished":1138,"inLanguage":1139,"@type":1140},{"name":8,"@type":1137},"Person","2026-10-25","en","BlogPosting",{"src":1142},"/blog/framework-setup-esx-qbcore-qbox.webp",{},"/blog/fivem-framework-setup",[1146],{"headline":5,"author":1147,"datePublished":1138,"inLanguage":1139,"@type":1140},{"name":8,"@type":1137},{"title":5,"description":1127},{"loc":1144},"3.blog/fivem-framework-setup","fivem-framework-setup","dAZoXVLwd3Y9MVCTIMVXGXS_-hl8n_axGiX8g8litKA",[1154,1155,1160,1166,1171,1176,1181],{"title":5,"description":1127,"path":1144,"date":1126,"language":1139,"translationKey":1151},{"title":1156,"description":1157,"path":1158,"date":1126,"language":1159,"translationKey":1151},"ESX, QBCore und Qbox: Framework einrichten und Jobs anlegen","Der praktische FiveM-Einstieg: Framework installieren, Jobs und Ränge richtig anlegen, Dienststatus und Bossrechte verstehen und gespeicherte Daten prüfen.","/blog/fivem-framework-setup-de","de",{"title":1161,"description":1162,"path":1163,"date":1164,"language":1165,"translationKey":1165},"FiveM Screen Effects List – All GTA V Post FX with Examples (2026)","Complete FiveM screen effects list with preview images and ready-to-copy StartScreenEffect examples. Covers all GTA V post-processing FX, usage tips, performance notes, and best practices for FiveM servers.","/blog/fivem_screen_effects","2026-01-08T00:00:00.000Z",null,{"title":1167,"description":1168,"path":1169,"date":1170,"language":1165,"translationKey":1165},"Using GitHub Desktop to Simplify FiveM Updates and Spot Every Change","A no-command-line guide for FiveM server owners: use GitHub Desktop to see exactly what changed in an update, keep your own config edits, and roll back instantly when something breaks.","/blog/git_for_server_updates","2026-06-15T00:00:00.000Z",{"title":1172,"description":1173,"path":1174,"date":1175,"language":1165,"translationKey":1165},"Why All-in-One Police Systems for FiveM Are More Cost-Effective","A practical market price check for FiveM police systems. We compare the cost of buying similar police features individually versus choosing one integrated package, using a regular lifetime price of EUR 80 as the benchmark.","/blog/price_check","2026-04-01T00:00:00.000Z",{"title":1177,"description":1178,"path":1179,"date":1180,"language":1165,"translationKey":1165},"How to Update FiveM Server Artifacts in 2025 (Easy Step-by-Step Guide)","Learn how to safely update your FiveM server artifacts with this up-to-date guide. Improve server stability, access new features, and stay secure in 2025.","/blog/update_artifacts","2025-07-21T00:00:00.000Z",{"title":1182,"description":1183,"path":1184,"date":1126,"language":1165,"translationKey":1165},"How to Sync Windows Server Time for the Sky Mission Hub","Sync the Windows clock on your FiveM server, verify the time source, and fix Mission Hub requests rejected because their timestamp is out of date.","/blog/windows-server-time-sync",1792936604859]