Open source · Built and maintained by Zaes

Add tactical graphics to modern web-based maps

Zaes Tactical Graphics generates editable FM 1-02.2 and APP-6 control measures, tactical mission tasks, boundaries, corridors, sectors, obstacles, and other multipoint graphics as portable GeoJSON. Use them in planning, rehearsal, training, common operational pictures, and other mission applications.

$npm install @zaes/tactical-graphics
Actual library outputGeoJSON → renderer
Tactical graphics generated by the Zaes library, including arrows, phase lines, mission tasks, obstacles, range fans, and area graphics
OpenLayersMapLibreEditable control points
300+implemented graphics
300+doctrinal variants
14categories
2open source renderers
34packages, no copyleft

A tactical graphics component for the mission application you already have

The library handles the geometry for multipoint control measures. Your application keeps its basemap, data, storage, permissions, tracks, overlays, and workflow.

01

Common operational pictures

Add tactical overlays to an existing web COP without replacing its map or data services.

02

Planning and rehearsal

Draw, edit, save, and restore control measures for operational planning and training workflows.

03

Fires, airspace, and UAS tools

Use the graphic families relevant to a focused mission application instead of building a full symbol engine.

04

C2 prototypes and experiments

Put a working tactical-graphics workflow in front of operators before committing to a larger integration.

The package handles the graphics while Zaes builds the application around them

A capable development team can adopt the library under the MIT license on its own. Bring us in when the schedule, integration, or mission workflow needs a team that already knows the code and the problem.

01

Application integration

Add drawing, editing, storage, and exchange of tactical graphics to an existing COP or planning application.

Typical scope: renderer integration, editing UI, saved overlays, and connections to existing application services.

02

Capability development

Implement the graphics, amplifiers, renderer support, or exchange behavior a program needs.

Typical scope: a defined symbol family, new renderer adapter, or extension for a particular program.

03

Mission thread prototype

Connect tactical graphics to representative tracks, overlays, data services, and operator workflows.

Typical scope: a working demonstration used to evaluate a use case before larger integration.

04

Program delivery and transition

Prepare the implemented capability for the program environment and the team that will own it.

Typical scope: testing, documentation, SBOM, deployment packaging, maintenance planning, and transition support.

Have a specific application in mind?Tell us the mapping environment, the workflow, and what has to be demonstrated.
Discuss the application

See the graphics before you evaluate the architecture

The gallery below comes from the demo application's Draw samples function. The live demo lets you draw a graphic, move its control points, change its properties, and switch between the OpenLayers and MapLibre renderers.

Gallery of tactical graphics rendered by the Zaes libraryOpen the live demo →

Take the same graphics further

The open source package draws on 2D maps. Commercial add-ons from Zaes carry the same graphics and the same saved files further: onto Cesium terrain in 3D, to operators on TAK devices as Cursor on Target, to other command and control systems as NATO Vector Graphics or C2SIM, and into the ArcGIS Maps SDK. They are licensed separately from the MIT package.

Cesium 3D

Early access

Every graphic the library draws, draped over Cesium terrain, with airspace standing up as volumes. Built for CesiumJS; terrain, imagery, and Cesium ion services are customer provided or separately licensed.

  • 23 airspace graphics stand between their floor and ceiling. AGL ceilings follow the ground under them.
  • Range fans stand band by band, each at its own reach above the weapon or sensor site.
  • Draw and edit with the same gestures as the 2D engines, and drag a floor or ceiling to change its altitude.
  • Opens the same saved files as OpenLayers and MapLibre, and exports KML and CZML.
Watch the Cesium add-on at work → A Cesium 3D view over the Swiss Alps: an air corridor floating between 12,000 and 16,000 ft MSL, a restricted operations zone following the ridges, an airspace coordination area, and a weapon and sensor range fan standing band by band in the foreground Click to enlarge

TAK and CoT

Early access

Push the plan from the web map to TAK Server in one click as Cursor on Target (CoT), so the people carrying it see what the planners drew.

  • Every graphic goes into a TAK Server Data Sync mission as CoT, and the server confirms it.
  • Graphics arrive as native CoT drawing shapes in their doctrinal colors, with their labels, so ATAK and WinTAK need no plugin to show them.
  • It arrives on every subscribed ATAK and WinTAK client, and clients that join later get the same overlay.
  • Pushing again updates graphics in place and takes out the ones that were removed.
  • A local bridge holds the client certificate, so the browser never sees it.
  • With no server in reach, the map exports as CoT files that ATAK and WinTAK import directly.
The Zaes Tactical Graphics web demo with an assembly area, axes of advance, phase lines, an objective and a battle position, and the same graphics in WinTAK after being pushed to a TAK Server mission Click to enlarge

Exchange

Early access

Share plans with other command and control systems in the formats they read: NATO Vector Graphics (NVG), the NATO format for exchanging tactical overlays, and C2SIM, the SISO standard for passing plans between command and control systems and simulations.

  • NVG exports validate against the NVG 2.0.2 schema, with symbol codes from NATO's current NVG binding for APP-6(D).
  • Writes APP-6A and MIL-STD-2525C codes too, for older systems that still read them.
  • C2SIM messages validate against the schema of the SISO standard and the one used in NATO's CWIX exercises, with each graphic's symbol code and force side.
  • Imports NVG 1.4, 1.5 and 2.0 and C2SIM as editable graphics, and keeps an NVG file's units and plain drawings on the map beside them.
  • Files it exports reopen as they were drawn, and each export reports what another system can and cannot read.
