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 🙏

© 2025 – Pkg Stats / Ryan Hefner

trmnlocal

v1.0.6

Published

Local Node.JS host that can be used as a [TRMNL API server](https://docs.usetrmnl.com/go/diy/byos). Tested on macOS and Ubuntu.

Downloads

262

Readme

trmnlocal

Local Node.JS host that can be used as a TRMNL API server. Tested on macOS and Ubuntu.

Renders a webpage of your choice via Puppeteer, by default every ~20 seconds (but can be made faster/slower). Passes some state in the URL: device ID, rssi, etc.

Renders 2-bit PNGs. See a demo.

Usage

Install this package via npm or friends, and run trmnlocal (possibly from your global path). For instance:

$ npm install -g trmnlocal
$ trmnlocal -u https://samthor.au/trmnlocal

This will run a server that you can point your TRMNL device to, in the Advanced setup. Use your machine's IP address and the port (e.g., "http://192.168.0.141:8080").

You might want to run this in a more long-term way somewhere. Up to you!

On Ubuntu/Linux

To run this on a headless Ubuntu/Linux environment, I needed these additional packages:

sudo apt install libxdamage1 libxcomposite-dev libatk-bridge2.0-0

But also, don't run random commands as sudo from randoms on the internet.

Demo

You can load "/render" (e.g., "http://localhost:8080/render") to render the 2-bit PNG just for local testing.

Flags

You can specify some flags:

  • -u <url> the URL to show
  • -r <refresh seconds> how many seconds to wait to rerender
  • -d <rotate, 0/90/180/270> rotate the rendered output
  • -p <port> port to run on, uses $PORT or 8080 as default

Warnings

This runs Puppeteer, aka headless Chrome, to render your content. Don't point this at a page you don't trust.

We check the rendered image and don't refresh the TRMNL unless the bytes change. However, Chrome tends to be somewhat inconsistent on this front, so you might see refreshes more often.

Part of the reason the TRMNL doesn't re-render constantly is to extend the lifecycle of the device. If this refreshes your device constantly, - well, you've been warned!

Goals

I built this because I don't want a full experience, I just want a slimmed down way to render content. It won't ever provide all the features of the 'community' backends.

TODOs

  • Rotate is global, it should be configurable per device ID which fetches data
  • Proxy to TRMNL's real API to check for firmware updates