socialdept / atp-appview
Build lexicon-driven AT Protocol AppViews in Laravel
Requires
- php: ^8.3
- ext-json: *
- co-infra/image: ^0.1
- guzzlehttp/guzzle: ^7.5|^8.0
- illuminate/console: ^13.0
- illuminate/http: ^13.0
- illuminate/support: ^13.0
- ratchet/pawl: ^0.4
- react/event-loop: ^1.5
- socialdept/atp-client: ^0.3.15
- socialdept/atp-schema: ^0.4.11
- socialdept/atp-spaces: ^0.2.2
- socialdept/atp-support: ^0.3.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.89
- orchestra/testbench: ^11.0
- phpunit/phpunit: ^11.0|^12.0
- socialdept/atp-cbor: ^0.2.3
- socialdept/atp-signals: ^2.3.3
Suggests
- inertiajs/inertia-laravel: Render the sign-in pages with Inertia through FrontendAuth::loginView() and completeView()
- socialdept/atp-cbor: Proves verification records for the standing feature (^0.2.3, needs ext-gmp).
- socialdept/atp-signals: Follows Jetstream v2 and labelers over websockets in place of Tap and Tack (^2.3.3, needs ext-gmp).
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v0.4.7
- v0.4.6
- v0.4.5
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.42
- v0.3.41
- v0.3.40
- v0.3.39
- v0.3.38
- v0.3.37
- v0.3.36
- v0.3.35
- v0.3.34
- v0.3.33
- v0.3.32
- v0.3.31
- v0.3.30
- v0.3.29
- v0.3.28
- v0.3.27
- v0.3.26
- v0.3.25
- v0.3.24
- v0.3.23
- v0.3.22
- v0.3.21
- v0.3.20
- v0.3.19
- v0.3.18
- v0.3.17
- v0.3.16
- v0.3.15
- v0.3.14
- v0.3.13
- v0.3.12
- v0.3.11
- v0.3.10
- v0.3.9
- v0.3.8
- v0.3.7
- v0.3.6
- v0.3.5
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-feature/contributing-checks
- dev-feature/mysql-test-suite
This package is auto-updated.
Last update: 2026-11-07 00:35:32 UTC
README
Build lexicon-driven AT Protocol AppViews in Laravel.
Warning
In early development. Nothing here is ready to use yet. Expect breaking changes until the first tagged release.
This package turns a Laravel application into an AT Protocol AppView. It syncs the collections you name from the network, keeps every record in your own database, and serves them through XRPC methods built from your lexicons. To learn all about it, head over to the documentation.
Here are a few short examples of what you can do. Name the collections to sync from the network:
// config/atp-appview.php 'ingest' => [ 'collections' => ['app.example.post', 'app.example.comment', 'app.example.like'], ],
Query what arrives with Eloquent:
Record::collection('app.example.post')->by($did)->latest('sort_at')->get();
Serve a collection straight from the index, with no handler to write:
// config/atp-appview.php 'xrpc' => [ 'collections' => ['com.example.listThings' => 'com.example.thing'], ],
Or write a handler of your own when the default is not enough:
#[Xrpc('com.example.getTimeline', auth: Auth::Required)] class GetTimeline { public function __invoke(XrpcRequest $request): array { return ['feed' => []]; } }
Beyond the core, turn on what your app needs, from feeds and search to moderation and notifications:
'features' => [ Features::moderation(), Features::notifications(['latest' => 5]), Features::graph(), ],
It builds on atp-client for OAuth, service auth and forwarding, and on atp-schema for lexicons.
Documentation
You'll find the documentation on https://socialde.pt/docs/atp-appview.
Find yourself stuck using the package? Found a bug? Do you have general questions or suggestions for improving it? Feel free to create an issue on GitHub.
Testing
vendor/bin/phpunit
npm test
Contributing
Please see CONTRIBUTING for details.
License
The MIT License (MIT). Please see LICENSE for more information.