Back to Blog
Guide

How to Make Bullet Points in Slack, Including Nested Lists

To make bullet points in Slack, type * or - and a space at the start of a line, or press Cmd+Shift+8. We tested it: Tab nests up to five levels, markup mode turns lists off, and API mrkdwn text has no lists while a markdown block does.

Slack Green Team
September 27, 2026
October 4, 2026
3 min read
Share:
slack
formatting
lists

To make bullet points in Slack, type an asterisk (*) or a hyphen (-) and a space at the start of a line. Slack turns the line into a bullet. You can also select lines you already typed and press Cmd+Shift+8 on a Mac (Ctrl+Shift+8 on Windows). Press Shift+Enter for the next bullet, Tab to indent it, and Shift+Tab to move it back. For a numbered list, type 1. and a space.

We tested each of these in Slack's message box on 3 October 2026, sent the results to ourselves, and read back how Slack stored them. The messages were deleted afterwards.

What starts a list in the message box

Typed at the start of a lineResult
* and a spaceBulleted list
- and a spaceBulleted list
• and a spaceBulleted list
1. and a spaceNumbered list
Select lines, Cmd+Shift+8Each line becomes a bullet

Slack's help article only mentions the asterisk, but all three bullet starts worked in our test. The formatting toolbar (Aa in the message field) has the same list buttons, and Slack's shortcut page lists Cmd+Shift+7 (Ctrl+Shift+7) for a numbered list.

How to make nested bullet points

  • Type * and a space, then your first item.
  • Press Shift+Enter for a new bullet. Plain Enter sends the message.
  • Press Tab right after the new bullet to move it one level in. Press it again to go deeper.
  • Press Shift+Tab to move an item back out. Backspace on an empty bullet ends the list.

The message box stops at five levels. We pressed Tab ten times in a row: levels 2 to 5 appeared, and every Tab after that left the item at level 5. Each level gets its own bullet shape:

A Slack message with nested bullets: level 1 a filled dot, level 2 a hollow circle, level 3 a square, level 4 a filled dot, level 5 a hollow circle, and a sixth item typed with five Tabs still at level 5

Slack stores the list as a rich text block, one rich_text_list per run of items with an indent from 0 to 4. The plain-text copy Slack keeps in the message's text field looks like this:

• Level 1 (typed * and space)
    ◦ Level 2 (Tab x1)
        ▪︎ Level 3 (Tab x2)
            • Level 4 (Tab x3)
                ◦ Level 5 (Tab x4)
                ◦ Level 6 (Tab x5)

Never appear "away" on Slack again

Cloud-based. No downloads. Works 24/7 even when your laptop is off.

Bullet points not working in Slack?

The asterisk stays an asterisk. Format messages with markup is on. We switched it on and typed * and - : both stayed as plain characters, with no list. To turn it off, click your profile picture, open Preferences, then Advanced, and untick Format messages with markup under Input Options.

The message sends when you press Enter. Use Shift+Enter for the next bullet, or change the Enter key preference so Enter adds a line.

A pasted list shows dashes or stars. A markdown list pasted from ChatGPT or a README arrives as plain text. Slack offers Apply formatting in a toast, or paste it into our markdown to Slack converter first.

On a phone. The same typed starts apply, but phone keyboards have no Tab key, so build nested lists on a computer. We did not test the mobile apps.

Bullet points in bot and API messages

Text sent through the API in Slack's mrkdwn format has no list syntax. We sent the same three bullet starts with chat.postMessage, and Slack kept them as typed characters. A Block Kit markdown block is different: Slack converted its - lines into a real list, including a nested line indented with two spaces.

Two messages sent through Slack's API: the mrkdwn text keeps '- dash line', '* star line' and '• bullet character line' as plain text, while the markdown block shows real bullets with a nested item

Read back from the API, the markdown block came out as the same rich_text_list structure the message box makes. The payload we sent:

{
  "channel": "D0123456789",
  "text": "markdown block test",
  "blocks": [
    {"type": "markdown", "text": "Markdown block test:\n- dash line\n- second line\n  - nested line"}
  ]
}

For full control, send a rich_text block with rich_text_list elements yourself; style is bullet or ordered and indent sets the level. Payloads, limits and errors are in Slack rich text block and Slack Block Kit markdown. For rows and columns instead of bullets, see how to make a table in Slack.

A markdown block also turns - [ ] into a checklist with real boxes, shown on Slack checkbox in a message.

FAQ

Can a bot post deeper lists than the message box allows?

The message box stops at five levels. A rich_text_list sent through the API takes a higher indent; our rich text block tests posted lists nine levels deep.

Always Active

Stop Jiggling Your Mouse.

Join hundreds of remote workers who never worry about their Slack status. Set it up once, stay green forever.

Related Articles

Guide

How to See All Your DMs in Slack, Including the Hidden Ones

The DMs tab lists your direct messages with people. App DMs, Slackbot and DMs with deleted accounts sit elsewhere. We compared the tab with the full list the Slack API returned.

Slack Green Team
Guide

Slack Images Not Showing? 5 Causes We Reproduced

We uploaded images to a Slack test channel and then switched each image setting off, ran /collapse, and posted from a bot that was not in the channel. Five causes, each reproduced.

Slack Green Team
Guide

How to Message Yourself on Slack (and What It Notifies)

Your own name under Direct messages opens a private DM with yourself. We sent it a note, a file, a scheduled message and a reminder, and checked which ones raised a badge.

Slack Green Team