NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1071 most downloaded on PyPI
The Bolt Framework for Python
Last release 2 months ago
15 Jul 2026
Release timing varies
gaps range from 8 days to 5 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
135 releases · first in 2020
One column per quarter.
Release Milestone: https://github.com/slackapi/bolt-python/milestone/48?closed=1
Release Milestone: https://github.com/slackapi/bolt-python/milestone/49?closed=1
Release Milestone: https://github.com/slackapi/bolt-python/milestone/42?closed=1
Since this release, the Django adapter has been improved to properly manage the thread-local database connections bound to the threads managed by Bolt
Since this release, the Django adapter has been improved to properly manage the thread-local database connections bound to the threads managed by Bolt framework. If you use the Django adapter, we highly recommend upgrading to this version or newer.
Please refer to #514 #512 #509 for more details.
milestone: https://github.com/slackapi/bolt-python/milestone/46?closed=1
Fix #480 #479 Adds updating views on submission for Japanese docs - Thanks @wongjas
milestone: https://github.com/slackapi/bolt-python/milestone/44?closed=1
milestone: https://github.com/slackapi/bolt-python/milestone/43?closed=1
Since this release, developers can customize listener_executor in apps. Also, to support the use case where Enterprise Grid Org admins install apps fr
Since this release, developers can customize listener_executor in apps. Also, to support the use case where Enterprise Grid Org admins install apps from their app management page, we've added a new option to disable state parameter validation in the OAuth flow. Please note that we still don't recommend disabling the state validation for usual OAuth apps.
listener_executor in App - Thanks @chrisbouchardoauth_settings.state_validation_enabled to customize the OAuth flow - Thanks @seratchmilestone: https://github.com/slackapi/bolt-python/milestone/38?closed=1
App / AsyncApp comments and API documents - Thanks @objectfoxmilestone: https://github.com/slackapi/bolt-python/milestone/37?closed=1
Refer to the v1.8.0 release note
Refer to the v1.8.0 release note
This version includes the support for the apps enabling the newly released token rotation for better security. Refer to the API document for the gener
This version includes the support for the apps enabling the newly released token rotation for better security. Refer to the API document for the general information about the feature.
If you use any of the built-in InstallationStore, there is nothing else to change on your application code side. If you use the relational database tables along with a built-in InstallationStore, refer to the latest table schema here.
If you use your own custom authorize, not the built-in InstallationStoreAuthorize, the authorize function needs to be updated to run the token rotation. Refer to the InstallationStoreAuthorize's code to learn what to do for it.
If you operate Django apps based on the example app in this repository and would like to enable token rotation for the apps, check this commit to learn the required changes for it.
SQLAlchemyInstallationStore usersIf your app uses the built-in SQLAlchemyInstallationStore for managing Slack app installations, adding the following database columns is required for this version upgrade. Refer to the code to check the complete ones.
Also, since this version, all the table columns for string data have their max length for better compatibility with MySQL. We recommend setting the same ones for your models.
Column("bot_refresh_token", String(200)),Column("bot_token_expires_at", DateTime),Column("user_refresh_token", String(200)),Column("user_token_expires_at", DateTime),Column("bot_refresh_token", String(200)),Column("bot_token_expires_at", DateTime),Nothing published for this version
Nothing published for this version
milestone: https://github.com/slackapi/bolt-python/milestone/36?closed=1
Since this version, the warning message for unhandled requests is even more helpful!
Since this version, the warning message for unhandled requests is even more helpful!
Let's say you've configured the "message" event subscription in the Slack App configuration page, and the Slack server-side started sending message events to your app. However, your app does not have the corresponding event listener yet. In this case, Bolt suggests the missing listener with a working code snippet.
WARNING:slack_bolt.App:Unhandled request ({'type': 'event_callback', 'event': {'type': 'message'}})
---
[Suggestion] You can handle this type of event with the following listener function:
@app.event("message")
def handle_message_events(body, logger):
logger.info(body)
The new suggestion logging should be helpful for the developers who are new to Bolt and the Slack platform.
Developers can turn any of the built-in middleware off if they would like to do so for some reason.
app = App(
token=os.environ["SLACK_BOT_TOKEN"],
signing_secret=os.environ["SLACK_SIGNING_SECRET"],
# Verify request signature
request_verification_enabled = False, # default: True
# Skip processing the events generated by this app's bot user itself
ignoring_self_events_enabled = False, # default: True
# Respond to ssl_check requests
ssl_check_enabled = False, # default: True
# Respond to url_verification requests in the Events API configuration steps
url_verification_enabled = False, # default: True
)
Please make sure if it's safe enough when you turn a built-in middleware off. We strongly recommend using RequestVerification for better security. If you have a proxy that verifies request signature in front of the Bolt app, it's totally fine to disable RequestVerification to avoid duplication of work. Don't turn it off just for easiness of development.
This release upgrades the underlying slack-sdk package from 3.4 to 3.5 (or higher). Refer to the package's release note for more details: https://gith
This release upgrades the underlying slack-sdk package from 3.4 to 3.5 (or higher). Refer to the package's release note for more details: https://github.com/slackapi/python-slack-sdk/releases/tag/v3.5.0
Since this version, the out-of-the-box support for the following events is available:
To use this feature, all you need to do are:
installation_store of the OAuth settings (see the document)enable_token_revocation_listeners() method of the App / AsyncApp instanceapp = App(
# Enabling installation_store required
)
app.enable_token_revocation_listeners()
This is equivalent to the following code:
app = App() # installation_store required
app.event("tokens_revoked")(app.default_tokens_revoked_event_listener)
app.event("app_uninstalled")(app.default_app_uninstalled_event_listener)
These event listeners properly utilize the data deletion methods in the InstallationStore you use. If you have your own InstallationStore implementation, please implement deletion methods in the classes. Refer to https://github.com/slackapi/python-slack-sdk/pull/995 for more details.
Handling unmatched request patterns had not been customizable in the past versions. The pull request #290 introduced a new option to enable using @app.error handlers for unmatched requests. The default is set to False, which is fully backward compatible. If the option is True, Bolt raises a BoltUnhandledRequestError with sufficient information. @app.error handler can customize the behavior for the patterns (e.g., having custom logging, changing HTTP status from 404 to something else).
app = App(
token=os.environ["SLACK_BOT_TOKEN"],
signing_secret=os.environ["SLACK_SIGNING_SECRET"],
# enable @app.error handler to catch the patterns
raise_error_for_unhandled_request=True,
)
@app.error
def handle_errors(error):
if isinstance(error, BoltUnhandledRequestError):
# You may want to have debug/info logging here
return BoltResponse(status=200, body="")
else:
# other error patterns
return BoltResponse(status=500, body="Something wrong")
respond to app.view ListenersWhen an input block in your modal has response_url_enabled: true, view_submission payloads can have response_urls. Since this version, you can use respond utility to use the primary element in the array.
@app.view("view-id")
def check(ack, respond):
# if there is an input block with response_url_enabled: true
respond("This message will be posted in the selected channel")
ack()
see also:
ListenerCompletionHandler is a new addition, which enables developers to customize callbacks for listener runner completion. The callbacks can be useful, especially when you use a library/framework that utilizes thread-local variables (e.g., Django ORM, thread-local sessions in SQLAlchemy) along with Bolt for Python.
If you're interested in how it works, check the updated Django adapter implementation for details: https://github.com/slackapi/bolt-python/blob/v1.5.0/slack_bolt/adapter/django/handler.py
from django.db import connections
class DjangoListenerCompletionHandler(ListenerCompletionHandler):
def handle(self, request: BoltRequest, response: Optional[BoltResponse]) -> None:
# closes all the thread-local connections in the current thread
connections.close_all()
milestone: https://github.com/slackapi/bolt-python/milestone/32?closed=1
milestone: https://github.com/slackapi/bolt-python/milestone/31?closed=1
Upgrade the minimum version of underlying slack_sdk to v3.4.1 - Thanks @seratch
slack_sdk to v3.4.1 - Thanks @seratchmilestone: https://github.com/slackapi/bolt-python/milestone/29?closed=1
This release upgrades the underlying slack-sdk package from 3.3 to 3.4 (or higher). Refer to the package's release note for more details: https://gith
This release upgrades the underlying slack-sdk package from 3.3 to 3.4 (or higher). Refer to the package's release note for more details: https://github.com/slackapi/python-slack-sdk/releases/tag/v3.4.0
This patch version upgrades the minimum slack-sdk version from 3.3.1 to 3.3.2 for proxy issue in the built-in SocketModeClient. Also, Socket Mode adap
This patch version upgrades the minimum slack-sdk version from 3.3.1 to 3.3.2 for proxy issue in the built-in SocketModeClient. Also, Socket Mode adapter supports newly added proxy_headers argument in its constructor. Refer to https://github.com/slackapi/python-slack-sdk/releases/tag/v3.3.2 for the underlying changes.
milestone: https://github.com/slackapi/bolt-python/milestone/26?closed=1
This release upgrades the underlying slack-sdk package from 3.2 to 3.3. Refer to the package's release note for more details: https://github.com/slack
This release upgrades the underlying slack-sdk package from 3.2 to 3.3. Refer to the package's release note for more details: https://github.com/slackapi/python-slack-sdk/releases/tag/v3.3.0
slack-sdk from 3.2 to 3.3 - Thanks @seratchNothing published for this version
milestone: https://github.com/slackapi/bolt-python/milestone/24?closed=1
milestone: https://github.com/slackapi/bolt-python/milestone/20?closed=1
milestone: https://github.com/slackapi/bolt-python/milestone/23?closed=1
This version includes support for Socket Mode, which enables developers to receive interactivy payalods and events through WebSocket connections.
This version includes support for Socket Mode, which enables developers to receive interactivy payalods and events through WebSocket connections.
https://api.slack.com/socket-mode
For WebSocket connection handling, there are four implementations including major 3rd party open-source libraries.
Here is a minimal working example with the built-in WebSocket client. You can switch to other implementation by changing the imports and adding the extra dependencies (websocket_client, aiohttp, websockets).
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
# Install the Slack app and get xoxb- token in advance
app = App(token=os.environ["SLACK_BOT_TOKEN"])
if __name__ == "__main__":
# export SLACK_APP_TOKEN=xapp-***
# export SLACK_BOT_TOKEN=xoxb-***
SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
If you want to use asyncio for everything, you can use aiohttp or websockets (along with aiohttp for AsyncWebClient). AsyncSocketModeHandler requires all of your middleware/listeners to be compatible with the async/await programming style.
from slack_bolt.app.async_app import AsyncApp
# The default is the aiohttp based implementation
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler
app = AsyncApp(token=os.environ["SLACK_BOT_TOKEN"])
async def main():
handler = AsyncSocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])
await handler.start_async()
if __name__ == "__main__":
import asyncio
asyncio.run(main())
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Upgrade slack_sdk to v3.1.1 - Thanks @seratch
slack_sdk to v3.1.1 - Thanks @seratchmilestone: https://github.com/slackapi/bolt-python/milestone/18?closed=1
This patch version is a hotfix release for v1.1.2. If you use installation_store_bot_only option, please upgrade to this version.
This patch version is a hotfix release for v1.1.2. If you use installation_store_bot_only option, please upgrade to this version.
Now you can use InstallationStore's v1.0 compatible mode in authorize.
Now you can use InstallationStore's v1.0 compatible mode in authorize.
Setting App/AsyncApp's installation_store_bot_only constructor argument as True works in the same manner as v1.0 authorize. If you manually initialize InstallationStoreAuthorize, bot_only flag in it is the one you can configure. See the pull request #171 for more details.
installation_store = MyInstallationStore()
oauth_state_store = MyOAuthStateStore()
app = App(
# If you want to keep using only `#find_bot` for token retrieval,
# you can configure installation_store_bot_only as True
installation_store_bot_only=True,
oauth_settings=OAuthSettings(
installation_store=installation_store,
state_store=oauth_state_store,
),
)
NOTE: If you use installation_store_bot_only flag in OAuthFlow or OAuthSettings, please upgrade to v1.1.3 or higher.
milestone: https://github.com/slackapi/bolt-python/milestone/15?closed=1
This version includes the changes related to Org-Wide App feature, which is for Enterprise Grid organizations.
This version includes the changes related to Org-Wide App feature, which is for Enterprise Grid organizations.
https://api.slack.com/enterprise/apps
Refer to the Python Slack SDK's release note for details: https://github.com/slackapi/python-slack-sdk/releases/tag/v3.1.0
As long as the changes on the low-level SDK side does not affect your apps, most of existing Bolt apps do not require any updates in code. If you are an existing user of either of AmazonS3InstallationStore or FileInstallationStore, please upgrade to v1.1.3 or higher and set installation_store_bot_only flag as True in App/AsyncApp constructor. See v1.1.2 release note for details.
Nothing published for this version
milestone: https://github.com/slackapi/bolt-python/milestone/13?closed=1
Here is the first stable version of Bolt for Python 🎉
Here is the first stable version of Bolt for Python 🎉
This framework has been carefully designed to be easy and intuitive for Python developers while aligning with the existing Bolt frameworks. If you’re a Pythonista, we think you’ll like it!
You can start with pip install slack_bolt and the Getting Started Guide. To learn more, check the following resources:
This is the latest release candidate version of slack_bolt v1.0.0.
This is the latest release candidate version of slack_bolt v1.0.0.
We will be releasing v1.0.0 within a few days. Thank you very much for all the contributions and feedback from the community!
This is the first release candidate version of slack_bolt v1.0.0.
This is the first release candidate version of slack_bolt v1.0.0.
We will be releasing v1.0.0 within a few days. Thank you very much for all the contributions and feedback from the community!
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
https://github.com/slackapi/bolt-python/milestone/7?closed=1
https://github.com/slackapi/bolt-python/milestone/7?closed=1
https://github.com/slackapi/bolt-python/milestone/6?closed=1
https://github.com/slackapi/bolt-python/milestone/6?closed=1
v0.9.0b0 is the first beta release of Bolt for Python. All the latest Slack Platform features are supported 🎉
v0.9.0b0 is the first beta release of Bolt for Python. All the latest Slack Platform features are supported 🎉
https://github.com/slackapi/bolt-python/milestone/3?closed=1
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →