Shared responsibility
Where the platform’s responsibility ends and yours begins.
SPEKTRA Edge runs containerized applications on fleets of edge devices — hardware sitting in shops, factories, vehicles, or offices, far from a data centre and often on unreliable networks.
You do not administer those devices one at a time. You describe what a device should look like and what should run on it, and the platform makes it so, whether you have one device or ten thousand.
This page gives you the mental model behind that. If you have been through Get started, it explains what was actually happening while you clicked; if you have not, nothing here depends on it.
There are three sides to it: the tools you work with, the platform itself, and your devices out in the field.
flowchart LR
%% --- What you use ---
subgraph YOU["You"]
DASH["Dashboard"]
CLI["cuttle CLI"]
API["Your own code<br/>(gRPC / REST)"]
end
%% --- The platform ---
subgraph PLATFORM["SPEKTRA Edge platform"]
SVC["Core services<br/>identity, devices, applications,<br/>monitoring, logging, limits"]
end
%% --- The edge ---
subgraph EDGE["Your devices"]
D1["Device<br/>droplet + pods"]
D2["Device<br/>droplet + pods"]
end
DASH --> SVC
CLI --> SVC
API --> SVC
SVC <-->|"desired state down,<br/>status, metrics, logs up"| D1
SVC <-->|"desired state down,<br/>status, metrics, logs up"| D2
Everything the dashboard shows you, it reads through the platform API. The
cuttle CLI uses that same API, and so can your own code — see
Integrate. That means most of what you do in the dashboard can be
scripted and automated.
Four things account for most of what you will do.
flowchart TD
P["Project<br/><i>your fleet, pinned to a region</i>"]
D["Device<br/><i>one piece of hardware</i>"]
A["Distribution<br/><i>an application and where it should run</i>"]
PO["Pod<br/><i>a running container on a device</i>"]
P --> D
P --> A
A -->|"scheduled onto<br/>matching devices"| PO
D -->|"hosts"| PO
This is the part that most often surprises people coming from conventional server management.
You never “run a command on a device” in the normal course of operating a fleet. Instead you record the state you want on the platform, and each device continuously pulls that state and makes itself match. A device that was offline when you made a change picks it up when it reconnects; no retry queue, no partial rollout to reconcile by hand.
Two practical consequences:
You get these as part of the platform, rather than assembling them yourself.
| Service | What it does for you |
|---|---|
iam.edgelq.com |
Users, groups, and service accounts; projects and organizations; roles and role bindings |
devices.edgelq.com |
Device registration, identity, and configuration |
applications.edgelq.com |
Distributions and pods: what runs where |
monitoring.edgelq.com |
Time-series metrics, alerting policies, and notifications |
logging.edgelq.com |
Log storage and search, including logs forwarded from devices |
audit.edgelq.com |
A record of every API call and resource change |
limits.edgelq.com |
Resource limits, so one project cannot exhaust a shared pool |
secrets.edgelq.com |
Secrets management |
proxies.edgelq.com |
Tunnelled connectivity to devices, which is how remote access works |
meta.goten.com |
Service registration and discovery |
Each one has a full API reference under Service APIs. You will also see
these names in audit entries, in IAM role definitions, and in cuttle commands.
The platform runs in multiple regions, and a project belongs to one of them. Pick the region closest to your devices when you create a project: it is the region your devices talk to, so proximity matters for latency and for how quickly a device picks up a change.
Where the platform’s responsibility ends and yours begins.