revolution/laravel-bluesky
A Laravel package for integrating Bluesky and the AT Protocol into your app. Connect accounts, publish posts, and interact with the Bluesky API through a clean, framework-friendly wrapper with simple configuration and service provider support.
FirehoseSyncMessage event and sync handler plus activity-subscription methods on AppBskyNotification mean the same dependency can answer "is anyone engaging with us on Bluesky?" — the question that actually determines whether a channel earns a permanent slot, not just whether we can post to it.transition:email scope, DPoP proof URL refinement, and JWT exp claim are all AT Protocol OAuth machinery, which strongly suggests the package is building out the authorization-code flow alongside app passwords. That directly addresses the biggest previously-open question — "can we post on behalf of our users, not just our brand accounts?" Worth a spike before scoping a build; the answer may now be "the library helps."AppBskyNotification activity subscriptions map cleanly onto support workflows: watch for mentions and replies to a brand account, route into the existing queue, respond from the admin panel. This was previously listed as out of scope; it now moves into "possible with effort."Channel abstraction. Still the best near-term use. A single package now exercises both push and pull sides of the protocol, which is a genuinely useful reference shape for designing your own Channel interface — one adapter that informs both the publisher and the listener sides of the design.Reasonable fit when:
Look elsewhere (or build in-house) when:
Channel interface with swappable adapters.Mitigation checklist before committing (updated): pin the version and read the diff — 1.1.0 is a minor release but it touches auth (DPoP, JWT claims, scopes), so verify existing app-password flows and any token handling you depend on still behave; vendor or fork it; wrap it behind your own SocialPublisher interface and, separately, a SocialEventSource interface so the inbound path is replaceable independently; write contract tests against the live API so protocol changes surface as test failures; run any firehose consumer in your own supervised worker with your own cursor persistence, never inside a request cycle; and keep the blast radius to non-critical announcements.
To executives: The channel-expansion case is unchanged and still cheap — roughly one sprint to find out whether Bluesky deserves budget, no vendor contract, no headcount. What's new is that the same library now also covers the listening half of the problem: notifications and a real-time event feed, plus the beginnings of per-user authorization. That means one small experiment can answer both "can we reach people there?" and "are people responding?" without a second procurement. The caveat is the same as before and worth saying out loud: this is a small, single-maintainer open-source project, and the latest release makes it do more, which means more of our integration sits in code nobody is paid to support. Recommendation: fund it as a time-boxed experiment with pre-agreed success metrics (referral traffic, engagement rate, attributed signups) and a kill criterion, and fund the listening piece only if we're prepared to operate a background service. We are buying an inexpensive option on a channel that might matter — not standardizing on a dependency.
To engineering: Version 1.1.0 broadens the package meaningfully, in three directions you should evaluate separately. First, auth: DPoP proof URL handling, a JWT exp claim, and a transition:email scope on BlueskyProvider are all AT Protocol OAuth machinery — read the diff and confirm whether this is a complete authorization-code flow or partial plumbing before you plan per-user posting around it, and confirm app-password flows and any token handling you already depend on are untouched. Second, inbound: a FirehoseSyncMessage event plus sync handler. Treat that as a building block, not a service — you own the worker, cursor persistence, backfill, dedup, and alerting, and it must not run inside a request. Third, notifications: activity-subscription methods on AppBskyNotification give you a mention/reply feed, which is useful for support routing and engagement metrics but still needs your own storage and polling cadence. Plan to pin and vendor, put outbound behind a SocialPublisher interface and inbound behind a separate SocialEventSource interface so each side is replaceable independently, cover auth, session/token refresh, post with link and image, delete, and one end-to-end event-received path in integration tests, and assume you may patch it. The trade is explicit — we accept ownership risk in exchange for skipping the protocol learning curve, and 1.1.0 has enlarged the amount of protocol we're skipping. Scheduling, threads, rich embeds, and durable engagement analytics remain scoped builds on our side.
How can I help you explore Laravel packages today?