Your experience while developing next generation Slack apps is largely governed by the SDKs and the CLI. These tools change as the platform changes, and we release new versions regularly. Subscribe to be notified of updates, and let us know how we're doing.

v2.3.0 (June 1, 2023)

  • The external-auth remove command now allows you to select a token for deletion.
  • The new external-auth select-auth command allows you to select a unique auth for each of the workflows in an app. This command is mandatory when using new in-code workflows that have a step containing credentialSource DEVELOPER; that is, every time an in-code workflow is created, this command must be called after the external-auth add command.
  • The slack auth token and slack auth revoke commands allow you to manage (create and delete) service tokens.
    • The slack auth token command allows you to get the slackauthticket and to copy and paste it into your workspace to exchange for the service token.
    • The service token will not be saved to your credentials.json file; instead, it is presented in the prompt for you to copy and paste to your CI/CD pipelines.
    • Once you obtained a service token, you can use slack login --auth <your-service-token> to authorize your Slack CLI.
The service token will not conflict with your regular authentication token; you can continue using your regular authentication token within the Slack CLI while using the service token for your CI/CD pipelines.
  • The new global --token <token> flag allows you to pass the service token used by requests requiring authentication. For example:
    • Install an app: slack install --token <your-service-token>
    • Create a trigger: slack trigger create --token <your-service-token> --app deployed --trigger-def triggers/trigger_def_file.ts
    • Deploy an app: slack deploy --token <your-service-token>
  • Added support for a global --experiment [name,name,...] flag.

v2.2.0 (May 4, 2023)

  • trigger info now also shows who can run the trigger.
  • Added the --no-color flag, which removes all ANSI sequences for color as well as emojis, giving you plain text output from the CLI that's perfect for piping to a text file.
  • The datastore query command now supports a cursor argument to help you paginate your results the way you want.
  • Trigger operations will now let you know when an invalid trigger file is being ignored.
  • Improved error reporting and help text.

General availability (April 24, 2023)

Today we're announcing that the next generation Slack platform–which provides a faster, more flexible way to build automations on top of Slack–is generally available to developers. The platform's overhauled architecture gives developers more ways to build, code, and ship custom apps and workflows more quickly and easily in an environment that's both secure and compliant. Read the announcement or follow the Quickstart to get started today!

v2.1.0 (April 20, 2023)

CLI enhancements

  • Updated login flow instructions to be clearer for new developers.
  • Improved formatting in the trigger_execution log for greater readability.
  • Improved Windows installation script to have more specific error messaging.
  • Updated the slack doctor command to display the local git version.
  • Hid a select few flags that appear when using the slack help command, but not to worry! Those hidden commands are still visible while using slack help -v.
  • Refined text formatting for greater accessibility.

Bug fixes

  • Datastore methods now take an app selection prompt.
  • Remedied a CLI runtime error that would occur when running slack help deno without any other arguments.

v2.0.0 (April 6th, 2023)

  • Added support for TTY devices to remove color and emoji when redirecting output.
  • Added displayed timestamps to the --verbose flag.
  • Simplified the create experience for developers from installation to deployment.
  • Added a hint when running trigger create or trigger list for developers to invite their app to a channel to receive events, and formatted outputs when displaying trigger information.
  • Added support for the error code message_limit_exceeded. The error code is included in the following endpoints when a free team has reached their message limit:, chat/postEphemeral, chat/postMessage, chat/scheduleMessage, chat/shareMessage, files/share, and drafts/create. For more information, refer to Usage limits for free workspaces.
  • Renamed the slack cloud command to the slack platform command. For more information, refer to commands.
  • Renamed (dev) with (local) for local apps in the workspace list.
  • Added support for Windows users to install the Slack CLI, Deno, Git, and VSCode with the Deno extension. For more information, refer to the Quickstart.
  • Renamed the slack workspace uninstall command to slack workspace delete.
  • Improved the user experience when using slack login --auth <string> to log in.
  • Added the shorthand -a for the --app flag.
  • Removed the slack auth info command, as the pertinent information is found by using the slack auth list command.
  • Added a slack samples command, which will list the available sample app templates you can use to create a new app.
  • Removed git as a required dependency of installing sample apps.

v1.21.0 (March 23rd, 2023)

CLI updates

  • Streamlined trigger access command to bypass prompts with flag values, as well as an updated experience when no trigger files are found, in which case the user is directed to Create a link trigger with the CLI.
  • Added the open-form-response export command, which generates a CSV of OpenForm responses.
  • Added support for a global --app <id|env> flag, which replaces the --local-run flag.

