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.3(2mo ago)4422.8k↑56.3%1MITPHPPHP ^8.3CI passing

Since Feb 19Pushed 5d 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 2d ago

READMEChangelog (7)Dependencies (24)Versions (140)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.

Documentation
-------------

[](#documentation)

- [English](https://kawax.biz/en/packages/laravel-bluesky)
- [Japanese](https://kawax.biz/jp/packages/laravel-bluesky)

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

60

—

FairBetter than 98% of packages

Maintenance94

Actively maintained with recent releases

Popularity38

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity75

Established project with proven stability

 Bus Factor1

Top contributor holds 91.8% 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 ~6 days

Recently: every ~16 days

Total

138

Last Release

68d 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 (1455 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 (10 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)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")

---

Tags

atprotoblueskylaravellaravel-notificationssocialitelaravelnotificationssocialiteblueskyatprotofeed-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.7k108.5M885](/packages/laravel-socialite)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

751291.4k43](/packages/civicrm-civicrm-core)[unopim/unopim

UnoPim Laravel PIM

10.5k2.4k](/packages/unopim-unopim)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5021.9k](/packages/simplestats-io-laravel-client)[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

273.0k](/packages/eslazarev-wildberries-sdk)

PHPackages © 2026

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