OPX//77
opx_infinity

Overview

Last updated on

opx_infinity is the whole OPX//77 framework in one Open77 resource — a small core runtime and 36 modules — next to the client library opx_lib.

OPX//77 is a roleplay framework for Open77, the multiplayer platform for Cyberpunk 2077. Since September 2026 it ships as one resource, opx_infinity, plus a small client library resource, opx_lib. Read this page first if you want to change the framework or write code against it.

Two resources

ResourceWhat it isRuns code on
opx_infinityThe whole framework: core runtime, every module, the WebUI page.server and client
opx_libA client library. Other resources load it with require('@opx_lib'); opx_infinity reaches it as OPX.Lib.client only (see opx_lib)

opx_infinity declares dependency "opx_lib": the platform refuses to start it unless opx_lib is running.

What is inside opx_infinity

open77.lua          the manifest; load order is this file, top to bottom
config/             operator settings, one file per module
core/               the runtime: registry, lifecycle, channels, schedulers, commands, UI
lib/shared/         helpers on both runtimes, installed as OPX.*
lib/server/         storage (database) and audit
lib/client/         the opx_lib bridge and the WebUI surface
modules/<id>/       one gameplay concern each
  module.lua        the declaration: id, side, dependencies, events
  shared/ server/ client/
  data/             catalogues
  locales.lua       English and French text
locales/            runtime-wide text
ui/src/             the Vue sources of the WebUI page (never shipped)
web/                the built page and the join screen (shipped)
tests/              a stub platform (host.lua) and the test suite (run.lua)

The pieces

PieceIn one lineRead more
ModuleOne gameplay concern: character, inventory, garages…Modules and contracts
ContractThe table of functions a module offers other modules.Contracts
LifecycleInit, Api, Start, Stop, run for every module in dependency order.Lifecycle
Event channelsopx:net:, opx:on:, opx:in: event names.Events and channels
SchedulerOPX.Scheduler.Every — the way to run repeating work.The scheduler
Server authorityThe server re-checks everything a client sends.Server authority
WebUI pageOne CEF page for every module's screens.The WebUI page
StorageOPX.Storage over the platform's MySQL bridge.Storage

The full OPX.* API is under Core.

How it starts

Server — core/server/boot.lua starts a thread that:

  1. checks the database (OPX.Storage.Ready()); with none it logs no database: nobody will be able to connect until this is fixed.
  2. runs every module's Init and Api phases;
  3. publishes the tunables (OPX.Tune.Publish) and applies the database schema (OPX.Schema.Apply);
  4. runs every module's Start;
  5. prints one [module] line per module and opx_infinity <version> up (with -- degraded: <reason> when something failed).

Client — core/client/boot.lua builds the WebUI surface and the toast layer, runs the module phases, then starts the client scheduler loop.

Both sides stop modules in reverse order when the resource stops. Exact sequence: Boot order.

What the framework does not offer

  • Only a curated export set. A module inside the resource uses contracts. A separate resource gets the server and client exports and the public server events described in For creators, and nothing else.
  • No server library. The server sandbox has no require, so opx_lib is client only. Server and shared code use the helpers in lib/.

Modules

Each module runs on the server, the client or both, and may require other modules (it does not run without them) or use them optionally (listed on each module page). Switch one off with enabled = false in its config file (Configure). fatal: the resource reports a failed boot if the module fails.

Players and characters

ModuleSideRequiresSummary
characterboth— (fatal)Accounts, characters, money, jobs, gangs, metadata and placement. Every other module reads a player through it.
appearancebothcharacter (fatal)Face and clothes, the join bootstrap and gameplay-ready announcement, the fitting room, and the looks other players are drawn from.
entryclientcharacterFinishes a new character: opens the game's creator, then asks for a name once.
spawnboth—The menu of start locations offered when a character enters the world.
needsbothcharacterHunger, thirst, stamina and street cred, and the status-effect chips any module can add.
downedbothcharacterWho is down, the down screen (wait for help or give up), and revival.
callsbothcharacterPlayer-to-player holocalls and contact swapping.
animationsboth—Emotes: every platform animation, alone or with a nearby player; /e and /e with, a picker, a stop key, walking paces.

Economy and items

ModuleSideRequiresSummary
inventorybothcharacterThe bag, stashes, vehicle trunks and gloveboxes, ground piles, weapons drawn from the bag, and eddies carried as an item.
shopsbothcharacter, appearanceClothing shops: the fitting room billed per changed slot, ready-made looks and saved outfits.
clothingboth—Clothing-store markers that open the appearance module's fitting room.
craftingbothinventory, characterWorkbenches and recipes; materials go in, the output is collected later.
gunsmithbothcrafting, characterArmouries: a crafting bench, a stash and a job gate per entry.
haulingbothcharacterA delivery job: carry crates, load them into a trunk, sell them to an NPC.

Vehicles

ModuleSideRequiresSummary
vehiclesservercharacterThe registry of owned vehicles: plates, bringing a car out, putting it away, saving its condition.
vehiclekeysboth—Vehicle keys as inventory items, and the lock a key turns.
garagesbothcharacterMarkers where a player brings out their own vehicles or puts one away.
dealershipbothcharacterDealers that sell vehicles, locked showroom cars, and player-to-player sales paid into a company account.
fuelboth—A tank per vehicle the server burns, pumps that fill it for money and a jerry can (an ox_fuel port on the platform's fuel bag field).

World

ModuleSideRequiresSummary
weatherboth—One server authority for time of day and weather, synced to every client.
elevatorsbothcharacterJob-gated floor lists on the game's lifts; the server re-checks every move.
teleportsbothcharacterOperator-placed teleport pads, one- or two-way, optionally job-locked.
blipsclient—Map pins for garages, dealers, shops, teleports, job sites and gas stations.
doorlockboth—Locked doors opened by job, gang, grade, key item, character or code (an ox_doorlock port), with a staff panel.

Screens and input

ModuleSideRequiresSummary
loadingclient—Steps the views aside during the game’s own loading screen and covers loads in play.
hudclientcharacterGauges, money and job, status chips, microphone and speed; hides the game's own HUD.
chatboth—The chat box, and the only way a typed slash command reaches the host.
menuclient—The keyboard list menu other modules open through its contract.
formclient—A modal asking for text, choice or slider values.
panelclient—A mouse-driven drawer with tabs, a searchable list, buttons and sliders.
promptsboth—The "press X to do Y" key strip, drawn with the player's own bindings.
progressboth—One timed-action bar that can lock movement and play a gesture.
targetclient—The target eye (hold ALT): world-interaction rows other modules register.
themeboth—The server's colours and surface style, pushed to every player's screen.

Staff and tools

ModuleSideRequiresSummary
adminbothcharacterThe staff panel (F9), target-eye rows and the opx.admin.* commands.
diagnosticsboth—/opx.modules, /opx.version, /opx.client; forwards page errors and failed client modules to the server log.

On this page