Slack Deep Links: Every slack:// Command in the Current App
A Slack deep link is a slack:// URL such as slack://channel?team=T123&id=C123 that opens the desktop or mobile app on a channel, person, file or setting. We read the handler in Slack's current code, listed the commands it accepts, and tested the https fallbacks.
On this page
A Slack deep link is a URL that starts with slack:// and opens the Slack app at a given place, for example slack://channel?team=T0123ABCD&id=C0123ABCD for a channel or slack://user?team=T0123ABCD&id=U0123ABCD for a person. The part after slack:// is the command, and team plus id say where to go. On 5 November 2026 we read the code that handles these links in Slack's Mac app (4.52.182) and in its web client, and found 49 commands, most of which Slack's docs do not list. We also tested the https forms that work in a browser.
The common forms
| Link | Opens |
|---|---|
slack://open?team=T0123ABCD | Slack, on that workspace |
slack://channel?team=T0123ABCD&id=C0123ABCD | A channel or DM by its ID |
slack://channel?team=T0123ABCD&id=C0123ABCD&message=1790925096.826199 | One message in that channel |
slack://channel?team=T0123ABCD&id=C0123ABCD&message=...&thread_ts=... | A reply inside a thread |
slack://user?team=T0123ABCD&id=U0123ABCD | A person's DM; a bot user opens its app |
slack://app?team=T0123ABCD&id=A0123ABCD | An app's home |
slack://file?team=T0123ABCD&id=F0123ABCD | A file |
You need the IDs, not the names: see how to find a Slack channel ID and the Slack member ID. The message and thread_ts parameter names come straight from the handler code below.
How the app handles a slack:// link
The Mac app registers the scheme. Its Info.plist lists slack under CFBundleURLSchemes, and its main process calls Electron's setAsDefaultProtocolClient("slack") at start. When macOS hands it a link, the app parses it like this:
function nS(e) {
let t = new URL(e);
if ("slack:" !== t.protocol) return null;
return { args: { ...Object.fromEntries(t.searchParams.entries()), cmd: t.host },
pathname: t.pathname };
}
So the host becomes cmd and every query parameter is passed on. The app forwards the link to the workspace's web client only if the team in the link is a workspace you are signed in to. The web client then runs a function described in the code as "Performs deep link handling for arguments parsed from a slack: URI". It refuses a link without team, logging "Missing team in payload, skipping deep link", except for a few commands such as app, open with a campaign, and saved-for-later, which fall back to the current workspace.
Never appear "away" on Slack again
Cloud-based. No downloads. Works 24/7 even when your laptop is off.
All 49 commands in today's client
From the web client bundle of 5 November 2026, the handler's switch accepts these commands:
| Group | Commands |
|---|---|
| Conversations | open, channel, user, team, browse, create, channel_section, channel-summary, tractor-channel |
| Files and canvases | file, files, share-file, doc, list, lists-browse, templates |
| Huddles and calls | huddle, join-huddle, record |
| Apps and workflows | app, apps, app-integrations, automations, workflows, workflow-template, agent-mcp-server, emoji-packs |
| Your account | preferences, notifications, status, activity, saved-for-later, whats_new, slackhelp, invite, trial, recap |
| Slack AI | slackbot-ai, prompts |
| Admin and partners | manage-shared-channels, connect, org_chart, onedrive, salesforce, sf-auth, approvals, email-to-case, calendar |
| Debug | set-query |
Some take extra parameters, per the code: preferences reads section and subsection, browse needs item=channels, doc (a canvas) reads section_id, huddle starts a huddle in the channel given by id, and channel reads tab to open a channel tab. Undocumented commands can change in any release, so build on open, channel, user, app and file, which Slack's developer docs describe.
The https links that work in a browser
A slack:// link does nothing on a computer without the app. For links that should work for everyone, use an https form. We opened each one in a signed-in Chrome with no Slack app installed:
| https link | Result |
|---|---|
https://slack.com/app_redirect?team=T…&channel=C… | Opened the channel in the web app |
…app_redirect?team=T…&channel=social | Same channel; a channel name works too |
…app_redirect?channel=C… (no team) | Opened the channel in the signed-in workspace |
…app_redirect?team=T…&channel=U… | Opened the DM with that person |
…app_redirect?team=T…&channel= a private channel we are not in | "There's been a glitch…" page |
…app_redirect?team=T…&channel=no-such-channel | The same glitch page |
https://yourworkspace.slack.com/archives/C… | Launching Slack page, then the browser link |
The archives link, which is what Copy link gives you for a message, first shows a Launching Slack page that tries to open the app and offers "open this link in your browser". That page is Slack's own universal link.
A wrong or hidden channel in app_redirect does not say why it failed. It shows the same generic error for a private channel you cannot see and for a channel that does not exist.
For links to single messages, the Slack message permalink page covers the archives format and the p timestamp, and how to copy a Slack profile link covers the /team/ form for people.
FAQ
Can a deep link pre-fill a message?
Not in the handler we read: none of the 49 commands takes message text for the composer. The prompts command fills a draft only for Slack AI prompts.
Why does my slack:// link open the wrong workspace or nothing?
The app forwards a link only when its team ID matches a workspace you are signed in to, and the web client skips most commands with no team. Check the T ID first. If links keep landing in a browser tab instead, see Slack keeps opening in the browser.
Do deep links work on phones?
The mobile apps register the same slack:// scheme, but we tested only the Mac app's code and a desktop browser.
Stop Jiggling Your Mouse.
Join hundreds of remote workers who never worry about their Slack status. Set it up once, stay green forever.
Related Articles
Slack SDK for Rust: slack-morphism Tested (Post, History, Socket Mode)
Slack has no official Rust SDK. The community crate that works today is slack-morphism: on 5 November 2026 we used version 2.31.1 to post a message, page through history with a cursor and answer a mention over Socket Mode. Code and output below.
Slack Message Character Limit: 40,000 Max, 4,000 Advised
Slack keeps up to 40,000 characters in a message's text and truncates anything longer, and its developer docs advise staying under 4,000 characters. Block Kit sections stop at 3,000 characters and headers at 150. What happens with long messages, other Slack text limits, and how to split a long post.
How to Turn Off Link Previews in Slack, for You or Everyone
To turn off link previews in Slack for yourself, open Preferences, Messages & media and uncheck Show images and files from linked websites and Show text previews of linked websites. To remove one preview, hover over it and click the x. How admins block a website, how bots send links without previews, and why a preview does not show.