Feeds 101
The following page explains the key concepts of the Activity Feeds API.
Feeds
A Feed is like a Stack (FILO) of activities. Activities can be pushed directly to a Feed. They can also be propagated from feeds that they follow (see: “Follow Relationships” and “Fan-out”). A single application may have multiple feeds. For example, you might have a user’s feed (what they posted), their timeline feed (what the people they follow posted), and a notification feed (to alert them of engagement with activities they posted).
Most activity feeds people think of are “flat” feeds. These are your classic “timeline” feeds. There are also aggregated feeds and notification feeds, but we will get to those a bit later.
Activities
Activities are the content that appear within a feed. Posts on Instagram, tweets on Twitter/X, workouts on Strava, or posts on Facebook are all examples of activities. In short, activities are the core building block of your feed.
Activities require three pieces of information: a user, a type, and some content (text, attachments and/or custom data). The user is the entity performing the action. The type is typically post, but it can be any string. The content is the information a user wants to share:
User: “Joe”
Type: “post”
Content: “Check out Activity Feeds, it’s great!”
Reactions
Reactions are how users engage with activities they did not create themselves. You can think of these as ways to interact with the activity without altering the content of the activity itself. Some common social media reactions include likes and hearts.
Comments
Users can add comments to activities. Comment lists can be flat, or nested (threaded) by providing a parent comment when adding a new comment.
Follow Relationships
Feeds can follow each other. When a feed follows another, activities from the followed feed will appear in the follower’s feed. This concept is called “fan out”. A “follow” relationship is one-way. If Feed A follows Feed B, then Feed B’s activities will appear in Feed A, but Feed A’s activities will not appear in Feed B.
Fan-out
Fan-out refers to propagating activities from the feed they were originally posted in to the feeds that follow it. It is a critical piece of functionality for activity feeds. This feature is how you can see all of the posts for people you follow on your social media in your timeline feed.
For example, say timeline:susan follows user:adam and user:susan, then timeline:susan will contain activities from both feeds:

If an activity from user:adam is deleted, it’ll also be deleted from timeline:susan.
Following feeds that follow other feeds is usually bad practice (in this example it would be that user:susan follows user:adam). However in case you have to set up a similar strucutre, it’s worth mentioning that fan-out is always one-level deep. So if feed A follows feed B, and feed B follows feed C; feed A will only see activities from feed B, not from feed C.
Users vs feeds
If you’re thinking about apps like Instagram or Twitter/X it’s easy to think that “users follow other users”, but it’s important to remember that under the hood, it’s always feeds following other feeds, not users. If we follow the example of Instagram, a possible way to set up feeds and users:
- When creating a new user in the application, we can also set up feeds for the user:
user:<user id>for users to post activities totimeline:<user id>for the user to follow other feedsnotification:<user id>for notification activities (someone liked your photo, etc.)
- To ensure that the user’s own posts are displayed in the user’s timeline,
timeline:<user id>can followuser:<user id>
Feed groups
Feed groups are templates that define how different feeds behave in your application. The configuration options let you create feeds that work differently depending on your use case.
By adjusting settings like ranking, aggregation, activity selectors, and processors, you can tailor each feed group to serve specific purposes in your app.
Example feed groups: notification, user or timeline.
It’s also possible to create your own feed groups.