vMenu Docs

Repository Structure

How the vMenu source is laid out, what each part is responsible for.

The vMenu repository holds two products in one codebase:

ProductBranchDocs
vMenu Enhanced (current)maindocs.vespura.com/vmenu/enhanced
vMenu Legacy (v3.9.2 and below, frozen)legacydocs.vespura.com/vmenu/legacy

main contains the full Enhanced source. The legacy branch is the old vMenu, kept for download and for the saved-data importer.

Top level

PathWhat it is
src/All C# source. Split into Enhanced, Legacy and Shared.
docs/The Astro + Starlight site that produces docs.vespura.com. The markdown in docs/src/content/docs is the source of the published docs.
assets/Images and branding: enhanced/, legacy/, shared/, txadmin/.
dependencies/Vendored dependencies for the legacy build.
tools/Helper projects: ConfigDefaults, LanguageTemplate, LegacyChecks, vMenu.Enhanced.Localization.Generator, vMenu.Enhanced.NativeHooks.Generator.
.github/workflows/combined.yml, dev-enhanced.yml, docs.yml — CI and the docs deploy.
vMenu.Enhanced.slnxThe solution.
LICENSE.mdGPL-3.0-or-later. Authoritative over anything else that says so.

src/

src/
├── Enhanced/          # vMenu Enhanced (GTA V Enhanced + Legacy FiveM)
│   ├── Client/        # client-side runtime, menus, native hooks
│   ├── Server/        # server-side runtime, permissions, config, webhooks
│   └── PluginApi/     # the public plugin surface (ClientAPI / ServerAPI)
├── Legacy/            # the original vMenu, kept building
│   ├── Client/
│   ├── Server/
│   └── PluginApi/
└── Shared/            # code both builds compile in
    ├── vMenu.Enhanced.Data          # data model, settings, permissions, catalogs
    ├── vMenu.Enhanced.PluginContracts  # the shared plugin protocol
    ├── vMenu.Enhanced.PluginAnalyzers  # Roslyn analyzers that validate plugins
    ├── vMenu.Enhanced.Localization   # translation files and the Loc.* accessors
    ├── vMenu.Enhanced.JsAPI         # the JavaScript plugin API (TypeScript source, built with npm)
    ├── vMenu.Enhanced.LuaAPI        # the Lua plugin API (vmenu.lua)
    ├── vMenu.Enhanced.Logging       # logging primitives
    └── vMenu.Enhanced.Polyfills     # polyfills for older runtimes

src/Enhanced/Client

ProjectResponsibility
vMenu.Enhanced.ActionsThe things a player can do (freeze, teleport, explode, …).
vMenu.Enhanced.BrokenNativesWorkarounds for natives that misbehave.
vMenu.Enhanced.ConfigurationClient-side reading of the server config.
vMenu.Enhanced.CoreClient entry point.
vMenu.Enhanced.EventsClient-side event plumbing.
vMenu.Enhanced.MenuFrameworkThe menu renderer, themes and layout.
vMenu.Enhanced.MenusEvery menu the player sees.
vMenu.Enhanced.NativeHooksHooks into GTA natives.
vMenu.Enhanced.NoClipThe noclip feature.
vMenu.Enhanced.PermissionsClient-side permission state and sync.
vMenu.Enhanced.PluginsClient-side plugin host.
vMenu.Enhanced.SerializationReading and writing saved data.
vMenu.Enhanced.StorageWhere saved data lives on disk.
vMenu.Enhanced.TicksThe tick scheduler.

src/Enhanced/Server

ProjectResponsibility
vMenu.Enhanced.Actions.ServerServer-side validation of player actions.
vMenu.Enhanced.BrokenNatives.ServerServer-side native workarounds.
vMenu.Enhanced.Configuration.ServerThe configuration.cfg writer and the example file.
vMenu.Enhanced.Core.ServerServer entry point.
vMenu.Enhanced.Http.ServerOutbound HTTP, used by webhooks and the integration API.
vMenu.Enhanced.Integration.ServerThe SnowstormBot / role-sync integration.
vMenu.Enhanced.Permissions.ServerThe permission registry and the permissions.cfg writer.
vMenu.Enhanced.Players.ServerPlayer state.
vMenu.Enhanced.Plugins.ServerServer-side plugin host.
vMenu.Enhanced.Serialization.ServerServer-side saved-data handling.
vMenu.Enhanced.Ticks.ServerServer-side tick scheduler.
vMenu.Enhanced.Updates.ServerUpdate checking.
vMenu.Enhanced.Webhooks.ServerDiscord webhook logging.
vMenu.Enhanced.World.ServerThe World API surface.

Where the reference material lives

WhatWhere in the source
Every configuration setting (name, type, default, description)src/Shared/vMenu.Enhanced.Data/Configuration/Settings/*.cs
The order settings are written into configuration.cfgsrc/Shared/vMenu.Enhanced.Data/Configuration/ConfigCatalog.cs
Every permission, grouped by categorysrc/Shared/vMenu.Enhanced.Data/Permissions/
How the dotted permission scheme resolves inheritancesrc/Shared/vMenu.Enhanced.Data/Permissions/PermissionPath.cs
The generated permissions.cfg examplesrc/Shared/vMenu.Enhanced.Data/Permissions/PermissionsExample.cs
The generated configuration.cfg examplesrc/Shared/vMenu.Enhanced.Data/Configuration/ConfigurationExample.cs
The plugin protocol shared by both sidessrc/Shared/vMenu.Enhanced.PluginContracts/
The public plugin surface for C# pluginssrc/Enhanced/PluginApi/vMenu.Enhanced.ClientAPI/ and .../vMenu.Enhanced.ServerAPI/
The JavaScript and Lua plugin surfacessrc/Shared/vMenu.Enhanced.JsAPI/src/ (TypeScript), src/Shared/vMenu.Enhanced.LuaAPI/vmenu.lua
The published documentation sourcedocs/src/content/docs/

Building

The solution targets .NET with a global.json pinning the SDK. nuget.config points at the package feeds. The legacy build pulls vendored binaries from dependencies/legacy.

The docs site is a separate npm project inside docs/ (npm install && npm run build), and docs.yml in CI deploys it to docs.vespura.com.

On this page