Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

hawkBit Compatibility

raptor implements a subset of hawkBit, chosen to cover the device update workflow first. This page is the source of truth for what exists today.

Baseline: this matrix is measured against hawkBit 1.x. hawkBit reached 1.0 in April 2026 and 1.1.0 in July, removing some features along the way — rows below reflect that, not the older 0.x contract.

Device API (DDI v1)

The DDI v1 contract is implemented field-for-field and verified with golden fixtures and an end-to-end test against a real hawkBit DDI client.

FeatureStatus
Poll root, config.polling.sleep, _links
deploymentBase (download/update modes, chunks, artifacts)
Deployment feedback state machine
cancelAction + cancel feedback
configData (attributes: merge / replace / remove)
installedBase
Artifact download with HTTP Range (resume)
.MD5SUM companion endpoint
Auto-registration (gateway token / anonymous¹)
confirmationBase confirmation flow
Maintenance windows (deployment.maintenanceWindow)
DMF (AMQP) device path❌ (#11)
pollingTime RSQL-matched overrides (hawkBit 0.10)

¹ hawkBit 0.8 removed anonymous controller support and anonymous download. raptor keeps anonymous mode as a raptor extension (useful for dev/lab setups), not a hawkBit 1.x compatibility item — see the Auth table.

Management API

AreaStatus
Targets CRUD, assignedDS, installedDS, actions, attributes
Software modules CRUD + multipart artifact upload/list/download/delete
Distribution sets CRUD + module composition
Actions (per-target and fleet-wide list/filter)
Rollouts (create/start/pause/resume/stop/delete, deploy groups)
Target filters + auto-assignment
Per-target auto-confirm
FIQL filter targets by auto-confirm status (autoConfirm==, hawkBit 1.1)
Target groups (group attribute, q=group==)
Paging (offset/limit), sort=, q= FIQL on lists
Software-module / distribution-set / target types CRUD (composition drives complete; target-type/DS-type compatibility enforced)
Target / distribution-set tags CRUD, assign/unassign, q=tag==x
Metadata endpoints (targets / modules / DS, targetVisible on module entries)
All four action types + force escalation (PUT .../actions/{id}) and force-quit (DELETE ...?force=true)
Rollout approval workflow (rollout_approval_enabled, approve/deny with remark; raptorctl rollout approve|deny)
Dynamic rollouts (dynamic, dynamicGroupTemplate; trailing group absorbs newly-matching targets, rolls over at capacity, never self-completes)✅ (amountGroups: 0 “pure dynamic” rollouts, with no static groups at all, are not accepted — #147)
Maintenance windows on direct assignments✅ (hawkBit’s own Management API has no maintenanceWindow field on rollout creation or target-filter auto-assignment to be at parity with — see #116)
Per-entity quotas ([quota], hawkBit’s defaults, 429 on breach)
Automatic action cleanup ([cleanup], action.cleanup.auto.*)✅ (raptor additionally keeps rollout progress stable across a sweep, which upstream does not)
Multi-assignment / action weightsremoved upstream in hawkBit 0.10; not planned (#10)

Wire-format alignment with hawkBit 0.10: successful deletes return 204 No Content — raptor’s mgmt delete handlers already do. Quota violations return 429 with hawkbit.server.error.quota.tooManyEntries, which raptor matches — see the [quota] section.

Action types

hawkBit has forced, soft, downloadonly, and timeforced. raptor models all four. timeforced starts out soft and escalates once its deadline passes; downloadonly forces the download and never asks the device to install. An operator can escalate a running action to forced with PUT /rest/v1/targets/{controllerId}/actions/{actionId}, and force-quit one that the device is not acknowledging with DELETE …/actions/{actionId}?force=true.

Auth

MechanismStatus
DDI target security token
DDI shared gateway token
DDI anonymous mode (raptor extension¹)
Management API HTTP Basic (single admin)
Session cookie for the web console
mTLS / certificate DDI auth❌ (#13)
Multiple users / roles, OIDC❌ (#13)

Tenancy

raptor is single-tenant (#12). It answers to exactly one tenant on the DDI URL’s /{tenant}/controller/v1/... segment — the tenant config key, default DEFAULT — and rejects any other segment with 404, matching hawkBit’s own behavior. There is no per-tenant data isolation — run one raptor instance per fleet. The schema does carry a tenant column on every query-root table so isolation can land later without a migration; see the design doc.

Note: Items marked ❌ link to their tracking issue on the GitHub repository. The schema is designed so these can be added without breaking existing deployments.