GeoLibre COP live ● OP ALPHA-1 BRAVO-2 CHARLIE-1 SENSOR-12 UNKNOWN 5 KM ROSTER ALPHA-1online BRAVO-2online CHARLIE-1in call SENSOR-12air GEOCHAT ALPHA-1: moving north BRAVO-2: copy, in pursuit type a message… MGRS 18T WL 855 043

Illustrative COP layout. Actual content depends on your missions, feeds, and connected EUDs.

What it is

The browser COP, served by the same host

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.

URLWhoAuth
…/consoleServer adminsAdminToken cookie
…/copOperators / TOCTAK user (file/LDAP/OIDC)

No CDN, ever

Built for the airgap

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.

Offline basemaps: point 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

Live SA, publishing, and COP tools

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.

Publish markers

POST /cop/api/cot accepts CoT XML or JSON and publishes with the operator's OUT groups. Ephemeral hub client per request.

COP / SA tools

Range rings, bullseye, MGRS / GARS readouts, and tactical symbols via the bundled cop-sa-tools plugin.

Plugin host

A GeoLibreAppAPI host shim (getMap, registerRightPanel, registerToolbarMenu) activates bundled plugins from a local registry.

TAK auth or OIDC SSO

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.

CA & enrollment

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

The COP API surface

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.

MethodRouteReturns
GET/cop/api/meusername + groups
GET/cop/api/configWS URL, tiles, transport
GET/cop/api/saGeoJSON snapshot (group-filtered)
GET/cop/api/cot/wslive CoT stream
POST/cop/api/cotpublish marker / event
GET/cop/api/ca.pemlocal CA certificate
Group filtering is identical to CoT clients: the COP sees exactly what an ATAK EUD with the same OUT/IN groups would see — no separate permission model to maintain.

Roadmap

Full GeoLibre web app hosting

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.

Put the COP in front of your operators

One host, one picture — admins in /console, operators in /cop.