> ## Documentation Index
> Fetch the complete documentation index at: https://densumesh-broccoli-27.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Installation

> Add Broccoli to your Rust project

## Requirements

* Rust 1.70 or later
* A supported message broker (Redis, RabbitMQ, or SurrealDB)

## Add the dependency

Add Broccoli to your `Cargo.toml`:

```toml theme={null}
[dependencies]
broccoli_queue = "0.4"
```

## Feature flags

Broccoli uses feature flags to enable different message brokers. By default, only Redis is enabled.

### Available features

| Feature      | Description                     | Default |
| ------------ | ------------------------------- | ------- |
| `redis`      | Enable Redis broker support     | ✅       |
| `rabbitmq`   | Enable RabbitMQ broker support  | ❌       |
| `surrealdb`  | Enable SurrealDB broker support | ❌       |
| `management` | Enable queue management API     | ❌       |

### Using specific brokers

<CodeGroup>
  ```toml Redis only (default) theme={null}
  [dependencies]
  broccoli_queue = "0.4"
  ```

  ```toml RabbitMQ only theme={null}
  [dependencies]
  broccoli_queue = { version = "0.4", default-features = false, features = ["rabbitmq"] }
  ```

  ```toml SurrealDB only theme={null}
  [dependencies]
  broccoli_queue = { version = "0.4", default-features = false, features = ["surrealdb"] }
  ```

  ```toml Multiple brokers theme={null}
  [dependencies]
  broccoli_queue = { version = "0.4", features = ["rabbitmq", "surrealdb"] }
  ```
</CodeGroup>

### Management feature

Enable the `management` feature to access queue status and monitoring capabilities:

```toml theme={null}
[dependencies]
broccoli_queue = { version = "0.4", features = ["management"] }
```

## Required dependencies

Broccoli requires async runtime support. Add Tokio and serde to your project:

```toml theme={null}
[dependencies]
broccoli_queue = "0.4"
tokio = { version = "1", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
```

For working with timestamps in your message payloads, you may also want:

```toml theme={null}
[dependencies]
chrono = { version = "0.4", features = ["serde"] }
```

## Verifying installation

Create a simple test to verify Broccoli is installed correctly:

```rust theme={null}
use broccoli_queue::queue::BroccoliQueue;

#[tokio::main]
async fn main() {
    // This will fail to connect without a running broker,
    // but verifies the library is installed correctly
    let result = BroccoliQueue::builder("redis://localhost:6379")
        .build()
        .await;
    
    match result {
        Ok(_) => println!("Connected successfully!"),
        Err(e) => println!("Connection failed (expected without broker): {}", e),
    }
}
```

Run with:

```bash theme={null}
cargo run
```

## Next steps

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/quickstart">
    Build your first producer and consumer
  </Card>

  <Card title="Brokers" icon="server" href="/brokers/overview">
    Configure your message broker
  </Card>
</CardGroup>
