phacility/phabricator · error · PhutilArgumentUsageException
Configuration file does not specify any client servers. This
Error message
Configuration file does not specify any client servers. This service will be unable to transmit any notifications without a client server. You must specify at least one server with type "%s".
What it means
Thrown when the Aphlict config's servers list is non-empty but contains no entry with type "client". The client server is the websocket listener browsers connect to for real-time notifications; without it the service cannot deliver any notifications, so startup is refused.
Source
Thrown at src/applications/aphlict/management/PhabricatorAphlictManagementWorkflow.php:180
'ssl.chain',
'ssl.key',
'ssl.cert'));
}
}
if (!$servers) {
throw new PhutilArgumentUsageException(
pht(
'Configuration file does not specify any servers. This service '.
'will not be able to interact with the outside world if it does '.
'not listen on any ports. You must specify at least one "%s" '.
'server and at least one "%s" server.',
'admin',
'client'));
}
if (!$has_client) {
throw new PhutilArgumentUsageException(
pht(
'Configuration file does not specify any client servers. This '.
'service will be unable to transmit any notifications without a '.
'client server. You must specify at least one server with '.
'type "%s".',
'client'));
}
if (!$has_admin) {
throw new PhutilArgumentUsageException(
pht(
'Configuration file does not specify any administrative '.
'servers. This service will be unable to receive messages. '.
'You must specify at least one server with type "%s".',
'admin'));
}
$logs = idx($data, 'logs', array());View on GitHub (pinned to 5720a38cfe)
Solutions
- Add a server entry with "type": "client" and a port (default 22280), typically with "listen": "0.0.0.0" behind TLS or a firewall
- If you intentionally do not want browser notifications, disable the notifications feature in Phabricator config instead of running a client-less aphlict
Example fix
// before
"servers": [{"type": "admin", "port": 22281}]
// after
"servers": [
{"type": "client", "port": 22280},
{"type": "admin", "port": 22281}
] Defensive patterns
Strategy: validation
Validate before calling
$types = array();
foreach ($config['servers'] as $server) {
$types[] = idx($server, 'type');
}
if (!in_array('client', $types, true)) {
throw new InvalidArgumentException('No client server configured; notifications cannot be delivered');
} Prevention
- Keep the client listener in every environment unless notifications are deliberately disabled platform-wide
When it happens
Trigger: "servers" contains only one or more admin entries, or all client entries were retyped/misspelled so $has_client stays false.
Common situations: Hardening pass that removes the externally-listening client server for security without realizing it disables all notifications; typo'd types (see error 63) leaving only valid admin entries.
Related errors
- Configuration file does not specify any administrative serve
- Specify a user to notify with "--user".
- No user with username "%s" exists.
- Specify a message to send with "--message".
- Failed to read configuration file. %s
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/65bf63073b5272ee.
Report an issue: GitHub.