---
title: "openvibe-sdk/home-feed · OpenVibe.Services"
canonical: "https://openvibe.services/docs/sdk/home-feed"
updated: null
---

# openvibe-sdk/home-feed · OpenVibe.Services

HTML: [openvibe-sdk/home-feed · OpenVibe.Services](https://openvibe.services/docs/sdk/home-feed)

# `openvibe-sdk/home-feed`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

From `types/home-feed.d.ts` (browser build available). Declarations are shown verbatim.

## interface HomeLayout

~~~~
export interface HomeLayout { home: string[]; folders: Array<{ id: string; name: string; apps: string[] }>; updated_at?: string | null; }
~~~~

## interface TodayPoint

~~~~
export interface TodayPoint { day: string; people: number | null; streams: number | null; posts: number | null; new_videos: number | null; }
~~~~

## interface Today

~~~~
export interface Today { day: string; people_today: number | null; streams_today: number | null; posts_today: number | null; new_videos_today: number | null; series: TodayPoint[]; updated_at: string; }
~~~~

## interface FeedItem

~~~~
export interface FeedItem { id: number; source: { service: string; type: string; id: string }; title: string; url: string; label: string | null; via?: string; picture_url?: string; actor: Record<string, unknown> | null; occurred_at: string | null; }
~~~~

## interface PopularItem

One destination in the signed-out "things people do now" list and in a person's Try next: a public label, an https address, an icon id and the one-line reason it is there, with the Report numbers behind them when known.

~~~~
export interface PopularItem {
    id: string;
    kind: 'site' | 'tool';
    name: string;
    url: string;
    icon: string;
    reason: string;
    score?: number;
    opens_24h?: number | null;
    opens_7d?: number | null;
    opens_prev_7d?: number | null;
    growth_7d_pct?: number | null;
    uses_24h?: number | null;
    uses_7d?: number | null;
}
~~~~

## interface Popular

~~~~
export interface Popular {
    source: 'report' | 'fallback';
    reason: string;
    generated_at: string | null;
    fetched_at: string | null;
    stale: boolean;
    items: PopularItem[];
    error?: string;
}
~~~~

## interface TryNext

~~~~
export interface TryNext {
    source: 'report' | 'fallback';
    basis: 'co-usage' | 'popular' | 'starter';
    generated_at: string;
    items: PopularItem[];
}
~~~~

## interface HomeFeedClient

~~~~
export interface HomeFeedClient {
    home: { get(opts?: { signal?: AbortSignal }): Promise<HomeLayout>; set(layout: HomeLayout, opts?: { signal?: AbortSignal }): Promise<HomeLayout> };
    network: {
        today(opts?: { signal?: AbortSignal }): Promise<Today>;
        popular(opts?: { limit?: number; signal?: AbortSignal }): Promise<Popular>;
        tryNext(opts?: { limit?: number; signal?: AbortSignal }): Promise<TryNext>;
    };
    feed: {
        list(opts?: { for?: 'me'; cursor?: string; signal?: AbortSignal }): Promise<{ items: FeedItem[]; next_cursor: string | null }>;
        post(text: string, opts?: { link?: string; signal?: AbortSignal }): Promise<{ id: number; post_id: number; text: string; url: string; created_at: string }>;
        contribute(item: { id: string; text: string; url: string; picture_url?: string }, opts?: { signal?: AbortSignal }): Promise<{ item: FeedItem; created: boolean }>;
    };
}
~~~~

## function createHomeFeedClient

~~~~
export declare function createHomeFeedClient(client: OpenVibeClient, opts?: { networkBaseUrl?: string; communityBaseUrl?: string }): HomeFeedClient;
~~~~
