> ## Documentation Index
> Fetch the complete documentation index at: https://motiadev-add-real-system-tutorial-round-2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Core Workers

> The modular building blocks of the iii architecture — engine, workers, and adapters.

iii Architecture is very modular. Composed of a few Layers: Engine, Workers, Adapters.

Let's break down each layer:

* **Engine**: The core of iii. It is the engine that powers the iii architecture.
* **Workers**: The core workers that make up the iii architecture.
* **Adapters**: The adapters that connect the iii architecture to the outside world. See [Adapters](../advanced/adapters) for details.

## Engine

The engine is the orchestration layer. Responsible for connecting the workers to SDK workers.

## Core Workers

Built with Rust for exceptional speed and memory efficiency, Core Workers deliver top-tier performance.

Examples of Workers:

* **HTTP Worker**: Expose functions as HTTP endpoints.
* **Stream Worker**: Durable streams for real-time data subscriptions.
* **Queue Worker**: Topic-based message queuing with retries and DLQ.
* **PubSub Worker**: Topic-based publish/subscribe for real-time events.
* **Cron Worker**: Schedule functions with cron expressions.
* **Observability Worker**: Traces, metrics, logs, and alerts (OpenTelemetry).

Within these workers, there's an Adapter Layer, where we can configure external services to be used as their backend.
For example: in the Queue Worker, you can configure Redis or RabbitMQ to manage queues.

## How to configure the Engine

Let's use the Stream Worker as an example. The following file is the main configuration file for iii.
Add it to your project as `iii-config.yaml` and iii will automatically load the workers and adapters.

```yaml theme={"theme":{"light":"catppuccin-latte","dark":"dark-plus"}}
workers:
  - name: iii-stream
    config:
      port: ${STREAM_PORT:3112}
      host: 0.0.0.0
      adapter:
        name: redis
        config:
          redis_url: ${REDIS_URL:redis://localhost:6379}
```

In the example above, we're configuring only the Stream Worker in the Engine.
We can configure the port to listen on and the host to listen on.

We're also configuring the adapter to use for the Stream Worker. In this case, we're using the `redis` adapter.
We can configure the Redis URL to use for the Redis adapter.
