NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2954 most downloaded on npm
Logging utility used by Node Slack SDK
Last release 2 months ago
14 Jul 2026
Release timing varies
gaps range from 2 weeks to 2.6 years
Nearly every release is documented
notes for 8 of 8 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
9 releases · first in 2019
fc98c8c: Drop Node.js 18 support. The minimum supported Node.js version is now 20.
This meta-release marks the beginning of a new organizational structure for the code related to each of Slack's official Node.js packages.
The following packages have changes listed in their release notes:
See the migration guide for information about how to update your app from a previous version.
@slack/events-api@v5.0.0: Moved from the original repository.@slack/interactive-messages@v5.0.0: Moved from the original repository.One column per quarter.
IncomingWebhook.send()agent option has been simplifiedErrorCode constants have changed.See the migration guide for details.
WebClient.paginate() method: call cursor-paginated Web API methods using an async iterator 🎉WebClient.apiCall() method.scopes, acceptedScopes, and retryAfter properties of a Web API call result have moved into the response_metadata.agent option has been simplifiedErrorCode constants have changed.Logger objects without a logger function.See the migration guide for details.
RTMClient.sendMessage() method.raw_message event in favor of the slack_event event.agent option has been simplifiedErrorCode constants have changed.Logger objects without a logger function.See the migration guide for details.
This release is meant to help users migrate to the smaller, lighter, independent packages. If you'd just like to test the compatibility of your app with the latest breaking changes, you can simply update the from a previous version of this package to this version. If everything works, you're ready to change your code to depend on the independent packages instead.
For each of the follow classes, these packages should be used directly.
| Class name | Command to install |
|---|---|
WebClient |
npm install @slack/web-api |
RTMClient |
npm install @slack/rtm-api |
IncomingWebhook |
npm install @slack/webhook |
See the migration guide for more details.
Nothing published for this version
b8d922f: build: add support for node 24
"name" or "version" were not defined in the package.json file (#478) - thanks @wilhelmklopp @clavin @aoberoiIncomingWebhook.send() to parse the response as text instead of JSON (#477) - thanks @aoberoiIncomingWebhook to be initialized without defaults (#479) - thanks @aoberoiWebClient to be initialized without a token in TypeScript (#482) - thanks @aoberoiWebClient method aliases and apiCall() (#484) - thanks @clavinas_user in ChatPostMessageArguments (#475) - thanks @harveyrOAuthAccessArguments and OAuthTokenArguments types (#481) - thanks @aoberoiSee the @slack/web-api v8 changelog for the full list of breaking changes that affect clientOptions.
fc98c8c: Drop Node.js 18 support. The minimum supported Node.js version is now 20.
fc98c8c: Error classes now extend a new SlackOAuthError abstract base class (which extends Error), bringing @slack/oauth in line with the error handling in @slack/web-api and @slack/webhook. You can catch any error thrown by this package with if (error instanceof SlackOAuthError), in addition to the existing per-class instanceof checks (AuthorizationError, InstallerInitializationError, etc.).
AuthorizationError now populates the standard Error.cause property with the underlying error when one is available (for example, the failure that caused authorize() to reject). The existing original property is still present and carries the same value.
import { AuthorizationError } from "@slack/oauth";
try {
await installer.authorize({ teamId, enterpriseId });
} catch (error) {
if (error instanceof AuthorizationError) {
console.log(error.cause); // the underlying error
console.log(error.original); // same value — kept for backward compat
}
}
The error.code property and ErrorCode enum values are unchanged, so existing error.code checks continue to work. The CodedError interface is retained (it is part of the public CallbackOptions#failure callback signature), but for new code we recommend instanceof checks against SlackOAuthError or a specific subclass.
Note: error.name now reflects the specific class name (e.g. 'AuthorizationError') instead of the generic 'Error'. If you branch on error.name, update those checks accordingly.
fc98c8c: Updated the internal @slack/web-api dependency from ^7 to ^8. If you pass clientOptions to InstallProvider, the following options are no longer available:
clientOptions.agent — Use clientOptions.fetch with a custom fetch implementation instead.clientOptions.tls — Configure TLS via clientOptions.fetch or the NODE_EXTRA_CA_CERTS environment variable.import { InstallProvider } from "@slack/oauth";
import { fetch, Agent } from "undici";
const installer = new InstallProvider({
clientId: process.env.SLACK_CLIENT_ID,
clientSecret: process.env.SLACK_CLIENT_SECRET,
stateSecret: "my-secret",
clientOptions: {
fetch: (url, init) =>
fetch(url, {
...init,
dispatcher: new Agent({ connect: { ca: myCA } }),
}),
},
});
See the @slack/web-api v8 changelog for the full list of breaking changes that affect clientOptions.
e8fbfd5: fix: remove default "--app deployed" global flag from commands
Commands running for a specific app must now provide the "app" argument:
await SlackCLI.app.delete({
appPath: "my-app",
team: "T0123456789",
+ app: "deployed",
});
The options "local" or "deployed" or app ID all remain available to use.
Breaking Changes If you are upgrading from a previous version, follow our comprehensive Migration Guide to learn how to transport your app into the new, shiny, future!
apiCall(method, options) public API for making generic Web API calls.d2b7a89: refactor(cli-test)!: rename env add/remove to env set/unset
d2b7a89: refactor(cli-test)!: rename env add/remove to env set/unset
The Slack CLI v4.0.0 release changes the env commands to prefer set and unset aliases and the test tracers of this package were changed to match:
- SLACK_TRACE_ENV_ADD_SUCCESS
- SLACK_TRACE_ENV_REMOVE_SUCCESS
+ SLACK_TRACE_ENV_SET_SUCCESS
+ SLACK_TRACE_ENV_UNSET_SUCCESS
5a9bb9a: refactor(cli-test)!: move 'create' to 'project create'
Before the Slack CLI v4.0.0 release, the create command became a project subcommand while remaining aliased the same. This project now prefers:
const createOutput = await SlackCLI.project.create({
template: "slack-samples/bolt-js-starter-template",
appPath,
verbose: true,
});
But continues to run the slack create command for confidence in getting started guides.
This major release introduces two major changes:
@slack/web-api package has been updated to the latest major version, v7. While web-api is not directly exposed in this oauth library so it should not affect consuming applications, it is worth mentioning that the client methods web-api exposes has newer, stricter, more accurate TypeScript types. This should not affect developers, but is worth calling out.No other changes were released!
This package is now deprecated. Please consider migration over to Bolt for JavaScript. See our migration guide for more details.
fc98c8c: Drop Node.js 18 support. The minimum supported Node.js version is now 20.
fc98c8c: Redesigned error handling to use proper Error subclasses instead of plain objects with a code property.
Migration: Replace if (error.code === ErrorCode.WebsocketError) with if (error instanceof SMWebsocketError).
New error classes (all extend a common SlackSocketModeError abstract base class, which extends Error):
SMPlatformError — Slack platform returned an error eventSMWebsocketError — WebSocket connection failure (original error in cause)SMNoReplyReceivedError — Timed out waiting for a reply to an acknowledgementSMSendWhileDisconnectedError — Attempted to send while not connectedSMSendWhileNotReadyError — Attempted to send before the connection was readyCatch any socket-mode error with if (error instanceof SlackSocketModeError).
Removed factory functions (use new with the corresponding class instead):
websocketErrorWithOriginal() → new SMWebsocketError(original)platformErrorFromEvent() → new SMPlatformError(event)noReplyReceivedError() → new SMNoReplyReceivedError()sendWhileDisconnectedError() → new SMSendWhileDisconnectedError()sendWhileNotReadyError() → new SMSendWhileNotReadyError()The CodedError interface is deprecated — use instanceof checks with specific error classes instead. The error.code property still exists for backward-compatible checks, but error.name values changed from generic 'Error' to descriptive class names (e.g., 'SMWebsocketError').
fc98c8c: Replaced the ws WebSocket library with a spec-compliant WebSocket implementation backed by undici. undici@^7 is now a peer dependency that must be installed alongside @slack/socket-mode:
npm install @slack/socket-mode undici@^7Removed options:
clientOptions.agent (the httpAgent passed to the underlying web-api client). Use the new top-level dispatcher option instead. The dispatcher handles both the WebSocket connection and HTTP API calls (unless clientOptions.fetch is also provided, in which case dispatcher only applies to WebSocket).New dispatcher option:
import { SocketModeClient } from "@slack/socket-mode";
import { ProxyAgent } from "undici";
const client = new SocketModeClient({
appToken: process.env.SLACK_APP_TOKEN,
dispatcher: new ProxyAgent("http://proxy:3128"),
});For simple proxy use cases, prefer the Node.js built-in proxy support: call http.setGlobalProxyFromEnv() at startup or set NODE_USE_ENV_PROXY=1 (Node.js 24+) with HTTP_PROXY/HTTPS_PROXY environment variables.
The dispatcher option accepts any object implementing the SocketModeDispatcher interface (structurally compatible with undici's Agent, ProxyAgent, Client, etc.).
This package now depends on @slack/web-api@^8 — any clientOptions you pass are subject to web-api v8 breaking changes (e.g., the agent and tls options are no longer available; use clientOptions.fetch instead).
fc98c8c: Drop Node.js 18 support. The minimum supported Node.js version is now 20.
New major version! We have dropped the ancient, finite-state-machine-based implementation and ported the rock solid python-slack-sdk socket-mode implementation to node.
We also removed a couple of events and properties that are no longer relevant in the new implementation. Check out our socket mode 1.x -> 2.0 migration guide to get all the details and ease your upgrading path.
476e6a9e socket-mode: Rewrite to Python(ish) Implementation (#1781)
3ebb6cef socket-mode: do not throw exception when calling disconnect() and already disconnected; do not raise slack_event in case of type:disconnect messages (#1762)
6ab1e68b socket-mode: add more debug logging to low level websocket event handlers (#1757)
46b500db socket-mode: fix bug when apps.connections.open returns an error and won't retry (#1735)
a6f2b283 socket-mode: prep for major release, start now completes only once Connected state is emitted (#1732)
fetchOrgInstallation and storeOrgInstallation methods from the InstallationStore. See our migration guide for more details on how to support org wide app installations. (#1133, #1148) - thanks @stevengillThis package is now deprecated. Please consider migration over to Bolt for JavaScript. See our migration guide for more details.
This releases refactors a large portion of the adapter, adds support for request signing, and fixes a lot of bugs:
- The export name is changed from
createSlackEventAdaptertocreateEventAdapter(#37)- Adds request signing support, discontinuing support for verification tokens. This change requires developers to now pass in a Signing Secret in to the adapter rather than a verification token. (#57)
- Decouples the adapter from
express, which included adding parsing within the adapter, meaning developers no longer need to use middleware to parse the request (using something like thebody-parserpackage)- Documentation improvements (#41, #42, #44, #45, #46)
Original: https://github.com/slackapi/node-slack-events-api/releases/tag/v2.0.0
This release removes requirements for the SLACK_CLI_XOXB and SLACK_CLI_XAPP environment variables from the start hook :axe:
This release removes requirements for the SLACK_CLI_XOXB and SLACK_CLI_XAPP environment variables from the start hook :axe:
This check was previously in place to ensure startup succeeds for apps using Socket Mode, but it's a bit too strict for apps connecting with HTTP instead - these apps require a signing secret instead of an app token - so it was removed!
Full Changelog: https://github.com/slackapi/node-slack-sdk/compare/@slack/cli-hooks@1.1.0...@slack/cli-hooks@1.1.1
Reverts getLevel() on logger interface because that's a semver major change. Includes changes from #884 and #885
Fixes matching with
actionIdandblockId(#90)
Original: https://github.com/slackapi/node-slack-interactive-messages/releases/tag/v1.1.1
A new doctor hook was added to surface certain runtime dependencies depended upon by your project! Stay tuned for an upcoming CLI release to find out
A new doctor hook was added to surface certain runtime dependencies depended upon by your project! Stay tuned for an upcoming CLI release to find out how it'll be used. Hint: It's related to the doctor command 😉
https://github.com/slackapi/node-slack-sdk/compare/@slack/socket-mode@1.3.4...@slack/cli-hooks@1.1.0
See the full list of issues/pull requests of this release here.
enterprise field not being populated in installation object (https://github.com/slackapi/node-slack-sdk/pull/1020) - Thanks @stevengillgetLevel() method to the Logger interface, and the ConsoleLogger implementation #792 (thanks @seratch)
- Adds Block Kit support (#85)
- Improves express all interactions by using body parser and removing verification check (#79 - thanks @ErwinLengkeek)
Original: https://github.com/slackapi/node-slack-interactive-messages/releases/tag/v1.1.0
A new package has been introduced to enable inter-process communication between the Slack CLI and applications built with Bolt for JavaScript. That's
A new package has been introduced to enable inter-process communication between the Slack CLI and applications built with Bolt for JavaScript. That's this @slack/cli-hooks package!
More information on this package can be found on the package's README.md and releases are currently available on NPM.
f3dff4d2d278d5a38de2c526b3a372017f4f95ca Introduce a @slack/cli-hooks package that implements Slack CLI hooks in https://github.com/slackapi/node-slack-sdk/pull/1714 - Thanks @zimeg @misscoded @WilliamBergamin @filmaj
@slack/socket-mode package 🎉 ! This package is designed to support Socket Mode, which allows your app to receive events from Slack over a WebSocket connection. To learn more about Socket Mode, checkout the release blog post (#1096) - thanks @stevengillThis is the first release of our new @slack/oauth package! Slack apps that are installed in multiple workspaces, like in the App Directory or in an Enterprise Grid, will need to implement OAuth and store information about each of those installations.
Make sure to checkout the docs and our OAuth Express example app to learn more!
Issue: #950 PR: #963
Thanks @stevengill, @aoberoi, @seratch and @shaydewael!
This release adds support for request signing, decouples the adapter from express, and fixes bugs:
- Adds support for the more secure request signing over legacy verification tokens. This change requires developers to now pass in a Signing Secret to the adapter rather than a verification token. (#57)
- Refactored the adapter to decouple
express, which included adding parsing within the adapter, meaning developers no longer need to use middleware to parse the request (such as thebody-parserpackage). (#31)- A bug preventing message actions from working properly was fixed. (#56 - thanks @mcolyer 🎉)
Original: https://github.com/slackapi/node-slack-interactive-messages/releases/tag/v1.0.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →