App manifests BETA

    An app’s manifest is where you can configure its name and scopes, declare the functions your app will use, and more.

    Configuring an app

    Locate the file named manifest.js within your application. This will likely be in your project’s root directory or a manifest folder.

    Inside the manifest file, you will find an module.exports = Manifest({}) block that defines the app’s configuration. For the Hello World application in the Bolt for JavaScript Starter Template, it will look something like this:

    // manifest/manifest.js
    const { Manifest } = require('@slack/bolt');
    const { SampleWorkflow } = require('./workflow/sample-workflow');
     * The app manifest contains the app's configuration. This
     * file defines attributes like app name and description.
    module.exports = Manifest({
      runOnSlack: false,
      name: 'Bolt Template App TEST',
      displayName: 'Bolt Template App TEST',
      description: 'A starter app template built with Bolt JS',
      botScopes: ['channels:history', 'chat:write', 'commands', 'chat:write.public'],
      eventSubscriptions: { bot_events: ['app_home_opened', 'message.channels'] },
      socketModeEnabled: true,
      workflows: [SampleWorkflow],
      features: {
        appHome: {
          homeTabEnabled: true,
          messagesTabEnabled: false,
          messagesTabReadOnlyEnabled: true,
        botUser: {
          always_online: false,
        shortcuts: [{
          name: 'Run sample shortcut',
          type: 'global',
          callback_id: 'sample_shortcut_id',
          description: 'Runs a sample shortcut',
        slashCommands: [{
          command: '/sample-command',
          description: 'Runs a sample command',
          should_escape: false,
      settings: {
        interactivity: {
          is_enabled: true,

    Manifest properties

    The properties in the Manifest are:

    Property Type Has Bolt support? Description
    runOnSlack Boolean ✅ Yes This is a property to indicate whether an app can be deployed to Slack infrastructure. For Bolt apps, this must be set to false. You can learn more here.
    name String ✅ Yes This is the internal name for your app. It can contain spaces (e.g., “My App”)
    description String ✅ Yes A short sentence describing your application. A description of your app that will help users decide whether to use it
    displayName String ✅ Yes (Optional) Allows a custom name for the app to be displayed that’s different from the name
    longDescription String ✅ Yes (Optional) A more detailed description of your application
    icon String ❌ No A relative path to an image asset to use for the app’s icon. Your app’s profile picture that will appear in the Slack client
    backgroundColor String ✅ Yes (Optional) A six digit combination of numbers and letters (the hexadecimal color code) that make up the color of your app background e.g., “#000000” is the color black
    botScopes Array ✅ Yes A list of scopes, or permissions, the app’s Functions require
    functions Array ✅ Yes (Optional) A list of all Functions your app will use
    workflows Array ✅ Yes (Optional) A list of all Workflows your app will use
    outgoingDomains Array ✅ Yes (Optional) If your app communicates to any external domains, list them here. Note that the outgoing domains are only restricted if the workspace has Admin approved apps on e.g., myapp.tld
    events Array ✅ Yes (Optional) A list of all Event structures that the app is expecting to be passed via Message Metadata
    types Array ✅ Yes (Optional) A list of all custom types your app will use
    datastores Array ❌ No (Optional) A list of all Datastores your app will use. This is currently only available for non-Bolt next-generation apps. You can learn more here.
    features Object ✅ Yes (Optional) A configuration object of your app features

    You will come back to the Manifest every time you create a new workflow, since all workflows for your app need to be added to the Manifest in order to use them.

    Next steps

    Now that you’re acquainted with the Manifest, you can dive into the world of built-in functions and custom functions!