SymbologyMilitary Symbols
MIL-STD-2525 · APP-6 · Open source

Military symbols, drawn from the standards

Zaes Military Symbols draws every single-point symbol of MIL-STD-2525E Change 1: units, equipment, installations, activities and the point control measures, with every amplifier the standard places. MIL-STD-2525D, 2525C and 2525B, and APP-6(B), each draw with their own drawings. Symbols come out as SVG, a canvas or a data URL, or go straight onto OpenLayers, MapLibre, Leaflet and ArcGIS maps, free under the MIT license.

$npm install @zaes/military-symbols
Actual library outputOpen source package
An operational picture drawn by the Zaes Military Symbols library: friendly armor, infantry, reconnaissance, artillery and engineer units with their headquarters, echelons, names and directions of movement, aircraft with speed leaders, an unmanned aircraft, a satellite, hostile armor, infantry, a helicopter and air defense, a surface combatant, a submarine, an installation, an activity and a datum
SVGCanvasOpenLayersMapLibre
1,2472525E icons and points
5standards
256point control measures
4map libraries
972icons scored against the plates

The units on the map, as the standard draws them

Every common operational picture, planning tool and training system shows units. The library draws them the way the standard does, in whichever version a program's data is coded, without a server or a font.

01

Common operational pictures

Tracks and units with their amplifiers, direction of movement, speed leader and area of uncertainty, on the map the application already has.

02

Planning and orders

Place, move, resize and rotate symbols with an editor, save them as GeoJSON, and draw them into documents as SVG.

03

Mixed and legacy data

2525E and 2525D codes beside 2525C, 2525B and APP-6(B) letter codes, each drawn as its own standard draws it.

04

Thousands of tracks

A symbol atlas draws each kind once for deck.gl or MapLibre icons, built in a worker if need be.

One symbol, as each standard draws it

A friendly infantry company in each of the five standards, drawn by the library from each standard's own drawings. Open the live sample to build any symbol in any of them, browse every symbol a standard defines, and place them on OpenLayers or MapLibre, in 2D and 3D.

A friendly infantry company drawn in MIL-STD-2525E, 2525D, 2525C, 2525B and APP-6(B)

A code in, the standard's symbol out

Give the library a symbol identification code and it returns the symbol, with where it sits on the map and everything it could not draw as the code asks. The root needs no map library and reads no DOM when it loads.

example.ts
import { renderSymbol }
  from '@zaes/military-symbols';
import { use2525C }
  from '@zaes/military-symbols/2525c';

// A 2525E code, with its amplifiers.
const { svg, anchor, problems } = renderSymbol(
  '130310001512110000000000000000',
  { size: 50, amplifiers: { T: '1-66', Q: 45 } }
);

// A 2525C letter code, drawn as 2525C draws it.
use2525C();
renderSymbol('SFGPUCI----E---');

Every amplifier

Text and graphic amplifiers by their Table VI letter, laid out by each frame's figure; the area of uncertainty, dead reckoning trailer and pairing line in map units on the ground.

Display options

Frame, fill and icon as Table XIV combines them, the light, medium and dark colour ranges, unfilled and monochrome, and a house style's colours and line weight.

SVG, canvas, data URL

The same drawing in each form, synchronous, in a page, a worker or Node, and an image provider for libraries that ask for unit symbols.

Reports, never refuses

A value the standard does not define is drawn as far as it can be and listed, so bad data is visible rather than silently dropped.

PackageWhat it provides
@zaes/military-symbols (MIT, npm)Every single-point symbol as SVG, canvas or a data URL, and the symbol atlas; …/2525d, …/2525c, …/2525b and …/app6b for the other standards; …/openlayers, …/maplibre and …/editor to place and edit on a map; …/leaflet, …/arcgis; a symbol picker in …/picker
@zaes/sidc (MIT, npm)Symbol identification codes of 2525B to E and APP-6 read, validated and written, the 2525E catalog of every entity and modifier, and 2525C letter codes converted to 2525D. No dependencies

Checked against the standard's own plates

The library follows MIL-STD-2525E Change 1 (March 2025), with MIL-STD-2525D, 2525C and 2525B Change 2, and NATO APP-6(B). Every drawing is scored against the plate that defines it, its placement measured on the plate's octagon, and every point control measure's anchor checked against its template.

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

2525E and 2525D

Numeric codes of versions 10 to 16, APP-6(D) and APP-6(E) among them, for every symbol set of single-point symbols, with each edition's own drawings.

2525C, 2525B and APP-6(B)

Letter codes, drawn with each standard's own frames and icons; a code with no drawing of its own draws as its nearest parent and says so.

Point control measures

The 256 points of Appendix L whose draw rule takes one anchor at screen size, each field placed where its template puts it.

Not drawn here

Lines, areas and graphics sized in map units are the tactical graphics library's; weather and ocean graphics are the METOC library's.

Tell us where your symbols need to go

Send us the standards your data is coded in, the map engine and where the symbols have to appear, including Cesium 3D or TAK. We can tell you whether the open source package covers it and help with the integration.