# Choosing surfaces: App Home, modals and messages

*Slack Developer Study Guide · Apps in the Slack Platform · Last updated October 21, 2026 · https://www.certifyforce.com/study-guide/slack-developer/apps-in-the-slack-platform/choosing-surfaces-app-home-modals-and-messages*

Which surface fits which job: the per-user Home tab published with views.publish, modals that need a fresh trigger_id, and channel, DM or ephemeral messages chosen by who should see them, plus how to combine surfaces in one feature.

- Certification: Salesforce Slack Developer
- Exam section: Apps in the Slack Platform
- Study guide: https://www.certifyforce.com/study-guide/slack-developer

**Official exam objective:**

> Recommend when to use Slack's different surfaces (user touchpoints including App home, modals and messages) for a range of use cases.

## What the exam expects

- Recommend the Home tab for a persistent, personal dashboard, and know it is published per user with `views.publish`, refreshed on `app_home_opened` or when data changes, and unavailable to Deno Slack SDK apps.
- Recommend a modal to collect structured input, and know a modal needs a valid `trigger_id` from a user interaction, so a system-initiated form starts with a message button.
- Choose between a channel message, a DM and an ephemeral message by who should see the content and whether a user action prompted it.
- Diagnose Home tab buttons that show an error icon (interactivity not enabled) and combine surfaces into one feature.

Key terms: **App Home** (the private user-app space with Home, Messages and About tabs); **Home tab** (the ever-present per-user view the app publishes); **modal** (a focused input dialog of up to three views); **`trigger_id`** (a short-lived, single-use value from an interaction that lets the app open a modal); **ephemeral message** (seen by one user, not persisted).

## Key facts

| Fact | Detail | Source |
|---|---|---|
| App Home availability | Granular-permission apps only; not Deno Slack SDK apps or workflows | [App Home](https://docs.slack.dev/surfaces/app-home/) |
| Home tab scope | At least one scope of any kind; Messages tab needs `chat:write` | [App Home](https://docs.slack.dev/surfaces/app-home/) |
| Home tab size | One view, up to 100 blocks, `type: home` | [App Home](https://docs.slack.dev/surfaces/app-home/) |
| Publishing | `views.publish` with `user_id` and the view; same call updates | [App Home](https://docs.slack.dev/surfaces/app-home/) |
| Home tab persistence | Keeps content and state until the app updates it | [Surfaces](https://docs.slack.dev/surfaces/) |
| Home tab buttons | Without interactivity enabled, clicks show an error icon | [App Home](https://docs.slack.dev/surfaces/app-home/) |
| Opening a modal | Needs a valid `trigger_id`; expires 3 seconds after sending | [Modals](https://docs.slack.dev/surfaces/modals/) |
| `trigger_id` reuse | Single use; reuse returns `trigger_exchanged` | [Handling user interaction](https://docs.slack.dev/interactivity/handling-user-interaction/) |
| Ephemeral rules | One viewer, no persistence, only after a user action | [Messaging](https://docs.slack.dev/messaging/) |
| Ephemeral delivery | User must be active and in the channel, else `user_not_in_channel` | [chat.postEphemeral](https://docs.slack.dev/reference/methods/chat.postEphemeral) |

## Check yourself

- Why can't an app open a modal the moment an external alert arrives?
- When should a reminder to one person be a DM rather than an ephemeral message?
- Which event tells an app that a user opened its App Home?
- Why do Home tab buttons show an error icon even though the view published fine?

## Sources

- [Surfaces](https://docs.slack.dev/surfaces/)
- [App Home](https://docs.slack.dev/surfaces/app-home/)
- [Modals](https://docs.slack.dev/surfaces/modals/)
- [Messaging](https://docs.slack.dev/messaging/)
- [chat.postEphemeral method](https://docs.slack.dev/reference/methods/chat.postEphemeral)
- [chat.postMessage method](https://docs.slack.dev/reference/methods/chat.postMessage)
- [Handling user interaction in your Slack apps](https://docs.slack.dev/interactivity/handling-user-interaction/)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 9 linked practice questions, and unlimited timed mock exams are included with the Slack Developer pack (USD $19): https://www.certifyforce.com/practice-exams
