App manifest

Developing automations requires a paid plan. Don't have one? Join the Developer Program and provision a sandbox with access to all Slack features for free.

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

The manifest file, named manifest.ts is located within the root of your directory. Inside the manifest file, you will find an export default Manifest block that defines the app's configuration.

For an example, below is an annotated version of the manifest for our Hello World app:

// manifest.ts
import { Manifest } from "deno-slack-sdk/mod.ts";
// Import your workflow
import GreetingWorkflow from "./workflows/greeting_workflow.ts";

export default Manifest({
  
  // This is the internal name for your app.
  // It can contain spaces (e.g., "My App")
  name: "deno-hello-world",

  // A description of your app that will help users decide whether to use it.
  description: "A sample that demonstrates using a function, workflow and trigger to send a greeting",

  // Your app's profile picture that will appear in the Slack client.
  icon: "assets/default_new_app_icon.png",

  // A list of all workflows your app will use.
  workflows: [GreetingWorkflow],

  // If your app communicates to any external domains, list them here.
  outgoingDomains: [], // e.g., myapp.tld

  // Bot scopes can be declared here.
  // For the beta, you can keep these as-is.
  botScopes: ["commands", "chat:write", "chat:write.public"],
});

Manifest properties

Property Type Description Required?
name String The internal name for your app. It can contain spaces (e.g., "My App") Yes
description String A short sentence describing your application. A description of your app that will help users decide whether to use it Yes
icon String 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. Note this icon is only used if the app is deployed with slack deploy. Yes
botScopes Array of Strings A list of bot scopes, or permissions, the app's functions require Yes
displayName String A custom name for the app to be displayed that's different from the name No
longDescription String A more detailed description of your application No
backgroundColor String 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 No
functions Array A list of all functions your app will use No
workflows Array A list of all workflows your app will use No
outgoingDomains Array of Strings As of v1.15.0: if your app communicates to any external domains, list them here. If you make API calls to slack.com, it does not need to be explicitly listed. e.g., myapp.tld No
events Array A list of all event structures that the app is expecting to be passed via Message Metadata No
types Array A list of all custom types your app will use No
datastores Array A list of all Datastores your app will use No
features Object A configuration object of your app features No

More on outgoing domains

Deno requires explicit permission to access external resources. Therefore, to make HTTP requests to external domains, you'll need to add the domain to your app manifest as an outgoing domain. Otherwise, you may run into a PermissionDenied: Detected missing network permissions error.

Function definitions in the manifest

You may also see some function definitions in the manifest file. While Slack functions can be defined here, to keep your code tidy, we recommend defining your functions in their own respective source files in your app's /functions directory.

Regardless of where you define them, each function your app uses must be declared in the manifest.

The Messages tab

By default, apps created with slack create will include both a read-only Messages tab and an About tab within Slack.

You can use the Slack function SendDm to send users direct messages from your app—which will appear for them in the app's Messages tab.

Your app's Messages tab will be enabled and read-only by default. If you'd like to disable read-only mode and/or disable the Messages tab completely, add the optional features property to your manifest definition like this:

// manifest.ts
import { Manifest } from "deno-slack-sdk/mod.ts";
import GreetingWorkflow from "./workflows/greeting_workflow.ts";

export default Manifest({
  name: "deno-hello-world",
  description:
    "A sample that demonstrates using a function, workflow and trigger to send a greeting",
  icon: "assets/default_new_app_icon.png",
  workflows: [GreetingWorkflow],
  outgoingDomains: [],
  // Add this ------
  features: {
    appHome: {
      messagesTabEnabled: false,
      messagesTabReadOnlyEnabled: false,
    },
  },
  // ---------------
  botScopes: ["commands", "chat:write", "chat:write.public"],
});

➡️ To keep building your new app, head to the Slack functions section.


Have 2 minutes to provide some feedback?

We'd love to hear about your experience building Slack automations. Please complete our short survey so we can use your feedback to improve.