Skip to content

Working Group Formation: exemplary-murrelet #12

@ngerakines

Description

@ngerakines

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?

@ngerakines

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.

  1. Feeds are limited to app.bsky.feed.post record types
  2. 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.

Image

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 strongRef records 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

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions