Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions backend/docs/pages/intro/intro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<!---
Copyright 2026 SECO Mind Srl

SPDX-License-Identifier: Apache-2.0
-->

# Edgehog

![Backend CI](https://github.com/edgehog-device-manager/edgehog/actions/workflows/backend-ci.yaml/badge.svg)
![Frontend CI](https://github.com/edgehog-device-manager/edgehog/actions/workflows/frontend-ci.yaml/badge.svg)
![Coverage](https://img.shields.io/coverallsCoverage/github/edgehog-device-manager/edgehog)

**License:** Apache 2.0 — [apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0.html)

An open-source IoT device fleet management platform built on [Astarte](https://github.com/astarte-platform/astarte). Manage hardware, push firmware updates, track device health, and automate deployments — all through a single GraphQL API.

## What Edgehog does

<div class="feature-cards">
<div class="feature-card">
<div class="card-icon" style="background: #e0f5f0;">📡</div>
<h3>Device management</h3>
<p>Register and monitor your entire device fleet. Query real-time status: online/offline state, last-seen IP, cellular connectivity, battery, OS info, and hardware details.</p>
</div>

<div class="feature-card">
<div class="card-icon" style="background: #fff4e0;">🔄</div>
<h3>OTA update campaigns</h3>
<p>Create base image collections and roll out firmware upgrades across device groups using campaigns.</p>
</div>

<div class="feature-card">
<div class="card-icon" style="background: #e8f0ff;">📦</div>
<h3>Container deployments</h3>
<p>Define applications as versioned releases of containers. Deploy, upgrade, start, stop, and delete containerized workloads via deployment campaigns.</p>
</div>

<div class="feature-card">
<div class="card-icon" style="background: #fce8f0;">📊</div>
<h3>Fleet grouping</h3>
<p>Tag devices freely and write selector expressions to form dynamic groups that update automatically.</p>
</div>

<div class="feature-card">
<div class="card-icon" style="background: #eaf3de;">📍</div>
<h3>Geolocation</h3>
<p>Track device position and location data reported from the field. Query per-device position and last-seen coordinates through the API.</p>
</div>

<div class="feature-card">
<div class="card-icon" style="background: #eeedfe;">🔗</div>
<h3>Remote Forwarding</h3>
<p>Request and manage forwarder sessions to tunnel traffic to specific devices for diagnostics and remote access — configurable per tenant.</p>
</div>
</div>

## API reference

### Admin REST APIs

Edgehog admin tasks (i.e., managing tenants) are available through a REST API. It supports creating, updating and deleting tenants

**Endpoint**

```
http://<your-host>/admin-api/v1/
```

Replace `<your-host>` with your Edgehog instance hostname.

**Full API docs** available here: [admin-rest-api](admin-rest-api/)
Comment thread
lusergit marked this conversation as resolved.

### Tenant GraphQL APIs

All Edgehog operations are exposed through a **GraphQL API**. It supports queries, mutations, and real-time subscriptions.

**Endpoint**

```
http://<your-host>/tenants/<your-tenant>/api
```

Replace `<your-host>` with your Edgehog instance hostname and `<your-tenant>` with the slug of your tenant.

**Full API docs** available here: [tenant-graphql-api](tenant-graphql-api/)
Comment thread
lusergit marked this conversation as resolved.

#### Key resources

| [**Queries**](https://docs.edgehog.io/0.12/tenant-graphql-api/#group-Operations-Queries) | Query your device data. |
| [**Mutations**](https://docs.edgehog.io/0.12/tenant-graphql-api/#group-Operations-Mutations) | Make changes and interact with Edgehog. |
| [**Subscriptions**](https://docs.edgehog.io/0.12/tenant-graphql-api/#group-Operations-Subscriptions) | Subscribe to events as they happen. |

## How to read this documentation

**1. Core concepts**
Comment thread
lusergit marked this conversation as resolved.

Before exploring features or the API, read the [Core concepts](core_concepts-1.html) page. It defines the building blocks (**Hardware Types**, **Devices**, **System Models**, **Groups**, and **Selectors**) that all other sections depend on.

**2. Follow the feature guides**

The sidebar organizes topics from setup (hardware types, system models) to operations (OTA updates, campaigns, container deployments). Work through them sequentially: each guide builds on the vocabulary established by the previous one.

**3. Use the API reference for integration work**

The [GraphQL API reference](https://docs.edgehog.io/0.12/tenant-graphql-api/) lists every query, mutation, and subscription with argument types and example payloads. Use it alongside the feature guides when building integrations or automating fleet operations.

**4. Note features marked as planned**

Sections marked with an asterisk (\*) (such as Attributes and Attribute filters) describe functionality planned for a future release. The selector syntax for attributes is already in place, but attribute population is not yet active. Treat these sections as forward reference only.

**5. Download or explore offline**

An ePub version of the full documentation is available at the bottom of any page. A [llms.txt](llms.txt) is also provided for machine-readable consumption.
15 changes: 0 additions & 15 deletions backend/docs/pages/user/intro_user.md

This file was deleted.

59 changes: 59 additions & 0 deletions backend/docs/style/cards.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* This file is part of Edgehog.
*
* Copyright 2026 SECO Mind Srl
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
*/

.feature-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 1.25rem;
margin: 2rem 0;
}

.feature-card {
background: #ffffff;
border: 1px solid #e8e8e8;
border-radius: 12px;
padding: 1.5rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
}

.feature-card .card-icon {
width: 48px;
height: 48px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
margin-bottom: 1rem;
}

.feature-card h3 {
font-size: 1rem;
font-weight: 700;
margin: 0 0 0.5rem 0;
color: #1a1a1a;
}

.feature-card p {
font-size: 0.9rem;
color: #555;
line-height: 1.6;
margin: 0;
}
9 changes: 7 additions & 2 deletions backend/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -142,14 +142,19 @@ defmodule Edgehog.MixProject do
# Add here additional documentation files
defp docs do
[
main: "intro_user",
main: "intro",
logo: "docs/images/logo-favicon.png",
javascript_config_path: "../versions.js",
extras: Path.wildcard("docs/pages/*/*.md"),
filter_modules: ~r/Edgehog/,
assets: %{"docs/images/" => "assets"},
assets: %{"docs/images/" => "assets", "docs/style/" => "style"},
before_closing_head_tag: fn
:html -> ~s(<link rel="stylesheet" href="style/cards.css">)
_ -> ""
end,
api_reference: false,
groups_for_extras: [
Introduction: ~r/intro/,
"User Guide": ~r"/user/",
"OTA Updates": ~r"/ota_updates/",
"Containers management": ~r"/containers/",
Expand Down
Loading