Controlling who can join
- Added
- Updated
What this gives you: a way to close the server without shutting it down — during an update, a staff event, or a rough night.
Three gates, checked in this order when somebody joins: maintenance → staff-only hours → reserved slots. Anybody holding one of the permissions you list gets through all three.

| Gate | What it does |
|---|---|
| Maintenance | Nobody but staff gets in. Flip it from the panel at any time |
| Staff-only hours | The server is closed to players between connectControl.adminOnly.startAt and endAt |
| Reserved slots | connectControl.reservedSlots = 2 keeps the last 2 slots free so your team can always get in |
The window itself, the timezone offset and the slot count are on the Settings page. What stays in config/sv_config.lua is the list of permissions that gets through, because that is a permission boundary and the panel must not be able to widen it:
config.connectControl = {
adminOnly = {
---@type string[]
permissions = {
"admin",
"support",
},
},
}
What a turned-away player sees comes from connect in locales/*.lua, so you can word it however you like.
Maintenance mode is switched from the panel — or from a deploy script, with setMaintenance. config.maintenance only decides what the server boots into; with persist = true it remembers the last state across a restart.
Images show the current UI captured in a browser using sample data.
