# What changed in @slack/oauth

> 47 changes in @slack/oauth 3 to 4 from its official release notes, upgrade guides and advisories: 38 breaking, 6 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/@slack/oauth/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @slack/oauth 4

### Breaking changes

- On platform errors, callbacks no longer receive the platform response as their second argument; it is available as the first error argument's data property. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The CLIENT_EVENTS constant was removed; use simple strings for event names. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- This InstallProvider client option is no longer available; use clientOptions.fetch with a custom fetch implementation instead. (4.0.0) — [release notes](https://github.com/slackapi/node-slack-sdk/releases/tag/%40slack/oauth%404.0.0)
- This InstallProvider client option is no longer available; configure TLS via clientOptions.fetch or the NODE_EXTRA_CA_CERTS environment variable. (4.0.0) — [release notes](https://github.com/slackapi/node-slack-sdk/releases/tag/%40slack/oauth%404.0.0)
- The duplicate dm method family was removed; use the corresponding methods under im. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- error.name now reflects the specific class name instead of the generic 'Error'; update checks that branch on error.name. (4.0.0) — [release notes](https://github.com/slackapi/node-slack-sdk/releases/tag/%40slack/oauth%404.0.0)
- The incoming webhook option iconEmoji was renamed to icon_emoji. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The incoming webhook option iconUrl was renamed to icon_url. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The incoming webhook option linkNames was renamed to link_names. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The incoming webhook option unfurlLinks was renamed to unfurl_links. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The incoming webhook option unfurlMedia was renamed to unfurl_media. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The duplicate mpdm method family was removed; use the corresponding methods under mpim. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- Node.js 18 support is dropped; the minimum supported Node.js version is now 20. (4.0.0) — [release notes](https://github.com/slackapi/node-slack-sdk/releases/tag/%40slack/oauth%404.0.0)
- The retry policy dictionary is now exported as retryPolicies, replacing RETRY_POLICIES. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The RTM_EVENTS constant was removed; subscribe directly to event names as strings. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The RTM_MESSAGE_SUBTYPES constant was removed. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The top-level export name changed from RtmClient to RTMClient. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The dataStore constructor option and the datastore types and APIs were removed. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The ws_close event is no longer emitted; the underlying websocket state is considered private. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The ws_opened event is no longer emitted; the underlying websocket state is considered private. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The ws_opening event is no longer emitted; the underlying websocket state is considered private. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- serverPongTimeout replaces the maxPongInterval option. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The constructor option was renamed from slackAPIUrl to slackApiUrl for improved readability. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The socketFn constructor option was removed; use agent for proxy support or tls for custom TLS configuration. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- useRtmConnect now defaults to true; the notes recommend querying for additional data with a WebClient after connection. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- reconnect was removed; the guide substitutes disconnect, waiting for the disconnected event, and then calling start with the saved options. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- send was repurposed; in most cases use addOutgoingEvent(awaitReply, type, body), whose returned Promise reports message acknowledgement. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- updateMessage was removed from RTMClient; use WebClient.chat.update instead. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- Methods no longer accept positional arguments; each takes one object argument with method-specific required and optional properties. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The constructor option was renamed from slackAPIUrl to slackApiUrl for improved readability. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The transport constructor option was removed; use agent for proxy support or tls for custom TLS configuration. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)

### New APIs and options

- Applications need to install this additional package to pass WebClient or RTMClient outgoing requests through an HTTP proxy. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- clientPingTimeout replaces the wsPingInterval option. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- RTMClient now exposes more well-defined states and substates through events, including disconnected, connecting, connected, ready, disconnecting, and reconnecting. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- A new abstract base class lets you catch any error thrown by this package with an instanceof check. (4.0.0) — [release notes](https://github.com/slackapi/node-slack-sdk/releases/tag/%40slack/oauth%404.0.0)
- The constructor accepts agent for configuring outgoing requests through an HTTP proxy. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)
- The constructor accepts tls for custom TLS configuration, including requests to servers with self-signed certificates. (4.0.0) — [upgrade guide](https://docs.slack.dev/tools/node-slack-sdk/migration/legacy/migrating-to-v4)

### Behavior and default changes

- AuthorizationError now populates Error.cause with the underlying error when one is available; original still carries the same value. (4.0.0) — [release notes](https://github.com/slackapi/node-slack-sdk/releases/tag/%40slack/oauth%404.0.0)

## @slack/oauth 3

### Breaking changes

- Support for this Installation Store method was dropped; handle org-wide installations through storeInstallation and fetchInstallation instead. (3.0.0) — [upgrade guide](https://docs.slack.dev/tools/bolt-js/migration/migration-v3)
- HTTPReceiver replaces ExpressReceiver as the default receiver, enabling easier use with other web frameworks; use ExpressReceiver for custom routes. (3.0.0) — [upgrade guide](https://docs.slack.dev/tools/bolt-js/migration/migration-v3)
- Node 12.13.0 is the minimum required Node version. (3.0.0) — [upgrade guide](https://docs.slack.dev/tools/bolt-js/migration/migration-v3)
- npm 6.12.0 is the minimum required npm version. (3.0.0) — [upgrade guide](https://docs.slack.dev/tools/bolt-js/migration/migration-v3)
- TypeScript 4.1 is the minimum required TypeScript version. (3.0.0) — [upgrade guide](https://docs.slack.dev/tools/bolt-js/migration/migration-v3)
- Support for orgAuthorize was dropped; use authorize for both single-workspace and org-wide app installations. (3.0.0) — [upgrade guide](https://docs.slack.dev/tools/bolt-js/migration/migration-v3)
- Support for this Installation Store method was dropped; handle org-wide installations through storeInstallation and fetchInstallation instead. (3.0.0) — [upgrade guide](https://docs.slack.dev/tools/bolt-js/migration/migration-v3)

### Tooling

- Build support for Node 24 was added. (3.0.5) — [release notes](https://github.com/slackapi/node-slack-sdk/releases/tag/%40slack/oauth%403.0.5)

### Fixes and other changes

- Files are now written to the file installation store using path.join. (3.0.5) — [release notes](https://github.com/slackapi/node-slack-sdk/releases/tag/%40slack/oauth%403.0.5)
