npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

trmnl-cli

v0.1.5

Published

CLI tool for TRMNL e-ink displays - send, validate, and track payloads

Downloads

485

Readme

trmnl-cli

CLI tool for TRMNL e-ink displays. Send, validate, and track payloads.

Installation

npm install -g trmnl-cli

Requires Node.js 22.6.0 or later.

Quick Start

# 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

Plugins

Manage multiple TRMNL displays with named webhooks:

# Add plugins
trmnl plugin add home "https://trmnl.com/api/custom_plugins/abc123"
trmnl plugin add office "https://trmnl.com/api/custom_plugins/xyz789"

# List plugins
trmnl plugin

# Set default
trmnl plugin default office

# Send to specific plugin
trmnl send --file output.html --plugin home

# Update plugin
trmnl plugin set home --url "https://new-url..."

# Remove plugin
trmnl plugin rm office

Commands

trmnl send

Send content to your TRMNL display.

# Direct content
trmnl send --content "<div class=\"layout\">Hello</div>"

# From file
trmnl send --file ./output.html

# To specific plugin
trmnl send --file ./output.html --plugin office

# From stdin (piped)
echo '{"merge_variables":{"content":"..."}}' | trmnl send

Options:

  • -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 validate

Validate a payload without sending.

trmnl validate --file ./output.html
trmnl validate --content "..." --tier plus

Options:

  • -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 plugin

Manage webhook plugins.

# List plugins
trmnl plugin

# Add plugin
trmnl plugin add <name> <url>
trmnl plugin add home "https://..." --desc "Living room"

# Update plugin
trmnl plugin set <name> --url "https://..."

# Set default
trmnl plugin default <name>

# Remove plugin
trmnl plugin rm <name>

trmnl config

Show configuration.

trmnl config    # Show all config

trmnl tier

Get or set the payload size tier.

trmnl tier         # Show current tier
trmnl tier plus    # Set tier to plus (5KB limit)
trmnl tier free    # Set tier to free (2KB limit)

trmnl history

View 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

Configuration

Config File (~/.trmnl/config.json)

{
  "plugins": {
    "home": {
      "url": "https://trmnl.com/api/custom_plugins/...",
      "description": "Living room display"
    },
    "office": {
      "url": "https://trmnl.com/api/custom_plugins/..."
    }
  },
  "defaultPlugin": "home",
  "tier": "free"
}

Environment Variables

  • TRMNL_WEBHOOK - Webhook URL (overrides config, highest priority)

Tier Limits

| Tier | Payload Limit | Rate Limit | |------|---------------|------------| | Free | 2 KB (2,048 bytes) | 12 requests/hour | | Plus | 5 KB (5,120 bytes) | 30 requests/hour |

Set your tier globally:

trmnl tier plus

History

Sends are logged to ~/.trmnl/history.jsonl:

{"timestamp":"2026-02-07T10:00:00Z","plugin":"home","size_bytes":1234,"success":true,...}

License

MIT