How to format weekly team updates for slack
- Step 1Draft the update with clear section headings — Structure it as
## Shipped,## In Progress,## Blocked,## Next Weekwith bullets under each. The headings become bold lines and the bullets pass through, so this structure carries straight into Slack. - Step 2Use full links for tickets and PRs — Slack does not auto-link bare
PROJ-123(unless your workspace has the Jira app). Write ticket references as full[PROJ-123](https://jira.example.com/PROJ-123)links so they become clickable, or rely on the Jira integration to auto-link them. - Step 3Paste or upload the update — Use Paste text for a quick draft, or Upload file for a saved
.md(accepts.md,.mdx,.markdown,.txt). One file per run. - Step 4Run the conversion — Click Run MD → Slack. Headings become bold lines, bullets pass through, and links become
<url|label>in the result panel. - Step 5Add real mentions and check emphasis — Replace any
@nameyou want to ping with a real Slack mention after pasting. Remember**bold**callouts render italic — use a single asterisk for true bold on a line like*Blocked:*. - Step 6Post to your team channel — Click Copy or Download (
-slack.txt) and paste into #team-eng-updates. If formatting drops on paste, use plain-text paste (Ctrl/Cmd+Shift+V).
Team-update constructs and their Slack output
How each weekly-update element converts. Mentions and bold callouts need a quick pass; everything else carries straight over.
| Update element | Slack output | Status | Action |
|---|---|---|---|
## Shipped heading | *Shipped* (bold line) | Supported | None |
- Migrated billing bullet | - Migrated billing (unchanged) | Supported | None |
[PROJ-123](https://jira/…) link | <https://jira/…|PROJ-123> | Supported | None |
bare PROJ-123 reference | PROJ-123 (plain text) | Depends | Use a full link, or rely on Slack's Jira app to auto-link |
@sam mention | @sam (plain text, no ping) | Unsupported | Add a real Slack mention after pasting |
:rocket: emoji shortcode | :rocket: (unchanged) | Passes through | Slack may render it on display; converter does not |
**Blocked:** callout | _Blocked:_ (italic, not bold) | Quirk | Use a single * for bold |
~~descoped~~ item | ~descoped~ (strikethrough) | Supported | None |
Tier limits for the weekly-update workflow
Markdown-family input limits. A weekly update is a few KB, so the free tier covers it comfortably.
| Tier | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 (this tool: 1) |
| Pro-media | 50 MB | 20,000,000 | 50 (this tool: 1) |
| Developer | 500 MB | unlimited | unlimited (this tool: 1) |
Cookbook
Real weekly-update fragments and the exact mrkdwn the converter emits, so the post reads native to the team channel on the first paste.
A full weekly update with three sections
A typical update: Shipped / In Progress / Blocked. Section headings become bold lines and the bullets pass through unchanged as native Slack lists.
Input (update.md): ## Shipped - Billing migration to the new ledger ## In Progress - Retry budgets for the queue worker ## Blocked - Waiting on infra for the staging DB Output (Slack mrkdwn): *Shipped* - Billing migration to the new ledger *In Progress* - Retry budgets for the queue worker *Blocked* - Waiting on infra for the staging DB
Ticket links become clickable
Full Markdown links to Jira tickets convert to Slack's angle-bracket form so the team can jump straight to the ticket.
Input (update.md): - Closed [PROJ-128](https://jira.example.com/browse/PROJ-128), reopened [PROJ-131](https://jira.example.com/browse/PROJ-131) Output (Slack mrkdwn): - Closed <https://jira.example.com/browse/PROJ-128|PROJ-128>, reopened <https://jira.example.com/browse/PROJ-131|PROJ-131>
A Blocked callout needs a single asterisk for bold
Managers often want the Blocked line to stand out. Written with **, it renders italic — use a single asterisk in the source for true Slack bold.
Input (update.md): **Blocked:** staging DB provisioning is 3 days late. Output (italic, not bold): _Blocked:_ staging DB provisioning is 3 days late. Write the source as `*Blocked:*` for Slack bold: *Blocked:* staging DB provisioning is 3 days late.
Mentions stay text — add real ones in Slack
A literal @sam does not ping. The converter passes it through as text; add a real Slack mention after pasting so the person is notified.
Input (update.md): - Thanks @sam for the on-call coverage this week Output (plain text — does not ping): - Thanks @sam for the on-call coverage this week After pasting, retype @sam in Slack so it resolves to a user and notifies.
Descoped work shown with strikethrough
When you drop an item from the plan, double-tilde strikethrough maps to Slack's single tilde, so the descoped line reads correctly in the channel.
Input (update.md): ## Next Week - Ship the export feature - ~~Refactor the auth module~~ (descoped to Q3) Output (Slack mrkdwn): *Next Week* - Ship the export feature - ~Refactor the auth module~ (descoped to Q3)
Edge cases and what actually happens
`@mentions` do not notify anyone
UnsupportedThe converter passes @name through as plain text — it performs no Slack user resolution, so the person is not pinged. After pasting, retype the mention in Slack's composer so it resolves to a user ID and sends a notification.
Emoji shortcodes are not transformed
Passes throughA :rocket: shortcode is left exactly as written. Slack's own renderer may turn it into an emoji on display, but the converter does nothing to it — and Unicode emoji typed directly also pass through unchanged.
Bold status labels render italic
By designBecause **bold** is reduced to *bold* then _bold_, status labels like **Blocked:** come out italic. Use a single asterisk (*Blocked:*) in the source so the label is bold.
Bare ticket IDs may not auto-link
DependsA bare PROJ-123 only becomes a link if your Slack workspace has the Jira integration configured. The converter does not link bare IDs. To guarantee a clickable link, write the reference as a full [PROJ-123](url) Markdown link before converting.
Underscores in identifiers get italicised
Watch outThe italic rule matches _..._, so a token like feature_flag_x in prose can be partly italicised. Wrap branch names, flags, and identifiers in backticks in the source so they are treated as inline code and left untouched.
A status table shows as raw pipes
UnsupportedSome teams format the update as a project-status table. Slack has no table element and the converter does not flatten pipes, so it appears as literal pipe text. Rewrite the table as a bulleted list per project before converting.
Multiple updates at once
Not supportedThe converter takes a single input per run. Convert one team's update at a time. If you maintain a combined doc, split it per team with md-splitter at /markdown-tools/md-splitter and convert each section.
Update exceeds the character limit
400 over limitFree tier caps input at 1 MB / 500,000 characters — far more than a weekly update needs. A combined org-wide rollup could exceed it; upgrade to Pro (10 MB / 5,000,000) or post per-team. Slack itself also truncates messages around 40,000 characters.
Frequently asked questions
Can I @-mention people in the update?
You can write @name in your Markdown, but the converter passes it through as plain text — it does not ping anyone. After pasting into Slack, retype the mention in the composer so it resolves to a user ID and sends a notification.
Will emojis render?
The converter leaves :emoji_name: shortcodes and Unicode emoji untouched. Slack's own renderer may display the shortcode as an emoji when the message posts, but that is Slack's behaviour, not the converter's.
How do I link to Jira tickets?
Write the reference as a full Markdown link — [PROJ-123](https://jira.example.com/browse/PROJ-123) — and it becomes Slack's <url|PROJ-123> clickable form. A bare PROJ-123 only auto-links if your workspace has the Jira app configured.
Why did my `**Blocked:**` label turn italic?
The emphasis rule order reduces **bold** to *bold* then _bold_, which Slack renders italic. Write the label with a single asterisk (*Blocked:*) in the source for true Slack bold.
Are my status bullets preserved?
Yes. The converter does not rewrite list markers, so your - Shipped …/- Blocked … bullets pass through unchanged and render as a native Slack list.
Do section headings stay as headings?
Slack has no heading element, so ## Shipped-style headings become bold lines (*Shipped*). That keeps the weekly structure scannable inside a single message.
How do I show descoped or dropped work?
Use ~~strikethrough~~ in your Markdown — it converts to Slack's single-tilde ~strikethrough~, which renders as struck-through text for descoped items.
Can I format the update as a table?
Slack cannot render tables and the converter passes pipes through as raw text. Rewrite a status table as a bulleted list per project before converting for a readable post.
Is the update text uploaded anywhere?
No. The conversion runs entirely in your browser via the markdown engine. The update is never sent to a server; only an anonymous processed-count metric is recorded for dashboard stats.
What file types and sizes are accepted?
Paste text, or upload a single .md, .mdx, .markdown, or .txt file. Free tier allows up to 1 MB / 500,000 characters; Pro raises that to 10 MB / 5,000,000.
Can I reuse the same update for a different format?
Yes. From the same Markdown source, use md-to-jira at /markdown-tools/md-to-jira for a Jira comment, md-to-github-html at /markdown-tools/md-to-github-html for HTML, or md-to-docx at /markdown-tools/md-to-docx for a Word doc.
My update has lots of headings — will it look cluttered?
Every heading becomes a bold line, so keep to a few sections (Shipped / In Progress / Blocked / Next Week). For consistent bullet glyphs across the update, normalise the list first with md-list-fixer at /markdown-tools/md-list-fixer.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.