Skip to main content

Project structure — server vs client

The most important thing to understand is what stays on the server and what players download. The layout is the same as RAGE:MP's.

The server folder​

server/
├─ altv-server.exe the server
├─ nethost.dll .NET hosting (required next to the exe)
├─ conf.json server config
├─ packages/ ── SERVER-side JavaScript ─────────────────────────
│ └─ <name>/index.js one folder = one package, runs on V8 (Node.js-style)
├─ dotnet/ ── SERVER-side C# ─────────────────────────────────
│ ├─ runtime/ bundled .NET 8 + Bootstrapper.dll (GTANetworkAPI)
│ └─ resources/
│ └─ <Name>/meta.xml one folder = one C# resource (meta.xml → the built .dll)
├─ client_packages/ ── CLIENT-side, downloaded by players ──────────────
│ ├─ index.js the client entry point
│ ├─ ... your client scripts, CEF UI (html/css/js), images, sounds
│ └─ game_resources/
│ └─ dlcpacks/ DLC packs (cars, clothes): <pack>/dlc.rpf
├─ loadingscreen/ optional custom loading screen (downloaded by players)
├─ f1menu/ optional custom F1 panel (downloaded by players)
└─ cache/ data/ logs/ server working folders

What players download — and what they never see​

FolderRuns onSent to players?
packages/server❌ never
dotnet/server❌ never
conf.json, dlcpack.key, the exe and dllsserver❌ never
client_packages/ (including game_resources/dlcpacks)client✅ yes, encrypted
loadingscreen/, f1menu/client✅ yes, encrypted

Only those last two rows ever reach a player. Your gamemode logic, database access and secrets stay on the server.

Building client code​

If you write your client in modules or a framework, build it into client_packages/ and keep the sources outside it, for example:

src_client/ --(webpack / your build)--> client_packages/main.js
src_cef/ --(your UI build)--------> client_packages/interface/

Only the built output in client_packages/ is downloaded. Players get only the files that changed since their last visit.