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
| Resource | What it is | Runs code on |
|---|---|---|
opx_infinity | The whole framework: core runtime, every module, the WebUI page. | server and client |
opx_lib | A 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
| Piece | In one line | Read more |
|---|---|---|
| Module | One gameplay concern: character, inventory, garages… | Modules and contracts |
| Contract | The table of functions a module offers other modules. | Contracts |
| Lifecycle | Init, Api, Start, Stop, run for every module in dependency order. | Lifecycle |
| Event channels | opx:net:, opx:on:, opx:in: event names. | Events and channels |
| Scheduler | OPX.Scheduler.Every — the way to run repeating work. | The scheduler |
| Server authority | The server re-checks everything a client sends. | Server authority |
| WebUI page | One CEF page for every module's screens. | The WebUI page |
| Storage | OPX.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:
- checks the database (
OPX.Storage.Ready()); with none it logsno database: nobody will be able to connect until this is fixed. - runs every module's
InitandApiphases; - publishes the tunables (
OPX.Tune.Publish) and applies the database schema (OPX.Schema.Apply); - runs every module's
Start; - prints one
[module]line per module andopx_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, soopx_libis client only. Server and shared code use the helpers inlib/.
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
| Module | Side | Requires | Summary |
|---|---|---|---|
| character | both | — (fatal) | Accounts, characters, money, jobs, gangs, metadata and placement. Every other module reads a player through it. |
| appearance | both | character (fatal) | Face and clothes, the join bootstrap and gameplay-ready announcement, the fitting room, and the looks other players are drawn from. |
| entry | client | character | Finishes a new character: opens the game's creator, then asks for a name once. |
| spawn | both | — | The menu of start locations offered when a character enters the world. |
| needs | both | character | Hunger, thirst, stamina and street cred, and the status-effect chips any module can add. |
| downed | both | character | Who is down, the down screen (wait for help or give up), and revival. |
| calls | both | character | Player-to-player holocalls and contact swapping. |
| animations | both | — | Emotes: every platform animation, alone or with a nearby player; /e and /e with, a picker, a stop key, walking paces. |
Economy and items
| Module | Side | Requires | Summary |
|---|---|---|---|
| inventory | both | character | The bag, stashes, vehicle trunks and gloveboxes, ground piles, weapons drawn from the bag, and eddies carried as an item. |
| shops | both | character, appearance | Clothing shops: the fitting room billed per changed slot, ready-made looks and saved outfits. |
| clothing | both | — | Clothing-store markers that open the appearance module's fitting room. |
| crafting | both | inventory, character | Workbenches and recipes; materials go in, the output is collected later. |
| gunsmith | both | crafting, character | Armouries: a crafting bench, a stash and a job gate per entry. |
| hauling | both | character | A delivery job: carry crates, load them into a trunk, sell them to an NPC. |
Vehicles
| Module | Side | Requires | Summary |
|---|---|---|---|
| vehicles | server | character | The registry of owned vehicles: plates, bringing a car out, putting it away, saving its condition. |
| vehiclekeys | both | — | Vehicle keys as inventory items, and the lock a key turns. |
| garages | both | character | Markers where a player brings out their own vehicles or puts one away. |
| dealership | both | character | Dealers that sell vehicles, locked showroom cars, and player-to-player sales paid into a company account. |
| fuel | both | — | 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
| Module | Side | Requires | Summary |
|---|---|---|---|
| weather | both | — | One server authority for time of day and weather, synced to every client. |
| elevators | both | character | Job-gated floor lists on the game's lifts; the server re-checks every move. |
| teleports | both | character | Operator-placed teleport pads, one- or two-way, optionally job-locked. |
| blips | client | — | Map pins for garages, dealers, shops, teleports, job sites and gas stations. |
| doorlock | both | — | Locked doors opened by job, gang, grade, key item, character or code (an ox_doorlock port), with a staff panel. |
Screens and input
| Module | Side | Requires | Summary |
|---|---|---|---|
| loading | client | — | Steps the views aside during the game’s own loading screen and covers loads in play. |
| hud | client | character | Gauges, money and job, status chips, microphone and speed; hides the game's own HUD. |
| chat | both | — | The chat box, and the only way a typed slash command reaches the host. |
| menu | client | — | The keyboard list menu other modules open through its contract. |
| form | client | — | A modal asking for text, choice or slider values. |
| panel | client | — | A mouse-driven drawer with tabs, a searchable list, buttons and sliders. |
| prompts | both | — | The "press X to do Y" key strip, drawn with the player's own bindings. |
| progress | both | — | One timed-action bar that can lock movement and play a gesture. |
| target | client | — | The target eye (hold ALT): world-interaction rows other modules register. |
| theme | both | — | The server's colours and surface style, pushed to every player's screen. |
Staff and tools
| Module | Side | Requires | Summary |
|---|---|---|---|
| admin | both | character | The staff panel (F9), target-eye rows and the opx.admin.* commands. |
| diagnostics | both | — | /opx.modules, /opx.version, /opx.client; forwards page errors and failed client modules to the server log. |