[{"data":1,"prerenderedAt":136},["ShallowReactive",2],{"site":3,"blog-post-en-esx-ui-replacements":15,"blog-slug-site":48,"blog-scripts-en-esx-ui-replacements":54},{"site":4,"contact":10,"seo":13,"payment":14},{"name":5,"host":6,"default_locale":7,"locales":8},"X3D Developer","fivem.x3d-developer.com","th",[7,9],"en",{"discord_invite":11,"email":12,"line":12},"https:\u002F\u002Fdiscord.gg\u002FNA5kPVynFv","",{"google_site_verification":12,"bing_site_verification":12},{"bank_name":12,"account_name":12,"account_no":12,"promptpay_id":12},{"post":16,"html":21,"others":22,"productSlugs":44},{"slug":17,"title":18,"description":19,"date":20},"esx-ui-replacements","Replace esx_notify, esx_progressbar and esx_loadingscreen with X3D's free UI set — without touching old scripts","esx_notify has 4 positions and no Thai font, esx_progressbar cannot be cancelled, esx_loadingscreen white-screens on some machines. A side-by-side of stock ESX UI against X3D Notify, X3D Progress Bar and X3D Loading Screen (free, GPL v3), and how to switch while scripts that call the old exports keep working unchanged.","2026-09-24","\u003Cp>The three UI resources every ESX server runs, \u003Ccode>esx_notify\u003C\u002Fcode>, \u003Ccode>esx_progressbar\u003C\u002Fcode> and \u003Ccode>esx_loadingscreen\u003C\u002Fcode>, date from ESX Legacy in 2022 and have barely moved since. The recurring problems: non-Latin fonts render as boxes, a progress bar cannot be cancelled, and the loading screen white-screens on some players' machines.\u003C\u002Fp>\n\u003Cp>X3D forked the first two from the ESX source (GPL v3, full source, change list on each product page) and rewrote the loading screen from scratch. All three are free. The important part: \u003Cstrong>scripts that call \u003Ccode>exports['esx_notify']\u003C\u002Fcode> or \u003Ccode>exports['esx_progressbar']\u003C\u002Fcode> need no changes\u003C\u002Fstrong>; forwarders are included.\u003C\u002Fp>\n\u003Ch2 id=\"esx-notify-x3d-notify\">esx_notify → X3D Notify\u003C\u002Fh2>\n\u003Cdiv class=\"table-scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>esx_notify\u003C\u002Fth>\n\u003Cth>X3D Notify\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Card positions\u003C\u002Ftd>\n\u003Ctd>4\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>9\u003C\u002Fstrong> (adds center, top\u002Fbottom-center, left\u002Fright-center)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Item icons \u002F rarity frames\u003C\u002Ftd>\n\u003Ctd>No\u003C\u002Ftd>\n\u003Ctd>Yes (\u003Ccode>icon\u003C\u002Fcode>, \u003Ccode>iconBg\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Thai and other non-Latin text\u003C\u002Ftd>\n\u003Ctd>Boxes on machines without the font\u003C\u002Ftd>\n\u003Ctd>Noto Sans Thai embedded\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Inline colours\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>~r~\u003C\u002Fcode> etc.\u003C\u002Ftd>\n\u003Ctd>Same, plus \u003Ccode>~br~\u003C\u002Fcode> line break\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Runtime config\u003C\u002Ftd>\n\u003Ctd>None\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>SetConfig(position, sound)\u003C\u002Fcode> and \u003Ccode>ClearAll()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>UI\u003C\u002Ftd>\n\u003Ctd>Original HTML\u002FCSS\u002FJS\u003C\u002Ftd>\n\u003Ctd>Rewritten in Vue\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cpre>\u003Ccode class=\"language-lua\">exports['x3d_notify']:Error('Not enough money, need ~r~$5,000~s~', 4000, 'Payment', 'top-center')\nTriggerClientEvent('ESX:Notify', source, 'success', 3000, 'Item received')\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Download: \u003Ca href=\"\u002Fen\u002Fproducts\u002Fx3d-notify\u002F\">X3D Notify\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch2 id=\"esx-progressbar-x3d-progress-bar\">esx_progressbar → X3D Progress Bar\u003C\u002Fh2>\n\u003Cdiv class=\"table-scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>esx_progressbar\u003C\u002Fth>\n\u003Cth>X3D Progress Bar\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Cancel mid-way\u003C\u002Ftd>\n\u003Ctd>No, wait it out\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>ESC\u003C\u002Fstrong> fires \u003Ccode>onCancel\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Countdown\u003C\u002Ftd>\n\u003Ctd>None\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>showCountdown = true\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Block the inventory while running\u003C\u002Ftd>\n\u003Ctd>Write it yourself\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>LocalPlayer.state.minigame\u003C\u002Fcode> state bag + \u003Ccode>x3d_progressbar:active\u003C\u002Fcode> event\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Thai font\u003C\u002Ftd>\n\u003Ctd>Boxes\u003C\u002Ftd>\n\u003Ctd>Embedded\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Theme\u003C\u002Ftd>\n\u003Ctd>Fixed\u003C\u002Ftd>\n\u003Ctd>Peach\u002Fjade, follows the player\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>ped nil\u003C\u002Fcode> error at boot\u003C\u002Ftd>\n\u003Ctd>Possible\u003C\u002Ftd>\n\u003Ctd>Guarded\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cpre>\u003Ccode class=\"language-lua\">exports['x3d_progressbar']:Progressbar('Repairing...', 15000, {\n    FreezePlayer = true,\n    animation = { type = 'anim', dict = 'mini@repair', lib = 'fixing_a_ped' },\n    onFinish = function() end,\n    onCancel = function() end,\n    showCountdown = true,\n})\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Download: \u003Ca href=\"\u002Fen\u002Fproducts\u002Fx3d-progressbar\u002F\">X3D Progress Bar\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch2 id=\"esx-loadingscreen-x3d-loading-screen\">esx_loadingscreen → X3D Loading Screen\u003C\u002Fh2>\n\u003Cdiv class=\"table-scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>esx_loadingscreen\u003C\u002Fth>\n\u003Cth>X3D Loading Screen\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Structure\u003C\u002Ftd>\n\u003Ctd>Several files\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>One HTML file\u003C\u002Fstrong>, CSS\u002FJS inlined, zero outbound requests\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>White screen on some machines\u003C\u002Ftd>\n\u003Ctd>Possible (CEF has no network while loading; modules from file:\u002F\u002F hit CORS)\u003C\u002Ftd>\n\u003Ctd>Does not happen\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Load status\u003C\u002Ftd>\n\u003Ctd>Animated bar\u003C\u002Ftd>\n\u003Ctd>Real-time list of resources as they mount, plus phase names\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Spawning\u003C\u002Ftd>\n\u003Ctd>Automatic when loaded\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>ENTER WORLD\u003C\u002Fstrong> button the player presses when ready\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Images \u002F music\u003C\u002Ftd>\n\u003Ctd>Edit code\u003C\u002Ftd>\n\u003Ctd>Drop \u003Ccode>bg.png\u003C\u002Fcode>–\u003Ccode>bg6.png\u003C\u002Fcode> \u002F \u003Ccode>bg.mp4\u003C\u002Fcode> \u002F \u003Ccode>loop.mp3\u003C\u002Fcode> next to the HTML\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>Works with stock ESX (the button unlocks on \u003Ccode>esx:playerLoaded\u003C\u002Fcode>); with the \u003Ca href=\"\u002Fen\u002Fproducts\u002Fes-extended\u002F\">ESX Legacy Core — X3D Build\u003C\u002Fa> the core holds the player until the press and spawns them right there.\u003C\u002Fp>\n\u003Cp>Download: \u003Ca href=\"\u002Fen\u002Fproducts\u002Fx3d-loadingscreen\u002F\">X3D Loading Screen\u003C\u002Fa> · Guide: \u003Ca href=\"\u002Fen\u002Fdocs\u002Fx3d-loadingscreen\u002F\">docs\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch2 id=\"switching-without-editing-old-scripts\">Switching without editing old scripts\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Remove the old \u003Ccode>esx_notify\u003C\u002Fcode> \u002F \u003Ccode>esx_progressbar\u003C\u002Fcode> \u002F \u003Ccode>esx_loadingscreen\u003C\u002Fcode> from \u003Ccode>resources\u002F\u003C\u002Fcode> (old and new open overlapping NUIs, and there is one \u003Ccode>loadscreen\u003C\u002Fcode> slot)\u003C\u002Fli>\n\u003Cli>Add \u003Ccode>x3d_notify\u003C\u002Fcode>, \u003Ccode>x3d_progressbar\u003C\u002Fcode>, \u003Ccode>x3d_loadingscreen\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>If old scripts call \u003Ccode>exports['esx_notify']\u003C\u002Fcode> or \u003Ccode>exports['esx_progressbar']\u003C\u002Fcode>, move \u003Ccode>optional\u002Fesx_notify\u002F\u003C\u002Fcode> and \u003Ccode>optional\u002Fesx_progressbar\u002F\u003C\u002Fcode> out of the zips into \u003Ccode>resources\u002F\u003C\u002Fcode>; each is a 12-line forwarder\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cpre>\u003Ccode>ensure x3d_notify\nensure x3d_progressbar\nensure x3d_loadingscreen\nensure esx_notify          # only if old scripts call this name\nensure esx_progressbar     # only if old scripts call this name\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"the-bag-screen-x3d-inventory\">The bag screen: X3D Inventory\u003C\u002Fh2>\n\u003Cp>Want to replace the bag screen as well? \u003Ca href=\"\u002Fen\u002Fproducts\u002Fx3d-inventory\u002F\">X3D Inventory\u003C\u002Fa> (free) is an ESX Legacy inventory with big readable text, hotkeys 1–9 saved per character, and every use, give and drop checked on the server. Unlike the three above it is not a drop-in forwarder for old exports: stop your old inventory so only one runs. Details, plus the vaults and trunks that share its screen, are in \u003Ca href=\"\u002Fen\u002Fblog\u002Ffivem-esx-inventory-vault-trunk\u002F\">a free ESX inventory set: bag, vaults and trunks\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"faq\">FAQ\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>I use ox_lib, do I need to change?\u003C\u002Fstrong> — No. These replace the stock ESX UI only. \u003Ca href=\"\u002Fen\u002Fproducts\u002Fx3d-useitem\u002F\">X3D Use Item\u003C\u002Fa> and \u003Ca href=\"\u002Fen\u002Fproducts\u002Fx3d-slide\u002F\">X3D Slide\u003C\u002Fa> detect ox_lib or x3d_notify and use whichever you have.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Really free?\u003C\u002Fstrong> — Yes. Notify and Progress Bar are GPL v3 like upstream ESX (copyright ESX-Framework, modifications X3D-Developer). The Loading Screen is written from scratch.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>QBCore?\u003C\u002Fstrong> — Notify and Progress Bar are tied to ESX (\u003Ccode>ESX:Notify\u003C\u002Fcode>, \u003Ccode>ESX.PlayerData\u003C\u002Fcode>). The Loading Screen works with any core, including standalone.\u003C\u002Fp>\n\u003Cp>Every other free X3D script is in the \u003Ca href=\"\u002Fen\u002Fblog\u002Ffree-fivem-scripts\u002F\">free FiveM scripts post\u003C\u002Fa>.\u003C\u002Fp>\n",[23,29,35,40],{"slug":24,"title":25,"description":26,"date":27,"updated":28},"free-fivem-scripts","27 Free FiveM Scripts From the Developer: Weapon Skins, Weapon Damage, ESX Inventory, Vaults, Admin Panel and More","Twenty-seven free FiveM scripts from X3D — collectible weapon skins, a weapon damage system, ESX inventory with hotkeys 1–9, vaults, trunk storage, an admin panel with token bans, bank and ATM, YouTube boombox, fortune teller with siamsi and tarot, ESX phone, death screen, drug selling, house robbery, minigames, ESX Legacy Core X3D Build, loading screen, Notify, Progress Bar, usable items, slide, Character Skin, Main Menu, Daily Login, Mailbox, Carry and Environment.","2026-09-18","2026-10-11",{"slug":30,"title":31,"description":32,"date":33,"updated":34},"open-fivem-server-budget","How Much Does It Cost to Open a FiveM Server, and What Do You Need? From 32 Players to a 2,000-Player City (2026)","The essential scripts to launch a FiveM server in 2026 with budgets at three scales: starter 32–64, public 128–500, and a 1,000–2,048-player city (Element Club Platinum, dedicated hardware, separate voice and database, staff). Which parts free scripts cover, which are worth paying for, and which must be rewritten once you reach two thousand players.","2026-09-15","2026-10-14",{"slug":36,"title":37,"description":38,"date":39,"updated":34},"fivem-scripts-guide","FiveM Scripts Explained: Types, ESX vs QBCore vs Standalone, and How to Choose","A plain-language guide to FiveM scripts: the main categories (HUD, jobs, casino, anti-cheat, map cleanup), framework differences, and a checklist for picking scripts that won't lag your server.","2026-09-16",{"slug":41,"title":42,"description":43,"date":20},"fivem-ui-lag","FiveM UI Lag Fix: Why NUI Eats FPS and How to Stop It (2026)","UI lag in FiveM: FPS drops when the inventory opens, notifications arrive late, the HUD stutters. The real causes are several NUIs rendering at once, messages sent every frame, fonts and CSS loaded from the internet, and progress bars that do not lock other UIs. How to measure it, and the free UI scripts that already fix it.",[45,46,47],"x3d-notify","x3d-progressbar","x3d-loadingscreen",{"site":49,"contact":51,"seo":52,"payment":53},{"name":5,"host":6,"default_locale":7,"locales":50},[7,9],{"discord_invite":11,"email":12,"line":12},{"google_site_verification":12,"bing_site_verification":12},{"bank_name":12,"account_name":12,"account_no":12,"promptpay_id":12},[55,90,114],{"id":56,"slug":45,"name":57,"summary":58,"price_thb":59,"license_mode":60,"cover_key":61,"cover_url":62,"category_slugs":63,"tags":65,"latest_version":84,"latest_released_at":85,"published_at":86,"has_docs":87,"config":88,"rent_price_satang":89},"9b62b8ed-5911-47a8-b695-3320a6183758","X3D Notify","Notification cards in nine positions, with item icons and rarity frames, and full Thai support.",0,"none","public\u002Fproducts\u002Fx3d-notify\u002Fcover\u002F4a9cbdcedd86a149.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-notify\u002Fcover\u002F4a9cbdcedd86a149.jpg",[64],"hud",[66,67,68,69,70,71,72,64,73,74,75,76,77,78,79,80,81,82,83],"notify","notification","แจ้งเตือน","แจ้งเตือน fivem","esx_notify","esx notify","ui","ฟอนต์ไทย","ไอคอนไอเทม","esx","ฟรี","free","การ์ดแจ้งเตือน","กรอบความหายาก","แจ้งเตือน 9 ตำแหน่ง","สีในข้อความ","แทน esx_notify","แจ้งเตือนไอเทม","1.1.4","2026-10-12T17:20:21.047259Z","2026-09-24T01:21:40.547491Z",true,"public",null,{"id":91,"slug":46,"name":92,"summary":93,"price_thb":59,"license_mode":60,"cover_key":94,"cover_url":95,"category_slugs":96,"tags":97,"latest_version":110,"latest_released_at":111,"published_at":112,"has_docs":113,"config":60,"rent_price_satang":89},"8c823bc1-1de6-41b6-bf82-146d5a55eeb5","X3D Progress Bar","A peach-themed progress bar with ESC to cancel, a countdown, an automatic hotkey lock, and a bundled Thai font.","public\u002Fproducts\u002Fx3d-progressbar\u002Fcover\u002Ff6830df60f656452.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-progressbar\u002Fcover\u002Ff6830df60f656452.jpg",[64],[98,99,100,101,102,103,72,64,104,75,76,77,105,73,106,107,108,109],"progressbar","progress bar","แถบโหลด","แถบความคืบหน้า","esx_progressbar","esx progressbar","ยกเลิก esc","หลอดโหลด","นับเวลาถอยหลัง","ล็อกปุ่มลัด","โปรเกรสบาร์","แทน esx_progressbar","1.1.3","2026-10-12T17:19:45.934106Z","2026-09-24T01:22:17.768991Z",false,{"id":115,"slug":47,"name":116,"summary":117,"price_thb":59,"license_mode":60,"cover_key":118,"cover_url":119,"category_slugs":120,"tags":121,"latest_version":133,"latest_released_at":134,"published_at":135,"has_docs":87,"config":60,"rent_price_satang":89},"e6dc80f3-4f29-4d01-bffa-eba6829c6497","X3D Loading Screen","A terminal-style loading screen with an ENTER WORLD button the player presses before spawning. One HTML file, no build step.","public\u002Fproducts\u002Fx3d-loadingscreen\u002Fcover\u002F32f1538b8e18f4db.jpg","\u002Fapi\u002Fv1\u002Fmedia\u002Fpublic\u002Fproducts\u002Fx3d-loadingscreen\u002Fcover\u002F32f1538b8e18f4db.jpg",[64],[122,123,124,125,126,127,72,128,75,76,77,129,130,105,131,132],"loading screen","หน้าโหลด","หน้าโหลด fivem","loadingscreen","esx_loadingscreen","enter world","standalone","ปุ่มเข้าเมือง","หน้าโหลดเทอร์มินัล","พื้นหลังวิดีโอ","เพลงหน้าโหลด","1.0.5","2026-10-12T17:20:39.269405Z","2026-09-24T00:50:19.336351Z",1792316316554]