Skip to content

Feeds

Every feed is a flat, reverse-chronological timeline of activities — no ranking, no aggregation. A feed read is exactly three statements on the backend, constant in page size, no matter how many activities exist (spec §6). Feeds are addressed by (group, id), e.g. timeline:maya or user:maya.

import { DropInClient } from '@dropin/client'
const client = new DropInClient({ url, apiKey, tokenProvider })
const page = await client.feed('user', 'maya').get({ limit: 20 })
page.results // Activity[] — newest first
page.next // opaque cursor, or null when there's no more

user:<id> is a single user’s own posts. The client and react hooks expose sugar for it; DropInServer only has the generic feed(group, id) — there’s no userFeed shortcut server-side.

// client.userFeed(id) is sugar for client.feed('user', id)
const page = await client.userFeed('maya').get({ limit: 20 })

timeline:<id> aggregates activities from every feed <id> follows (spec §1) — the “who I follow” feed. Same sugar pattern as userFeed.

// client.timeline(id) is sugar for client.feed('timeline', id)
const page = await client.timeline('maya').get({ limit: 20 })

There’s no special “explore” concept in the SDK — it’s an ordinary feed, conventionally named e.g. flat:explore, that other feeds follow so their posts fan out into one global timeline (this is exactly how the showcase app’s Explore tab works — see apps/showcase/lib/seed.ts).

const page = await client.feed('flat', 'explore').get({ limit: 20 })

See pagination for how next and loadNext() work across pages, and activities for posting into a feed.