{"record":{"id":"65bf63073b5272ee","repo":"phacility/phabricator","slug":"configuration-file-does-not-specify-any-client-ser","errorCode":null,"errorMessage":"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\".","messagePattern":"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 \"(.+?)\"\\.","errorType":"console","errorClass":"PhutilArgumentUsageException","httpStatus":null,"severity":"error","filePath":"src/applications/aphlict/management/PhabricatorAphlictManagementWorkflow.php","lineNumber":180,"sourceCode":"            'ssl.chain',\n            'ssl.key',\n            'ssl.cert'));\n      }\n    }\n\n    if (!$servers) {\n      throw new PhutilArgumentUsageException(\n        pht(\n          'Configuration file does not specify any servers. This service '.\n          'will not be able to interact with the outside world if it does '.\n          'not listen on any ports. You must specify at least one \"%s\" '.\n          'server and at least one \"%s\" server.',\n          'admin',\n          'client'));\n    }\n\n    if (!$has_client) {\n      throw new PhutilArgumentUsageException(\n        pht(\n          'Configuration file does not specify any client servers. This '.\n          'service will be unable to transmit any notifications without a '.\n          'client server. You must specify at least one server with '.\n          'type \"%s\".',\n          'client'));\n    }\n\n    if (!$has_admin) {\n      throw new PhutilArgumentUsageException(\n        pht(\n          'Configuration file does not specify any administrative '.\n          'servers. This service will be unable to receive messages. '.\n          'You must specify at least one server with type \"%s\".',\n          'admin'));\n    }\n\n    $logs = idx($data, 'logs', array());","sourceCodeStart":162,"sourceCodeEnd":198,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/aphlict/management/PhabricatorAphlictManagementWorkflow.php#L162-L198","documentation":"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.","triggerScenarios":"\"servers\" contains only one or more admin entries, or all client entries were retyped/misspelled so $has_client stays false.","commonSituations":"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.","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"],"exampleFix":"// before\n\"servers\": [{\"type\": \"admin\", \"port\": 22281}]\n// after\n\"servers\": [\n  {\"type\": \"client\", \"port\": 22280},\n  {\"type\": \"admin\",  \"port\": 22281}\n]","handlingStrategy":"validation","validationCode":"$types = array();\nforeach ($config['servers'] as $server) {\n  $types[] = idx($server, 'type');\n}\nif (!in_array('client', $types, true)) {\n  throw new InvalidArgumentException('No client server configured; notifications cannot be delivered');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep the client listener in every environment unless notifications are deliberately disabled platform-wide"],"tags":["aphlict","configuration","notifications","phabricator"],"backgroundTag":"missing-required-config","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}