All Slack apps have an app manifest, which serves as the blueprint for the app. There are two places to interact with these configuration settings: the manifest file (either as a JSON or YAML) and your app’s configuration page. Using both of these in concert gives you the ability to not only effectively configure your app, but also to play around with settings and features to create the best version of your app.
Although you can use the UI entirely without updating the manifest file, I prefer to do a combination of both. Starting with the UI to create my manifest file, I set up my app’s permissions, appearance, and behavior. The initial setup provides two options for app configuration:
The first option is where you can paste an existing manifest file. These can be ones I’ve created myself or that I get from other sources, such as pre-made templates or other apps with similar configuration needs as my own. Think of this as a configuration document like a package.json, pyproject.toml, or a gradle file.
You can find some examples and templates in the samples section of our documentation. A great example in working code to reference is this one for a Python Bolt AI chatbot.
The second option is where you can use the UI to set up your app. The changes you make in the configuration UI are reflected in the manifest file and vice versa.
All of the fields in the manifest file (whether JSON or YAML) are related to the configuration options in the sidebar of the App Settings.
As you get started, there are several considerations for how you choose to configure your app.
First, you’ll need to decide if you want the file to live with your code as well as in the app’s configuration page. Since the UI does not provide version management, keeping track of your changes is on you. And on me, to be honest. I’ve lost enough code to a lack of good version control that I know to use it when I can.
Because autosave is my bestie, I like using version control in my IDE. Once I get the basic file from the UI, I create a YAML file in my code and I draft out the manifest there.
This practice of version control also gives me more flexibility to explore how I want my app to be configured. I often change my settings as I’m getting my app to work the way I want. The backup is my backup so to speak as I explore the inevitable rabbit holes that come up during the app development process.
There is a second and more high-level consideration that is really more a preference on how I work. It might be your preference, it might not be. You do you. But for me, keeping the file with my code enables me to keep a big picture view of my app as I code. Keeping the view where I can see it helps me create DRYer code so I don’t repeat myself or get lost in the implementation details.
Throughout this process, every time I make a change to the manifest, I go to the App Settings UI and upload the working draft. If you forgot to lint via the Slack CLI (which happens to the best of us, I’d know), the UI has helpful functionality for error checking. It will often give excellent information on what needs to happen to correctly configure your app.
The App Settings UI also helps me see what features are connected to the ones I want so I can be sure to create or configure them.
For example, if I want to use incoming webhooks, I need to configure a bot user. If my app doesn’t have a bot user, turning on incoming webhooks will add one for me. But now that I have a bot user, I also need to add event subscriptions and other settings so that it can do its job like I need it to.
Instead of having to go to the documentation to figure out how to correctly configure this bot user, the UI gives me the information I need where I need it. This makes my day a lot better and who doesn’t like a helpful UI?
Once you have your app manifest set up, saved, and without errors, you can deploy your app to your environment. The app manifest file remains with your app’s configuration in the Slack ecosystem and will be available as you update your app or need to make other changes in the future. If you’ve chosen to have a copy of your manifest live elsewhere, remember that you will need to manually copy/paste the updated changes into that file.
One of the best ways to learn is to explore and play, and this is what the flexibility of the app settings manifest gives me. When I go through my app creation process, I know that I’m not doing this on my own.
So I’ll also encourage you to experiment with the settings so you know how to set up your app effectively. The flexibility of these configuration settings means you can play around with them to find what works best. I think this is fun, and I hope you do too.
For more information on the manifest, I recommend starting with the documentation on the manifest fields here.