A StreamID is a globally unique identifier that points to a stream of mutable data on the Ceramic Network. Unlike a traditional pointer, a StreamID is content-addressed, meaning its value is derived from the cryptographic hash of the stream's initial state and metadata. This ensures the identifier is immutable and verifiable, even as the data it points to can be updated over time. The structure typically includes the stream type (e.g., tile), the CommitID of its genesis commit, and a network identifier.
StreamID
What is StreamID?
A StreamID is a unique, content-addressed identifier for a data stream within the Ceramic Network, enabling decentralized, mutable data structures.
The primary function of a StreamID is to provide a permanent, decentralized reference for mutable documents. When an application requests data using a StreamID, the Ceramic protocol can deterministically locate the current state of the stream across the peer-to-peer network. This is crucial for building applications with user-controlled data, as it allows for versioning, forking, and secure updates without relying on a central registry or database. Each update creates a new commit, but the StreamID remains constant, acting as a stable pointer to the evolving document.
Technically, a StreamID is represented as a multicodec string, such as kjzl6cwe1jw14.... It is composed of several encoded parts: a multicodec prefix indicating the stream type, the CID (Content Identifier) of the stream's genesis commit, and an optional multibase prefix for the encoding. This standardized format ensures interoperability across different tools and clients in the ecosystem. Developers interact with StreamIDs through Ceramic's APIs to create, update, and query streams.
StreamIDs are foundational to Ceramic's data model, enabling use cases like decentralized social graphs, user profiles, and dynamic application settings. For example, a user's profile might be stored in a stream, and its StreamID can be used as a DID (Decentralized Identifier) or linked from other streams. This creates a web of interconnected, user-owned data where references are secure and resilient to central points of failure. The integrity of these references is guaranteed by the underlying content addressing.
In practice, working with StreamIDs involves understanding related concepts like StreamState, which represents the current data and metadata of a stream, and CommitID, which pins a specific historical version. While a StreamID always points to the tip of the stream (the latest state), a CommitID points to a fixed point in its history. This architecture supports complex data interactions, allowing developers to build applications with the flexibility of mutable data and the security guarantees of immutable content addressing.
How a StreamID Works
A StreamID is the unique, cryptographically verifiable identifier for a data stream on the Ceramic Network, enabling decentralized, mutable data structures.
A StreamID is a Uniform Resource Name (URN) that uniquely and permanently identifies a stream—a mutable data structure—on the Ceramic Network. It is composed of several encoded components: a StreamType, the StreamID itself (a CommitID for the genesis commit), and an optional commit reference. This structure allows any client to deterministically locate and verify the entire history of a stream's data, starting from its creation. Unlike a simple hash, a StreamID points to a living document that can be updated over time by its controller.
The core components of a StreamID are derived from the stream's initial state. When a stream is created, its first operation is a genesis commit. The hash of this commit, known as the StreamID, becomes the immutable root identifier. The StreamID is then combined with a StreamType (e.g., tile or caip10-link) to form the complete URN, following the format: ceramic://<stream-type>/<stream-id>. This design ensures global uniqueness and allows the network to route requests to the correct stream type handler for state resolution and validation.
To interact with a stream, clients use the StreamID to query the Ceramic network. Nodes use the StreamID to fetch the stream state, which is reconstructed by replaying the cryptographic chain of signed commits stored on the decentralized ledger. The StreamID itself does not change when the stream is updated; instead, updates are appended as new commits referenced by their CommitID. This mechanism separates the permanent identity of the stream from its evolving content, which is a fundamental pattern for versioned, decentralized data.
CommitIDs are closely related to StreamIDs. A CommitID is a URN that pinpoints a specific version (commit) within a stream's history, formatted as ceramic://<stream-type>/<stream-id>?commit=<commit-hash>. While a StreamID always resolves to the current state, a CommitID is immutable and resolves to a historical state. This enables powerful features like data provenance, version control, and cacheable references to specific snapshots, all anchored to the stream's primary StreamID.
In practice, developers encounter StreamIDs when creating new streams, loading existing data, or sharing references to ceramic documents. For example, a decentralized social profile might have a StreamID like ceramic://kjzl6cwe1.... Any application can use this ID to fetch the latest profile data, verify all updates were signed by the correct DID, and display it. This interoperable addressing system is foundational for building composable, user-centric applications where data is owned by users and shared across platforms.
Key Features of a StreamID
A StreamID is a decentralized identifier (DID) that provides a permanent, cryptographically verifiable address for a data stream on the Ceramic network.
Decentralized Identifier (DID)
A StreamID is a type of Decentralized Identifier (DID) as defined by the W3C standard. It is a self-sovereign identifier that is not issued or controlled by a central registry, but is derived from a user's DID method (e.g., did:key or did:pkh). This ensures the identifier is portable and censorship-resistant.
Composed of a Stream Type and Commit ID
The core structure is ceramic://<stream-type>@<commit-id>. The Stream Type (e.g., tile or caip10-link) defines the data model and validation rules. The Commit ID (CID) is a Content Identifier from IPFS, pointing to the specific state of the stream. This composition links the logical type to its immutable data.
Immutable Pointer to Evolving Data
A StreamID remains constant for the lifetime of a stream, even as its underlying data is updated. It points to the tip of a Merkle DAG (Directed Acyclic Graph) of commits. Each update creates a new commit with a new CID, but the StreamID provides a stable address to always resolve the latest state.
Cryptographically Verifiable
Every commit in the stream is signed by the stream controller's DID. The StreamID, through its linked CIDs, enables anyone to cryptographically verify the integrity of the data and the authenticity of all updates, ensuring the history is tamper-proof.
Human-Readable vs. Stream Reference
For usability, applications often use a Stream Reference, a shorter, deterministic string derived from the initial commit (e.g., kjzl6cwe1...). This is not the full StreamID but is a stable alias that the Ceramic node can resolve to the canonical StreamID, improving developer experience.
Interoperability via CAIP-10 Links
A key use case is the caip10-link stream type. It creates a Ceramic Account ID by linking a blockchain account (using CAIP-10 format, e.g., eip155:1:0x...) to a DID. This StreamID becomes a portable, chain-agnostic identity root for a user across applications.
StreamID
A StreamID is a unique, cryptographically verifiable identifier for a data stream within the decentralized Streamr Network, analogous to a URL or a public key in other systems.
A StreamID is a Uniform Resource Name (URN) that uniquely and permanently identifies a specific data stream on the Streamr Network. Its canonical format is urn:streamr:<network>:<chain>/<path>, where the <path> is a hierarchical namespace, often represented as a human-readable domain-like string (e.g., /eth/mainnet/price/eth/usd). This structure allows for logical organization and discovery of streams. The identifier is immutable; once a stream is created with a given StreamID, it cannot be changed, ensuring a permanent reference for publishers and subscribers.
Under the hood, a StreamID resolves to a stream's metadata and its partitioning scheme. The core technical component is the stream's public key, which is derived from the owner's private key during creation. This public key is hashed to form part of the identifier, providing cryptographic proof of ownership and enabling secure permission management. The StreamID is therefore not just a label but a verifiable claim that links the data to its creator, forming the foundation for access control and data provenance on the network.
From a developer's perspective, the StreamID is the primary handle used in all Streamr client libraries (e.g., JavaScript, Python) to publish data to, subscribe to, or query the history of a stream. It decouples the logical stream from its underlying storage and transport mechanisms, allowing the network to handle scalability and redundancy transparently. When a subscriber requests a StreamID, the network locates the relevant broker nodes and storage nodes that host the stream's data partitions, facilitating efficient and decentralized data delivery.
Examples & Use Cases
A StreamID is a unique, persistent identifier for a data stream on The Graph network, enabling precise querying and composability of decentralized data.
Data Composability & Referencing
StreamIDs enable cross-subgraph data relationships. One subgraph can reference an entity from another by storing its StreamID. This creates a web of interconnected data, allowing a dashboard to pull user data from one stream and their DeFi positions from another, using the IDs as the linking key.
Immutable Data Provenance
Each StreamID is cryptographically tied to the subgraph manifest and deployment transaction. This provides an immutable record of the data's source and version. Analysts and auditors can verify that the data they are querying (e.g., historical treasury balances for a DAO) comes from a specific, unaltered indexer setup.
Integration in dApp Frontends
dApps configure their data layer by specifying the StreamIDs for the subgraphs they depend on. For instance, a lending platform's frontend would be configured with StreamIDs for:
- Oracle Price Feeds
- User Collateral Data
- Protocol Reserve Statistics This decouples the frontend logic from the underlying indexing infrastructure.
Indexer & Curator Operations
Network participants use StreamIDs to manage economic signals. Curators signal on StreamIDs to indicate valuable data, directing indexer resources. Indexers allocate stake to specific StreamIDs they choose to index and serve. The ID is the atomic unit for this decentralized coordination mechanism.
Versioning & Upgrades
When a subgraph developer publishes an update (e.g., adding a new field or event), a new StreamID is generated for the new version. This allows for seamless upgrades—applications can migrate queries to the new ID at their own pace while the old stream remains available, preventing breaking changes.
Ecosystem Usage
A StreamID is a unique, decentralized identifier for a data stream, enabling verifiable data provenance and composability across applications. It is a core component of the Ceramic Network's data infrastructure.
Composable Data in DeFi & DAOs
In decentralized finance and governance, StreamIDs enable reusable, verifiable data objects. A DAO's proposal history, member reputation scores, or a DeFi protocol's configurable parameters can be stored as streams. This allows different applications to read from and write to the same canonical data source, ensuring consistency and enabling complex, interoperable systems.
Verifiable Content & Publishing
StreamIDs provide a permanent, tamper-evident anchor for digital content. Platforms for blogging, documentation, or NFT metadata (like Metaverse projects) can store articles or asset descriptions as streams. The StreamID acts as a content-addressable pointer, allowing anyone to verify the authenticity and full revision history of the published material.
Cross-Application Data Portability
The primary utility of a StreamID is breaking down data silos. A user's playlist created in one music dApp, a game character's inventory, or a professional credential can be represented by a StreamID. Any other application with the correct permissions can discover, read, and potentially update this stream, creating a seamless user experience across the Web3 ecosystem.
Technical Implementation & Tooling
Developers interact with StreamIDs through client libraries like Glaze or Ceramic HTTP API. Key operations include:
- Creating a new stream (generates a new StreamID).
- Loading a stream by its StreamID to read its state.
- Updating a stream by making a signed commit.
- Anchoring streams to a blockchain (like Ethereum) for finality via CACAO capabilities.
StreamID vs. Other Identifiers
A technical comparison of StreamID with other common decentralized identifier (DID) and data referencing methods.
| Feature | StreamID | IPFS CID | Smart Contract Address | Traditional URL |
|---|---|---|---|---|
Primary Purpose | Immutable reference to a dynamic data stream | Immutable reference to static content | Executable code and state on-chain | Mutable reference to a server resource |
Data Mutability | Immutable pointer, mutable underlying data | Fully immutable | Mutable internal state | Fully mutable |
Decentralization | Yes, anchored to a blockchain | Yes, content-addressed network | Yes, on a blockchain | No, relies on centralized authority |
Native Data Indexing | Yes, via ComposeDB | No, requires external indexer | No, requires event parsing | No |
Verifiable Provenance | Yes, via blockchain attestations | Yes, via content hash | Yes, via transaction history | No |
Human-Readable | No, uses cryptographic hash | No, uses cryptographic hash | No, uses hexadecimal address | Yes, uses domain names |
Update Mechanism | New commit CID linked to StreamID | New CID required | Contract function call | Server-side file replacement |
Typical Latency | < 2 sec for updates | Variable, depends on pinning | ~15 sec (Ethereum) | < 100 ms |
Common Misconceptions
StreamID is a core identifier in the Streamr Network, but its specific role and technical implementation are often misunderstood. This section clarifies the most frequent points of confusion.
No, a StreamID is not a smart contract address. While both are unique identifiers, they serve fundamentally different purposes. A smart contract address is a location on a blockchain (like Ethereum) that holds executable code and state. A StreamID is a decentralized identifier for a specific real-time data stream within the Streamr Network. It points to a stream's metadata and its partition nodes, not to a contract. You cannot send tokens to a StreamID, and it does not execute logic.
Frequently Asked Questions
StreamID is the unique, permanent identifier for a Ceramic stream, which is a mutable data structure on the decentralized Ceramic network. These questions address its core functions and practical use.
A StreamID is a unique, content-addressed identifier that permanently references a specific Ceramic stream, which is a mutable data document on the decentralized Ceramic network. It works by encoding three critical pieces of information: the Stream Type (defining its data schema and controller logic), the Commit ID of the genesis commit (the stream's initial state), and a checksum for integrity. This structure ensures that any node can deterministically locate, verify, and reconstruct the current state of the stream's data from the decentralized InterPlanetary File System (IPFS) network, even as the stream is updated over time. Unlike a simple hash, a StreamID points to a living document, not a static file.
Get In Touch
today.
Our experts will offer a free quote and a 30min call to discuss your project.