PHPackages                             socialdept/atp-signals - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. socialdept/atp-signals

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

socialdept/atp-signals
======================

Build Reactive Signals for Bluesky's AT Protocol Firehose in Laravel

v2.0.2(1mo ago)4603[1 issues](https://github.com/socialdept/atp-signals/issues)2MITPHPPHP ^8.3CI passing

Since Oct 30Pushed 1mo agoCompare

[ Source](https://github.com/socialdept/atp-signals)[ Packagist](https://packagist.org/packages/socialdept/atp-signals)[ RSS](/packages/socialdept-atp-signals/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (7)Dependencies (18)Versions (22)Used By (2)

[![Signal Header](./header.png)](https://github.com/socialdept/atp-signals)

###  Consume real-time AT Protocol events in your Laravel application.

[](#----consume-real-time-at-protocol-events-in-your-laravel-application)

 [![](https://camo.githubusercontent.com/6a5098a18298f91b099c4dcc34b9eb5ff9b6bfabec27eec008fd3ab015b0a148/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f736f6369616c646570742f6174702d7369676e616c732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/socialdept/atp-signals "Latest Version on Packagist") [![](https://camo.githubusercontent.com/f1809f1fe17c7042bfc7ea2534506652b5eb449b72e2d77bd821cb55508ed7bc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f736f6369616c646570742f6174702d7369676e616c732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/socialdept/atp-signals "Total Downloads") [![](https://camo.githubusercontent.com/a5e3062ee664ea734083d4904a6f5226f067fb7f5949311b014b7b9b91030105/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f736f6369616c646570742f6174702d7369676e616c732f74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/socialdept/atp-signals/actions/workflows/tests.yml "GitHub Tests Action Status") [![](https://camo.githubusercontent.com/c073df22cf17db23a1a89efea0bc7178b28ae9f4d0d2d08d6c7639e9398b7e2f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f736f6369616c646570742f6174702d7369676e616c733f7374796c653d666c61742d737175617265)](LICENSE "Software License")

---

What is Signal?
---------------

[](#what-is-signal)

**Signal** is a Laravel package that lets you respond to real-time events from the AT Protocol network. Build reactive applications, custom feeds, moderation tools, analytics systems, and AppViews by listening to posts, likes, follows, and other social interactions as they happen across Bluesky and the entire AT Protocol ecosystem.

Think of it as Laravel's event listeners, but for the decentralized social web.

Why use Signal?
---------------

[](#why-use-signal)

- **Laravel-style code** - Familiar patterns you already know
- **Real-time processing** - React to events as they happen
- **Dual-mode support** - Choose Jetstream (efficient JSON) or Firehose (comprehensive CBOR)
- **AppView ready** - Full support for custom collections and protocols
- **Production features** - Queue integration, cursor management, auto-reconnection
- **Easy filtering** - Target specific collections, operations, and users with wildcards
- **Built-in testing** - Test your signals with sample data

Quick Example
-------------

[](#quick-example)

```
use SocialDept\AtpSignals\Events\SignalEvent;
use SocialDept\AtpSignals\Signals\Signal;

class NewPostSignal extends Signal
{
    public function eventTypes(): array
    {
        return ['commit'];
    }

    public function collections(): ?array
    {
        return ['app.bsky.feed.post'];
    }

    public function handle(SignalEvent $event): void
    {
        $record = $event->getRecord();

        logger()->info('New post created', [
            'did' => $event->did,
            'text' => $record->text ?? null,
        ]);
    }
}
```

Run `php artisan signal:consume` and start responding to every post on Bluesky in real-time.

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

[](#installation)

```
composer require socialdept/atp-signals
php artisan signal:install
```

That's it. [Read the installation docs →](docs/installation.md)

Getting Started
---------------

[](#getting-started)

Once installed, you're three steps away from consuming AT Protocol events:

### 1. Create a Signal

[](#1-create-a-signal)

```
php artisan make:signal NewPostSignal
```

### 2. Define What to Listen For

[](#2-define-what-to-listen-for)

```
public function collections(): ?array
{
    return ['app.bsky.feed.post'];
}
```

### 3. Start Consuming

[](#3-start-consuming)

```
php artisan signal:consume
```

Your Signal will now handle every matching event from the network. [Read the quickstart guide →](docs/quickstart.md)

What can you build?
-------------------

[](#what-can-you-build)

- **Custom feeds** - Curate content based on your own algorithms
- **Moderation tools** - Detect and flag problematic content automatically
- **Analytics platforms** - Track engagement, trends, and network growth
- **Social integrations** - Mirror content to other platforms in real-time
- **Notification systems** - Alert users about relevant activity
- **AppViews** - Build custom AT Protocol applications with your own collections

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

[](#documentation)

**Getting Started**

- [Installation](docs/installation.md) - Detailed setup instructions
- [Quickstart Guide](docs/quickstart.md) - Build your first Signal
- [Jetstream vs Firehose](docs/modes.md) - Choose the right mode

**Building Signals**

- [Creating Signals](docs/signals.md) - Complete Signal reference
- [Filtering Events](docs/filtering.md) - Target specific collections and operations
- [Queue Integration](docs/queues.md) - Process events asynchronously

**Advanced**

- [Configuration](docs/configuration.md) - All config options explained
- [Testing](docs/testing.md) - Test your Signals
- [Examples](docs/examples.md) - Real-world use cases

Example Use Cases
-----------------

[](#example-use-cases)

### Track User Growth

[](#track-user-growth)

```
public function collections(): ?array
{
    return ['app.bsky.graph.follow'];
}
```

### Monitor Content Moderation

[](#monitor-content-moderation)

```
public function collections(): ?array
{
    return ['app.bsky.feed.*'];
}

public function shouldQueue(): bool
{
    return true; // Process in background
}
```

### Build Custom Collections (AppView)

[](#build-custom-collections-appview)

```
public function collections(): ?array
{
    return ['app.yourapp.custom.collection'];
}
```

[See more examples →](docs/examples.md)

Key Features Explained
----------------------

[](#key-features-explained)

### Jetstream vs Firehose

[](#jetstream-vs-firehose)

Signal supports two modes for consuming AT Protocol events:

- **Jetstream** (default) - Simplified JSON events with server-side filtering
- **Firehose** - Raw CBOR/CAR format with client-side filtering

[Learn more about modes →](docs/modes.md)

### Wildcard Filtering

[](#wildcard-filtering)

Match multiple collections with patterns:

```
public function collections(): ?array
{
    return [
        'app.bsky.feed.*',      // All feed events
        'app.bsky.graph.*',     // All graph events
        'app.yourapp.*',        // All your custom collections
    ];
}
```

[Learn more about filtering →](docs/filtering.md)

### Queue Integration

[](#queue-integration)

Process events asynchronously for better performance:

```
public function shouldQueue(): bool
{
    return true;
}
```

[Learn more about queues →](docs/queues.md)

Available Commands
------------------

[](#available-commands)

```
# Install Signal
php artisan signal:install

# Create a new Signal
php artisan make:signal YourSignal

# List all registered Signals
php artisan signal:list

# Start consuming events
php artisan signal:consume

# Test a Signal with sample data
php artisan signal:test YourSignal
```

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

[](#requirements)

- PHP 8.2+
- Laravel 11+
- WebSocket support (enabled by default)

Resources
---------

[](#resources)

- [AT Protocol Documentation](https://atproto.com/)
- [Bluesky API Docs](https://docs.bsky.app/)
- [Firehose Documentation](https://docs.bsky.app/docs/advanced-guides/firehose)
- [Jetstream Documentation](https://github.com/bluesky-social/jetstream)

Support &amp; Contributing
--------------------------

[](#support--contributing)

Found a bug or have a feature request? [Open an issue](https://github.com/socialdept/atp-signals/issues).

Want to contribute? We'd love your help! Check out the [contribution guidelines](CONTRIBUTING.md).

Credits
-------

[](#credits)

- [Miguel Batres](https://batres.co) - founder &amp; lead maintainer
- [All contributors](https://github.com/socialdept/atp-signals/graphs/contributors)

License
-------

[](#license)

Signal is open-source software licensed under the [MIT license](LICENSE).

---

**Built for the Atmosphere** • By Social Dept.

###  Health Score

47

—

FairBetter than 93% of packages

Maintenance83

Actively maintained with recent releases

Popularity21

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% 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 ~9 days

Recently: every ~27 days

Total

20

Last Release

58d ago

Major Versions

v0.3.2 → v1.0.02025-10-31

v1.2.5 → v2.0.02026-02-07

PHP version history (2 changes)v0.1.0PHP ^8.2

v2.0.2PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/101910626?v=4)[Social Dept.](/maintainers/socialdept)[@socialdept](https://github.com/socialdept)

---

Top Contributors

[![btrsco](https://avatars.githubusercontent.com/u/1373528?v=4)](https://github.com/btrsco "btrsco (71 commits)")

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/socialdept-atp-signals/health.svg)

```
[![Health](https://phpackages.com/badges/socialdept-atp-signals/health.svg)](https://phpackages.com/packages/socialdept-atp-signals)
```

###  Alternatives

[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k51.0M7.6k](/packages/larastan-larastan)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.1M337](/packages/psalm-plugin-laravel)[laravel/ai

The official AI SDK for Laravel.

9782.1M162](/packages/laravel-ai)[spatie/laravel-health

Monitor the health of a Laravel application

87411.3M153](/packages/spatie-laravel-health)[fumeapp/modeltyper

Generate TypeScript interfaces from Laravel Models

198306.8k](/packages/fumeapp-modeltyper)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

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