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
* with sub-bullets too
* sub-bullets start with 2 spaces
* start sub-sub-bullets with 4 spaces
- dashes and
+ pluses are ok too
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
#1234 to your ticketing system.
Auto-detected URL: zulip.com
Named link: [Zulip homepage](zulip.com)
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`
# TODO: base case
return fib(n-1) + fib(n-2)
You can also use
~~~ to start code blocks, or just indent the code 4 or more spaces.
See the main code blocks article for details on
syntax highlighting, code
playgrounds, and other features.
\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
> a multi-line
quote on two lines
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.
Users: @**Polonius** or @**aaron|26** or @**|26** (two asterisks)
User group: @*support team* (one asterisk)
Silent mention: @_**Polonius** or @_**|26** (@_ instead of @)
The variants with numbers use user IDs, and are intended for
disambiguation (if multiple users have the same name) and bots (for
the variant that only contains the user ID).
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
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.
You can also use other formats such as UNIX timestamps or human readable
dates, for example,
<time:May 28 2020, 1:30 PM IST>.
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: ||
Sending a message with the text
/todo creates a simple collaborative
to-do list. Any user who can access the message can add tasks by
entering the task's title and description and clicking "Add task". Once
created, task titles and descriptions cannot be edited.
Tasks can be marked (and unmarked) as completed by clicking the
checkboxes on the left.
Paragraphs and lines
One blank space for a new paragraph
New line, same paragraph
---, ***, or ___ for a horizontal line
Over the line
Under the line
A summary of the formatting syntax is available in-app.
- Instructions for all platforms