Back to Blog
Developers

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.

Slack Green Team
November 5, 2026
November 5, 2026
4 min read
Share:
slack
slack api
deep links

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

LinkOpens
slack://open?team=T0123ABCDSlack, on that workspace
slack://channel?team=T0123ABCD&id=C0123ABCDA channel or DM by its ID
slack://channel?team=T0123ABCD&id=C0123ABCD&message=1790925096.826199One message in that channel
slack://channel?team=T0123ABCD&id=C0123ABCD&message=...&thread_ts=...A reply inside a thread
slack://user?team=T0123ABCD&id=U0123ABCDA person's DM; a bot user opens its app
slack://app?team=T0123ABCD&id=A0123ABCDAn app's home
slack://file?team=T0123ABCD&id=F0123ABCDA 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.

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:

GroupCommands
Conversationsopen, channel, user, team, browse, create, channel_section, channel-summary, tractor-channel
Files and canvasesfile, files, share-file, doc, list, lists-browse, templates
Huddles and callshuddle, join-huddle, record
Apps and workflowsapp, apps, app-integrations, automations, workflows, workflow-template, agent-mcp-server, emoji-packs
Your accountpreferences, notifications, status, activity, saved-for-later, whats_new, slackhelp, invite, trial, recap
Slack AIslackbot-ai, prompts
Admin and partnersmanage-shared-channels, connect, org_chart, onedrive, salesforce, sf-auth, approvals, email-to-case, calendar
Debugset-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.

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 linkResult
https://slack.com/app_redirect?team=T…&channel=C…Opened the channel in the web app
…app_redirect?team=T…&channel=socialSame 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-channelThe 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.

Slack's Launching Slack page: You will be redirected in a few moments, Don't have the app yet? Download Slack for Desktop, and You can also open this link in your browser

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.

Slack's There's been a glitch error page, shown by app_redirect for a private channel the user is not in

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

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.

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.

The mobile apps register the same slack:// scheme, but we tested only the Mac app's code and a desktop browser.

Always Active

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

Developers

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 Green Team
Guide

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.

Slack Green Team
Guide

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.

Slack Green Team