Open source · Built and maintained by Zaes

Add tactical graphics to modern web-based maps

Zaes Tactical Graphics generates editable MIL-STD-2525E 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
215implemented graphics
228doctrinal variants
14categories
2renderer adapters
1direct runtime dependency

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 all 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 →

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,
        label: '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.

One direct runtime dependency

The core package depends directly on Turf. 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 handles@turf/turf
…/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 MIL-STD-2525E tactical graphics using FM 1-02.2 plates for shape and amplifier placement. 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-2525E

The DoD joint military symbology standard addressed by the library.

FM 1-02.2

The Army reference used for graphical plates and amplifier placement.

215 implemented graphics

The generated catalog contains 215 graphics across 14 categories, covering 228 represented doctrinal variants.

Current roadmap

Additional FM 1-02.2 coverage and a Leaflet renderer are planned. Roadmap items are not current package capabilities.

Inspect all 215 implemented graphics

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.

Adopt it independently

Install the package, review the source, run the demo, and integrate it with your own team.

GitHub repository →

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.