Skip to main content

Streams and partitions

Every channel is a set of Streamr streams derived from one base ID: four for open and protected channels, five when membership is contract-backed. The stream ID has the form {ownerAddress}/{id}, which is what makes ownership self-evident.

These are protocol constants, not settings.

StreamStoredPartitionsCarries
…-1 messageYes12Conversation (P0), edits and deletes (P1), moderator deltas (P2), file chunks (P3–P11)
…-2 ephemeralNo3Presence and typing (P0), media signals (P1), media data (P2)
…-3 adminYes3Moderation snapshot (P0), channel image (P1), password challenge (P2)
…-4 keysYes4Key announcements (P0), requests and answers (P1), member roster (P2). Contract-backed only
…-5 interactionsYes3Reactions (P0), two reserved

Who may publish where

StreamOpen and protectedContract-backed, visibleContract-backed, sealed
-1Everyone, or the owner alone if read-onlyThe gate contractThe shared publish key
-2 and -5EveryoneThe gate contractThe interactions key
-3The ownerThe ownerThe owner
-4NoneMembersMembers

The -3 stays owner-only in every type, which is why the keys protocol cannot fold into it: any member must be able to publish a key request.

DM inboxes

A personal inbox is a deterministic pair of streams derived from your address: a stored message stream of 13 partitions (messages, sync, sync blobs, notifications, then nine file-chunk partitions) and an ephemeral one for presence and typing.

Its permissions are the inverse of a channel: anyone publishes, only the owner subscribes. The inbox metadata carries the owner's encryption public key, which is what lets anyone seal a message to them.

Diagrams

Open channel: streams with their on-chain metadata, permissions and partition layout

Content flows unencrypted; the metadata variants cover listed/unlisted and read-only combinations. The interactions stream is not drawn here.