-
Notifications
You must be signed in to change notification settings - Fork 1
Description
What is the objective?
Explore the creation of a feed lexicon that expands on existing
app.bsky.feed.*types and methods to be used by applications, tools, and libraries as replacement. This working group is expected to produce documentation that supports feed definition, subscription, and management, reference code to consume feeds, and reference code to produce feeds.
Who is the responsible individual for the working group?
Additional notes and considerations
Feeds are an important part of AT Protocol, both from a technical point of view, as well as a critical feature of user autonomy and empowerment. In their current form, there are several significant limitations that make it difficult to use feeds beyond posts and outside of the bsky.app AppView.
- Feeds are limited to
app.bsky.feed.postrecord types - Feeds to not have parameters or configuration, which limit features like alternative views (i.e. sort by popular vs new) or control mechanisms
Existing notes
These are some notes that I was using to work through the idea.
In the above diagram, the updated feed system could be updated to include the same existing discovery pattern, but with several key additions.
-
Feed discovery would include the AppView retrieving a feed definition record that includes additional configuration options. That definition includes parameters (args) that can be set at query time or in a user configuration record. It would also include the types that are returned by the feed, giving the AppView time to perform any resolution needed or filter / reject the feed as not supported.
{ "did": "did:web:feeds.smokesignal.events", "$type": "app.bsky.feed.generator", "createdAt": "2025-03-13T13:10:30.000001+00:00", "description": "Upcoming music festivals and events in Ohio.", "displayName": "Ohio Music Festivals", "recordTypes": ["community.lexicon.calendar.event"] "args": { "sort": { "description": "The sort order to for the feed", "allowedValues": ["popular", "upcoming"], "defaultValue": "upcoming", "usage": ["query", "record"] }, "location": { "description": "The city or region you want prioritized in the feed.", "usage": ["record"] } } } -
Identities subscribing to the feed could create a record that contains their default configuration and arguments.
{ "$type": "community.lexicon.feed.subscription", "createdAt": "2025-03-13T13:10:30.000001+00:00", "feed": "at://smokesignal.events/app.bsky.feed.generator/ohio-festivals", "args": { "sort": "upcoming", "location": "Dayton, Ohio" } } -
When AppViews query feeds on behalf of users, arguments can be provided as described in the feed definition.
GET /xrpc/community.lexicon.feed.getSkeleton?sort=upcoming&feed=at://smokesignal.events/app.bsky.feed.generator/ohio-festivals -
The feed skeleton returned is a list of
strongRefrecords where the subject is of one of the types listed in the feed definition. Any applicable args are also returned.{ "args": {"sort": "upcoming"}, "records": [ { "$type": "com.atproto.repo.strongRef", "cid": "bafy...3n4i", "uri": "at://did:plc:un..um/community.lexicon.calendar.event/3jzfcijpj2z2a" }, { "$type": "com.atproto.repo.strongRef", "cid": "bafy...3n4i", "uri": "at://did:plc:un..um/community.lexicon.calendar.event/3jzfcijpj2z2b" } ], "cursor": "cGFnZT0xCg==" }
Working Group Requirements
This working group would use a public facing read-only repository for this work: lexicon-community/wg-exemplary-murrelet