Other enhancements

  • Changed the default manifest function_runtime to be undefined instead of slack.
  • Updated local app name suffix to local (from dev).

v1.20.0 (February 23rd, 2023)

New functionality

  • Added new datastore update command. Where the put datastore command replaces the entire record (matching what you might expect from an HTTP PUT call), the new update command allows for field-level changes, leaving unspecified properties unchanged (matching what you might expect from an HTTP PATCH call).
  • Custom trigger file paths can now be declared in slack.json with the config.trigger-paths property.
  • Using either trigger create or trigger update now provides a file selection prompt when no file is specified.
  • When executing deploy, run, or env commands, you can now use the --workspace (-w) flag to specify a target workspace. If omitted, the CLI will prompt you to select from your currently authorized workspaces. Ensure your app is authorized into your target workspace with slack auth list; if you don't see your target workspace, create a new authorization with slack login.


  • The activity command now formats workflow_bot_invited event types.
  • We've removed the warning for outgoing domains for a lighter terminal experience.
  • Added information about token revocation in the external-auth remove command.
  • Added resolution suggestions for the invalid_challenge error.
  • Added upcoming breaking changes announcement when using deploy and run commands. The upcoming breaking changes are outlined at the end of this changelog.
  • Elided certain text hints in cases where they aren't necessary.
  • Cleaned up the output of create command to better focus on next steps.

Upcoming maintenance window

On March 13th, 2023, between 1pm and 5pm PST, we'll be making some security improvements behind-the-scenes on our end; no action is required from you. During this time, you may experience some lag or downtime with your Run on Slack functions.

Upcoming breaking changes

The following breaking changes will ship April 6, 2023. Before April 6th, please update your app in accordance with the changes outlined below to ensure that it continues to work as expected.

Third-party authentication

  • Instead of passing an empty object to the functions OAuth2 input parameter to define what token type should be used, you’ll need to use a new credential_source property to specify which user’s token should be selected or requested during workflow execution. For example:
