> ## Documentation Index
> Fetch the complete documentation index at: https://s2.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Stream Resources

> Manage streams with S2 SDKs: list streams, create them, inspect configuration, and delete them.

Streams live within basins and are the core data structure in S2.

You can have an unlimited number of streams, and create them instantly (even on first use).

Data retention policies, storage classes, and timestamping behavior are all configurable.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    // List streams
    const streams = await basin.streams.list({ prefix: "user-" });

    // Create a stream
    await basin.streams.create({
    	stream: "user-actions",
    	config: {
    		/* optional configuration */
    	},
    });

    // Get configuration
    const streamConfig = await basin.streams.getConfig({ stream: "user-actions" });

    // Delete
    await basin.streams.delete({ stream: "user-actions" });
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    # List streams
    streams = await basin.list_streams(prefix="user-")

    # Create a stream
    await basin.create_stream(
        "user-actions",
        # config=StreamConfig(...)  # optional
    )

    # Get configuration
    config = await basin.get_stream_config("user-actions")

    # Delete
    await basin.delete_stream("user-actions")
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    // List streams
    streams, _ := basin.Streams.List(ctx, &s2.ListStreamsArgs{Prefix: "user-"})

    // Create a stream
    basin.Streams.Create(ctx, s2.CreateStreamArgs{
    	Stream: "user-actions",
    	Config: &s2.StreamConfig{ /* optional */ },
    })

    // Get configuration
    config, _ := basin.Streams.GetConfig(ctx, "user-actions")

    // Delete
    basin.Streams.Delete(ctx, "user-actions")
    ```
  </Tab>

  <Tab title="Rust">
    ```rust theme={null}
    // List streams
    let streams = basin
        .list_streams(ListStreamsInput::new().with_prefix("user-".parse()?))
        .await?;

    // Create a stream
    // Optionally, pass `.with_config(StreamConfig { .. })` to CreateStreamInput.
    basin
        .create_stream(CreateStreamInput::new("user-actions".parse()?))
        .await?;

    // Get configuration
    let config = basin.get_stream_config("user-actions".parse()?).await?;

    // Delete
    basin
        .delete_stream(DeleteStreamInput::new("user-actions".parse()?))
        .await?;
    ```
  </Tab>
</Tabs>

See [stream configuration](/api/streams/get-config) for more details on all options.
