Unofficial Bluesky plugins for TRMNL e-ink displays. Display your Bluesky timeline and trending topics on your TRMNL device.
This repository contains Node.js scripts and Liquid templates for integrating Bluesky social media data with TRMNL displays. The plugins fetch data from Bluesky's API and display it on your TRMNL device using webhook-based custom plugins.
- Timeline Plugin: Displays your Bluesky timeline with post content and engagement metrics
- Trends Plugin: Shows trending topics on Bluesky with post counts and trending status
- Profile Plugin: Shows a Bluesky user's profile information including stats and bio
- Node.js 22.x
- A TRMNL device
- A Bluesky account with an app password
- A hosting solution for running the sync scripts periodically (e.g., Heroku, cron server, or local machine)
- Generate an app password from your Bluesky account:
- Go to https://bsky.app/settings/app-passwords
- Create a new app password
- Save this password securely
- Log into your TRMNL dashboard
- Navigate to Plugins > Private Plugin
- Create a new private plugin:
- Select "Webhook" as the strategy
- Copy the webhook URL provided
- Paste the appropriate template from the
templates/directory into the markup section - Save the plugin
Create a .env file in the project root based on the provided .env.sample file. Copy .env.sample to .env and update it with your actual credentials and webhook URLs.
npm installRun the sync scripts manually:
# Sync timeline data
node sync-timeline.js
# Sync trends data
node sync-trends.jsSet up cron jobs to run the scripts periodically:
# Run timeline sync every 30 minutes
*/30 * * * * cd /path/to/trmnl-bsky && node sync-timeline.js
# Run trends sync every hour
0 * * * * cd /path/to/trmnl-bsky && node sync-trends.js- Create a new Heroku app and deploy this repository
- Set the environment variables in Heroku:
heroku config:set [email protected] heroku config:set BSKY_APP_PASSWORD=your-app-password heroku config:set TRMNL_CUSTOM_PLUGIN_TIMELINE_WEBHOOK_URL=your-webhook-url heroku config:set TRMNL_CUSTOM_PLUGIN_TRENDS_WEBHOOK_URL=your-webhook-url
- Add Heroku Scheduler add-on:
heroku addons:create scheduler:standard
- Configure scheduled jobs in Heroku Scheduler dashboard:
- Add job:
node sync-timeline.js(run every 30 minutes) - Add job:
node sync-trends.js(run every hour)
- Add job:
- Create a new private plugin in TRMNL:
- Navigate to Plugins > Private Plugin
- Select "Polling URL" as the strategy
- Copy the contents of
templates/profile.liquidinto the markup field - Set the polling URL to:
https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=<insert bluesky handle here>- Replace
<insert bluesky handle here>with the Bluesky handle you want to display - Example:
https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=bob.bsky.social
- Replace
- Save the plugin
This project is licensed under the MIT License. See the LICENSE file for details.
This is an unofficial plugin and is not affiliated with, endorsed by, or associated with Bluesky or TRMNL. All trademarks belong to their respective owners.
Contributions are welcome! Please feel free to submit issues or pull requests.
