Skip to content

Streaming And Assets

The server exposes client-accessible resource files through the HTTP port and sends a resource manifest to the client over the game connection.

Manifest

/resources/manifest.json is built by the server from enabled resources (CResourceManager::BuildManifestJson). The manifest contains:

  • schema (currently 1)
  • totalFiles and totalBytes
  • files[] — one entry per client file
  • resources[] — one entry per resource, in load order (the resources order from server.toml, otherwise discovery order)

Each files[] entry: resource, path, url, size, a stream flag, sha256 (of the plaintext), and enc only for encrypted-at-rest files.

Each resources[] entry: name, type, clientType, assetsBase, streamBase, clientMain (when set), exports, dependencies, clientFiles, dataFiles and the parsed config. The server entry (main) is not included — it stays server-side.

The same manifest is delivered to the in-game client over the encrypted game connection; the launcher prefetches /resources/manifest.json before GTA connects.

Client Files

Only the files that end up in the manifest files[] are reachable by the client:

  • the configured client-main
  • paths matched by client-files
  • files declared in stream.toml (files globs and [meta] data files)

client-files supports exact paths, ** (all files), prefix/* (one level) and prefix/** (recursive).

Asset URL Routing

Any advertised client file is reachable under:

text
/assets/<resource>/<path>

The server canonicalizes this URL to /resources/files/<resource>/<path> and matches it against the manifest allowlist. Path traversal segments are rejected before the server reads a file. type = "asset-pack" is a resource type, not a routing gate.

Stream URL Routing

Any advertised file whose resource-relative path starts with stream/ gets a URL — regardless of the resource type:

text
/stream/<resource>/<path>

Files under stream/ can be declared either through client-files or through stream.toml. stream.toml provides:

  • files — globs of files under stream/
  • [meta] — data-file tags (key = path, value = GTA data-file type, e.g. HANDLING_FILE)

There is no automatic stream/** default: if stream.toml lists no files (and client-files does not cover them), no stream files are published.

Client Helpers

javascript
const ui = varion.assetUrl('inventory-ui', 'index.html');
const ydr = varion.streamUrl('vehicle-pack', 'car.yft');

varion.HttpClient and varion.Http allow HTTP calls only to the server manifest host or asset-pack host. The client runtime rejects invalid protocols, the game port and hosts outside the manifest/asset base.

Source Backing

This page is derived from server/src/CResourceManager.cpp, src/network/CNetworkManager.cpp, sdk/client-js-runtime/injected/events-bootstrap.js and sdk/client-js-runtime/injected/services-bootstrap.js.

Varion Multiplayer Platform