PHPackages                             revolution/laravel-bluesky - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. revolution/laravel-bluesky

ActiveLibrary[API Development](/categories/api)

revolution/laravel-bluesky
==========================

Bluesky(AT Protocol) for Laravel

1.2.0(2mo ago)4317.3k↑171.6%1MITPHPPHP ^8.3CI passing

Since Feb 19Pushed 2mo ago3 watchersCompare

[ Source](https://github.com/invokable/laravel-bluesky)[ Packagist](https://packagist.org/packages/revolution/laravel-bluesky)[ GitHub Sponsors](https://github.com/invokable)[ RSS](/packages/revolution-laravel-bluesky/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (7)Dependencies (12)Versions (136)Used By (0)

Bluesky(AT Protocol) for Laravel
================================

[](#blueskyat-protocol-for-laravel)

[![test](https://github.com/invokable/laravel-bluesky/actions/workflows/test.yml/badge.svg)](https://github.com/invokable/laravel-bluesky/actions/workflows/test.yml)[![packagist](https://camo.githubusercontent.com/b32d6821b34a9702cda3f174b88976a7c1de39fd55f209a3a7f34ae21110622b/68747470733a2f2f62616467656e2e6e65742f7061636b61676973742f762f7265766f6c7574696f6e2f6c61726176656c2d626c7565736b79)](https://packagist.org/packages/revolution/laravel-bluesky)[![Maintainability](https://camo.githubusercontent.com/85e3046707a55f9134005a88841355f84d73110943080e59415f11569f9cd20a/68747470733a2f2f716c74792e73682f6261646765732f63643966323835622d343030362d346132332d626266302d6664663236366233386363322f6d61696e7461696e6162696c6974792e737667)](https://qlty.sh/gh/invokable/projects/laravel-bluesky)[![Code Coverage](https://camo.githubusercontent.com/9980e3db372ddd6ab50b26fe298bcd7590915849f6aec08960f21c1ac6c197a3/68747470733a2f2f716c74792e73682f6261646765732f63643966323835622d343030362d346132332d626266302d6664663236366233386363322f746573745f636f7665726167652e737667)](https://qlty.sh/gh/invokable/projects/laravel-bluesky)

[![Ask DeepWiki](https://camo.githubusercontent.com/0f5ae213ac378635adeb5d7f13cef055ad2f7d9a47b36de7b1c67dbe09f609ca/68747470733a2f2f6465657077696b692e636f6d2f62616467652e737667)](https://deepwiki.com/invokable/laravel-bluesky)

Requirements
------------

[](#requirements)

- PHP &gt;= 8.3
- Laravel &gt;= 12.x

Version
-------

[](#version)

verPHPLaravel1.1.x^8.2^11.x1.2.x^8.3^12.x- The auto-generated code from lexicon may contain breaking changes.

Installation
------------

[](#installation)

```
composer require revolution/laravel-bluesky
```

Basically, everything can be set in the `.env` file, so publishing the config file is optional.

### Uninstall

[](#uninstall)

```
composer remove revolution/laravel-bluesky
```

Quick start
-----------

[](#quick-start)

### Search posts (no auth required, no need for your own account)

[](#search-posts-no-auth-required-no-need-for-your-own-account)

There are many public APIs that do not require authentication if you just want to retrieve data.

> **Note** Due to temporary API restrictions, searchPosts() currently requires authentication. Please use the authenticated example below instead.

```
// routes/web.php (CURRENTLY NOT WORKING - unauthenticated usage is temporarily restricted)

use Illuminate\Support\Facades\Route;
use Revolution\Bluesky\Facades\Bluesky;

Route::get('search', function () {
    /** @var \Illuminate\Http\Client\Response $response */
    $response = Bluesky::searchPosts(q: '#bluesky', limit: 10);

    $response->collect('posts')
        ->each(function (array $post) {
            dump(data_get($post, 'author.displayName'));
            dump(data_get($post, 'author.handle'));
            dump(data_get($post, 'author.did'));
            dump(data_get($post, 'record.text'));
        });
});
```

#### Authenticated usage (currently required due to temporary API restriction)

[](#authenticated-usage-currently-required-due-to-temporary-api-restriction)

```
// routes/web.php

use Illuminate\Support\Facades\Route;
use Revolution\Bluesky\Facades\Bluesky;

Route::get('search-auth', function () {
    $response = Bluesky::login(identifier: config('bluesky.identifier'), password: config('bluesky.password'))
        ->searchPosts(q: '#bluesky', limit: 10);

    $response->collect('posts')
        ->each(function (array $post) {
            dump(data_get($post, 'author.displayName'));
            dump(data_get($post, 'author.handle'));
            dump(data_get($post, 'author.did'));
            dump(data_get($post, 'record.text'));
        });
});
```

### Get someone's posts (no auth required)

[](#get-someones-posts-no-auth-required)

```
// routes/web.php

use Illuminate\Support\Facades\Route;
use Revolution\Bluesky\Facades\Bluesky;

Route::get('feed', function () {
    // "actor" is did(did:plc:***) or handle(***.bsky.social, alice.test)
    $response = Bluesky::getAuthorFeed(actor: '***.bsky.social');

    $response->collect('feed')
        ->each(function (array $feed) {
            dump(data_get($feed, 'post.author.displayName'));
            dump(data_get($feed, 'post.record.text'));
        });
});
```

You can get your own posts by specifying your did or handle as the actor. No authentication is required to get and save your own posts.

### Create a post (requires auth)

[](#create-a-post-requires-auth)

There are two authentication methods for Bluesky: "App password" and "OAuth". Here we will use "App password". Obtain the App password from Bluesky and set it in .env.

```
// .env

BLUESKY_IDENTIFIER=***.bsky.social
BLUESKY_APP_PASSWORD=****-****-****-****

```

```
// routes/web.php

use Illuminate\Support\Facades\Route;
use Revolution\Bluesky\Facades\Bluesky;

Route::get('post', function () {
    $response = Bluesky::login(identifier: config('bluesky.identifier'), password: config('bluesky.password'))
                       ->post('Hello Bluesky');
});
```

This is easy if you're just sending simple text, but in the real world you'll need to use `TextBuilder` to make links and tags work.

```
// routes/web.php

use Illuminate\Support\Facades\Route;
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Record\Post;
use Revolution\Bluesky\RichText\TextBuilder;

Route::get('text-builder', function () {
    $post = Post::build(function (TextBuilder $builder) {
        $builder->text('Hello Bluesky')
                ->newLine(count: 2)
                ->link('https://bsky.app/')
                ->newLine()
                ->tag('#Bluesky');
    });

    $response = Bluesky::login(identifier: config('bluesky.identifier'), password: config('bluesky.password'))
                       ->post($post);
});
```

Following message will be posted:

```
Hello Bluesky

https://bsky.app/
#Bluesky

```

To authenticate with OAuth, read the Socialite documentation.

Usage
-----

[](#usage)

- [Basic Client](./docs/basic-client.md)
- [Laravel Notifications](./docs/notification.md)
- [Socialite](./docs/socialite.md)
- [FeedGenerator](./docs/feed-generator.md)
- [Testing](./docs/testing.md)

Advanced
--------

[](#advanced)

- [Identity](./docs/identity.md)
- [Verify](./docs/verify.md)
- [Route](./docs/route.md)
- [Labeler](./docs/labeler.md)

Sample project
--------------

[](#sample-project)

- [Labeler](https://github.com/invokable/laralabeler)
- [Statusphere Laravel edition](https://github.com/invokable/statusphere)

Contracts
---------

[](#contracts)

LICENCE
-------

[](#licence)

MIT

###  Health Score

57

—

FairBetter than 98% of packages

Maintenance83

Actively maintained with recent releases

Popularity38

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity74

Established project with proven stability

 Bus Factor1

Top contributor holds 91.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~5 days

Recently: every ~27 days

Total

135

Last Release

86d ago

Major Versions

0.16.7 → 1.0.02025-02-24

PHP version history (3 changes)0.1.0PHP ^8.1

0.3.0PHP ^8.2

1.2.0PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/77618633?v=4)[Revolution](/maintainers/revolution)[@Revolution](https://github.com/Revolution)

---

Top Contributors

[![kawax](https://avatars.githubusercontent.com/u/1502086?v=4)](https://github.com/kawax "kawax (1443 commits)")[![puklipo](https://avatars.githubusercontent.com/u/88759954?v=4)](https://github.com/puklipo "puklipo (111 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (8 commits)")[![devin-ai-integration[bot]](https://avatars.githubusercontent.com/in/811515?v=4)](https://github.com/devin-ai-integration[bot] "devin-ai-integration[bot] (4 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (3 commits)")[![adam-riha](https://avatars.githubusercontent.com/u/22528181?v=4)](https://github.com/adam-riha "adam-riha (1 commits)")

---

Tags

atprotoblueskylaravelsocialitelaravelnotificationssocialiteblueskyatprotofeed-generatorlabeler

###  Code Quality

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/revolution-laravel-bluesky/health.svg)

```
[![Health](https://phpackages.com/badges/revolution-laravel-bluesky/health.svg)](https://phpackages.com/packages/revolution-laravel-bluesky)
```

###  Alternatives

[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k96.9M674](/packages/laravel-socialite)[irazasyed/telegram-bot-sdk

The Unofficial Telegram Bot API PHP SDK

3.3k4.5M84](/packages/irazasyed-telegram-bot-sdk)[mollie/laravel-mollie

Mollie API client wrapper for Laravel &amp; Mollie Connect provider for Laravel Socialite

3624.1M28](/packages/mollie-laravel-mollie)[dcblogdev/laravel-microsoft-graph

A Laravel Microsoft Graph API (Office365) package

168285.5k1](/packages/dcblogdev-laravel-microsoft-graph)[vluzrmos/slack-api

Wrapper for Slack.com WEB API.

102589.1k3](/packages/vluzrmos-slack-api)[dcblogdev/laravel-xero

A Laravel Xero package

53129.1k1](/packages/dcblogdev-laravel-xero)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
