Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/stevensonhouset5-sys/Victor-Launcher/llms.txt

Use this file to discover all available pages before exploring further.

When a player enters a room code, Victor Launcher fetches a signed manifest envelope from the configured Supabase endpoint. The envelope contains a ModManifest — a description of every file that belongs to a mod pack. Victor Launcher uses this manifest to plan the install: resolving dependencies, detecting conflicts, and mapping each file to its destination on disk.

ModManifest fields

id
string
required
Unique identifier for this manifest. Victor Launcher uses this ID — not any DLL filename — when checking dependencies and conflicts against other installed manifests.
name
string
required
Human-readable display name shown in the launcher UI (for example, "My Mod Pack").
version
string
Version string for the mod pack (for example, "1.0.0"). Victor Launcher records this in the state snapshot but does not enforce semver.
gameVersion
string
The Among Us version this pack targets (for example, "2024.3.5"). Informational only; Victor Launcher does not block installs based on this value.
loader
string
default:"BepInEx"
The mod loader this pack requires. Defaults to "BepInEx". Victor Launcher only manages BepInEx DLL plugins.
dependencies
string[]
List of manifest IDs that must already be installed before this pack can be installed. Victor Launcher reports any missing IDs as MissingDependencies on the install plan.
Dependencies are matched by manifest ID (the id field), not by DLL filename.
conflicts
string[]
List of manifest IDs that must not be installed alongside this pack. Victor Launcher reports any present IDs as ActiveConflicts on the install plan.
Conflicts are also matched by manifest ID. Victor Launcher surfaces the conflict but does not automatically uninstall the conflicting pack.
files
ModFile[]
Ordered list of files to download and install. See ModFile fields below.

Signed manifest envelope

The Supabase endpoint does not return a raw ModManifest. It returns a SignedManifestResponse that wraps a SignedManifestEnvelope. The outer wrapper lets Victor Launcher verify that the manifest has not been tampered with.

SignedManifestResponse (outer wrapper)

{
  "signingKeyId": "default",
  "canonicalPayload": "<JSON string of the envelope>",
  "signature": "<base64url RSA-SHA256 signature>"
}
FieldDescription
signingKeyIdIdentifies which public key to use for verification. Self-hosted deployments set the matching public key in the BepInEx config.
canonicalPayloadThe envelope JSON serialized as a string. The signature covers exactly this string.
signatureBase64url-encoded RSA-SHA256 signature over canonicalPayload. If verification fails, Victor Launcher shows "The room manifest signature could not be verified."

SignedManifestEnvelope (inner payload)

{
  "roomCode": "ROOMCODE",
  "roomName": "My Room",
  "manifestVersion": 1,
  "issuedAtUtc": "2024-01-01T00:00:00Z",
  "expiresAtUtc": "2024-01-01T12:00:00Z",
  "manifest": { }
}
FieldDescription
roomCodeThe room code players enter in the launcher. Case-insensitive.
roomNameDisplay name of the room or session.
manifestVersionSchema version for forward compatibility. Currently 1.
issuedAtUtcUTC timestamp when the manifest was signed.
expiresAtUtcUTC timestamp after which the manifest is rejected. Expired manifests produce "The room manifest has expired. Try again in a moment."
manifestThe full ModManifest object described above.

Minimal manifest example

The following is a complete, minimal manifest embedded inside a signed envelope. The canonicalPayload field in the actual response would be this object serialized as an escaped JSON string.
{
  "roomCode": "ALPHA1",
  "roomName": "Friday Night Lobby",
  "manifestVersion": 1,
  "issuedAtUtc": "2024-06-01T20:00:00Z",
  "expiresAtUtc": "2024-06-01T20:30:00Z",
  "manifest": {
    "id": "friday-pack",
    "name": "Friday Night Pack",
    "version": "1.0.0",
    "gameVersion": "2024.3.5",
    "loader": "BepInEx",
    "dependencies": [],
    "conflicts": [],
    "files": [
      {
        "path": "BepInEx/plugins/FridayMod.dll",
        "url": "https://xziwdtzegzasllwnadih.supabase.co/storage/v1/object/public/mods/FridayMod.dll",
        "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
      }
    ]
  }
}

Build docs developers (and LLMs) love