Overview#
markdown-web is the browser-facing service in Markdown Tools. It combines
markdown-this for extraction with md-to-telegraph for Telegraph conversion
and md-to-epub for ebook export, and exposes the workflows through an HTTP
API, a small web interface, and bookmarklets.
What It Does#
The service can:
Extract readable content from public URLs as Markdown.
Accept pasted Markdown, raw HTML, local files, and uploaded documents.
Extract browser-captured HTML when a source needs JavaScript or cannot be reached by the server.
Convert Markdown into Telegraph pages, including long documents split across linked pages.
Show a Telegraph preview before publication and let the user return to edit.
Publish Markdown directly to Telegraph from the web editor.
Export one Markdown document or a bulletin with article cards as an EPUB 3.
Upload PNG, JPEG, and WebP images, optimize them to WebP, and return public URLs suitable for Markdown.
Send an optional Telegraph link notification to Telegram users or channels.
Publish long Markdown briefs as Redis-backed jobs.
The service does not replace the reusable packages. Extraction belongs to
markdown-this; Markdown-to-Telegraph conversion and Telegraph API calls
belong to md-to-telegraph; web orchestration, uploads, jobs, and Telegram
notifications stay here.
Web Interface#
The home page accepts a URL, Markdown, or a file. A selected or dropped file starts processing automatically. Markdown can be edited before conversion, and the draft is kept in the browser while the page remains open.
HTML uploads with .html or .htm extensions are extracted as HTML. Pasted
HTML is extracted when it starts with a complete document or a structural
fragment (article, body, main, section, or div); Markdown and prose
that contain HTML later in the text remain Markdown.
The source action is remembered per browser:
Process extracts or converts the source and opens the result for review.
Publish performs the same preparation and publishes directly to Telegraph.
The preview uses a same-origin frame served by /t/preview-frame. This avoids
embedding Telegraph directly, which browsers may reject with an iframe
connection error, while keeping the preview isolated from the parent page.
Other browser pages are available from the footer:
/aboutdescribes the service and its supported workflows./bookmarklets/provides bookmarklets for rendered-page capture./t/published/lists pages published through the service./docsexposes the OpenAPI documentation./llms.txtprovides a machine-readable description for agents.
HTTP API#
Markdown#
Extract a URL with:
GET /md/{url}
For URLs, raw HTML, Markdown, local files, or browser captures, send a source request to:
POST /md
The response is Markdown text. Browser-supplied HTML should include its
original source_url so relative links and images can be normalized against
the source document.
Telegraph#
Publish a URL directly:
GET /t/{url}
Publish a URL, Markdown document, raw HTML, or uploaded document:
POST /t
Create or update a preview:
POST /t/preview
The response includes a preview identifier and page URL. Send that identifier back when publishing so the service can update the preview pages instead of creating a second set of pages.
EPUB#
Export a URL, Markdown document, raw HTML, or uploaded document as an EPUB 3:
POST /epub
The endpoint accepts the same source request as POST /md. A Markdown brief
with  markers becomes a book with the
brief and its extracted child articles as navigable chapters. Remote images are
embedded in the EPUB, and source URLs remain visible in each chapter.
For a rendered browser capture, use:
POST /t/bookmarklet
Images#
Upload an image with:
POST /images
The service validates the image type, converts it to WebP when possible, and returns a public URL. R2-backed storage is enabled when the R2 environment variables are configured.
Long jobs#
For a long Markdown brief, create a job with:
POST /t/jobs
GET /t/jobs/{job_id}
POST /t/jobs/{job_id}/run
Redis is optional. When REDIS_URL is configured, the job state and staged
publishing flow survive individual requests.
Telegram Notifications#
Extracted Markdown may contain a notify_telegram front-matter field with
comma-separated user or channel IDs. After publication, the configured
Telegram bot sends the Telegraph link to those recipients. The bot must be
started by a private user, or added with permission to post in a group or
channel.
Telegram is an external service, just like Telegraph. The web package sends notifications through its integration but does not own either service or its content.
Deployment Configuration#
The minimum configuration for URL-to-Telegraph publication is:
TELEGRAPH_API_TOKEN: an existing Telegraph account token.
Optional integrations use:
REDIS_URLfor durable publishing jobs.TELEGRAM_WEB_BOT_TOKENfor notifications.R2_ACCOUNT_ID,R2_BUCKET_NAME,R2_ACCESS_KEY_ID,R2_SECRET_ACCESS_KEY, andR2_PUBLIC_BASE_URLfor image storage.
Run the service locally with:
uv run --package markdown-web markdown-web
Then open http://127.0.0.1:8000/. For API details, use the generated
Swagger UI at /docs or ReDoc at /redoc.