# Choosing Bolt or the Slack SDKs

*Slack Developer Study Guide · Tools · Last updated October 21, 2026 · https://www.certifyforce.com/study-guide/slack-developer/tools/choosing-bolt-or-the-slack-sdks*

What the Bolt frameworks for Java, JavaScript and Python give an app out of the box, when a plain Slack SDK client such as the Python WebClient is the lighter choice, and why every Bolt listener acknowledges before doing slow work.

- Certification: Salesforce Slack Developer
- Exam section: Tools
- Study guide: https://www.certifyforce.com/study-guide/slack-developer

**Official exam objective:**

> Recommend when to use the Bolt development framework to build Slack apps.

## What the exam expects

- List what Bolt provides out of the box (web server, OAuth installation handling, simplified API interfaces, token validation, retry and rate-limit logic) and what it does not (hosting, Marketplace shortcuts, rate-limit exemptions).
- Recommend Bolt for Java, JavaScript or Python so a team can stay in its own language.
- Recommend a plain SDK client, such as the Python Slack SDK's `WebClient`, for a job that only calls Web API methods and never receives requests from Slack.
- Fix a Bolt listener that misses the 3-second window by calling `ack()` first.

Key terms: **Bolt** (Slack's "batteries-included" app framework); **SDK** (in-language wrappers for Slack APIs without the framework); **listener** (a Bolt method such as `app.command()` that receives one request type); **`ack()`** (the acknowledgement Bolt sends back to Slack); **Deno Slack SDK** (for Slack-hosted workflow apps in TypeScript).

## Key facts

| Fact | Detail | Source |
|---|---|---|
| Bolt out of the box | Web server, OAuth installation handling, simplified API interfaces, automatic token validation, retry and rate-limiting logic | [Tools](https://docs.slack.dev/tools/) |
| Bolt languages | Java, JavaScript and Python | [Develop Efficient Apps with Bolt](https://trailhead.salesforce.com/content/learn/modules/choose-your-slack-development-path/build-slack-apps-with-bolt) |
| Slack SDKs | Deno, Java, Node and Python | [Tools](https://docs.slack.dev/tools/) |
| Python Web API package | `slack_sdk.web`: "over 200 methods" | [Python Slack SDK](https://docs.slack.dev/tools/python-slack-sdk/) |
| Bolt for Java | Runs in any JVM language; listeners include `app.command`, `app.blockAction`, `app.viewSubmission`, `app.function` | [Java Slack SDK](https://docs.slack.dev/tools/java-slack-sdk/), [Bolt Basics](https://docs.slack.dev/tools/java-slack-sdk/guides/bolt-basics) |
| What must be acked | Actions, commands and options requests | [Acknowledging requests](https://docs.slack.dev/tools/bolt-js/concepts/acknowledge) |
| Ack window | 3 seconds; call `ack()` right away | [Acknowledging requests](https://docs.slack.dev/tools/bolt-js/concepts/acknowledge) |
| Responding to a command | `say()` or `respond()` (a `response_url` utility) | [Listening & responding to commands](https://docs.slack.dev/tools/bolt-js/concepts/commands) |
| Slack-hosted option | Deno Slack SDK workflows in TypeScript; not eligible for Marketplace listing | [Deno Slack SDK](https://docs.slack.dev/tools/deno-slack-sdk/) |

## Check yourself

- Which four things does Bolt give an app out of the box?
- When is the Python Slack SDK's `WebClient` a better choice than a Bolt app?
- Why should `ack()` be the first statement in a slow command listener?
- Why doesn't a Java team need a separate Node.js service to use Bolt?

## Sources

- [Tools](https://docs.slack.dev/tools/)
- [Develop Efficient Apps with Bolt Framework for Slack](https://trailhead.salesforce.com/content/learn/modules/choose-your-slack-development-path/build-slack-apps-with-bolt)
- [Unlocking Advanced Control with Software Development Kits](https://trailhead.salesforce.com/content/learn/modules/choose-your-slack-development-path/use-software-development-kits-for-more-control)
- [Set Up Your Slack Environment for Development](https://trailhead.salesforce.com/content/learn/projects/develop-a-slack-app-with-bolt/set-up-your-slack-environment)
- [Python Slack SDK](https://docs.slack.dev/tools/python-slack-sdk/)
- [Python Slack SDK: Web client](https://docs.slack.dev/tools/python-slack-sdk/web)
- [Java Slack SDK](https://docs.slack.dev/tools/java-slack-sdk/)
- [Bolt for Java: Bolt Basics](https://docs.slack.dev/tools/java-slack-sdk/guides/bolt-basics)
- [Bolt for JavaScript: Acknowledging requests](https://docs.slack.dev/tools/bolt-js/concepts/acknowledge)
- [Bolt for JavaScript: Listening & responding to commands](https://docs.slack.dev/tools/bolt-js/concepts/commands)
- [Deno Slack SDK](https://docs.slack.dev/tools/deno-slack-sdk/)
- [Bolt for Python](https://docs.slack.dev/tools/bolt-python/)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 4 linked practice questions, and unlimited timed mock exams are included with the Slack Developer pack (USD $19): https://www.certifyforce.com/practice-exams
