md-to-telegraph
Convert Markdown text into Telegraph DOM nodes and publish pages through the Telegraph API.
Overview
md-to-telegraph transforms a Markdown string into a list of Telegraph-compatible DOM node dicts, suitable for use with the Telegraph API.
Telegraph nodes follow this structure:
{
"tag": "p",
"attrs": {"href": "..."},
"children": ["text", {"tag": "strong", "children": ["bold"]}]
}
Installation
uv add md-to-telegraph
Usage
from md_to_telegraph import md_to_telegraph
nodes = md_to_telegraph("# Hello\n\nThis is **bold** text.")
# [
# {"tag": "h3", "children": ["Hello"]},
# {"tag": "p", "children": ["This is ", {"tag": "strong", "children": ["bold"]}, " text."]}
# ]
For extracted content that may need a plain-text fallback, use
content_to_telegraph:
from md_to_telegraph import content_to_telegraph
nodes = content_to_telegraph(content_markdown, fallback_text)
To create a page directly, use create_page. The default performs one API
request; pass retry_attempts to retry transient failures:
from md_to_telegraph import create_page
url = create_page(
access_token="telegraph-token",
title="An article",
content_markdown=content_markdown,
fallback_text=fallback_text,
source_url="https://example.com/article",
retry_attempts=3,
)
create_page reads YAML front matter from content_markdown. When these
arguments are omitted, it uses title, author, and url from the header;
explicit arguments always take precedence. The date field is preserved as
metadata but Telegraph has no native page-date field.
When an author is not available, the source URL's domain is used as the author
name, while the complete source URL is sent as author_url.
When the front matter declares a non-document page type such as website,
home, collection, or search, create_page refuses to publish it.
This prevents accidentally turning site home pages and listings into
Telegraph articles.
The same operation is available as a command-line tool. A file uses its stem
as the default title; stdin uses its first Markdown heading, or accepts an
explicit --title:
md-to-telegraph article.md --access-token "$TELEGRAPH_API_TOKEN"
cat article.md | md-to-telegraph --title "An article"
The token can be passed with --access-token or read from
TELEGRAPH_API_TOKEN. To create a new Telegraph account explicitly and use
its token for the page, add --create-account (optionally with --short-name).
The account creation uses Telegraph's createAccount method.
To create only a token, use the create-account subcommand. It prints a shell
assignment and does not publish a page:
md-to-telegraph create-account --short-name lobstersgram
export $(md-to-telegraph create-account --short-name lobstersgram)
The output can also be appended to a shell startup file:
echo "export $(md-to-telegraph create-account --short-name lobstersgram)" >> ~/.bashrc
Markdown features supported
| Markdown element | Telegraph output |
|---|---|
# Heading 1 |
<h3> |
## Heading 2 |
<h4> |
### Heading 3+ |
<p><strong>…</strong></p> |
**bold** |
<strong> |
*italic* |
<em> |
`code` |
<code> |
~~strike~~ |
<del> |
[text](url) |
<a href="…"> |
<url> |
<a href="…"> |
 |
<img src="…"> |
```lang\ncode\n``` |
<pre><code> |
> quote |
<blockquote> |
- item / 1. item |
<ul> / <ol> |
--- |
<hr> |
hard line break ( ) |
<br> |
| soft line break | space |
Development
uv run pytest
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file md_to_telegraph-0.1.6.tar.gz.
File metadata
- Download URL: md_to_telegraph-0.1.6.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75d44d4060372865fea63bc247dc4d8607f0561b8ba2682d3edfeb018931c23f
|
|
| MD5 |
07f425ef6a669081de803b5f46d4223b
|
|
| BLAKE2b-256 |
b42632b0bc198749bbe6b47d7db9adee9278a5cd0a125b33412ffd5c579c3464
|
File details
Details for the file md_to_telegraph-0.1.6-py3-none-any.whl.
File metadata
- Download URL: md_to_telegraph-0.1.6-py3-none-any.whl
- Upload date:
- Size: 10.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e57201dde61519f52f3006e45d9196c2e7ae42cc4257c8840c0b208dc86f9022
|
|
| MD5 |
af5fd9083cf114f4458e041e1b9f2497
|
|
| BLAKE2b-256 |
35305e97125d60348747c0534d4da4134fe00ff51a85a820db6c0a05d1a8aa8e
|