Telegram Text Formatter
Bold, italic, strikethrough, spoiler and monospace at the press of a button — see the message in a Telegram bubble, then copy it. Fancy fonts for your name and bio, and MarkdownV2 or HTML for bots, are a tab over.
148 / 4,096
Select words and press a button — or the Telegram Desktop shortcuts: Ctrl/⌘+B and +I, +Shift+X for strikethrough, +Shift+P for spoiler, +Shift+M for monospace. Nothing selected formats the whole message. The symbols turn into formatting when the message is sent — paste the copied text into any chat, group or channel and press send.
How it looks in Telegram
Drawn by the rules every Telegram app shares: a symbol only formats with a space or line start before it and a space, line end or punctuation after it, and each line is formatted on its own.
How it works
How to format text in Telegram?
Type or paste your message
Write it as you would in the chat — the box holds exactly what will be sent, symbols and all.
Select words and press a button
B, I and S for bold, italic and strikethrough, the dotted button for a spoiler, the code buttons for monospace and a code block. Press again to take it off. With nothing selected, the whole message is formatted.
Check the bubble
The preview draws the message the way Telegram will, spoilers hidden until you show them — so a pair of symbols that will not work shows up as symbols before anyone else sees it.
Copy it into Telegram
Press Copy for Telegram, paste into any chat, group or channel and send: the symbols turn into the formatting as the message goes. For a name or bio, copy a line from the Fancy fonts tab instead.
Cheat sheet
Telegram text formatting symbols and shortcuts
Six formats can be typed as symbols around the words; Telegram swaps them for the formatting when the message is sent, in chats, groups and channels, on Android, iPhone, Telegram Desktop and the web. The shortcuts are Telegram Desktop’s, with ⌘ in place of Ctrl on a Mac.
| Format | Type | Desktop | Worth knowing |
|---|---|---|---|
| Bold | **text** | Ctrl+B | Two asterisks each side — one, as in WhatsApp, stays as typed. |
| Italic | __text__ | Ctrl+I | Two underscores each side. One underscore does nothing. |
| Strikethrough | ~~text~~ | Ctrl+Shift+X | Two tildes each side. |
| Spoiler | ||text|| | Ctrl+Shift+P | Two vertical bars each side. Hidden under dust until tapped. |
| Monospace | `text` | Ctrl+Shift+M | One backtick each side. Tap it in the chat to copy it. |
| Code block | ``` | — | On a line of its own above and below the code. A language straight after the first one (```python) colours it. |
| Underline | — | Ctrl+U | No symbol: the menu or the shortcut only. |
| Quote | — | Ctrl+Shift+. | No symbol: the menu or the shortcut only. A > is read in bot messages, not typed ones. |
| Link | — | Ctrl+K | Select the words, then add the address. |
| Plain text | — | Ctrl+Shift+N | Takes every format off the selection. |
In the app
How to format text in Telegram without symbols
Every format, underline and quotes included, is in the app’s menu too. On Android, select the words, tap the three dots in the pop-up and pick Bold, Italic, Spoiler, Quote or any of the others. On iPhone, select the words and tap Format. On Telegram Desktop, right-click the selection and open Formatting — or use the shortcuts above. Two formats on the same words (bold italic, say) are easiest this way: typed symbols can be stacked on Desktop and Android, but the iPhone app reads only the outer pair.
The formatting only works where messages are written. Your name, your bio and a channel’s title and description show the symbols as typed — that is what the Fancy fonts tab is for. Writing the bio itself? Get bio ideas that fit the 70 characters, then style one here. Formatting for WhatsApp instead? It uses single symbols, *like this* — the WhatsApp text formatter writes them.
For bots
Telegram MarkdownV2 and HTML formatting
A bot formats its messages with parse_mode, and the Bot API’s Markdown is not the app’s. In MarkdownV2 one asterisk is bold, one underscore is italic and two underscores are underline — so __text__ typed in the app is italic, and the same characters sent by a bot are underlined. MarkdownV2 also reserves _ * [ ] ( ) ~ ` > # + - = | { } . and ! everywhere outside the formatting: each must carry a backslash, the backslash itself included, while inside code only ` and \ do. Miss one and the whole message is refused.
HTML is the forgiving alternative — <b>, <i>, <u>, <s>, <tg-spoiler>, <code>, <pre>, <blockquote> and <a href>, with only &, < and > to escape. Or skip parsing entirely: send the plain text with an entities array, offsets counted in UTF-16 units. The For bots tab writes all three from one message, and a message can run to 4,096 characters once the formatting is taken out — 1,024 for a caption.
Questions