Skip to main content

    Telegram Text Formatter

    This Telegram text formatter styles messages with bold, italic, underline, strikethrough, spoiler and code, shows an approximate chat preview and copies the result as styled letters, Bot API MarkdownV2 or HTML. Telegram formatting in the app itself comes from its formatting menu, so the MarkdownV2 and HTML modes are for bots and automations, with special characters escaped and checked for you.

    Not affiliated with Telegram.

    MarkdownV2 and HTML are for bots, channel tools and automations that send messages through the Bot API.

    Styled letters paste into any chat as they are. Styled letters are Unicode symbols, not real bold. Screen readers may read them letter by letter or skip them, and they can be harder to find in search. Use them for a few words, not whole posts, and never for key details such as links or contact information.

    0 / 4,096

    Select words to style only those. With nothing selected, the style applies to all of the text. Ctrl+B and Ctrl+I work too.

    Checks

    0 / 4,096 message characters
    • The length check shows here. Switch to a bot mode to check MarkdownV2 or HTML.

    Counted in characters as typed. Telegram may count some characters, such as emoji, differently, and limits in the app can differ by app and account type, so check there.

    Telegram formatting cheat sheet

    StyleMarkdownV2HTML
    Bold*bold*<b>bold</b>
    Italic_italic_<i>italic</i>
    Underline__underline__<u>underline</u>
    Strikethrough~strikethrough~<s>strikethrough</s>
    Spoiler||spoiler||<tg-spoiler>spoiler</tg-spoiler>
    Inline code`code`<code>code</code>
    Code block```python print(1) ```<pre><code class="language-python">print(1)</code></pre>
    Link[text](https://example.com)<a href="https://example.com">text</a>
    Quote>quoted line<blockquote>quoted line</blockquote>
    Expandable quote>first line >hidden line||<blockquote expandable>first line hidden line</blockquote>
    Special characters as text5\.99 \- sale\!5 &lt; 6 &amp; 7

    These are Bot API formats. In the app itself, select text and use the formatting menu or shortcuts instead.

    How to format text in Telegram

    In the Telegram app, formatting comes from selecting text and choosing a style. Some apps may turn typed symbols into styles, but behaviour varies by app and version, and this tool does not rely on it.

    How to bold text in Telegram

    Select the words in the message box, then choose Bold from the formatting menu or press Ctrl+B (Cmd+B on a Mac). In this tool, select the words and click Bold, then copy the result as styled letters or as MarkdownV2 or HTML for a bot.

    Telegram strikethrough and spoiler text

    Strikethrough crosses words out, and Telegram spoiler text stays blurred until someone taps it. Select the text and choose Strikethrough or Spoiler from the formatting menu. Styled letters can imitate a strikethrough but cannot hide text, so a spoiler needs real formatting or a bot.

    Telegram formatting on desktop and mobile

    On mobile, select the text, then tap and hold and choose Format (the wording varies by device) to see the styles. On desktop, common shortcuts are Ctrl+B for bold, Ctrl+I for italic, Ctrl+U for underline, Ctrl+Shift+X for strikethrough, Ctrl+Shift+M for monospace, Ctrl+Shift+P for spoiler and Ctrl+K for a link, with Cmd instead of Ctrl on a Mac. Shortcuts can differ by app and version.

    Telegram markdown for bots and channels

    The Bot API accepts two formats, MarkdownV2 and HTML, chosen with the parse_mode setting. MarkdownV2 is shorter to write, but these characters must be escaped with a backslash when they are meant as text: _ * [ ] ( ) ~ ` > # + - = | { } . ! and the backslash itself, while HTML only needs <, >, & and " written as entities.

    A message like "Price: 5.99 - sale!" sent as MarkdownV2 fails with a "can't parse entities" error, because the dot, dash and exclamation mark are not escaped. In MarkdownV2 mode the checks panel points to each character, and Escape fixes the selection, or the whole text, in one click.

    Message templates

    Each template is shown in every Telegram text format this tool supports: MarkdownV2, HTML and styled letters. Use template loads the version for the mode you have selected, then replace the text in brackets.

    • Channel announcement

      A short post for a channel with a headline, key details and a link.

      MarkdownV2
      *\[Announcement title\]*
      
      We are \[what is happening\] on __\[date\]__\.
      
      What to know:
      \- \[Detail one\]
      \- \[Detail two\]
      \- \[Detail three\]
      
      [Read the full update](https://example.com/update)
      HTML
      <b>[Announcement title]</b>
      
      We are [what is happening] on <u>[date]</u>.
      
      What to know:
      - [Detail one]
      - [Detail two]
      - [Detail three]
      
      <a href="https://example.com/update">Read the full update</a>
      Styled letters
      [𝗔𝗻𝗻𝗼𝘂𝗻𝗰𝗲𝗺𝗲𝗻𝘁 𝘁𝗶𝘁𝗹𝗲]
      
      We are [what is happening] on [̲d̲a̲t̲e̲]̲.
      
      What to know:
      - [Detail one]
      - [Detail two]
      - [Detail three]
      
      Read the full update (https://example.com/update)
    • Changelog or release notes

      Release notes for a bot, app or project, grouped by type of change.

      MarkdownV2
      *\[Product name\] \[version\]*
      
      __New__
      \- \[New feature\]
      \- \[Another new feature\]
      
      __Fixed__
      \- \[Bug that was fixed\]
      
      __Removed__
      \- ~\[Old option\]~ \[what replaces it\]
      
      Update with `[command]`\.
      HTML
      <b>[Product name] [version]</b>
      
      <u>New</u>
      - [New feature]
      - [Another new feature]
      
      <u>Fixed</u>
      - [Bug that was fixed]
      
      <u>Removed</u>
      - <s>[Old option]</s> [what replaces it]
      
      Update with <code>[command]</code>.
      Styled letters
      [𝗣𝗿𝗼𝗱𝘂𝗰𝘁 𝗻𝗮𝗺𝗲] [𝘃𝗲𝗿𝘀𝗶𝗼𝗻]
      
      N̲e̲w̲
      - [New feature]
      - [Another new feature]
      
      F̲i̲x̲e̲d̲
      - [Bug that was fixed]
      
      R̲e̲m̲o̲v̲e̲d̲
      - [̶O̶l̶d̶ ̶o̶p̶t̶i̶o̶n̶]̶ [what replaces it]
      
      Update with [𝚌𝚘𝚖𝚖𝚊𝚗𝚍].
    • Giveaway rules

      Clear rules for a channel or group giveaway, with dates and how winners are picked.

      MarkdownV2
      *Giveaway: \[prize\]*
      
      _How to enter_
      1\. \[First step\]
      2\. \[Second step\]
      
      _Dates_
      Ends on \[date\] at \[time and time zone\]\.
      
      >Winners are picked \[how winners are picked\] and contacted by \[contact method\]\.
      [Full rules](https://example.com/rules)
      HTML
      <b>Giveaway: [prize]</b>
      
      <i>How to enter</i>
      1. [First step]
      2. [Second step]
      
      <i>Dates</i>
      Ends on [date] at [time and time zone].
      
      <blockquote>Winners are picked [how winners are picked] and contacted by [contact method].</blockquote>
      <a href="https://example.com/rules">Full rules</a>
      Styled letters

      Spoilers and quotes become plain text.

      𝗚𝗶𝘃𝗲𝗮𝘄𝗮𝘆: [𝗽𝗿𝗶𝘇𝗲]
      
      𝘏𝘰𝘸 𝘵𝘰 𝘦𝘯𝘵𝘦𝘳
      1. [First step]
      2. [Second step]
      
      𝘋𝘢𝘵𝘦𝘴
      Ends on [date] at [time and time zone].
      
      ❝ Winners are picked [how winners are picked] and contacted by [contact method].
      Full rules (https://example.com/rules)
    • Daily digest with a spoiler

      A daily roundup with a hidden answer or surprise behind a spoiler.

      MarkdownV2
      *Daily digest: \[date\]*
      
      1\. \[First story in one line\]
      2\. \[Second story in one line\]
      3\. \[Third story in one line\]
      
      _Question of the day:_ \[question\]
      Answer: ||\[answer\]||
      >\[Longer background or notes for readers who want more detail\.\]
      >\[More detail that stays folded until tapped\.\]||
      HTML
      <b>Daily digest: [date]</b>
      
      1. [First story in one line]
      2. [Second story in one line]
      3. [Third story in one line]
      
      <i>Question of the day:</i> [question]
      Answer: <tg-spoiler>[answer]</tg-spoiler>
      <blockquote expandable>[Longer background or notes for readers who want more detail.]
      [More detail that stays folded until tapped.]</blockquote>
      Styled letters

      Spoilers and quotes become plain text.

      𝗗𝗮𝗶𝗹𝘆 𝗱𝗶𝗴𝗲𝘀𝘁: [𝗱𝗮𝘁𝗲]
      
      1. [First story in one line]
      2. [Second story in one line]
      3. [Third story in one line]
      
      𝘘𝘶𝘦𝘴𝘵𝘪𝘰𝘯 𝘰𝘧 𝘵𝘩𝘦 𝘥𝘢𝘺: [question]
      Answer: [answer]
      ❝ [Longer background or notes for readers who want more detail.]
      ❝ [More detail that stays folded until tapped.]
    • Bot welcome message

      The first message a bot sends after someone starts it, with the main commands.

      MarkdownV2
      *Welcome to \[bot name\]\!*
      
      I can help you \[what the bot does\]\.
      
      Try these commands:
      `/start` \[what it does\]
      `/help` \[what it does\]
      `/settings` \[what it does\]
      
      Questions? See the [help page](https://example.com/help)\.
      HTML
      <b>Welcome to [bot name]!</b>
      
      I can help you [what the bot does].
      
      Try these commands:
      <code>/start</code> [what it does]
      <code>/help</code> [what it does]
      <code>/settings</code> [what it does]
      
      Questions? See the <a href="https://example.com/help">help page</a>.
      Styled letters
      𝗪𝗲𝗹𝗰𝗼𝗺𝗲 𝘁𝗼 [𝗯𝗼𝘁 𝗻𝗮𝗺𝗲]!
      
      I can help you [what the bot does].
      
      Try these commands:
      /𝚜𝚝𝚊𝚛𝚝 [what it does]
      /𝚑𝚎𝚕𝚙 [what it does]
      /𝚜𝚎𝚝𝚝𝚒𝚗𝚐𝚜 [what it does]
      
      Questions? See the help page (https://example.com/help).
    • Code snippet help request

      Ask a developer group for help with a code block and the error you see.

      MarkdownV2
      *Help needed: \[short problem summary\]*
      
      I am using `[language or library] [version]` and get this error:
      ```
      [paste the error message here]
      ```
      Here is the code:
      ```python
      def example():
          return "[your code here]"
      ```
      What I tried: \[what you tried\]
      HTML
      <b>Help needed: [short problem summary]</b>
      
      I am using <code>[language or library] [version]</code> and get this error:
      <pre>[paste the error message here]</pre>
      Here is the code:
      <pre><code class="language-python">def example():
          return &quot;[your code here]&quot;</code></pre>
      What I tried: [what you tried]
      Styled letters
      𝗛𝗲𝗹𝗽 𝗻𝗲𝗲𝗱𝗲𝗱: [𝘀𝗵𝗼𝗿𝘁 𝗽𝗿𝗼𝗯𝗹𝗲𝗺 𝘀𝘂𝗺𝗺𝗮𝗿𝘆]
      
      I am using [𝚕𝚊𝚗𝚐𝚞𝚊𝚐𝚎 𝚘𝚛 𝚕𝚒𝚋𝚛𝚊𝚛𝚢] [𝚟𝚎𝚛𝚜𝚒𝚘𝚗] and get this error:
      [𝚙𝚊𝚜𝚝𝚎 𝚝𝚑𝚎 𝚎𝚛𝚛𝚘𝚛 𝚖𝚎𝚜𝚜𝚊𝚐𝚎 𝚑𝚎𝚛𝚎]
      Here is the code:
      𝚍𝚎𝚏 𝚎𝚡𝚊𝚖𝚙𝚕𝚎():
          𝚛𝚎𝚝𝚞𝚛𝚗 "[𝚢𝚘𝚞𝚛 𝚌𝚘𝚍𝚎 𝚑𝚎𝚛𝚎]"
      What I tried: [what you tried]

    Styled letters or real formatting?

    Styled letters are what a Telegram font generator makes: Unicode symbols that look bold, italic or monospace, so they paste into chats, bios and channel names without a bot. Spoilers, quotes and links cannot be made this way, so this mode shows them as plain text.

    Real formatting from the app's menu or the Bot API keeps the words as normal text, so they can be searched, copied cleanly and read aloud by screen readers. Use it whenever you can, and keep styled letters for a few words where real formatting is not available.

    Frequently asked questions

    How do I make text bold in Telegram?

    Select the words and choose Bold from the formatting menu. On mobile, tap and hold the selection and look for Format, and on desktop try Ctrl+B (Cmd+B on a Mac). Bots send bold as *bold* in MarkdownV2 or <b>bold</b> in HTML.

    How do I strikethrough or hide text as a spoiler in Telegram?

    Select the text and choose Strikethrough or Spoiler from the formatting menu, or try Ctrl+Shift+X and Ctrl+Shift+P on desktop. Bots use ~text~ and ||text|| in MarkdownV2, or <s> and <tg-spoiler> in HTML.

    Can I type markdown in the Telegram app?

    Some apps and versions may turn certain typed symbols into formatting, but behaviour varies by app and version, so this tool does not rely on it. The formatting menu and shortcuts are the dependable way in the app. MarkdownV2 is meant for bots that send messages through the Bot API.

    What is the difference between MarkdownV2 and HTML in the Bot API?

    Both produce the same styles. MarkdownV2 uses symbols such as *bold* and needs many characters escaped with a backslash. HTML uses tags such as <b>bold</b> and only needs <, >, & and " written as entities, which can be easier when the text comes from users or a database. Only the tags listed in the Bot API docs work.

    Why do I get a "can't parse entities" error?

    The Bot API returns it when the text does not match the parse mode. Common causes are an unescaped character in MarkdownV2, such as a dot or a dash, an entity that is never closed, or an unsupported HTML tag. Paste the text here in the matching mode and read the checks panel. To treat a piece of text as plain text, select it and click Escape, which adds the backslashes or entities it needs.

    What are the Telegram message and caption length limits?

    The Bot API docs list 4096 characters for message text and 1024 for media captions, counted after formatting is parsed, so markers and tags do not count. Telegram may count some characters, such as emoji, differently, and limits in the app can differ by app and account type, so check there. Photos sent as ordinary messages are compressed, so size channel images before you post.

    Is this tool free, and is my text stored?

    Yes, it is free with no signup. Everything runs in your browser, and your text is not uploaded or stored.

    Related tools