Skip to content

Instantly share code, notes, and snippets.

@vrypan
Last active June 16, 2025 06:05
Show Gist options
  • Save vrypan/3cb9c7cbc380fa29e3b3e1293f001161 to your computer and use it in GitHub Desktop.
Save vrypan/3cb9c7cbc380fa29e3b3e1293f001161 to your computer and use it in GitHub Desktop.
Farcaster Channels proposal

tldr; Channels are just FIDs with USER_DATA_IS_CHANNEL=true

Description

For this proposal, a channel is a currated set or chronologically ordered casts. A channel is identified by an FID, let's call it channelfid and the corresponding fname, @channelfname.

When a user wants to post to a channel, they just mention @channelfname.

In order for their cast to be "added" to the channel:

  1. It has to mention @channelfname (easy to check in CastAddBody.Mentions)
  2. It has to receive a like from @channelfid (easy to check using GetReactionsByCast)

Step #2, happens off-chain, usually by a bot managing the channel. The bot can have curration rules such as

  • "only like if @channelfname follows @user"
  • "only like if @user holds a specific NFT"
  • etc.

We had services in the past that implemented this types of logic (and even more complex).

Implementation

A minimal change is required at the protocol level, to add one more USER_DATA_TYPE. USER_DATA_TYP_IS_CHANNEL will indicate to clients that this is a channel, and it should be rendered in a different way.

Clients will have to render channel homepages by showing the most recent, top-level, casts @channelfname liked. When using this view, clicking on a cast should go to a URL like /channel/<channelfname>/<fid>/<casthash>. This will allow the client to filter replies to casts and only show the ones liked by channelfname -i.e. everyone can post replies to a channel cast, but only the ones currated by @channelfname will show up.

Joining a channel can be as simple as following it, or using a spacial miniapp that implements custom rules.

Pros

  • Minimal protocol changes.
  • Backwards compatible with any client: A client that is not aware of this change, will just render casts and mentions, everything works, you just don't get the "channel experience" and @channlefname is just an other user for you that someone mentioned.
  • Flexibility: Channel membership can be based on any rule a bot can implement: Like, follow, NFT gating, ERC-20 balance, FID height, etc.
  • Post to multiple channles! (mention up to five channels)
  • Farcaster or Neynal, or anyone, could (if they wanted to) offer the minimal bot as a service from day 1: If the channel follows you, you are a member, click here to join.

Cons

  • An external bot is required to maintain the channel (ie. it has to like the casts that will be added to the channel)
  • Clients have to implement the logic for users to actually get the "channel experience".
  • Replies to channel casts must also mention @channel. Clients can automate this by checking if the parent cast mentions channel FIDs.
  • One of the five avalaible (by the protocol) mentions is used to post to a channel.
  • There is no standard way for a third party to fetch all members of a channel. (Not sure if this is good or bad)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment