# Feed views

## When to use feed views

<partial id="activity-feeds/v3-latest/_default/_partials/feed-view-intro"></partial>

<admonition type="info">

Applications can't have more than 100 feed views

</admonition>

<admonition type="info">

Feed view operations are only available on server-side.

</admonition>

<codetabs>

<codetabs-item value="nodejs" label="Node">

```js
await serverClient.feeds.createFeedView({
  id: "<view id>",
  activity_selectors: [
    {
      type: "following",
    },
  ],
  ranking: { type: "recency" },
});
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
viewId := "myview"
_, err = client.Feeds().CreateFeedView(context.Background(), &getstream.CreateFeedViewRequest{
    ID: viewId,
    ActivitySelectors: []getstream.ActivitySelectorConfig{
        {
            Type: getstream.PtrTo("following"),
        },
    },
    Ranking: &getstream.RankingConfig{
        Type: getstream.PtrTo("recency"),
    },
})

if err != nil {
    log.Fatal("Error creating feed view:", err)
}
```

</codetabs-item>

<codetabs-item value="php" label="php">

```php
$createResponse = $feedsClient->createFeedView(new GeneratedModels\CreateFeedViewRequest(
    id: "myview",
    activitySelectors: [
        new GeneratedModels\ActivitySelectorConfig(
            type: "following"
        )
    ],
    ranking: new GeneratedModels\RankingConfig(
        type: "recency"
    )
));
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
var createResponse = await _feedsV3Client.CreateFeedViewAsync(new CreateFeedViewRequest
{
    ID = feedViewId,
    ActivitySelectors = new List<ActivitySelectorConfig>
    {
        new() { Type = "recent" }
    },
    ActivityProcessors = new List<ActivityProcessorConfig>
    {
        new() { Type = "default" }
    },
    Aggregation = new AggregationConfig
    {
        Format = "time_based"
    }
});
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
create_response = self.client.feeds.create_feed_view(
    id = feed_view_id,
    activity_selectors= [
        {
            "type": "recent"
        }
    ],
)
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```rb
require 'getstream_ruby'

create_response = client.feeds.create_feed_view(
  GetStream::Generated::Models::CreateFeedViewRequest.new(
    id: 'myview',
    activity_selectors: [
      GetStream::Generated::Models::ActivitySelectorConfig.new(type: 'following')
    ],
    ranking: GetStream::Generated::Models::RankingConfig.new(type: 'recency')
  )
)
```

</codetabs-item>

</codetabs>

<open-api-models modelname="FeedViewResponse" recursive="false" headerlevel="3">
</open-api-models>

Alternatively you can use the `getOrCreateFeedView` endpoint that will create and apply settings, or return the existing view.

<partial id="activity-feeds/v3-latest/_default/_partials/reading-feed-with-id"></partial>

With custom feed views you can control

- Activity selectors
- Ranking
- Aggregation

## List feed views

To list existing feed views and their configurations:

<codetabs>

<codetabs-item value="nodejs" label="Node">

```js
await client.feeds.listFeedViews();
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
response, err := client.Feeds().ListFeedViews(context.Background(), &getstream.ListFeedViewsRequest{})
if err != nil {
    log.Fatal("Error listing feed views:", err)
}
```

</codetabs-item>

<codetabs-item value="php" label="php">

```php
$response = $feedsClient->listFeedViews();
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
var response = await _feedsV3Client.ListFeedViewsAsync();
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
response = self.client.feeds.list_feed_views()
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
response = client.feeds.list_feed_views
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
import io.getstream.services.FeedsImpl;

FeedsImpl feedsClient = new FeedsImpl(new StreamHTTPClient("<API key>", "<API secret>"));
ListFeedViewsResponse response = feedsClient.listFeedViews().execute().getData();
```

</codetabs-item>

</codetabs>

## Updating feed views

It's possible to update any custom or built-in feed views.

<partial id="activity-feeds/v3-latest/_default/_partials/update-feed-view"></partial>

## Deleting feed views

<partial id="activity-feeds/v3-latest/_default/_partials/delete-feed-view"></partial>


---

This page was last updated at 2026-03-10T10:48:54.816Z.

For the most recent version of this documentation, visit [https://getstream.io/activity-feeds/docs/react/feed-views/](https://getstream.io/activity-feeds/docs/react/feed-views/).