A developer builds a Slack bot and picks a clean, obvious username: notify. It installs into a workspace without any error, so everything looks fine. Somewhere in that same workspace, though, someone already has a bot or a user with that exact username. Slack does not reject the install and does not prompt for a different name. It silently appends a number, turning the chosen username into notify2 without asking. The developer only finds out when a teammate mentions the bot in a message and the auto generated version shows up on screen. This is one of several naming quirks in Slack app development that only becomes visible after the fact, not before it.
A Slack bot has two names, and they follow different rules
A Slack bot has a display name and a username, and Slack's own app design documentation treats them as two separate fields with two separate rule sets. The display name is what other users see when the bot posts a message or when someone views its profile, and it has no strict formatting rules attached to it. The default username, the string used when someone mentions the bot with an at symbol, follows Slack's regular username guidelines directly: “lowercase letters, numbers, underscores, dashes, periods, and less than 22 characters in length.” These are enforced rules, not suggestions. A display name can read as Deployment Notifier, with capital letters and a space, while the username tied to that same bot has to be something like deploy-notify to actually be valid. Most developers name the display name first, treating it as the bot's identity, then treat the username as an afterthought, when the username is actually the field carrying the hard technical constraints. A VS Code extension splits its name the same way, a lowercase technical identifier kept separate from the display name developers actually search for, and Discord pushes the split further still: a bot's application name and its username follow completely different rule sets, strict enough that a hyphen that renders fine in the application name gets rejected outright once it hits the username field. Whichever platform you're building for, assume the friendlier field is not the one enforcing the real constraints.
What happens when your username is already taken
This is one of the more surprising parts of Slack's naming system, and it is worth explaining precisely. Slack's own bot user documentation states that a default username “may be modified slightly from the default when it is installed to a workspace where that username is already reserved,” and that “this modification is an incrementing number appended to the username — so @username might become @username2.” Slack does not block the installation and does not prompt the developer to pick a different name first. This means the exact username you tested and confirmed during development is not guaranteed to be the one that actually appears once your app is installed into someone else's workspace. There is no way to reserve a username globally across Slack the way you can check availability on npm or GitHub, since usernames are scoped per workspace, not globally unique. The practical implication follows directly: choose a username specific enough that a collision is unlikely, since a generic single word like bot or notify is far more likely to already be taken in an active workspace than something more descriptive.
Naming rules that apply beyond the username field
The username collision problem is not the only naming decision a Slack app developer has to get right. Slack enforces at least three more rule sets across different parts of an app, and each one has its own logic and its own consequences for getting it wrong.
Avoid trademark conflicts in the display name
Slack's own app design guidance instructs developers to “pick a name that is representative of your brand and what the bot does, being careful not to violate trademarks or other brand names.” This is not a stylistic suggestion, it is a compliance concern Slack can act on. Chrome enforces a stricter version of the same idea, rejecting extension names that use Google's own trademarks as the core identity rather than a compatibility note, which is the same reference-versus-brand distinction that trips up Chrome extension developers. Slack's version is softer, aimed at third-party trademarks rather than Slack's own, but the underlying test is identical: treat the display name as a real brand decision, not a placeholder you can fix later.
Slash command names have their own readability standard
Slack's guide to implementing slash commands puts it directly: “a great command is descriptive and understandable but also unique,” and naming it after your own service is usually the safest way to get there, since generic terms are the ones most likely to already be taken. Users type a slash command manually in the message box every single time they use it, so it also needs to stay easy to remember and easy to type. A slash command lives in the message box the same way a CLI command lives in a terminal, and the same friction rules apply, which is the same typing ergonomics developers already deal with when naming command line tools. A slash command that is too long or too close to an existing command creates that same daily friction problem. Short, typeable, and unambiguous wins over clever every time.
Channel names follow yet another, stricter rule set
If your bot creates or references Slack channels programmatically, Slack's conversations.create method documentation states that channel names “may only contain lowercase letters, numbers, hyphens, and underscores, and must be 80 characters or less,” with no spaces or periods allowed. This is a fourth distinct naming rule set inside the same platform, separate from the display name, the username, and the slash command conventions already covered above. A bot that generates channel names dynamically needs to sanitize its output against this rule set specifically, since none of the other naming rules on this page carry over to it automatically.
A pre-launch naming check for a Slack app
- 01Confirm your default username is lowercase, uses only letters, numbers, underscores, dashes, and periods, and stays under 22 characters, since Slack enforces this format directly.
- 02Choose a username specific enough that a collision in an active workspace is unlikely, since Slack silently appends a number rather than warning you when your chosen username is already taken.
- 03Check your display name against Slack's own guidance on trademark and brand name conflicts before finalizing it.
- 04If your app includes slash commands, confirm each one is short enough to type from memory and does not closely resemble an existing common Slack command.
- 05If your app creates channels programmatically, confirm any generated channel names are lowercase, contain no spaces or periods, and stay under the 80 character limit.
Name the bot, then plan for the name that actually ships
A Slack bot's name is not one decision. It is several, spread across different fields with different enforced rules, and the username specifically can change without warning depending on which workspace it lands in. Draft the display name first with NameKit's Project Name Generator, then derive the username from whichever candidate wins by stripping it down to Slack's lowercase, under-22-character format before you ever install the app into a real workspace.
Frequently asked questions
What is the difference between a Slack bot's display name and username?
The display name is shown when the bot posts messages or its profile is viewed, with no strict formatting rules. The username is the string used when someone mentions the bot with an at symbol, and it must follow Slack's format rules: lowercase, numbers, underscores, dashes, periods, under 22 characters.
Can two Slack bots have the same username?
Not within the same workspace. If a bot's default username is already taken when installed, whether by another bot, an app, or an existing human user, Slack automatically appends an incrementing number to create a unique version, without prompting the developer or warning anyone in advance that the change happened.
Are Slack usernames globally unique like GitHub or npm names?
No. Slack usernames are scoped per workspace, not reserved globally. A username that is available in one workspace may already be taken in another, so there is no way to permanently claim a username across all of Slack the way you can on other platforms.
Do Slack channel names follow the same rules as bot usernames?
No, they are a separate rule set entirely. Channel names must be lowercase, cannot contain spaces or periods, and are limited to 80 characters, using hyphens or underscores between words, which is a noticeably longer limit than the 22 character cap enforced on bot usernames themselves.
Should my Slack bot's name include my company or product trademark?
Only your own trademark, and even then with care. Slack's guidance instructs developers to choose names representative of their own brand and function while avoiding violating other existing trademarks or brand names, which applies to any third party marks referenced in the name.