---
module: devices.sw-deploy
title: Software Deployment
tab: Technical
order: 90
audience: internal
---

## Where the data lives (internal)

Software tasks follow HiveIQ's executor → Kafka → record-store pattern:

1. **Fleet is the executor.** It runs the job (download / install) and **keeps no long-term
   history** — it stays clean, execution-only. The standalone fleet task endpoints are empty by
   design once a job finishes.
2. On **complete or fail**, fleet **produces a Kafka event** with the result.
3. The **devices service consumes** the event and **stores the record**. That record store is the
   source of truth for a device's software history, served at
   `GET /api/atms/{id}/fleet-tasks` (`DeviceFleetTask`).

**So the SW Deploy tab reads the devices record store, not the fleet executor.** The install
action is the exception — it's a *command*, sent directly to the fleet executor.

> Rule of thumb: **history/records → the record store (Kafka-fed); live state or commands →
> a direct API to the executor.** Use the mechanism that fits the need, not one dogmatically.
