Documentation
Send rich messages: CLI, Markdown, tables and charts
Use Ntfyx CLI 0.5.0 independently for plain messages, Markdown and native blocks, with local validation, summaries, bounded formats, MCP and HTTPS.
Updated
Choose a message format
#Keep ntfyx send for short notices. Use lightweight Markdown for reports, or combine callouts, metrics, tables, progress and line/bar charts when numeric comparison helps. CLI 0.5.0 works without MCP. Rendering requires iOS/Android 1.7.0, Chrome 0.3.0 or the updated Web Inbox; feature versions and public store availability are separate.
Check the download page first.
Plain notices, Markdown and literal logs
#The ordinary send command remains valid. --format markdown explicitly selects formatting; --format text preserves literal stars, angle brackets and logs. --stdin reads text. HTML remains text, with no script execution or automatic remote webpage loading.
ntfyx send "Build complete" --topic Work
ntfyx send --stdin --format markdown --title "Report" --topic Work < report.md
ntfyx send --stdin --format text --title "Log" --topic Work < output.txtSave a rich-message JSON document
#Save the following as report.json. The document contains only title, summary and content; title and summary are optional. If omitted, the CLI derives a summary of at most 240 Unicode code points locally, without a model call. Supply Topic, Session, priority and deduplication through command arguments.
{
"title": "Deployment report",
"summary": "Deployment complete. All checks passed.",
"content": {
"version": 1,
"format": "blocks",
"blocks": [
{
"type": "callout",
"tone": "success",
"text": "Service is healthy."
},
{
"type": "metrics",
"items": [
{
"label": "Checks passed",
"value": 24,
"unit": "checks"
}
]
},
{
"type": "table",
"columns": [
"Service",
"Latency ms"
],
"rows": [
[
"API",
182
],
[
"Worker",
95
]
]
},
{
"type": "progress",
"label": "Checks",
"value": 24,
"max": 24
},
{
"type": "chart",
"kind": "line",
"title": "Latency",
"unit": "ms",
"labels": [
"09:00",
"10:00",
"11:00"
],
"series": [
{
"name": "API",
"values": [
210,
null,
182
]
}
]
}
]
}
}Validate locally, then send
#validate-message makes no network request, needs no pairing and creates no delivery attempt. Replace Work with your paired Topic. File and stdin inputs are equivalent. Retry with the same Session, deduplication key and complete content; use a new key for changed content. --json controls command output, not message format.
ntfyx validate-message --message-file report.json --json
ntfyx send --message-file report.json --topic Work --session-id deploy-42 --session-name "Deployment" --dedupe-key deploy-42-report-1
# Equivalent stdin retry
ntfyx send --message-stdin --topic Work --session-id deploy-42 --session-name "Deployment" --dedupe-key deploy-42-report-1 < report.jsonLet an agent discover the contract
#An agent can inspect command schemas, limits and examples, then validate its generated file locally. With MCP, ntfyx_send accepts either body or content with optional summary; these inputs are mutually exclusive. ntfyx_validate_message applies the same local validation. No additional chart framework is needed.
ntfyx capabilities --json
ntfyx help send --json
ntfyx help validate-message --jsonUse the same document with HTTPS / Webhook
#POST JSON to an existing phone-authorized send address and put the document in ntfyx.message. Do not mix it with top-level title, body, message, text or content text aliases. Ordinary provider JSON remains data. Hosted HTTPS processes plaintext before encrypting, while CLI/MCP encrypt on the sender.
{
"ntfyx": {
"message": {
"title": "Report",
"summary": "Checks passed.",
"content": {
"version": 1,
"format": "markdown",
"text": "## Result\n- API healthy"
}
}
},
"idempotency_key": "checks-report-1"
}Lightweight rendering and bounded formats
#Local components draw the content without downloading webpages, chart scripts or remote images. Notifications and conversation lists use the summary; details, search and copy retain the full content. Tables initially show six rows and can expand. Chart data can expand too; null means missing, not zero.
Oversized input is rejected, never silently truncated.
| Item | Limit |
|---|---|
| Whole message, including summary and Session | 16,384 UTF-8 bytes |
| Blocks | 20 |
| Metrics per block | 8 |
| Table | 30 rows × 6 columns |
| Charts | 2 charts, 3 series each, 300 values total including null |
Questions, receipts and recovery
#Rich messages present information; they do not authorize execution. Confirmation, choice and text questions continue through ntfyx ask and signed replies. Keep decision text in the question, not only in a notification summary. Accepted, received, read and answered remain different states. Retries preserve original signed content, and local restart retains the full message; uninstalling without keys does not guarantee history recovery.