
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
CLI for TRMNL e-ink displays. Send, validate, preview, and track payloads from your terminal.
npm install -g trmnl-cli@latest
Requires Node.js 22.6.0 or later. Or run without installing:
npx trmnl-cli@latest send --help
# Add your first plugin (webhook)
trmnl plugin add home "https://trmnl.com/api/custom_plugins/YOUR_UUID"
# Send content
trmnl send --content '<div class="layout">Hello TRMNL!</div>'
# Or from a file
trmnl send --file ./output.html
trmnl sendSend content to your TRMNL display.
# Direct content
trmnl send --content '<div class="layout">Hello</div>'
# From file
trmnl send --file ./output.html
# To a specific plugin
trmnl send --file ./output.html --plugin office
# From stdin
echo '{"merge_variables":{"content":"..."}}' | trmnl send
| Flag | Description |
|---|---|
-c, --content <html> | HTML content to send |
-f, --file <path> | Read content from file |
-p, --plugin <name> | Plugin to use (default: default plugin) |
-w, --webhook <url> | Override webhook URL directly |
--skip-validation | Skip payload validation |
--skip-log | Don't log to history |
--json | Output result as JSON |
trmnl validateValidate a payload without sending. Checks size against your tier limit.
trmnl validate --file ./output.html
trmnl validate --content "..." --tier plus
| Flag | Description |
|---|---|
-c, --content <html> | HTML content to validate |
-f, --file <path> | Read content from file |
-t, --tier <tier> | Override tier (free or plus) |
--json | Output result as JSON |
trmnl previewRender content locally using the actual TRMNL framework and take a screenshot. Useful for checking layout, overflow, and visual appearance before sending to a device.
Requires Playwright. Install browsers once with npx playwright install chromium.
# Preview a file
trmnl preview --file ./output.html
# Preview and open in default viewer
trmnl preview --file ./output.html --open
# Preview for a specific device
trmnl preview --file ./output.html --device v2
# From stdin
echo '<div class="layout">Hello</div>' | trmnl preview
| Flag | Description |
|---|---|
-c, --content <html> | HTML content to preview |
-f, --file <path> | Read content from file |
-o, --output <path> | Screenshot output path |
--open | Open screenshot in default viewer |
--device <id> | Device profile: og, v2, x (default: og) |
--no-overflow-check | Skip overflow detection |
--update-framework | Force-update cached TRMNL framework before rendering |
--json | Output result as JSON |
Device profiles:
| Device | Resolution | Bit depth |
|---|---|---|
og | 800 x 480 | 2-bit |
v2 | 1040 x 780 | 4-bit |
x | 1872 x 1404 | 4-bit |
The exit code is 1 if overflow is detected, 0 otherwise.
trmnl frameworkManage the cached TRMNL CSS/JS framework used by preview.
trmnl framework status # Show cached framework info
trmnl framework update # Fetch latest from CDN
trmnl framework check # Check if an update is available
trmnl pluginManage webhook plugins. Each plugin is a named reference to a TRMNL custom plugin webhook URL.
# List plugins
trmnl plugin
# Add a plugin
trmnl plugin add home "https://trmnl.com/api/custom_plugins/abc123"
trmnl plugin add office "https://trmnl.com/api/custom_plugins/xyz789" --desc "Office display"
# Set default
trmnl plugin default home
# Update a plugin
trmnl plugin set home --url "https://..."
# Remove a plugin
trmnl plugin rm office
trmnl configShow current configuration: plugins, tier, history path, and environment variables.
trmnl config
trmnl tierGet or set the payload size tier.
trmnl tier # Show current tier
trmnl tier plus # Set to plus (5 KB limit)
trmnl tier free # Set to free (2 KB limit)
trmnl historyView and filter send history.
trmnl history # Last 10 sends
trmnl history --last 20 # Last N sends
trmnl history --today # Today's sends
trmnl history --failed # Failed sends only
trmnl history --plugin home # Filter by plugin
trmnl history stats # Statistics
trmnl history clear --confirm # Clear history
Settings are stored in ~/.trmnl/config.json:
{
"plugins": {
"home": {
"url": "https://trmnl.com/api/custom_plugins/...",
"description": "Living room display"
}
},
"defaultPlugin": "home",
"tier": "free"
}
| Variable | Description |
|---|---|
TRMNL_WEBHOOK | Webhook URL (overrides config, highest priority) |
All data is stored in ~/.trmnl/:
| File | Description |
|---|---|
config.json | Plugin and tier configuration |
history.jsonl | Send history (one JSON entry per line) |
| Tier | Payload limit | Rate limit |
|---|---|---|
| Free | 2 KB (2,048 bytes) | 12 requests/hour |
| Plus | 5 KB (5,120 bytes) | 30 requests/hour |
MIT
FAQs
CLI tool for TRMNL e-ink displays - send, validate, and track payloads
We found that trmnl-cli demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.