{"record":{"id":"285dac0d8e167179","repo":"clockworklabs/SpacetimeDB","slug":"server-nickname-already-in-use","errorCode":null,"errorMessage":"Server nickname {} already in use: {}://{}","messagePattern":"Server nickname (.+?) already in use: (.+?)://(.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/cli/src/config.rs","lineNumber":229,"sourceCode":"            let default = default_server.to_string();\n            self.find_server_mut(&default)\n                .with_context(|| hanging_default_server_context(&default))\n        } else {\n            Err(anyhow::anyhow!(NO_DEFAULT_SERVER_ERROR_MESSAGE))\n        }\n    }\n\n    fn add_server(\n        &mut self,\n        host: String,\n        protocol: String,\n        ecdsa_public_key: Option<String>,\n        nickname: Option<String>,\n    ) -> anyhow::Result<()> {\n        if let Some(nickname) = &nickname\n            && let Ok(cfg) = self.find_server(nickname)\n        {\n            anyhow::bail!(\n                \"Server nickname {} already in use: {}://{}\",\n                nickname,\n                cfg.protocol,\n                cfg.host,\n            );\n        }\n\n        if let Ok(cfg) = self.find_server(&host) {\n            if let Some(nick) = &cfg.nickname\n                && nick == &host\n            {\n                anyhow::bail!(\"Server host name is ambiguous with existing server nickname: {nick}\");\n            }\n            anyhow::bail!(\"Server already configured for host: {host}\");\n        }\n\n        self.server_configs.push(ServerConfig {\n            nickname,","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/clockworklabs/SpacetimeDB/blob/524b4487d949b61a07d4f39c862d1290259dfd20/crates/cli/src/config.rs#L211-L247","documentation":"RawConfig::add_server (crates/cli/src/config.rs:229) rejects a nickname that already resolves to a saved server (find_server matches by nickname or host), printing the existing entry as protocol://host so the collision is visible. Nicknames must stay unique for --server lookups to be unambiguous.","triggerScenarios":"Running spacetime server add testnet --url <url> when 'testnet' already names a saved server, even if the new URL differs.","commonSituations":"Re-running a setup/provisioning script that adds the same environment twice; adding the same cluster under a new URL with the old nickname; conflicting entries after importing a teammate's config.","solutions":["Choose a different nickname for the new server","If you meant to replace it: spacetime server remove <nickname>, then re-add with the new URL","Run spacetime server list first to see existing nicknames and hosts"],"exampleFix":"# before\nspacetime server add testnet --url https://testnet2.spacetimedb.com  # Error: nickname already in use\n\n# after\nspacetime server remove testnet\nspacetime server add testnet --url https://testnet2.spacetimedb.com","handlingStrategy":"validation","validationCode":"# Check for a nickname clash before adding:\nif spacetime server list | awk '{print $1}' | grep -qx \"${NICK}\"; then\n  echo \"nickname '${NICK}' already exists\" >&2; exit 2\nfi\nspacetime server add \"${NICK}\" --url \"${URL}\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run spacetime server list before add in any repeatable script","Use environment-prefixed nicknames (dev-, staging-, prod-) to avoid collisions","To change a server's URL, remove and re-add it rather than adding a duplicate nickname"],"tags":["cli","configuration","server","duplicate-entry","spacetimedb"],"backgroundTag":"duplicate-server-config","analyzedSha":"524b4487d949b61a07d4f39c862d1290259dfd20","analyzedAt":"2026-08-16T23:58:54.611Z","schemaVersion":2},"datasetVersion":"2026-08-17T04:17:16.089Z"}