Skip to content

roroleroh/Kivo-loading-screen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kivo Loading Screen

A polished, fully configurable FiveM loading screen. Drop it in, edit one file, and go. Every section can be customized — or deleted — without breaking anything. Works standalone and alongside QBCore, ESX and Qbox.

Loading screen


✨ Features

  • Real load progress — the bar and percentage reflect the game's actual loading progress, with live status text (what's downloading / loading).
  • Themeable — one main + secondary color drives the entire UI.
  • Image or video background with an optional overlay, and a safe solid-color fallback.
  • Background music player — config-driven playlist, autoplay, volume, next/ previous, seek.
  • Team, Rules, Updates panels — rich, searchable, all from config.
  • On-screen keybinds keyboard — highlights your server's binds with hover tooltips (see the AI helper for setup).
  • Live server info — player count + hostname pushed from the server (auto-detects your framework), with static fallback.
  • Social links open in the player's real browser (Chrome/Edge/…), not the in-game frame.
  • Bulletproof — every section is optional and fails safe. A missing image, a typo, or a deleted array will never blank the screen.
  • Resilient assets — images fall back gracefully; display fonts are served over https (FiveM's CEF doesn't render local nui:// fonts reliably).
Keybinds keyboard Rules panel Team panel
Keybinds Rules Team

📦 Installation

  1. Copy this folder into your server's resources/ directory (rename it to kivo-loading-screen if you like).
  2. Add it to your server.cfg:
    ensure kivo-loading-screen
  3. Drop your images into the images/ folder and edit config.js.
  4. Restart the server. That's it — no build step required.

Only one loading screen resource can be active at a time. Make sure any other loading screen (including the default) is not ensured.


⚙️ Configuration

Everything lives in config.js at the root of this resource. It's plain, heavily-commented JavaScript — change the values, save, restart the resource. You never need to touch the compiled UI in html/.

Highlights (see config.js for the full, commented list):

Section What it controls To hide it
theme Main + secondary accent colors
background Image / video / color + overlay + blur type: "color"
logo Text wordmark or image, top-left enabled: false
progress Loading bar title / subtitle / live status enabled: false
music Playlist + autoplay/volume/loop/shuffle enabled: false or tracks: []
nav Which top buttons show toggle each
links Social buttons (top-right) links: []
server Name, location, fallback player counts
staff Team members (Team panel) staff: []
rules Rule categories (Rules panel) rules: []
updates Changelog entries (Updates panel) updates: []
keybinds On-screen keyboard highlights enabled: false or binds: []

Any section you empty ([]) or disable simply disappears — its nav button and panel vanish and the rest of the screen keeps working.


🖼️ Images

Put your images in the images/ folder at the root of the resource and reference them from config.js as e.g. "images/background.png". No digging through the compiled html/ bundle.

images/
├── background.png     # main background
├── backdrop.png       # optional overlay (vignette/gradient)
├── logo.png           # optional image logo
├── music-cover.png    # music artwork
├── staff/             # staff photos
└── events/

External https:// URLs work too. If an image is missing, the UI falls back gracefully (solid color / initial letter / icon).


🎵 Music

Set your playlist in config.music.tracks. Each track needs a url, which can be:

  • a local file: create a music/ folder in the resource, drop your .mp3 in, and reference it as "music/song.mp3" (it's already declared in fxmanifest.lua), or
  • a direct https:// link to an audio file / stream.

FiveM's browser can't play a YouTube watch page — use a real audio file URL or a local mp3.


⌨️ Keybinds (the tedious one)

The keybinds panel shows a full on-screen keyboard and lights up the keys your server binds, with a tooltip label on hover. Configuring it by hand is fiddly, so config.js includes a ready-to-paste System Prompt + User Prompt you can hand to any AI assistant (ChatGPT, Claude, …) to generate the binds array for you. Look for the big KEYBINDS comment block in config.js.

The format is simply:

binds: [
  { key: "F1", label: "Open phone" },
  { key: "e",  label: "Interact" },
  { key: "Space", label: "Handbrake" },
]

key matches a physical key (letters, digits, F1-F12, Esc/Tab/Shift/Ctrl/Alt/ Enter/Space, arrows, …). It's case-insensitive and understands common aliases (up, space, control, escape, …).


🌐 Opening links in the real browser

Social and staff links open in the player's actual default browser using FiveM's openUrl native (window.invokeNative('openUrl', url)), so players aren't stuck inside the game's frame. Outside FiveM it falls back to window.open. Only http(s) URLs are allowed.


📡 Live server data (QBCore / ESX / Qbox)

server.lua gathers the live player count and hostname using framework-agnostic natives and auto-detects your framework (QBCore / ESX / Qbox / standalone) for display. client.lua forwards it to the loading screen via SendLoadingScreenMessage. The UI merges it over the static config.server values — if the server is unreachable for any reason, your configured fallback is shown instead. No framework export is ever required.


🛠️ Building from source (optional)

The compiled UI in html/ is committed, so you do not need to build to use the resource. To change the UI itself:

cd web
npm install
npm run dev      # live preview in your browser (with simulated progress)
npm run build    # rebuilds ../html from source

Stack: React 19 + Vite 7 + Tailwind CSS 4.


📁 Project structure

kivo-loading-screen/
├── fxmanifest.lua     # resource manifest (loadscreen + cursor + files)
├── config.js          # ← edit me (all configuration)
├── client.lua         # forwards live server data to the UI
├── server.lua         # framework-agnostic server info
├── images/            # ← your images go here
├── html/              # compiled UI (do not edit by hand)
└── web/               # UI source (React + Vite + Tailwind)

❓ Notes & troubleshooting

  • Cursor / clickable buttons: enabled via loadscreen_cursor 'yes' in fxmanifest.lua.
  • Loading screen closes too early / too late: by default FiveM closes it automatically when the session starts. If your spawn/multichar flow needs it to stay up, uncomment loadscreen_manual_shutdown 'yes' in fxmanifest.lua and call ShutdownLoadingScreenNui() from your spawn logic.
  • Fonts: the display fonts (Ruang, Benzin, Bai Jamjuree) are served over https from a Cloudflare Worker on purpose — local @font-face files (nui://) do not render reliably inside FiveM's CEF. To swap a font, host your own copy on any https origin and update the @font-face URLs in web/src/index.css, then rebuild.

Built by Kivo Studio. 💖

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors