Contrails is a developer-friendly feature from Graze.social, designed to provide real-time post streams from the Bluesky network, filtered through any custom Graze feed. It acts as a drop-in replacement for the official Jetstream firehose, dramatically reducing unnecessary bandwidth by streaming only the posts that match a given feed’s algorithm. Contrails is here to help you build smarter, leaner, real-time Bluesky apps. Happy streaming!
Contrails is a WebSocket-based endpoint that mirrors the Bluesky Jetstream format, but instead of providing every single post on the network, it filters them down to the posts that would appear in a specific Graze feed. This provides developers with:
To start using Contrails:
https://bsky.app/profile/example.com/feed/news)at://example.com/app.bsky.feed.generator/news)wss://api.graze.social/app/contrail?feed={FEED_URI}You’ll begin receiving a Jetstream-style stream of JSON updates that match your feed logic.
websocatConnect to a Graze feed via CLI:
websocat "wss://api.graze.social/app/contrail?feed=at://example.com/app.bsky.feed.generator/news"This will stream only the posts that would appear on the selected Graze feed.
Contrails wraps Jetstream semantics in a filtering layer powered by Graze’s feed system. Every message you receive has already passed through your algorithm’s logic, so what you see is what you get.
Behind the scenes:
Contrails is an early developer-focused feature. If you find issues or have feature requests, contact the Graze team via @graze.social on Bluesky.