A private TRMNL plugin that displays your recent RSS stories from NewsBlur on an e-ink device.
The plugin polls a Vercel-hosted API proxy that authenticates with your NewsBlur account and fetches your River of News. Stories are rendered on the TRMNL e-ink display with titles, thumbnails, descriptions, feed source names, and relative timestamps.
The API extracts the best available image from each story (NewsBlur image metadata first, then the first <img> tag in the content) and returns up to 20 stories per request.
Each display size supports multiple layout modes (list, grid, hybrid) configurable in TRMNL plugin settings. Thumbnails and descriptions can be toggled independently per size.
| Size | Layouts | Stories Shown |
|---|---|---|
| Full | List (up to 10), Grid (2 featured + 3), Hybrid (2 featured + 5 list) | 5-10 |
| Half Horizontal | List (4), Grid (3), Hybrid (1 featured + 3 list) | 3-4 |
| Half Vertical | List (5), Grid (1 featured + 2), Hybrid (1 featured + 3 list) | 3-5 |
| Quadrant | List (2), Grid (2) | 2 |
Clone this repo and deploy to Vercel:
npm i -g vercel
vercel --prod
Set environment variables in your Vercel project settings:
| Variable | Description |
|---|---|
NEWSBLUR_USERNAME |
Your NewsBlur username |
NEWSBLUR_PASSWORD |
Your NewsBlur password |
In your TRMNL dashboard, create a private plugin pointing to this repo (or install from the .trmnlp.yml config). Set the API URL custom field to your deployed Vercel endpoint:
https://your-app.vercel.app/api/newsblur
The plugin polls this URL every 60 minutes by default. Vercel caches responses for 5 minutes with a 10-minute stale-while-revalidate window.
Copy .env.example to .env and fill in your NewsBlur credentials. Then:
# Run the Vercel dev server (API at localhost:3000)
npm run dev
# Preview TRMNL templates locally
npm run trmnl
The .trmnlp.yml file configures the local TRMNL preview with default custom field values.
All settings are configurable per-instance in the TRMNL dashboard:
- Layout mode -- list, grid, or hybrid (per display size)
- Show images -- toggle thumbnails (per display size)
- Show description -- toggle story excerpts (per display size)
- Show title bar -- toggle the NewsBlur header bar
- API: Node.js 18+ serverless function (
api/newsblur.js) - Hosting: Vercel (256 MB memory, 30s max duration)
- Templates: Liquid (
src/*.liquid) using TRMNL's component system - Plugin config:
src/settings.yml(custom fields) +.trmnlp.yml(local dev)