Format your messages

Zulip uses a variant of GitHub Flavored Markdown to allow you to easily format your messages.


**bold**, *italic*, and ~~strikethrough~~ text
***~~All three at once~~***


Bulleted lists

* bulleted lists
  * with sub-bullets too
  * sub-bullets start with 2 spaces
    * start sub-sub-bullets with 4 spaces
* multi
- dashes and
+ pluses are ok too

Numbered lists

1. numbered lists
1. increment automatically
1. one more

Zulip auto-linkifies URLs and valid stream names. You can also add a custom linkifier to link patterns like #1234 to your ticketing system.

Auto-detected URL:
Named link: [Zulip homepage](
Stream: #**stream name**
Topic: #**stream name>topic name**
Custom linkifier: #1234 (links to ticket 1234 in your ticketing system)


See Share and upload files to learn more about dropping, pasting, and attaching images.

[A whale of a good time](https://your.zulip.domain/user_uploads/1/46/IPvysqXEtiTG1ZdNBrwAZODi/whale-time.png)


Inline: `let x = 5`

Code block:
def f(x):
   return x+1

Syntax highlighting:
def fib(n):
    # TODO: base case
    return fib(n-1) + fib(n-2)

You can also use ~~~ to start codeblocks, or just indent the code 4 or more spaces.

Zulip supports syntax highlighting for hundreds of languages, and a typeahead will pop up when you start typing after the ```. If you can't find your language, search for it here and try the short names listed for the lexers for your language.

Organization administrators can also configure a default syntax highlighting language. In this configuration, one can use ```text to display content without any syntax highlighting.


Inline: $$O(n^2)$$

``` math
\int_a^b f(t)\, dt = F(b) - F(a)

Zulip's LaTeX rendering is powered by KaTeX. Their support table is a helpful resource for checking what's supported or how to express something.


> a multi-line
quote on two lines

normal text

A multi-paragraph

quote in two paragraphs


You can use spoilers to hide content that you do not want to be visible until the user interacts with it.

Normal content in message

```spoiler Spoiler Header
Spoiler content. These lines won't be visible until the user expands the spoiler.

The spoiler will initially display in a collapsed form:

Clicking the arrow will expand the spoiler content:

Emoji and emoticons

To translate emoticons into emoji, you'll need to enable emoticon translations. You can also add custom emoji.

:octopus: :heart: :zulip: :)


Learn more about mentions here. The numbers will be added automatically by the typeahead if needed for disambiguation.

Users: @**Polonius** or @**Zoe|2132** (two asterisks)
User group: @*support team* (one asterisk)
Silent mention: @_**Polonius** (@_ instead of @)

Status Messages

/me is away

Mention a time

When collaborating with people in another timezone, you often need to express a specific time clearly. Rather than typing out your timezone and having everyone translate the time in their heads, in Zulip, you can mention a time, and it'll be displayed to each user in their own timezone (just like the timestamps on Zulip messages).

A date picker will appear once you type !time.

Our next meeting is scheduled for !time(2020-05-28T13:30:00+05:30)

A person in San Francisco will see:

Our next meeting is scheduled for Thu, May 28 2020, 1:00 AM.

While someone in India will see:

Our next meeting is scheduled for Thu, May 28 2020, 1:30 PM.


The initial pipes (|) are optional if every entry in the first column is non-empty. The header separators (---) must be at least three dashes long.

|| yes | no | maybe
| A | left-aligned | centered | right-aligned
| B |     extra      spaces      |  are |  ok
| C | **bold** *italic* ~~strikethrough~~  :smile:  ||

Paragraphs and lines

One blank space for a new paragraph
New line, same paragraph

New paragraph

---, ***, or ___ for a horizontal line
Over the line


Under the line

In-app help

A summary of the formatting syntax is available in-app.

  1. Open the compose box.

  2. Click the A () icon at the bottom of the compose box.