Watch the Exchange add-on at work →

ArcGIS

Early access

All 318 graphics in the ArcGIS Maps SDK for JavaScript, drawn, edited and saved in a MapView with the same gestures and files as the other engines.

  • Every graphic draws the same as on OpenLayers, checked graphic by graphic.
  • Grips, edit controls and the properties dialog work as they do on the 2D engines.
  • Rotated views keep line labels on their lines and the right way up.
  • Plans saved on ArcGIS open on OpenLayers, MapLibre and Cesium.
Watch the ArcGIS add-on at work →
Evaluating an add-on for a program?Tell us about your environment, deployment constraints, and operator workflow. Early access evaluations, program licensing, and integration support are available.
Discuss an evaluation

Portable input and editable map output

The input is a GeoJSON feature with a Zaes tacticalGraphic property. The core returns generated GeoJSON plus label anchors and edit handles. A renderer adapter is still required for full styling and interaction in a map.

Point symbols are placed. Tactical graphics are constructed.

A point-symbol library places a unit or equipment symbol at one coordinate. Tactical graphics turn multiple user-defined points into editable lines, areas, corridors, sectors, obstacles, and mission tasks that must retain their intended form as the geometry changes. Zaes focuses on that multipoint problem and can be used alongside point-symbol libraries such as milsymbol.

example.ts
import { renderTacticalGraphic, TacticalGraphicName }
  from '@zaes/tactical-graphics';

const { graphic, labels, handles } =
  renderTacticalGraphic({
    type: 'Feature',
    geometry: {
      type: 'LineString',
      coordinates: [
        [-77.04, 38.89],
        [-76.95, 38.95]
      ]
    },
    properties: {
      tacticalGraphic: {
        name: TacticalGraphicName.MainAxisOfAdvance,
        designation: '1-508 IN',
        hostility: 'Friend',
        width: 300
      }
    }
  });

Portable core

The core has no OpenLayers or MapLibre dependency. It can run in a browser, server process, or test runner.

Renderer adapters

OpenLayers and MapLibre adapters provide drawing and editing behavior for each map. Another engine requires another adapter.

Editable restoration

Save the original feature and the properties that define the tactical graphic so the application can restore it as editable control points.

Turf, and nothing else

The core depends only on the individual Turf modules it calls — 34 packages in the production tree, every one permissively licensed. Mapping libraries are optional peer dependencies used by their respective entry points.

ImportWhat it providesAdditional library
@zaes/tactical-graphicsGeometry, paint descriptions, label anchors, and edit handlesindividual @turf/* modules
…/openlayersOpenLayers drawing, styling, and editing adapterol peer
…/maplibreMapLibre layers, styling, and editing adaptermaplibre-gl peer

Built against published symbology references, with the limits stated plainly

The library implements the tactical graphics of FM 1-02.2 (January 2025, with Change 1), using its plates for shape and amplifier placement, and NATO APP-06 Edition E for the symbols, entity codes and anchor-point rules. The entity codes follow the control measure numbering MIL-STD-2525 shares with APP-06. Automated regression tests protect the implemented behavior as the library changes.

Zaes does not claim government certification or independent conformance validation. Programs should perform the review appropriate to their mission and configuration.

MIL-STD-2525 codes

282 of the graphics appear in MIL-STD-2525E Change 1, by entity code. The library does not claim full MIL-STD-2525 conformance.

FM 1-02.2

The Army reference used for graphical plates and amplifier placement.

APP-06

NATO Joint Military Symbology, Edition E - the source for the symbols and anchor-point numbering the joint standard shares. NATO is acknowledged as the publisher.

Stated per graphic

Every graphic records whether it is defined in FM 1-02.2, APP-06, or both, including the APP-06 six-digit entity code where applicable.

300+ implemented graphics

More than 300 graphics across 14 categories cover more than 300 doctrinal variants. A variant that differs only by an amplifier or property, such as affiliation or traffic direction, shares one graphic. Every APP-06 line and area group is complete.

Current roadmap

A Leaflet renderer is planned for the open source package. Roadmap items are not current package capabilities.

Browse the full graphic catalog

The catalog groups the current package by graphic family and shows the actual generated output. A doctrinal variant may share one implementation when the difference is controlled by an amplifier or property.

Use the package directly or hire Zaes for the surrounding work

The published package can be used, modified, and redistributed under its MIT license. It has no license key, seat count, or package telemetry. You do not need Zaes's permission to include it in your product. The add-ons are commercial and licensed separately.

Fund a needed capability

Sponsor a defined graphic family, amplifier, renderer, or integration that your schedule requires.

Describe the requirement →

Bring in Zaes

Use Zaes for application integration, a mission thread prototype, or program delivery and transition.

Discuss the application →

Tell us what your application needs to draw, save, and exchange

Send us the mapping environment, the workflow, and the graphics that matter. We can tell you whether the open source package covers it and where Zaes could help.