Skip to main content

A library to convert Markdown to Slack's mrkdwn format

Project description

markdown_to_mrkdwn

PyPI Downloads GitHub Stars
MIT License GitHub release (latest by date) PyPI Version Documentation
codecov Test, Build Docs and Deploy to GitHub Pages

A lightweight, efficient library for converting standard Markdown to Slack's mrkdwn format. This library helps you maintain consistent formatting when sending messages to Slack from your applications.

Features

  • Fast and lightweight conversion from Markdown to Slack's mrkdwn format
  • No external dependencies
  • Comprehensive support for Markdown elements:
    • Headings (H1, H2, H3, H4, H5, H6)
    • Text formatting (bold, italic, strikethrough)
    • Lists (ordered and unordered, with nesting)
    • Ordered lists (numbered lists with proper indentation)
    • Task lists (checked and unchecked items)
    • Tables (with header formatting)
    • Links and image references
    • Code blocks (with language specification preserved)
    • Blockquotes
    • Horizontal rules
  • Preserves code blocks without converting their contents
  • Handles special characters and edge cases

Installation

Install from PyPI using pip:

pip install markdown_to_mrkdwn

Requirements:

  • Python 3.8 or higher

Usage

Basic Usage

from markdown_to_mrkdwn import SlackMarkdownConverter

# Create a converter instance
converter = SlackMarkdownConverter()

# Convert markdown to mrkdwn
markdown_text = """
# Heading 1
**Bold text**
- List item
[Link](https://example.com)
~~Strikethrough text~~
"""
mrkdwn_text = converter.convert(markdown_text)
print(mrkdwn_text)

Output

*Heading 1*
*Bold text*
• List item
<https://example.com|Link>
~Strikethrough text~

Supported Conversions

Markdown Slack mrkdwn
# Heading *Heading*
## Heading *Heading*
### Heading *Heading*
#### Heading *Heading*
##### Heading *Heading*
###### Heading *Heading*
**Bold** *Bold*
__Bold__ *Bold*
*Italic* _Italic_
~~Strikethrough~~ ~Strikethrough~
[Link](https://example.com) <https://example.com|Link>
![Image](https://example.com/img.png) <https://example.com/img.png>
- List item • List item
1. Ordered item 1. Ordered item
- [ ] Task • ☐ Task
- [x] Task • ☑ Task
> Quote > Quote
`Code` `Code`
```python ```python
--- ──────────
Tables Simple text tables with bold headers

Testing in Slack

You can test the output in Slack Block Kit Builder: Slack Block Kit Builder

Advanced Usage

Custom Encoding

You can specify a custom encoding when initializing the converter:

converter = SlackMarkdownConverter()

Plugin System

You can extend the converter with your own plugins.

Function Plugin Example

from markdown_to_mrkdwn.converter import SlackMarkdownConverter

def to_upper(line):
    return line.upper()

converter = SlackMarkdownConverter()
converter.register_plugin(
    name="to_upper",
    converter_func=to_upper,
    priority=10,
    scope="line",
    timing="after"
)
print(converter.convert("hello"))  # Output: HELLO

Regex Plugin Example

# Add comma to thousands
converter.register_regex_plugin(
    name="add_comma_to_thousands",
    pattern=r"(?<=\\d)(?=(\\d{3})+(?!\\d))",
    replacement=",",
    priority=10,
    timing="after"
)
print(converter.convert("1234567"))  # Output: 1,234,567

# Mask email addresses
converter.register_regex_plugin(
    name="mask_email",
    pattern=r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+",
    replacement="[EMAIL]",
    priority=20,
    timing="after"
)
print(converter.convert("Contact: test.user@example.com"))  # Output: Contact: [EMAIL]
  • priority controls execution order (lower runs first)
  • timing can be "before" or "after" (default: "after")
  • scope is always "line" for regex plugins

Error Handling

The converter will return the original markdown text if an error occurs during conversion:

try:
    mrkdwn_text = converter.convert(markdown_text)
except Exception as e:
    print(f"Conversion error: {e}")

Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature-name
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin feature/your-feature-name
  5. Submit a pull request

Please make sure to update tests as appropriate.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

markdown_to_mrkdwn-0.3.0.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

markdown_to_mrkdwn-0.3.0-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file markdown_to_mrkdwn-0.3.0.tar.gz.

File metadata

  • Download URL: markdown_to_mrkdwn-0.3.0.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for markdown_to_mrkdwn-0.3.0.tar.gz
Algorithm Hash digest
SHA256 19f28dfba419899d87088a87fa2db50f130ce290877298b4747e71175a065175
MD5 498374b206a4729fc934c17a94f44d92
BLAKE2b-256 c0fada1dcdbf571cf008e42cf5dc45dfc9466d59b8c66d7550c3cb9cf7a73e2a

See more details on using hashes here.

File details

Details for the file markdown_to_mrkdwn-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for markdown_to_mrkdwn-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6573b93e4335d2994b191c874904ba336b4d76f0937316d9cfbf9577d8bf38a2
MD5 408b35797668fdaedabf1da498b06f8b
BLAKE2b-256 bcae4e698c569807d236259149873e7a10fa6d08d587c4401fb238894677a1cd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page