OPEN//77: Cyberpunk 2077 multiplayer
Play Cyberpunk 2077 online on community servers, or create your own server and your own multiplayer experience.
Everyone with Alpha access can download the server and start building now.


For Players
For Server Creators
For Devs
PlayCyberpunkTogether
Community servers turn Night City into multiplayer worlds, each with its own rules and its own experience. OPEN//77 is the layer that makes them possible.





CreateYour OwnServer
Run a dedicated server that stays online for your community, with your rules, your mods, and gameplay you design. Everyone with Alpha access can download it and start building now. No separate developer application.

Your OwnDedicated Server
A persistent world you operate, on your hardware or a rented machine.
Your Rules,Your Community
Whitelists, moderation, staff, identity. Your server page is your front door.
CustomGameplay
Build anything from a strict roleplay city to a racing league to a game mode nobody has seen yet.


ScriptYourNight City
Gameplay on an OPEN//77 server is not configured. It is scripted. A resource is a small Lua 5.4 package your server loads, hot-reloads and streams to every player who joins. This is the entire /ride command, for real.

One language, two runtimes
Client scripts run inside the game; server scripts own the authoritative world. Each resource gets its own isolated Lua VM, and hot reload: save the file, it is live. Resource model
Drive the actual engine
Vehicles, blips, NPCs, weather, loot, interactions, notifications: the same permission-gated natives OPEN//77's own resources are built on. Lua API reference
UI with the web stack
A resource can ship a Chromium WebUI page: build HUDs, menus and apps in HTML, CSS and JavaScript, out of process so the game never pays for your UI. WebUI in practice
local GALENA = "Vehicle.v_standard2_thorton_galena_player"
RegisterCommand("ride", function(source, args)
local spot = Open77.players.position(source)
if spot == nil then return end
local id = Open77.vehicles.create({
record = args[1] or GALENA,
position = { x = spot.x + 3.0, y = spot.y, z = spot.z },
bucket = spot.bucket,
})
if id then
TriggerClientEvent("ride:delivered", source, id, spot)
end
end)resources/ride/server/main.lua// SERVER.RUNTIME loading...RegisterNetEvent("ride:delivered", function(id, spot)
Open77.blips.create({
position = { x = spot.x + 3.0, y = spot.y, z = spot.z },
sprite = "objective",
title = ("Ride #%d"):format(id)
})
Open77.exports.call("open77_notifications", "show", {
type = "success",
title = "Ride delivered",
message = "Your wheels are waiting outside."
})
end)resources/ride/server/main.lua// CLIENT.RUNTIME loading...