Live SA (GeoJSON)
GET /cop/api/sa returns a GeoJSON FeatureCollection; the WebSocket
/cop/api/cot/ws streams CoT in real time. Same OUT ∩ IN group filter
as CoT clients.
GeoLibre COP · SA · C3
The GeoLibre COP is the operator-facing situational-awareness
UI served by TeamTrack at /cop. It's not the admin console — it's a tactical map for
the TOC, with zero CDN fetches and MapLibre vendored locally.
Illustrative COP layout. Actual content depends on your missions, feeds, and connected EUDs.
What it is
The GeoLibre COP is an HTTP module (Tmg.TakServer.Cop) mounted at /cop
on the same Kestrel listener as the admin console and Marti API. Operators open it in any
modern browser, sign in with a TAK file-user account or OIDC SSO, and immediately see live SA.
| URL | Who | Auth |
|---|---|---|
…/console | Server admins | AdminToken cookie |
…/cop | Operators / TOC | TAK user (file/LDAP/OIDC) |
No CDN, ever
HTML, CSS, JavaScript, MapLibre (optional vendor), and plugins are all served
locally from the host — no external fetches. Assets refresh into
%ProgramData%\TMG\RealTimeEngine\cop on service upgrade when the build stamp changes.
TakServer:TileServerBaseUrl at a local or
LAN TechMaven Tile Server for raster tiles. Without a tile server, the map falls back to a dark
offline style and the canvas renderer still plots every track.
Operator capabilities
GET /cop/api/sa returns a GeoJSON FeatureCollection; the WebSocket
/cop/api/cot/ws streams CoT in real time. Same OUT ∩ IN group filter
as CoT clients.
POST /cop/api/cot accepts CoT XML or JSON and publishes with the operator's OUT
groups. Ephemeral hub client per request.
Range rings, bullseye, MGRS / GARS readouts, and tactical symbols via the bundled
cop-sa-tools plugin.
A GeoLibreAppAPI host shim (getMap, registerRightPanel,
registerToolbarMenu) activates bundled plugins from a local registry.
Sign in with a TAK file-user, LDAP, or OIDC single sign-on. EUDs keep using certificates — the COP pins the operator to their tenant.
GET /cop/api/ca.pem serves the local CA. Operators stay in the browser; EUD
enrollment still happens over Marti TLS.
How it's wired
A small cookie-authenticated JSON + WebSocket API layered over the tenant-scoped CotHub. Multitenant-aware — the COP login resolves the tenant and filters SA accordingly.
| Method | Route | Returns |
|---|---|---|
GET | /cop/api/me | username + groups |
GET | /cop/api/config | WS URL, tiles, transport |
GET | /cop/api/sa | GeoJSON snapshot (group-filtered) |
GET | /cop/api/cot/ws | live CoT stream |
POST | /cop/api/cot | publish marker / event |
GET | /cop/api/ca.pem | local CA certificate |
Roadmap
Today the COP ships a minimal GeoLibre-compatible host with vendored MapLibre and a
plugin loader. The next step is hosting the full GeoLibre web application from
the same integrated server — reusing the /cop/api contract, cookie auth, plugin
registry, and the existing static-asset sync mechanism.
No new web server required: the integrated Kestrel host already serves static files, performs SPA fallback, and injects the path-base + auth-mode bootstrap at serve time.
One host, one picture — admins in /console, operators in /cop.