Technology

Chosen for where the libraries already are.

ORBIS is polyglot on purpose. Each subsystem is written in the language whose ecosystem already contains the thing it needs — because rewriting a mature orbital propagator or RTI binding is a cost with no upside.

Stack

Language by subsystem.

PythonCore · Gateway · Forge · Range · Bridge
The simulation kernel, the API, dataset authoring, experiment management and the DIS connector. Chosen for iteration speed and for the analysis and data ecosystem the work sits in. Determinism is a property of how the kernel is written, not of the language — fixed evaluation order, ordered collections, seeded streams and ORBIS's own transcendental maths carry it.
TypeScriptDeck
The operator client: React, Vite, Tailwind, MapLibre GL for the map and milsymbol for MIL-STD-2525 rendering. The application is fully bundled — no CDN and no external font host — and the API is same-origin, so the only thing standing between this client and an air gap is the basemap: it streams tiles in the development posture and reads a staged bundle in the deployed one. That switch is a single configuration value, and it is the honest reason this is not yet claimed as finished.
RustPlanned — Core, Atlas sampling
The kernel is intended to move to Rust once the model surface has stopped changing. The reason is throughput, not correctness: the sense phase is the hot loop and scales with sensors multiplied by targets. Porting a moving target would be the expensive mistake, so the sequencing is deliberate.
JavaPlanned — HLA bridge, space propagation
Library gravity, plainly stated: every HLA run-time infrastructure is Java, and Orekit is the reference orbital mechanics library. Both live behind the Bridge boundary, so neither reaches the kernel.
DeploymentDocker · nginx · PostgreSQL
Containerised throughout and Linux-native. The API is reverse-proxied so the browser sees exactly one origin, which keeps the content security policy as tight in development as in an air-gapped build and removes the need for CORS entirely.
Standards

Implemented against the specification, not against a vendor's dialect.

Every platform in the reference dataset carries its standards enumerations from the moment it is imported, so the interoperability layer never has to guess or translate through an internal identifier.

Standard Status Use in ORBIS
DIS v7 — IEEE 1278.1-2012 Built Entity State, Fire, Detonation, Start/Resume and Stop/Freeze over UDP multicast, with dead-reckoning transmit gating and unmapped-entity diagnostics.
SISO-REF-010 Built Entity and munition enumerations carried on every platform class and every weapon in the dataset.
WGS84 / geocentric ECEF Built Positions, geodesics and the coordinate frame every DIS position is expressed in. Vincenty direct and inverse for motion and bearing.
MIL-STD-2525 / APP-6 Built Symbology in the Deck, driven by a symbol identification code held on each platform class.
HLA — IEEE 1516-2010/2023, RPR-FOM, NETN-FOM Planned The requirement that most often decides a coalition exercise procurement, and absent from the closest comparable product.
C2SIM and MSDL Planned Order and scenario exchange with command-and-control systems.
SGP4 / SDP4 Planned Space domain — orbital propagation and constellation modelling.
Models

Derived, not tuned until it looks right.

Where a physical relationship exists, ORBIS implements the relationship and scales it from a published reference point — so a figure can be argued about on its merits instead of being an unexplained constant.

Sensors

Reference-range scaling. Radar and active sonar are two-way, so detection range varies with the fourth root of cross-section; ESM and infrared are one-way, varying with the square root of emitted power. Terrain and radar horizon mask the result.

Launch envelopes

The dynamic launch zone is derived from closure rather than tabulated. Effective range scales as R·(1 + closure/Vm) — a target running away shrinks the envelope, and a head-on target extends it.

Damage

Components are individually damageable and a platform has a structural tolerance measured in effective hits. Never a hit-point pool: a mount, a radar and a propulsion plant fail in different ways and matter differently.

Statistics

Proportions use the Wilson score interval, which behaves correctly near 0 and 1 where the normal approximation does not. Continuous measures use Student-t. The right interval per measure, because one batch usually reports both.

Environment

Atmosphere, sea state and light conditions feed sensor performance and motion. Altitude and throttle drive fuel burn through a per-platform table rather than a flat rate.

Dead reckoning

The sender runs the receiver's own extrapolation and transmits only when the picture has drifted past an agreed threshold. In a representative run this suppresses roughly four fifths of candidate updates.

Verification

How the models are checked, and how honestly.

A verification suite that reports a single pass rate hides the thing you need to know: how strong each check actually was. ORBIS grades every case and publishes the grade.

EXACT

Closed-form

A published formula gives the answer and the model must match it. Radar horizon from mast height, geodesic distance between two known points, coordinate round-trips.

LAW

Physical relationship

No absolute answer exists, but the shape of the response is fixed. Quadrupling radar cross-section must increase detection range by exactly the fourth root.

SANITY

Plausibility only

The weakest grade, and labelled as such. A figure that is merely in a defensible range is not evidence, and calling it evidence is how a model becomes trusted for the wrong reason.

Beyond unit tests

  • Pinned digests — an unintended behaviour change fails the build on the commit that caused it
  • Cross-platform runs — the same scenario must produce identical bytes on different operating systems
  • Batch determinism — every batch re-runs a seed and compares; a non-reproducible batch declares its own results unsound
  • Real-scenario integration — the fully-populated reference scenario runs end to end, because the defects that matter live at the seams between correct components

What that has actually caught

A single-bit cosine difference between two platform maths libraries. A dataset field that no component was forwarding, which would have made a whole subsystem emit nothing while every unit test passed. A wire format that round-tripped perfectly because the encoder and decoder shared the same mistake.

None of these were visible to a suite of individually-correct components. That is the argument for the last item on the left.

Deployment posture

Built to be accredited.

Runtime egress

The kernel cannot reach the network at all, no service phones home, and the client is served entirely from the deployment. The one remaining route out is geospatial: the map streams basemap and elevation tiles in the development posture and reads staged versioned bundles in the deployed one. Switching between the two is a single configuration value, deliberately kept visible — and until the bundle path is built, the client says LIVE TILES · DEV on screen rather than letting anyone assume otherwise.

One enforcement point

Authentication, role-based access, classification filtering and audit live in the Gateway rather than in each service, so there is one place to review and one place that can be wrong.

Tight content security policy

The client is served with a restrictive CSP and the API is same-origin by reverse proxy, so connect-src stays 'self' — the development and air-gapped configurations are the same configuration rather than two to keep in step. Tile hosts are the single documented exception and are named explicitly rather than covered by a wildcard.

Licence-clean

No copyleft in the runtime stack. Geospatial and symbology dependencies were licence-assessed before selection and the exclusions are documented.

Open the client.

Live kernel, real dataset, real decision traces.