Data and views
Explore your devices in a filterable grid, save views (filters, sorts, columns) as personal or team views, and find them in the navigation.
Data and views
The Data surface shows your devices in a grid: one row per device, one column per field (name, type, serial number, last activity, 24-hour consumption...). A view saves one way of looking at that data: the filters, the sort order, the visible columns and their order. Same data, several angles.
It is also your organisation's home page. Clicking an organisation's name in the left rail opens its devices straight away: the view you last opened there, otherwise the first view in the list. If the organisation has no view yet, the page offers to create one.
This surface is rolling out gradually: if the "Appareils" entry does not appear in your sidebar, it is not enabled for your account yet (or it was hidden via Settings → Navigation).
The grid
- Quick search: the top-left field searches name, slug and serial number.
- Filter: add conditions ("type equals...", "litres 24h greater than...") combined with AND or OR. "Add a condition group" nests a sub-group with its own AND/OR join (for example: type equals gateway OR (active AND litres 24h > 100)); groups nest over several levels and are removed in one click. The Filter button badge counts every condition, groups included. "Copy from another view" takes the filter of another view of the same source, after confirmation (the current filter is replaced).
- Load more: the grid loads the first rows, then a "Voir plus (N restants)" button under the last row appends the next batch. Nothing disappears, your position is kept, and the full total stays in the top-right of the toolbar.
- Sort: click a column header, or stack several sort levels via the "Trier" button. In that panel, the order of the levels is their priority: drag a level's handle to move it ahead of another.
- Loading and empty: during the first load, the grid shows greyed rows aligned on your columns. If a filter or the search leaves no row, it says so ("Aucun enregistrement ne correspond aux filtres") and offers "Tout effacer" to get the full view back.
- Column menu: every header shows its field-type icon, and a chevron (visible on hover) opens the column menu: sort both ways, filter by this field (the Filter panel opens with a ready-made condition), group, hide. On your own databases, owners also manage the structure from there: edit the field, duplicate it (definition and values), insert a field to the left or right, delete the field. Clicking the title still sorts.
- Field editor: "Edit field" opens a single panel that gathers everything: the name, the type, the type configuration, the description (collapsed behind "+ Add a description", shown as the header tooltip and as the default form help) and the permissions. The Description and Permissions menu entries open this same panel, focused on the right section. The type is changed in the same searchable list as at creation, restricted to convertible types (conversion never blocks: whatever cannot be converted is cleared); a field of a non-convertible type keeps its type, locked with a tooltip. The configuration of computed fields (formula, button, lookup, count, rollup) can be edited after creation from this panel. When creating a field, or configuring a rich type (Select, Formula, Button, Rollup, Lookup, GPS position), the panel opens as a wide centered dialog for room to fill it in; quick edits of a simple field (rename, description, permissions) stay anchored to the column.
- Add a field: on your own databases, a "+" column at the far right of the grid creates a field, in the same panel as editing. The type is chosen from a searchable, grouped list (standard fields, links and lookup, computed fields, system fields, action), each type with its icon, with the same per-type configuration area.
- Group: the "Grouper" button groups rows by a field (text, select, boolean or number: no dates in v1). Each group gets a collapsible header whose count is the full filtered total for that value, aggregated server-side: not just the rows on the current page. The collapsed state is remembered per view. Single grouping level in v1.
- Fields: show, hide, reorder and resize columns. The panel is searchable (search box at the top), "Show all / Hide all" toggles the listed rows at once (the search subset, if any), and each row carries a visibility checkbox, a "⋯" menu (the same options as the column header menu: sort, filter, pin, footer aggregate, edit, delete…) and a drag handle to reorder. A column can also be reordered by dragging its header directly in the grid (a colored edge marks the insertion point). Each view keeps ITS configuration: changing it in one view does not affect the others. On your own databases, "Edit field" in the ⋯ menu opens the field editor: a field hidden in the view stays editable without showing its column again.
- Freeze columns: "Freeze up to here" in the column menu keeps that column and every column to its left visible while horizontally scrolling a wide table (headers included), with a separator line. The menu of the last frozen column offers "Unfreeze columns"; to move the boundary, freeze again from another column. Like the rest of the column configuration, freezing is per view. Independent from the 📌 pin (pinned filters below).
- Column footer: pick an aggregate (sum, average, min, max, count) in the Fields panel. It covers the whole filtered set, not just the visible page.
- Pinned filters: pin up to 3 fields (📌 in the Fields panel) to change their value in one click from the filter bar, without opening the editor.
Telemetry fields
Three fields computed from telemetry can be filtered and sorted like any other column:
- State:
alarme(an alarm is active on the device),silencieux(no data received for more than 48 hours, or ever: the meter went quiet, which is neither OK nor an alarm), orok. An active alarm always wins over silence. The 48-hour threshold is fixed. The state renders as a colored chip (red for alarm, slate-violet for quiet) and can drive a "Colorer" rule on the map: a map of alarmed devices is just another saved view. Quiet is a water-telemetry notion: a device of another type (a bridge, say) is never "quiet", it staysokas long as no alarm is active. - Last index (L): the meter's last known volume index, in litres.
- Vu le and Litres (24 h): last activity and rolling consumption, as before. These two fields and the last index are only populated for water meters; they stay empty for other device types.
A "quiet devices" view is therefore one filter ("State equals silencieux"), sorted by "Vu le" to surface the oldest first; the "count" footer aggregate on the State column counts alarmed devices over the whole filtered set.
Editing in the grid
On the devices source, what belongs to you can be edited straight in the grid (organisation owners only):
- Name: double-click the cell to set the nickname visible to your organisation (the same one as "Rename for my organisation" on the device page). Clear the cell to remove the nickname.
- Tags: the + button in the cell assigns or removes the organisation's static tags. Smart tags compute their own membership and cannot be edited here.
- Placement: place the device in a zone or remove it; the primary placement is highlighted. A device in no zone at all carries the amber "Non placé" marker instead of an empty cell.
- Dashboards: pin the device to your personal dashboards.
The registry (serial number, type, source...) and telemetry stay read-only: a lock in the column header says so, with the reason in a tooltip. Read-only members (viewer role) see the whole grid with no edit affordance at all.
The grid and the device page write to the same place: a tag assigned here shows up on the device page, and vice versa.
Multi-select and bulk actions
Tick the row checkbox to select several records; Shift + click selects a range, and the header checkbox (de)selects every loaded row. An action panel appears on the right with "N selected · Que voulez-vous faire ?" and, when the filtered set is larger than the loaded rows, "Select all N matching".
"Select all N matching" selects the whole filtered set, whatever its size: there is no longer a cap at selection time. The panel then shows "≈ N selected" (an order of magnitude: the set can move while you look at it), and unticking a row removes just that row from the selection. The selection is counted and verified when you apply an action: if the filters or the data changed between your selection and the action, the action is refused with an explanation instead of touching a different set from the one you were looking at. Redo the selection on the current view. An action stays bounded to 10,000 rows: beyond that, narrow the filters.
What the panel offers depends on the source:
- Your databases: set a field across every selected row at once, duplicate rows, or send them to the trash. Each gesture is a single operation (not a row-by-row loop), and an undo banner lets you reverse it (see below).
- Devices: tag or place the selection in a zone, just like on the map. Registry fields stay read-only.
Set a field across rows
In the panel's "Edit a field", pick the field, type the value (or tick "Clear the field"), then apply: the value lands on every selected row in a single write. A row you are not allowed to edit is simply skipped, never the whole batch.
Copy, paste, keyboard
The grid is keyboard-driven, like a spreadsheet:
- Arrows / Tab move the active cell, Enter edits it, Esc cancels, Space opens the record, Delete clears the cell.
- PageDown loads the next batch. Arrow down on the last loaded row also loads the next batch and lands on it: every row is reachable with the keyboard alone, and rows already on screen stay there.
- The grid is screen-reader friendly: it announces the grid, the total number of rows and columns, the active cell position on every move, and how many rows are shown out of the total after each load.
- Cmd/Ctrl + C copies the selection (or active cell) as spreadsheet text; Cmd/Ctrl + V pastes a range from Excel or Google Sheets: cells fill across rows and columns from the active cell, and rows that overflow past the last one are created. A value that does not match the column type leaves the cell empty instead of failing; a locked column is skipped without blocking the rest of the paste.
- Cmd/Ctrl + Z undoes the last gesture of the session, Shift + Cmd/Ctrl + Z redoes it.
- ? opens the shortcut list.
Undo and redo (session history)
Your write gestures stack for the length of the session: Cmd/Ctrl + Z walks back through them one by one, Shift + Cmd/Ctrl + Z walks forward again. Both also live in the Historique section of the toolbar's "⋯" menu, with the shortcut spelled out next to them.
What the stack holds, on a database: a cell edit, a bulk edit, a multi-cell paste, a duplication, a row creation (CSV import included) and a move to the trash. Everything else (structure changes, view settings) stays out of it; a view's settings have their own Enregistrer / Annuler in the rail.
What to know:
- An undo is a write like any other. It goes through the same permissions and leaves its own trace in the row's history: undoing erases nothing from the log, it appends to it.
- A row you may no longer edit is not undone: the gesture fails with its message and stays undoable later, it does not drop off the stack.
- A paste comes back as one block: every touched cell returns to its previous value in a single write.
- Undoing a creation sends the rows to the trash (they are restorable), and redoing brings them back out.
- The stack belongs to the tab and to the database. Reloading the page empties it (the menu entries grey out again), and two databases open side by side each keep their own.
- Inside a cell you are editing, Cmd/Ctrl + Z is still the input's own typing undo, not the grid's: close the editor (Esc or Enter) to walk the stack.
After each gesture, a banner shows for a few seconds at the bottom of the screen with the symmetric action ("Annuler", then "Rétablir" right after an undo). It is only a shortcut: it disappearing does not empty the stack.
CSV import and export
Export to CSV
Export lives in the selection actions panel: check some rows (or "Tout sélectionner les N correspondants" for the whole view), then Exporter CSV. The file contains the selected rows, in the view's sort order, with only the visible columns, in the French convention (";" separator, comma decimals, ISO dates): it opens directly in Excel.
On a public share link, export only exists when the link's creator ticked "Autoriser le téléchargement CSV": an Exporter CSV button then appears on each device list of the shared view and downloads the whole view (same bounds as the display, up to 10,000 rows), with no selection panel.
Import a CSV (your databases)
"Import CSV" (Structure section of the "⋯" menu at the right of the toolbar, or the empty-database card) opens the wizard:
- Choose the file. The separator (";", "," or tab) is auto-detected; say whether the first row is a header.
- Map the file's columns to your fields. Columns whose name matches a field are pre-mapped; the rest are yours to map or ignore.
- Optionally choose an idempotency key: a field whose value identifies the row. A re-import then updates existing rows instead of creating duplicates.
The import runs in batches. Each value is converted without failing (an unreadable value leaves the cell empty); a fully invalid row is skipped and listed in the final report with its line number. Accepted formats: CSV and TSV, up to 5,000 rows per file.
The map view
A Map view shows the devices on a map, with the view's filters and search applied. Create one from the "+ Créer" button on a zone of the views rail. Every geolocated device shows as a point; a device without a known position does not appear. The displayed position is the registry one, or the latest GPS position reported by the device when it is fresher.
Moving a device (owner). If you own the organization, select the "Data" row of the Layers panel: the Move tool appears in the toolbar. Activate it, then drag the point to its new location; on a touch screen, tap the point, then tap the destination. The registry position is written only on release (or on the confirming tap) and it persists after a reload. On an error, a refusal or a dropped connection, the point snaps back to its saved position and a message explains the problem. A point whose displayed position comes from the device's telemetry (fresher than the registry one) stays readable but cannot be moved: "Position driven by telemetry". Other accounts (non-owner members, share recipients, viewers) see no editing tool at all, and the comparison views stay read-only.
Your own databases too. One of your databases becomes mappable as soon as it carries a GPS position field (see below). The Map view then appears in the database's "+ Créer" menu; every row with a position shows as a point. With no default GPS position field, the Map view shows a message inviting you to add one.
-
Color: the button opens a choice between two modes.
- Select a field: pick a single-select field (status, type...) then a color and an icon per value. They carry across every view: point (and icon) on the map, row stripe in the grid, legend.
- Conditions: define ordered rules ("type equals water meter", "24-hour litres above 500"...), each with its color and optional icon: the first matching rule wins. Drag a rule's handle to change its priority.
Colors come from a curated palette: alarm red and the "quiet" violet stay reserved for semantic states. The legend floats bottom-right on the map, with each value's or rule's icon.
-
Map fields: show up to 3 stacked fields next to each point (name, serial number...).
-
Selection: the pointer tool selects point by point; the rectangle and the lasso select in bulk (lassos add up). The right panel shows the exact count and the bulk actions: tag, place in a zone.
-
Beyond ~500 visible points, the map automatically groups points into numbered clusters: zoom in or click a cluster to expand it.
The right-hand panels stack. The panel button (side-panel icon, far right of the map toolbar) opens and closes the whole right-hand column: layers always sit on top, then the detail of a clicked object, then the selection actions; each panel is a section you can collapse (down to its header), and they stay visible together. On a large screen the column starts open (Layers section expanded); on a small screen or in split view it starts closed, and your choice is then remembered on your device. Drag the column's left edge to widen it (double-click: default width) and the handle between two sections to split their height; with every section collapsed the column shrinks to the stack of headers. Click a marker (or a layer feature) to open its mini record in the "Détail" section; the "expand" icon opens the full record. When too little room is left for the map (mobile, split view or a very wide column), the column overlays the map, only one section expands at a time and collapsing the last one closes the column.
Layers
The Calques (Layers) section of the right-hand column overlays your own geographic data under the devices. Everything is added through a single door, the catalog: the + Add button opens a small two-entry menu, From the catalog and New section.
-
From the catalog ("Depuis le catalogue") opens the layer catalog in three tabs Public / Organization / Personal. It is the one door for sources: basemaps, public layers, organization sources, geolocated databases, file import and URL adding all live there.
You tick as many cards as you like (across any tab), then the Add (N layers) button applies them all at once and closes the catalog. The Sort into a section by category checkbox, left of the button and ticked by default, drops each added layer into a panel section named after its category (created if missing): public layers by their catalog category (Cadastre & limites, Réseaux, Relief...), organization and personal sources by their type (Vecteurs, Tuiles URL, Orthophotos, MNT...). Unticked, the layers are added at the top of the panel, without a section. A card already in the view carries a dimmed In view badge and cannot be re-selected: you remove it from the layers panel (row "..." menu → Remove from view), never from the catalog. Each thumbnail is a live preview.
The Public tab lists the basemaps (Satellite, Plan IGN, OpenStreetMap...) first, then dozens of ready-to-use public layers, provided to every organization: basemaps (Plan IGN, orthophotos), historical aerial photography (1950-1965, vintages from 2000 to 2023, old maps), cadastre, terrain, environment, hazards (flood zones, clay shrink-swell...), sea and coastline, world basemaps. Filter by category and by footprint (mainland France, overseas, world), search by name. The Organization tab lists the sources published by your organization: a grid of thumbnails with each source's type and date, category filters (vectors, tiles, orthophotos, terrain models, 3D models) and a search box. Your other geolocated databases appear there too, as Live cards ("Données" chip): adding one draws its rows on the map read-only, always current, with no vintage. The Personal tab lists your personal catalog, visible to you alone across all your organizations. In-progress and failed conversions (with retry) are visible on all three tabs. On the Organization and Personal tabs, geodata of a same series group into a single card: the latest mission is shown, a date selector lists every capture ("N captures") and the tick selects the shown mission. A year strip above the grid counts missions per year and filters the grid in one click.
On a 2D or 3D map, select a layer with at least two compatible missions, then click Timeline. The date bar temporarily replaces the rendered mission without changing the saved view, its order, its style, or the camera. Closing the bar, pressing Escape, selecting another layer, or leaving the view automatically restores the saved binding ("Latest available" or a fixed date).
On a 2D map, as soon as the view contains at least one dated layer (a historical aerial photograph from the Public catalog with its period, an imported geodata layer with its capture date), an Epochs button appears at the bottom of the map. It unfolds an epoch strip: one step per period, in chronological order (two layers with exactly the same period share a step), plus Today. Picking a step shows its layer(s) and hides only the other dated layers: the basemap, undated layers and your data stay untouched; Today hides every historical layer. The ←/→ arrow keys navigate, Escape closes. The active step and the open/closed state follow the view's Save / Cancel flow and survive a reload after saving; in read-only mode you can still browse without changing anything. The strip does not replace a series Timeline (above): one switches between distinct historical layers, the other explores the missions of a single series.
-
Import a file: at the top of the Organization and Personal tabs, a dashed Import tile uploads a file from your computer into the current tab's catalog. It accepts every format in one gesture: GeoJSON, KML/KMZ, zipped Shapefile, but also heavy files (GeoTIFF orthophotos and terrain models, LAZ/LAS point clouds, 3D Tiles models, IFC BIM models, DWG/DXF plans). Drexo picks the right processing by itself: small vector files are converted instantly in your browser, heavy files are uploaded then converted in the background (follow the progress in the panel). Only DWG/DXF plans ask for an EPSG code; an IFC BIM model must be georeferenced in your BIM software (site location) before export. For a heavy file, the capture date is mandatory: Drexo pre-detects it from the file (GeoTIFF tags, date in the file name) and you confirm or fix it before the upload. An optional Series field groups the missions of a same site (weekly drone surveys, for instance); with a series, the name is auto-suggested as "Series · date", editable. The Organization tab is writers only; the Personal tab is open to everyone.
-
Add a URL ("Ajouter une URL"): the second dashed tile (Organization and Personal tabs) opens a form where you paste the https URL of a WMS (Web Map Service), WMTS (Web Map Tile Service), or XYZ tile service (orthophoto, cadastre...). An optional Access key / token field handles services that require a key: put the
{token}marker in the URL where the key goes (for example...?apikey={token}) and type the key in the dedicated field. The key is substituted when tiles load, in your browser; the stored URL keeps the{token}marker, so the key never appears in clear text in the URL. It is visible to organization members for an organization layer, to you alone for a personal layer. Tiles are loaded by your browser straight from the service, never by our servers. -
New section (the second entry of the + Add menu) creates a group of layers in the panel (presentation only): name it, then drag your rows into it.
-
Per layer: visibility (specific to each view), color, opacity slider.
-
For a WMS or WMTS source, open the "..." menu then Settings to discover the layers published by the service. Choose the layers to display, image format, and style; a WMTS source also lets you choose the tile matrix set. The Access key / token field can also be changed there after creation: replace an expired key, or clear the field to remove it. Only the layer's edit rights allow this (owners for an organization layer, writers for a database layer, you alone for a personal layer). The map applies these settings as soon as you save.
-
Reordering: with a mouse, drag the handle at the end of the row; on a touch screen, long-press the row (it lifts) then drag it. On touch, each row's eye and "..." menu stay visible at all times, with finger-sized targets.
-
Download: a layer's "..." menu offers Download when a file exists and you have the right. Geodata comes down as GeoTIFF (orthophotos, terrain models), LAZ (point clouds) or its original format; a vector layer as its original file or as GeoJSON. It is restricted to organization owners for an organization item, and to you alone for a personal item. Public layers and URLs (WMS/WMTS) cannot be downloaded (no file). The right is checked on our servers, not just by hiding the button.
-
Basemap: the panel's "Fonds" section lists the view's basemaps (Satellite and Plan by default). Basemaps are added from the catalog, at the head of the Public tab: IGN orthophoto (all of France, overseas territories included), IGN plan, OpenStreetMap, OpenTopoMap, and other imagery depending on the platform configuration; an added basemap joins the "Fonds" section. Removed from the panel, they can be re-added from the catalog. A basemap's eye activates it (a single basemap drawn at a time); each basemap shows its provider's attribution.
Layers and geodata belong to the organization: every member sees them in Settings → Maps and layers, a single Map sources list with each source's type; administrators manage layers and tiles, members with write access upload geodata, rename it, retry a failed conversion or delete it. Each tile's "..." menu also offers Download of the file, restricted to organization owners. An owner can enable Available to child organizations on geodata. It then appears in every descendant organization with an Inherited from the source organization badge: ready geodata can be added to 2D maps, 3D maps, and comparisons without copying the file; an in-progress or failed conversion remains visible but cannot be added, retried, or edited from the child organization. A geodata's capture date and series are set at import, where the date is detected from the file when it carries one; they cannot be corrected afterwards from the application, and geodata imported before that detection carries its upload date by default.
A file uploaded directly from a map view's Layers panel ("+ Add → From the catalog → Import tile") is added to that view right away: its row shows the current step ("Queued", then "Converting… ~2 min", the estimate being indicative), or "Error" with a short cause and a Retry action, then the layer draws by itself once the conversion finishes. A known failure always takes priority over "Converting…", including while a new attempt is waiting. Drexo retries temporary network, storage or conversion-resource incidents automatically, but stops after the first attempt when the file is unreadable or invalid. Retry advances one new attempt without duplicating the geodata or removing it from the view. During the upload, the row shows the percentage and an estimated time remaining.
Geodata still converting can also be picked straight from the catalog: selecting it adds it to the view right away (a "Converting…" row) without waiting for the conversion to finish, so there is no need to reopen the catalog once it is ready.
My catalog (personal)
You also have a personal catalog: layers and geodata visible to you alone, across all your organizations. Manage it in Settings → My catalog (your account menu): add a file or a tile URL, rename, retry a conversion, download a file, delete; a bar shows your used space (2 GB of converted files per person). In a view's layer catalog, your personal items live in the Personal tab: only you see them on the map.
Publish to the organization transfers ownership: the item leaves your personal catalog and joins the chosen organization's catalog (becoming visible to all its members). Publishing geodata requires write access in the organization; publishing a vector layer or tile URL requires being an administrator (organization layers are managed by administrators).
Terrain models and thermal imagery in 2D
A converted terrain model (DEM) shows up on the 2D map as an automatic hillshade: nothing to configure. To read elevations as colors, open "Style du raster…" from the "..." menu of its row in the Layers panel: pick a color ramp (Viridis, Inferno, Relief, Grayscale) and set the min/max bounds (the file's values: elevations in meters). The style belongs to each view and is saved with it.
A thermal image works the same way: exported in colors (RGB), it uploads as an orthophoto and displays as-is; exported radiometric (one temperature value per pixel), upload it as an orthophoto too, then give it a ramp via "Style du raster…" (Inferno with bounds in °C, for example 0 to 100). Without a ramp, a radiometric image appears gray: that is expected, raw values are not colors.
The 3D map view
The 3D map view type shows a three-dimensional globe: create one from "+ Create › 3D map", next to "Map". It is a view type of its own, distinct from the 2D map. Its toolbar offers Orbit (free navigation), Top-down view and Recenter (fly back to your data); the camera position is saved with the view. The Layers panel lists your converted geodata in 3D format (point clouds, photogrammetry meshes); 2D orthophotos stay on the Map view. Its Fonds section lists the globe's basemaps (two by default, satellite imagery and IGN plan): add or remove them from the catalog (Public tab) and the row menu, just like in 2D; a basemap's eye activates it (a single active basemap at a time), remembered with the view. Depending on the platform configuration, the globe also shows terrain relief under the imagery. A converted terrain model (DEM) carries a "Relief" badge in the Layers panel: check it in a 3D Map and the globe takes its relief (the first checked layer with relief wins). From a map view's "..." menu, "Open in 3D" creates the sibling 3D view over the same area.
Your database rows also appear on the globe, as spheres, at the same spot as on the 2D map. Each row's Elevation field drives its height: a row with no elevation sits on the ground (or the relief); a set elevation lifts the sphere that many metres above the ground (a negative value places it below the surface). Clicking a sphere selects the row and opens its mini-card in the panel, like clicking a marker in 2D; "Recenter" frames both your geodata and these objects.
The database also appears as a "Data" row in the Layers panel, at parity with the 2D map: click it to select it (it highlights) and its eye draws or hides its objects. Other databases added as layers can be selected and edited the same way in 2D maps, 3D maps and both comparison views. Every write targets the selected row's database and GPS position field, including standalone maps and compositions.
When the database is editable, selecting that row reveals its edit bar (next to the navigation tools), with two tools to place an object on the terrain. The top toolbar itself always keeps Select, Orbit, Top-down view and Recenter.
- Select (top toolbar, default): clicking a sphere selects it and opens its card.
- Place (layer edit bar): choose a row without a position in “What should be placed?”, then click the terrain or mesh. The list supports server-side search and pagination. “New item” also lets you click the position first, then confirm the creation form; closing the form creates nothing. The position is written to the correct database's GPS position field and elevation is reset to zero.
- Move (layer edit bar): drag a sphere across the terrain. The camera stays frozen while dragging and the object follows the cursor. Only the position moves: the row's elevation is preserved (an object placed below the surface stays there).
For the registry Devices source (views of the Data surface), the same edit bar offers Move to the organization owner: drag the sphere across the terrain to update the device's registry position. Only longitude and latitude change; no elevation is invented. "Place" is not offered there: a device is created at registration time, not from the map. As in 2D, a device whose displayed position comes from telemetry stays readable but cannot be moved, with the same explanation.
The layer comparison view
The Comparison view type shows two layer stacks over the same extent, separated by a swipe divider: last year's orthophoto on one side, this year's drone survey on the other, and the divider reveals the differences. Create one from "+ Create › Comparison", or from a map view's "..." menu with "Compare layers": the sibling view then carries the map's basemap and layers on side A.
- Space A / Space B: the right panel (same shell as the Map and 3D Map views, opened by the toolbar's panels button) offers two spaces. Each space is composed like a normal map: click Add layers to open the catalog, tick several entries then confirm with "Add (N layers)". You can stack organisation layers, converted orthophotos and Drexo catalog sources (historical orthophotos, basemaps), exactly as when adding layers to a map. Each space lists its layers (thumbnail, name, eye to hide, cross to remove) and renders the sections of an imported template. Each side's basemap is also chosen in the catalog (at the top of the Public tab), one active basemap per side. Spaces A and B remember their collapsed state and height independently from the panels in Map and 3D Map views.
- Divider: drag the line to swipe; Orientation switches between a vertical and a horizontal divider, Swap exchanges the two spaces, Recenter frames the view's spaces. The divider position is saved with the view.
- Data: the source's points (devices or database rows) stay drawn on top of both sides; the Data eye in the toolbar hides them.
Like the other types, a comparison is a saved view: nameable, shareable with the team, filtered like the original map. This comparison is 2D; to confront two drone surveys in volume, see the 3D comparison below.
The 3D comparison view
The 3D comparison view type overlays two drone surveys of the same site in a single globe and separates them with a swipe curtain: March's survey on one side, September's on the other, and you see what changed in volume. Create one from "+ Create › 3D comparison", next to Comparison.
- Space A / Space B: the right panel (same shell as the 3D Map and Comparison views, opened by the toolbar's panels button) offers two spaces. Click Add missions on a space to open the catalog, filtered to 3D missions (models converted to 3D Tiles, the only ones comparable in volume); tick one or several missions then confirm. Each space lists its missions (thumbnail, name with date, eye to hide, cross to remove) and stacks them in the globe. The globe's basemap stays common to both sides.
- Comparison mode: three ways to confront A and B, in the toolbar.
- Curtain (default): A on the left, B on the right, separated by a handle you drag to swipe.
- Toggle: show A or B in turn, at the same camera, to watch a single viewpoint change from one date to another.
- Fade: overlay B on A with an opacity slider.
- Recenter frames the camera on every mission of both sides; Flat view switches to nadir. The mode, curtain position, opacity and each space's missions are saved with the view.
Two missions flown on different dates do not share exactly the same georeferencing (GPS drift between flights): a roof edge may shift by a few centimetres while swiping. This is expected for now; fine alignment will come later.
The "Geo zone" filter
The Zone géo toolbar button (available on the grid as well as the map) filters devices by drawn geographic areas: click to drop the vertices of a polygon, "Terminer ce polygone" to validate it, "+ Nouveau polygone" to draw more areas. A device located in any of the areas passes the filter. The count updates while you draw; the filter then applies like any other condition (exact pagination and totals, saved views included). Only the registry position counts for this filter.
The calendar view
The Calendar type lays rows out over a month or a week, by a date field of your choice: the interventions planning is the typical case. The view's filters and search stay applied: an "urgent interventions" calendar is a saved view like any other.
- Date field: pick the field that places the event (and, optionally, an end field for multi-day ranges).
- Reschedule: drag an event to another day: the row's date is updated (the time of day is kept). It is the same write path as editing in the grid: same rights, same rules. In read-only contexts (viewer role, shared view), dragging is disabled.
- Record: click an event to open its record in the right panel.
The kanban view
The Kanban type stacks rows into columns by a select field: the interventions status board ("To plan", "In progress", "Done"...) is the typical case.
- Columns: the field's declared choices, plus an "(empty)" column for rows without a value. Each column shows its count and collapses in one click (the collapsed state is remembered in the view).
- Move a card: drag it to another column: the field value is written, like a double-click in the grid. On the devices source, system fields (type, source, state...) are read-only: cards do not move and the affordance says why.
- Record: click a card to open its record.
In both views the surface footer stays honest: beyond 200 loaded rows, the number of rows past the cap is shown, never silently truncated. Both types also exist on your own databases (minus the map: a database has no position).
The checklist view
The Checklist type presents rows as items to complete: an Interventions, Tasks, Inspections or Operations database becomes an operational to-do list, without changing the data model. Checking an item writes one Yes/No field of your database, chosen in the view configuration: nothing else is modified, and reloading the view restores exactly the saved state.
- Two boxes, two gestures: the selection box (left gutter) feeds bulk actions and opens the actions panel, like in the grid; the completion box (next to the label) checks or reopens the item. Selecting rows never changes their completion.
- Configuration: the "Liste à cocher" toolbar button picks the label field, the Yes/No completion field, up to 4 secondary fields, and how completed items are shown: visible, dimmed, hidden, or moved to a "Done" section at the end of the list.
- Like the grid: search, filters, sorts, groups (with server counts), "Colour" rules (row stripe), density and pagination are the view's own. The "X / N done" counter is computed server-side over the whole filtered set and states its scope.
- Inline add: type into "Ajouter un élément…" then Enter. In a grouped list, the group value is prefilled when it is unambiguous and the field is writable.
- Permissions: a completion field that is read-only for you (per-field lock, viewer role, shared view) renders a disabled checkbox with the reason as a tooltip; the server refuses the write anyway. The record panel, actions and deep links stay identical to the other views.
Views
- Edit a view: every setting (filters, sort, columns, colour, grouping, map fields) stays in session memory until you save: nothing is written on its own. As soon as a view is modified, a line appears under it in the views rail: Enregistrer (save) applies the current state to the view, Dupliquer (duplicate) saves it as a new personal view and switches to it, Annuler (cancel) reverts to the saved configuration. Navigating to another view does not lose your changes: they wait for you until the end of the session. A rejected save (someone else's view, view locked in the meantime) shows up as an error in the rail, never silently.
- Locked view: in the rail line, the save link gives way to a padlock whose tooltip carries the lock reason; duplicate and cancel remain available (duplicate to keep your settings in a personal copy).
- Opening a database: you always land on a view: the last one you opened on that database (remembered by your browser), otherwise the first view in the rail. There is no implicit "All devices" / "All rows" view any more: if the database has no view yet, the surface invites you to create the first one via the rail's "+ Créer" button.
- Personal view: visible to you alone, even within your organisation.
- Team view: visible to every member of the organisation. A locked view can only be edited by its creator; a collaborative view is editable by the organisation's administrators.
- Moving a view between zones: whether through the ⋯ menu ("Partager avec l'équipe", "Rendre personnelle") or by dragging the view from one zone to the other, nothing switches silently: a dialog explains the consequence (the view becomes visible to everyone, or stops being so) and offers Move, Duplicate (the copy goes to the target zone, the original stays put) or Cancel.
- Duplicating a view: on a personal view, the copy is created right below the original, no questions asked. On a team view, a dialog asks where to create the copy: in your personal views or in the team views.
- Deep link: the URL carries the view, the search and the page; share it as-is internally.
- Create from the navigation: the "+ Créer" button on a zone ("Mes Vues", "Vues de l'équipe") or a section opens the menu to create a typed view (grid, map, kanban): pick the type, name the view, it opens right away. On a zone, the same menu creates a section. A view's type is fixed at creation: for another display of the same data, create another view.
- Favourites: a view's ⋯ menu adds it to the rail's Favourites mode (the star in the rail's top bar), so you can reach it in one click whatever database is open. Personal: your favourites are yours alone. In the Favourites panel, the Section button creates named, collapsible sections: drag your favourites (handle at the end of each row) to file and reorder them; deleting a section never removes a favourite. Sections and ordering are personal too.
- Open elsewhere: a view's ⋯ menu can also open it in a new tab (a Drexo tab, created in the background without leaving the current view) or in a new browser window, just like navigation rows.
- Sections: group your views under named, collapsible headers, beyond the fixed Personal views / Team views blocks. Drag a view onto a section's header (or onto a view it contains) to file it there; drag it onto a fixed block to pull it out, or drop it on the band that appears under each section while dragging (between two sections, or at the very bottom below the last one) to pull it back out at the end of the zone. To reorder sections, hover a header and drag its handle onto another section: the handle only shows on sections you can manage. A team section's order is shared across the whole tenant; your personal sections' order is yours alone. The collapsed state is remembered per user. A section can be personal (visible to you alone) or team-wide. From the section's ⋯ menu, an administrator can publish a personal section to the team; its creator can make it personal again (it returns to their own views). Deleting a section never deletes its views: they fall back to the fixed blocks.
The record panel
The record opens as a popup in the middle of the screen, from the row's "expand" icon (or Space on the active row). The ↑ / ↓ arrows step through records in the view's order, across pages. The URL follows: share it to reopen the same record in the same view. Close it with ✕, by clicking the backdrop, or with Esc.
Its content is arranged in tabs, and they are this source's tabs: a business database has no Telemetry tab, a device does.
- Résumé (summary): the record at a glance, its first fields, plus whatever the source adds (for a device, the link to its full page and the databases referencing it; for a database row, its position, orientation, attachments and "move to trash").
- Champs (fields): every field of the record.
- Télémétrie (devices): recent consumption, alarm state, last index, last seen.
- Historique (databases): the row's change log and its comments.
The open tab is remembered per source on this device: if you work on meter telemetry, the next record opens straight on it. A tab is only loaded when opened: the record panel does not fetch a row's history unless you ask for it.
Editing from the record panel
The "Modifier" (edit) button at the bottom of the panel opens the Champs tab in edit mode. Click a field to type into it: Enter commits, Esc cancels the entry (without closing the panel), clearing a field empties the cell. "Terminer" leaves edit mode, and so does switching tabs.
These are exactly the grid's rules, because it is the same write: same permissions, same entry in the row's change log. Two visible consequences:
- A field you cannot change carries a padlock and its reason as a tooltip (a value computed by the source, for instance). It stays readable, it does not open.
- A record where nothing is editable shows no "Modifier" button at all: not on a dashboard, not through a shared link, not when your role does not grant editing.
If the server refuses the change, the message appears at the bottom of the panel and the previous value stays on screen: the record panel never shows a value that was not accepted.
The devices widget on dashboards
The devices-list widget on zone dashboards uses the same grid, scoped to the devices of the zone and its sub-locations.
From a dashboard's edit mode, the ⊞ "Link to a view" button makes the widget target the devices of a saved view: the widget then follows the view (its filters, its sort) over time. "Detach" reverts to the previous behaviour.
Your own databases
Create business databases (work orders, contracts, readings...) from Settings → Database management (owners of the organisation only): the "+ Nouvelle base de données…" button. That page gathers all database administration: create, rename, change the icon, move to the trash, restore or purge. Each database has typed fields (text, number, date, checkbox, select, currency, percent, duration, star rating, barcode...), rows edited directly in the grid (double-click), and saved views, just like devices.
Five system fields are also available: Created time, Last modified time, Created by, Last modified by, and Autonumber (a per-database counter, never reused). They fill themselves, filter, sort and group like any other field, but are never editable. The "by" fields show the member's name; "Last modified" also moves when a row is reordered or goes through the trash.
Each database also appears in the sidebar, like dashboards and tools: in Settings → Navigation, move it, nest it under a section, or hide it. Hiding removes the menu entry for every role and every user (including you), without deleting the database or restricting access: the page stays reachable through its address. Per-role visibility is configured in Settings → Roles.
Create a database
"+ Nouvelle base de données…" is a single flow: name the database, pick its icon, then its model, and click "Créer". Blank database is pre-selected (you add your fields afterwards); the ready-made templates are Work orders (field work tracking, with status, priority, linked device and zone), Sites (assets: reservoirs, stations, metering points) and Contacts (operations directory). Picking a template suggests its name and icon, both replaceable. A template creates the database, its typed fields, a pre-sorted default view and, if you wish, a few sample rows to picture the result.
Sample rows are flagged as such: the "Remove sample data" banner sends them all to the trash in one click, without touching rows you entered yourself.
Forms
A form is the write path for people who never open a grid: a field technician scans a QR code on a meter and files a work report with the device already filled in.
- Create: the "+ Créer" button on a zone of the rail, "Formulaire" option (or the "Entry form" card of an empty database). A form is a view like any other: it shows up in the navigation.
- Compose: pick the fields, their order, a label and help text per field, whether it is required, and a display condition ("show this field when the title contains leak").
- Prefill through the URL: every field can be prefilled through the form's address, in three modes: editable (suggested value), locked (displayed, not editable: the QR-on-a-meter case) or hidden (never displayed, submitted as-is).
- Share: create a public link from the form's panel. The generator produces a per-device prefilled URL and its QR code, ready to print and stick on the equipment. A link can be suspended (reversible) or revoked (final) at any time; submissions are rate-limited to absorb abuse.
- Receive: every submission becomes a row of the database, visible in the grid with the linked device resolved. Anonymous submissions are flagged as such (no author, originating link kept).
A still-empty database
A database with no rows offers the next steps directly: add a first row, define the fields, import a CSV or create an entry form. Once the database has rows, two gestures add one: the floating "+ Ajouter" button at the bottom right opens a form to fill the row field by field before creating it (default values are prefilled there); the "+ Ajouter une ligne" line at the bottom of the grid inserts a blank row to fill in directly in the grid.
The gear in that form's header configures it per view: which fields to offer, in what order, with which label, and which are required. Each view gets its own entry form (a short "field" view, a full "admin" view). Configuring the form follows the view's edit rights, like its filters or sorts (a locked view is only reconfigurable by its author); the configuration applies when you save the view.
- Changing a field's type never fails: convertible values are converted ("42" becomes the number 42), the rest are simply cleared.
- Default value: every fillable field (text, number, select, checkbox, date...) can carry a default value, set in the field editor ("Default value" section). Every new row is born with it: rows added in the grid, at the bottom of the grid, or submitted through a form. In a public form the field shows up prefilled with its default, editable before sending (a URL prefill always wins). Setting or changing a default never touches existing rows.
- Display format: the "Format" section of the field editor tunes the display without changing the stored value: decimal places on a Number, the currency of a Currency field (symbol rendered automatically: €, $, £...), how a Percent shows (plain "50 %" or a progress bar, with decimals), the Duration format (h:mm:ss or h:mm), Date with or without time, and the number of stars on a Rating. Filters, sorts and exports keep seeing the raw value.
- Select fields (single or multiple): options are managed in the field editor: add, rename, delete, reorder by drag and drop (the order you set is the display order everywhere), pick a colour per option from the palette, or "Sort alphabetically". Each value renders as a coloured chip in the grid, the record panel, the kanban board, group headers, public forms and the filter value picker; the "Colour code" toggle switches every chip back to neutral grey. Renaming an option updates every cell that carried it, in one pass; renaming to a label a multi-select cell already carries merges (no duplicate chip). Deleting an option never touches the rows: existing values stay, shown as a neutral chip. In the grid, editing a cell opens an option menu (chips); an administrator can add an option on the fly from there.
- Formula field: a computed value per row, written like in a
spreadsheet:
{Field name}references a column, and the formula accepts arithmetic, concatenation (&), comparisons,AND/OR/NOT,IF,ROUND,ABS,UPPER,LOWER,TRIM,LEN,COALESCEandBLANK(). The result filters, sorts, groups, aggregates in the column footer and lands in CSV exports like any other column. Renaming a field never breaks the formulas that use it; deleting a referenced field blanks the formula (the grid never breaks); dividing by zero yields an empty cell. - Rollup field: aggregates the rows linked through a "Link record" field (sum, average, min, max or count of a numeric field on the linked database, e.g. the total litres logged on a worksite). Linked rows in the trash are excluded.
- Count field: counts the links a row carries through a given link field (attached devices, linked readings…).
- Button field: a per-row button that opens a URL built from the
row itself (an https template where
{key}inserts the column's value, encoded: for instance an external tool's page prefilled with the reference). An "Insert field" menu drops a column's{key}(or the row ID) at the cursor, so you never have to know or type the keys by hand. An optional icon shows to the left of the label. If a template field is empty or was deleted, the button disables itself instead of opening a broken address. Nothing is stored: the button never shows up in filters, forms or CSV exports. - Link fields: link a row to a device, a zone or an organisation member. The picker only offers what you can access. If access is later revoked, the cell shows an "unresolved" link: nothing leaks, nothing breaks.
- Lookup: display, next to a device link, its name or zone, computed live (never copied, so never stale). It is now a first-class column: it filters, sorts and groups like any other. Rollup, Count, Lookup and Formula share a cap of ten computed fields per database.
- Appears in: a device's record panel lists the databases referencing it, with direct navigation to the row.
Attachments
The Attachments field attaches photos or PDFs to a row: a meter installation photo taken with a phone, a scanned work order... The cell shows thumbnails; the row's record panel offers the full gallery (preview, download, delete, add).
Good to know:
- Accepted formats: images (JPEG, PNG, WebP, GIF) and PDF, 10 MB max per file, 20 files per cell.
- Storage: 1 GB per organisation. Beyond that, uploads are refused with an explicit message; delete attachments to free up space.
- Privacy: files are private to your organisation (same access rules as the database) and served through signed links that expire within minutes.
- No antivirus scanning: files are stored as-is. Only open attachments uploaded by people you trust.
- Deletion: deleting an attachment (or its row) deletes the file, permanently.
GPS position field
The GPS position field gives each row a position (latitude, longitude) and unlocks the database's Map view. Add it like any field (field menu, "GPS position" type). The cell shows the coordinates and is edited by entering latitude and longitude; a row with no coordinates does not appear on the map.
To position it without leaving the map, select its layer and click Place. The “What should be placed?” panel only shows unpositioned rows that you may edit. Pick an existing row or “New item”, then click the map. Move only acts on points from the active layer. These tools are available in 2D and 3D maps, comparison views and standalone maps; readers do not see them.
Two settings when you create the field:
- Default position for the database: the Map view and the "Geo zone" filter use this field. A database may hold several GPS position fields (billing address, work site...) but only one default: ticking another one moves the setting.
- Projection (EPSG): the projection code you enter and read coordinates in. Defaults to 4326 (WGS84, the usual latitude and longitude). Set another code (for example 2154 for Lambert 93) to work in a local projection; the conversion is done for you and storage stays in WGS84.
The Geo zone filter (drawing polygons) works on a tenant database just like on devices, against the view's GPS position field.
Elevation field
The Elevation field gives each row a height in metres, in a column separate from the GPS position (it never touches the coordinates). It is a plain number: it filters, sorts, exports and feeds a formula like any Number field. A row with no elevation stays an empty cell.
It prepares placing rows as volumes on the 3D map: a set value raises the object above the ground, an empty cell drops it to terrain level. The 3D rendering itself comes in a later step.
Orientation field
The Orientation field gives each row a direction in space, as three angles (degrees): heading (0 to 360, clockwise from north), pitch (-90 to 90, nose up positive) and roll (-180 to 180). The cell is edited in a small panel: three number inputs and a clickable compass to set the heading with the mouse. Negative values are normal (an object tilted down). A row with no orientation stays an empty cell.
It prepares the oriented display of objects on the 3D map (a model pointing in the right direction); the rendering itself comes in a later step.
Commenting a row
The record panel's Historique tab carries the row's comments: the team discusses a work order, a contract or a reading right next to the data. Every member can read; whoever can enter rows can comment. Everyone can edit or delete their own comments; organisation administrators can delete any of them.
- Notify a member: mention them with
@followed by their email address (or the part before the@), e.g.@camille@utility.comor@camille. The mentioned member, and only them, gets a bell notification with a direct link to the row. - In the grid, a discreet column shows each row's comment count.
Locking a field
Reserve editing a column to administrators: an intervention's status no longer gets changed by mistake during field entry. The lock is set in the Permissions section of the field editor (administrators only): open it from the column header menu ("Edit field permissions") or the pencil in the Fields panel, then tick "Seuls les owners modifient ce champ"; untick to reopen it.
Good to know:
- It's a write lock, not a secret. A locked field stays visible and readable to every member; only its editing is reserved. Do not use it to hide a sensitive value.
- The lock holds everywhere, not just on screen. The rule is enforced at the heart of the database: neither the grid, nor a bulk paste, nor an external tool can bypass a locked field. This is stronger than competing collaborative spreadsheets, where the lock is only an interface courtesy.
- In the grid, a locked field shows a padlock in its header and a greyed-out cell for members who cannot edit it, with the reason in a tooltip.
- Fillable via a form: tick this option on a locked field so that an entry form can still fill it (the field-survey case), while keeping grid editing reserved to administrators.
- Each member only edits the rows they created: the option of the same name lives in the toolbar's "⋯" menu, under the "Database" section (administrators only). When ticked, it restricts each member to the rows they created; administrators edit everything.
A row's history
The record panel's Historique tab carries the row's change log: who changed which field, from which value to which value, and when. Every cell change leaves a trace, form entry included (credited "Formulaire public" when the submission is anonymous, "Compte supprimé" when the author has left the team).
What was done in one gesture reads as one block: pasting three columns gives one event carrying three field lines, not three separate entries. The history opens on the recent revisions; "Charger plus" goes further back.
Rétablir cette valeur puts a field's former value back in the cell. It is a change like any other: it obeys the same permissions (a locked field stays locked) and it lands in the history itself. Restoring adds a revision, it erases none.
The history is tamper-proof: a written entry cannot be edited or deleted by anyone. It gives the reliable history of a sensitive row (an intervention, a contract), right next to the data.
The trash
Deleting is never instantly irreversible: deleted rows and databases go through a trash, purged automatically after 30 days.
- Deleting a row ("Move to trash" in the record panel's Résumé tab) removes it at once from the grid, views, aggregates and widgets. Its links and comments stay attached, dormant: a restored row comes back exactly as it was. While it sits in the trash, links pointing at it show as "unresolved".
- A database's trash ("Corbeille", Historique section of the toolbar's "⋯" menu, administrators only) lists deleted rows: restore them one by one, purge them for good, or empty everything.
- Deleting a database (in the same panel, or from Settings → Database management) sends it to the trash: it disappears from navigation and all views. Find it under Settings → Database management, Trash section, to restore it losslessly (fields, rows, links, comments, views) or purge it for good.
Automations
A database can react on its own: "when a row is created", "when a field changes" or "when a row enters a view", Drexo notifies members in the bell or calls a webhook you wire to any tool. The Automations entry in the toolbar's "⋯" menu (organization administrators only) opens the manager, next to fields and trash.
- The trigger says when:
Row created,Field changed(you pick the watched field) orEnters a view(you pick a team view; its filter defines membership). "Enters a view" only fires on the transition out-of-view → in-view: a row that stays in does not re-fire. "Field changed" only fires when the watched value actually changes; editing another field does not count. - The condition (optional, on the first two triggers) narrows with the same filter as views: e.g. "only when Status = urgent".
- Notify sends a bell notification to the chosen members. Editing many rows at once rings only once.
- Webhook calls a third-party
httpsURL. Each call carries the old and new row values, and a signature (X-Drexo-Signatureheader) computed with a secret you set. The secret lives server-side: it is never shown again. A trashed row triggers nothing. - Reliability: webhooks are delivered in the background (writing a row never waits on a network call), retried on failure, and the automation disables itself after repeated failures. The delivery log keeps a copy of the latest requests and responses to diagnose an endpoint that stopped answering.
- Test sends a test event to the webhook (payload flagged
"test": true, with a sample row from the database), through the same circuit as real events: signature, retries and delivery log included. The result shows up in the delivery log. - Security: the URL must be public over
https; internal addresses (private IPs,localhost, internal domains) are refused.
Build a view with AI (experimental)
Describe the view you want, in English or French ("meters silent for more than 48h, sorted by litres descending"), and the AI proposes filters, sorts and columns. You review the proposal before saving it: nothing is created automatically. If the AI proposes a field or operator that does not exist, the proposal is rejected and corrected, never saved as-is.
The AI lives inside view creation: open the "+ Créer" menu on a zone of the rail, pick a type, then describe the view in the "Configurer avec l'IA" block: it is optional, without a description the view is created empty. The block only appears when the feature is enabled for your account (progressive rollout) and when AI is allowed for your organization. The AI only receives the field names, never your row data.
Classify a field with AI (experimental)
On a database, "Classify with AI" (Outils section of the toolbar "⋯" menu) fills a "Select" field (for example intervention type) from the text of another field (for example notes). You set the list of categories; the AI files each row into one of them. A row the AI cannot confidently classify stays unlabeled (counted separately) rather than filed at random. You review the result, then apply: labels are written through the same paths as manual editing.
Like the view-builder, classification is governed by the organization's AI setting; only the text of the column being classified is sent to the model.