End-to-end ARINC 424 pipeline for JavaScript and Node.js.
Parse → normalize → generate features → tile → visualize (2D & 3D)
From raw ARINC to a visualizable dataset:
npm install @arinc424/toolkit
arinc parse ./data/FAACIFP18.dat ./out/canonical.json
arinc features ./out/canonical.json ./out/features.json
arinc tiles ./out/features.json ./out/tilesNow open the viewer:
http://localhost:8080/openlayers-tiles/?index=/out/visualization.index.json
👉 You now have a full ARINC dataset rendered without loading huge files in memory.
- Full ARINC 424 parsing in JavaScript
- Canonical normalized model
- GeoJSON-like feature model
- Scalable tiled datasets (no 400MB JSON in browser)
- 3D Tiles for Cesium
- Procedure decoding (legs, arcs, holds…)
- Interactive viewers (OpenLayers + Cesium)
ARINC 424 tooling in JavaScript is still uncommon, and when it exists it is often:
- tightly coupled to one dataset
- tied to one viewer
- difficult to reuse
This project breaks the problem into a composable pipeline:
ARINC → canonical → features → tiles → view
So you can:
- build your own pipeline
- inspect and validate aviation data
- experiment with cartography
- scale to large datasets without browser issues
npm install @arinc424/toolkitBest option if you want the full workflow from parsing to visualization.
npm install \
@arinc424/core \
@arinc424/features \
@arinc424/procedures \
@arinc424/analysis \
@arinc424/tiles \
@arinc424/3dtiles \
@arinc424/viewUse this if you only need specific stages or want tighter control.
| Package | Purpose |
|---|---|
@arinc424/core |
ARINC parsing and canonical model |
@arinc424/features |
Canonical → geospatial feature model |
@arinc424/procedures |
Procedure decoding (legs, arcs, holds…) |
@arinc424/analysis |
Stats, inspectors and queries |
@arinc424/tiles |
Tiled GeoJSON generation (z/x/y.json) |
@arinc424/3dtiles |
3D Tiles export |
@arinc424/view |
OpenLayers / Cesium visualization |
@arinc424/toolkit |
All-in-one bundle + CLI |
npm install @arinc424/toolkit
arinc --helpMain commands:
arinc parse <input.dat> <canonical.json>
arinc features <canonical.json> <features.json>
arinc tiles <features.json> <outDir> [--min-zoom N --max-zoom N]
arinc 3dtiles <features.json> <outDir>
arinc stats <canonical-or-features.json> [--json]
arinc inspect-airspace <canonical.json> <id|token> [--json]
arinc inspect-airport <canonical.json> <id|ident> [--json]
arinc inspect-waypoint <canonical.json> <id|ident> [--json]
arinc inspect-procedure <canonical.json> <id|token> [--json]
arinc procedure-geometry <canonical.json> <id|token> [--json]
arinc query <canonical-or-features.json> ...import { core, features, procedures, analysis, tiles, threeDTiles } from "@arinc424/toolkit";
const canonical = await core.parseArincFile("./data/FAACIFP18.dat");
const featureModel = features.buildFeaturesFromCanonical(canonical);
const procedureGeometry = procedures.buildProcedureGeometry(
canonical,
"procedure:PD:US:KPRC:PRC1:1:RW04"
);
const stats = analysis.summarizeDataset(canonical);
const { manifest } = tiles.generateTiles(featureModel, {
outDir: "./out/tiles",
minZoom: 4,
maxZoom: 10
});
await threeDTiles.build3DTilesFromFeatures(featureModel, {
outDir: "./out/3dtiles"
});
console.log(stats.entityCounts);
console.log(procedureGeometry.warnings);npm run view:examplesOpen:
-
OpenLayers:
http://localhost:8080/openlayers-tiles/?index=/artifacts/<dataset>/visualization.index.json -
Cesium:
http://localhost:8080/cesium-3dtiles/?index=/artifacts/<dataset>/visualization.index.json
Useful query params:
&debug=1&basemap=muted&basemap=standard
If you want chart-style procedure rendering in the OpenLayers example, generate procedure artifacts explicitly.
Full dataset:
npm run dataset:run -- \
--input /path/to/FAACIFP18.dat \
--out ./data/faa \
--dataset FAACIFP18 \
--with-procedure-legsSmaller test dataset:
npm run dataset:run -- \
--input /path/to/FAACIFP18.dat \
--out ./data/faa-test \
--dataset FAACIFP18_TEST \
--with-procedure-legs \
--procedure-legs-airport KSFO \
--procedure-legs-type APPROACH \
--skip-3dtilesThis emits, in addition to the normal dataset outputs:
analysis/procedure-catalog.json- split
analysis/procedure-legs/<airport>/<procedure>.geojson visualization.index.jsonwithoutputs.procedures
Then open:
http://localhost:8080/openlayers-tiles/?index=/data/faa-test/visualization.index.json
In the viewer:
- choose
airport - choose
type - choose
chart
The example will then load only the selected chart family on demand and render:
- arcs
- holds
- open legs
- editorial marks and labels
If the dataset was not generated with --with-procedure-legs, procedures are not shown in the viewer.
ARINC datasets can be very large (hundreds of MB).
Avoid loading full files like:
features.jsonprocedure-legs.geojson
Instead:
- use tiled datasets (
tiles/) - use
visualization.index.jsonas entry point
ARINC424 -> core -> canonical
-> procedures -> geometry
-> features -> feature model
-> analysis -> stats / inspect
-> tiles -> scalable tiles
-> 3dtiles -> Cesium output
-> view -> visualization
Focus:
- richer procedure depiction
- scalable viewer loading
- per-procedure artifacts
- chart-style rendering
- improved Cesium/OpenLayers alignment
- CHANGELOG.md
- docs/analysis.md
- docs/cartography.md
- docs/procedures.md
- docs/view-debug.md
- docs/large-dataset.md
- docs/testing.md
npm install
npm test
npm run test:golden
npm run test:smoke
npm run bench