// OLD
const sampleFunctionStep = SampleWorkflow.addStep(SampleFunctionDefinition, {
  user: SampleWorkflow.inputs.user,
  googleAccessTokenId: {},

// NEW
const sampleFunctionStep = SampleWorkflow.addStep(SampleFunctionDefinition, {
  user: SampleWorkflow.inputs.user,
  googleAccessTokenId: {
    credential_source: "DEVELOPER" // Add this by April 6th, 2023


  • datastore:read and datastore:write scopes will no longer be auto added to your app manifest botScopes.
  • The apps.datastore.put method will now overwrite the entire datastore item instead of only overwriting the individual fields included in the call. Use apps.datastore.update to overwrite individual fields.
  • Datastore items' primary_key is the only required attribute, all other attributes will be treated as optional. Unhandled optional attributes may cause TypeScript errors in your code. If you'd like to migrate to optional attributes ahead of time, you can cast a DatastoreItem:
import { DatastoreItem } from "deno-slack-api/types.ts";

 const response = await client.apps.datastore.get<typeof SampleObjectDatastore.definition>({
    datastore: "SampleObjects",
    id: sampleObject,
const item = resp.item as DatastoreItem<
  typeof SampleObjectDatastore.definition

resp.item.original_msg // is still required, but
item.original_msg // is now optional

Interactivity payloads

  • The response_url property will no longer be included in Block Kit interactivity action & view_submission payloads that are routed to function handlers. The Slack API client provided to these handlers can call Slack’s messaging APIs directly.

Slack functions

  • The new ReplyInThread function provides a new way to reply to messages in thread. Instead of passing the message you want to reply to as the thread_ts input parameter of SendDM or SendMessage, now you can pass that message into the message_context input parameter of the ReplyInThread function.
  • InviteUserToChannel has two new optional input parameters: user_ids, an array of user IDs, and channel_ids, an array of (you guessed it) channel IDs. The single value versions, user_id and channel_id, will be removed on April 6th, 2023.
  • AddUserToUsergroup and RemoveUserFromUserGroup have one new optional input parameter: user_ids, an array of user IDs. The user_id input will be removed.

v1.19.0 (February 9th, 2023)

Slack CLI

  • The Slack CLI installer now safeguards overwriting other binaries or programs named slack that you may have in your system.
  • You can now update the Slack CLI without needing to be logged into a workspace.
  • Logging out with slack logout now revokes auth and refresh tokens.
  • App selection now prompts for a workspace first, then the app's environment (local or deployed). Environment-specific commands such as slack run, slack deploy, or slack collaborator list prompt only for your workspace choice and then select the environment automatically depending on the command.

Trigger updates

  • You can now grant and revoke trigger access for specific workspaces and organizations.
  • After deploying with slack deploy, a prompt to generate a trigger from a trigger definition file will appear if no triggers exist in this environment.
  • When running slack triggers list, each trigger's creation and last updated times are now included.
  • We now ensure that triggers will not be created if their parameter values are missing or empty.
  • We improved the error messages with suggested remediation steps if trigger creation fails with workflow_not_found.

Other changes

  • The Deno Slack SDK added the DefineProperty object wrapper to bring accurate typing to nested object properties and parameters.
  • New message_ts and message_context types were added to the Deno Slack SDK for stronger typing when handling messages.
  • Format properties email and url now exist on the Slack.types.string type, helping validate the inputs of function, forms, and workflows.
  • The client.apps.external.auth.get method was added to the Deno Slack API for fetching external auth tokens with typeahead support.
  • Errors will be raised if a function module doesn't export a function by default.

v.1.18.0 (January 26th, 2023)

Important changes

  • As announced previously, you now must specify all domains you'll use for remote HTTP requests in the outgoingDomains property of your app's manifest.
  • The existing login process has been deprecated in favor of a process that includes a challenge step. Now, when a you use slack login and paste the /slackauthticket command into your workspace, instead of directly sending you back to the CLI, Slack will issue a verification code in the Slack client which you need to input into your CLI before you can complete the login. This does not break login for older versions. Additionally, existing logins in your credentials.json file are not affected.

Other changes

  • Now when you use the slack run command, you will be prompted to generate a trigger. This prompt will not occur when running slack deploy.
  • Improved error message for schema_compatibility_error on datastores_deleted.
  • Updated datastore command help text to be consistent with website documentation.
  • Added support for channel entities in trigger access control lists. You can now pass a channel_id to grant or revoke access to triggers.
  • Updated all datastore command examples to not require the app_id parameter, as the App Selector Prompt automatically adds the app_id to the query.
  • You will now be prompted for missing flags when using slack env add and slack env remove, instead of receiving a pesky error. When slack env add prompts for the secret value, it uses a password-like input to hide the input value from the terminal screen to remove possible leakages of these values from the terminal history.
  • Added a safeguard for overwriting other binaries named 'slack'.
  • Added an error message when using slack create to create from a template if Git is not installed.
  • Added a helpful remediation message to channel_not_found error.

v.1.17.0 (December 8th, 2022)


  • Improved CLI experience when selecting an app by providing a secondary window that hides non-existent and not-installed apps from main app prompt selector.
  • Updated install and deploy commands to use the selected workspace token.
  • Updated the get and delete datastore methods to use id instead of the name of the primary_key

v1.16.4 (November 17th, 2022)


  • When uninstalling an app using the slack uninstall command, you will now receive a warning message confirming that all of the data related to this app will also be deleted (i.e. the app's related workflows, functions, and datastores). See update here.
  • When validating an app's manifest via the CLI using slack manifest validate --verbose, you are now prompted to choose an AppID. This change fixes a bug where an app manifest may have previously been validated against an incorrect AppID. Since each app may have a slightly different manifest depending on what stage of development it's in (for example, a local development app vs. a deployed app), you can now specify the app to validate your local project's manifest against.
  • When adding or removing a collaborator via the CLI, you are now prompted with a more descriptive <email and user_id> flag that adds or removes a user directly, e.g. slack collaborator add U123456789 or slack collaborator add
  • We've improved how authentication tokens are managed behind the scenes by updating various CLI commands that will prevent future bugs.
  • Run slack create and choose our Scaffolded app to familiarize yourself more closely with datastores on the new Slack platform.

v1.15.0 (November 3rd, 2022)

Breaking change

Beginning January 26th, 2023, you must specify all domains you'll use for remote HTTP requests in the outgoingDomains property of your app's manifest. outgoingDomains will be enforced on all workspaces for Slack-hosted apps. Previously, outgoingDomains was only enforced on workspaces with Admin-Approved Apps enabled.

When does this happen?

  • On January 26th, 2023 At 16:00 UTC 👉 (which is 08:00 AM Pacific Standard Time and January 20th, 2023 01:00 AM Japan Standard Time) 👈 outgoingDomains will be enforced on all workspaces for Slack-hosted apps.
  • Additionally, was being implicitly added as an approved outgoing domain on AAA-enabled workspaces. After January 19th, 2023, it will be removed from that list and will need to be added explicitly as an outgoing domain if your functions make network requests to

How should I get ready?

  • Once you upgrade to the v1.15.0 release and upgrade your project's deno-slack-hooks dependency to v0.7.0, the slack run command will enforce your app's outgoingDomains setting locally.
  • If your app makes network requests, test your app using slack run. If you recieve a "Requires net access to <domain_name>" error message, add the listed domain to your outgoingDomains setting and try again. Once you're done, redeploy it using the command slack deploy.

Other changes

  • Enhanced visibility of app selection prompt, the "status" of an app is now indicated by a green App ID, e.g. AO12345678 instead of text, e.g. Status: Installed.
  • slack manifest validate no longer throws requires_request_url or requires_socket_mode_enabled errors when validating the Hello World starter template manifest.

v1.14.0 (October 20th, 2022)


v1.13.1 (October 6th, 2022)


  • Improved Windows path handling.

v1.13.0 (October 6th, 2022)


  • Updated slack activity command to now support selecting local app development application.
  • Added --secret flag to slack external-auth add-secret command warning message text.
  • When a response is returned as "not ok", the slack-debug-[date].log file will log the response and request. No other activity will be logged.
  • Removed PII (personally identifiable information) such as a user's home directory and username from the slack-debug-[date].log file.

Bug fix

  • When running the commands slack run or slack activity --tail, the command will exit once a timeout is reached.

v1.12.0 (September 29th, 2022)


  • Added slack trigger info command to CLI to display trigger ID, type, name, and URL e.g. slack trigger info --trigger-id "Ft123ABC456".
  • Added slack feedback command to CLI. We would love to know about your experience (good or not so good) using the Slack CLI. Use this command to submit feedback or submit it directly here.
  • Updated the Slack CLI debug log to include the date as a suffix e.g. slack-debug-20220915.log. This log file will be accessible in the .slack/logs folder on your computer. Note: The CLI will auto-cleanup log files older than one week from the .slack/logs folder.
  • Improved error handling by adding additional error details to output.

Bug fixes

  • The slack trigger and slack workspace command will return an 'Error: unknown command' if an invalid command is executed e.g. slack trigger <invalid_command> or slack workspace <invalid_command>.
  • slack auth and slack collaborators default to slack auth list and slack collaborators list command if no additional arguments are passed in the command.

v1.11.0 (September 8th, 2022)

Breaking changes

Please update your app in accordance with the changes outlined below to ensure that it continues to work as expected.

  • All apps built with the Slack CLI are now Org-wide apps. All apps installed in an enterprise workspace must be reinstalled.
  • The type FunctionHandler is no longer exported. Use the SlackFunctionHandler type when building custom functions instead. Alternatively, use the new SlackFunction helper included in this release.
  • DefineType() no longer accepts callback_id as a property. The callback_id has been deprecated in favor of name.
  • The options.client_secret_env_key property has been removed from DefineOAuth2Provider() in favor of using the add-secret CLI command. If you are using client_secret_env_key, you can remove it and then use add-secret instead to provide the value.
  • The following Slack functions no longer allow Block Kit values in the message field:
    • SendDm
    • SendMessage
    • SendEphemeralMessage Both text and rich_text are still supported.
  • The following fields have been removed from the block_actions/view_submission/view_closed interactivity event payload:
    • body.user.username
    • body.trigger_id
    • body.token
    • body.is_enterprise_install
    • body.app_unfurl
    • body.workflow_step
    • body.trigger_info
  • If you have an interactivity handler that relies on body.trigger_id, use body.interactivity.interactivity_pointer instead.
  • uri has been renamed to url for the string type. If you're using format: "uri" as either an OpenForm input field or top-level string parameter in a custom function, please update to format: "url".

Other changes

  • The reverse-string app template has been removed.
  • The following new app templates are available in the CLI:
    • Hello World, a simplified workflow that sends a greeting
    • Scaffolded project, a solid foundation to start building upon
    • Blank project, a, well, blank project
  • Now the CLI will emit a warning when you make breaking changes to a function or metadata.
  • Terms of Service check is being removed from slack run. On workspaces that don't require admin approval to install apps, slack run will start a local development server without first having to have an admin accept the Terms of Service.
  • A new field interactive_blocks has been added to the following Slack functions:
    • SendDm
    • SendMessage
    • SendEphemeralMessage
  • Added support for external authentication.
  • Improved how slack run watches for filesystem changes.
  • Triggers can now take workflow definitions to improve typeahead.