# Minimal vs full stack

Source: https://docs.qiick.io/externa/minimal-vs-full-stack

Cloners can run a **minimal** stack without Redis, a **full** stack with Herd Redis/Reverb/Horizon/Pulse, or the same full stack via **Docker Compose** (no Herd).

|                          | Minimal                                   | Full (Herd)                                                        | Full (Docker Compose)                                                    |
| ------------------------ | ----------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------ |
| Redis                    | Optional / off                            | Required ([guide](https://docs.qiick.io/externa/redis-prerequisite))                    | `redis` service in `compose.yaml`                                        |
| Queue                    | `QUEUE_CONNECTION=database`               | `QUEUE_CONNECTION=redis` + [Horizon](https://docs.qiick.io/externa/horizon)             | `horizon` service                                                        |
| Broadcast                | `BROADCAST_CONNECTION=log`                | `BROADCAST_CONNECTION=reverb` + [Reverb](https://docs.qiick.io/externa/reverb-and-echo) | `reverb` on host **`:8081`** (avoids Herd `:8080`)                       |
| Notifications UI         | **60s poll only** (realtime off)          | Echo push on private channel; **no** 60s poll while connected      | Same as full                                                             |
| Presence / avatar WS dot | Offline / “Realtime off”                  | Presence `online` + avatar `ConnectionDot`                         | Same as full                                                             |
| Pulse                    | Off or storage ingest                     | Redis ingest + `pulse:work` ([Pulse](https://docs.qiick.io/externa/pulse-and-health))   | `pulse` service                                                          |
| Dashboard Health         | Empty / unavailable Pulse & Horizon cards | Native Pulse + Horizon metrics                                     | Same as full                                                             |
| How to start             | `composer run dev`                        | Herd + Horizon + Pulse (below)                                     | `cp .env.docker.example .env && docker compose up --build` → **`:8000`** |

Prefer **one** local path per checkout: Herd/bare-metal **or** Docker Compose. Compose overrides `APP_URL` / DB hosts via `COMPOSE_*` so a leftover Herd `.env` does not break containers — [Installation — Docker](https://docs.qiick.io/externa/installation#docker-compose-local-full-stack).

Bare-metal / VPS production without Compose: [Deployment](https://docs.qiick.io/externa/deployment). Production without Redis: [Production without Redis](https://docs.qiick.io/externa/production-without-redis). Docker production image: [Deployment — Docker](https://docs.qiick.io/externa/deployment#docker-production).

## Processes (full local with Herd)

Herd already serves the site and (with Pro) **Reverb on `:8080`**. Besides Vite / Pail / optional `artisan serve`:

| Process                    | Required?                                                                        |
| -------------------------- | -------------------------------------------------------------------------------- |
| `php84 artisan horizon`    | Yes — Redis queues + Health Horizon cards                                        |
| `php84 artisan pulse:work` | Yes — Pulse aggregates for Health                                                |
| Herd Reverb service        | Yes for Echo — **already running**; match `.env` credentials                     |
| `php artisan reverb:start` | Only if **not** using Herd Reverb (standalone). Conflicts on `:8080` if both run |

```bash
php84 artisan horizon
php84 artisan pulse:work
```

`composer run dev:full` also starts `reverb:start` for non-Herd setups. With Herd Reverb up, run Horizon + Pulse yourself (or stop Herd’s Reverb before using `dev:full`).

## `.env.example` blocks

See commented sections in `externa-core/.env.example` and [Environment variables](https://docs.qiick.io/externa/environment-variables). Herd Reverb defaults: `REVERB_APP_ID=1001`, `REVERB_APP_KEY=laravel-herd`, `REVERB_APP_SECRET=secret`, host `127.0.0.1`, port `8080`.
