
This is a generic Bolt for JavaScript (TypeScript) template app used to build Slack apps with Next.js
Before getting started, make sure you have a development workspace where you have permissions to install apps. You can use a developer sandbox or create a workspace
manifest.json into the text box that says "Paste your manifest code here" (JSON tab) and click NextSLACK_BOT_TOKENSLACK_SIGNING_SECRETNGROK_AUTH_TOKEN to your .env file
slack app linkupdate the manifest source to remote select yesLocal when prompted.slack/config.json and update your manifest source to local
slack run. If prompted, select the workspace you'd like to grant access toyes if asked "Update app settings with changes to the local manifest?"hello. Your app should reply with world!SLACK_BOT_TOKENSLACK_SIGNING_SECRETrequest_url and url fields use https://<your-app-domain>/api/slack/eventshello and your app will respond with world!manifest.jsonmanifest.json defines your Slack app's configuration. With a manifest, you can create or update an app with a pre-defined configuration
src/bolt/app.tsThis is the Bolt app entry. It initializes @vercel/slack-bolt's VercelReceiver and registers listeners
src/bolt/listenersEvery incoming request is routed to a "listener". Inside this directory, we group each listener by Slack Platform feature, e.g. messages for message events
src/app/api/slack/events/route.tsThis file defines your Next.js Route Handler that receives Slack events. Its pathname matches the URLs defined in your manifest.json. Next.js uses file-based routing for API handlers. Learn more in the Next.js docs: https://nextjs.org/docs/app/building-your-application/routing/route-handlers
pnpm dev:tunnel: A helper script to automatically start your Slack app with ngrok tunnelingexpress being externalized: @slack/bolt ships an Express receiver. Turbopack may analyze its static import even if you don't use it. Keeping express as a dependency or aliasing it to a stub resolves this during development.

