Replay Mission T+00:00:00 Scenario campaign-jam-spoof-holdover-integrity Nominal Engine v0.29.0 · seed 20260928Real run
v0.29.0Open source · AGPL-3.0 · by Ashforde

Rehearse the minute GNSS goes dark.

Kshana is an open-source simulator for PNT (positioning, navigation and timing) resilience. Replay jamming, spoofing and clock holdover when GNSS (Global Navigation Satellite System) signals fail, in a Rust engine that runs right in your browser, and see exactly which results were checked against independent references.

Launch Kshana Studio

Press ⌘K to search pages, scenarios and docs

Kshana ProSame engine, amplified: 608 designs, one Pareto front
Event log · campaign-jam-spoof-holdover-integrityReal events
Where every trace comes from

Campaign: Engine v0.29.0, build e6bde8f · campaign-jam-spoof-holdover-integrity.toml · seed 20260928Open in Kshana StudioReportJSONTOML

Orbits: Engine v0.29.0, build e6bde8f · constellation-multi-gnss-coverage.toml · deterministic, no seedOpen in Kshana StudioReportJSONTOML

The console, the three cards and the log replay one chained run of 6 phases and 18 member runs on its 10 s grid (T+01:16:10 of mission time). The orbits are the 102 satellites of GPS, Galileo, BeiDou and GLONASS from the constellation run, each recovered as a circular two-body orbit from the engine's ground track (worst residual 0.0034°), radii compressed for display. Links are drawn to satellites above the constellation run's 10° mask (25° in the integrity-alarm phase, the campaign's reacquisition mask), dimmed by its jamming and cut in holdover. Earth: NASA Blue Marble and Black Marble. Kshana Studio replays the chained run in your browser; the engine's own report and the command reproduce each run.

L-band console · the spectrum kind

Watch a jammer take the band.

The GNSS L band as one PSD (power spectral density): frequency across, time down, colour for power above the noise floor. The signals sit under that floor, so what lights up is the jammers: a chirp, a CW (continuous-wave) tone and narrowband noise. Hover, tap or use the arrow keys for each band's C/N0 (carrier-to-noise density) and J/S (jammer-to-signal ratio).

kshana spectrum · l-band-waterfall-jamming.toml Real run

The waterfall is drawn from the recorded run with JavaScript. The engine's report below shows the same run.

The campaign this run drives · each phase follows the jammer state

    Engine run of l-band-waterfall-jamming.tomlOpen in Kshana StudioEngine report

    Scenario, result data, the campaign run and what is modelled

    Spectrum runScenario fileResult data

    Campaign it drives: campaign-spectrum-holdover-integrity.tomlOpen in Kshana StudioEngine reportScenario file

    Modelled: closed-form spectra over a thermal noise floor, scored per band by spectral separation; jammer powers and timings are scenario inputs. The time axis counts seconds before now; the cyan line marks where the replay restarted. Kshana Studio runs the same scenario in your browser and replays the waterfall; the report and the command reproduce the run.

    01Mission timeline · scroll or drag to scrub

    1/6Nominal

    Every satellite is tracked. The clock is disciplined to GNSS time, and the protection level sits well below the alert limit.

    T+00:00:00
    Mission time
    kshana campaign · campaign-jam-spoof-holdover-integrity · seed 20260928 Real run

    Phases · member runs

    1. NominalT+00:00:00
      • clockseed 42
      • jammingseed 1
      • integrityseed 7
    2. JammingT+00:10:00
      • clockseed 43
      • jammingseed 1
      • integrityseed 7
    3. SpoofingT+00:20:00
      • spoof
      • spoof-detect
      • jammingseed 1
    4. HoldoverT+00:26:10
      • clockseed 44
      • gnss-insseed 7
      • jammingseed 1
    5. Integrity alarmT+00:56:10
      • clockseed 45
      • jammingseed 1
      • integrityseed 7
    6. RecoveryT+01:06:10
      • clockseed 46
      • jammingseed 1
      • integrityseed 7
    6 phases · 18 member runs of existing kinds
    Clock time errorns · guard 50
    –
    C/N0dB-Hz · floor 25
    –
    PL vs ALmetres · AL 50
    –
    NominalJammingSpoofingHoldoverIntegrity alarmRecovery
    T+00:00:00 → T+01:16:10 mission time · the chained run, not three runs side by sidePL = protection level · AL = alert limit · INS = inertial navigation system

    Engine v0.29.0, build e6bde8f · campaign-jam-spoof-holdover-integrity.toml · seed 20260928Open in Kshana StudioReportJSONTOML

    02Capabilities

    One engine for the whole failure chain.

    From the first jammed satellite to the last nanosecond of clock holdover: signals, sensors, clocks, orbits and integrity in one simulator. Every picture below is a real engine run, and says which.

    Interference

    GNSS jamming and interference

    A broadband jammer on a mast and a receiver moved over a grid around it: every cell is its own run of the engine's jamming kind. Shade is the mean J/S (jammer-to-signal ratio); red cells lost every satellite.

    875 engine runs15 km cells around the jammer241 lost every satellite19 lost some epochs615 held trackingdarker = higher mean J/Speak 110.1 dB at the mast▲ the scenario's ship

    Engine v0.29.0 · maritime-strait-jamming.toml · seed 1 · receiver moved per cellOpen in Kshana StudioEvery cell, on Missions

    Deception

    Spoofing detection

    A spoofer captures the receiver and walks its time off at a steady rate. Each clock's integrity monitor has its own detection bound: the quantum clock flags the lie almost at once, the classical one only once the offset has grown.

    Engine v0.29.0 · spoof-attack.toml · deterministic, no seedOpen in Kshana StudioReport
    Clocks

    Clock holdover across oscillator classes

    From the moment GNSS disappears: the median and 95th percentile of 200 Monte Carlo runs for a chip-scale atomic clock (CSAC) and an optical lattice clock, and the one-day error of four more classes: an optical master clock, a hydrogen maser, a rubidium atomic frequency standard (RAFS) and its miniature version (mini-RAFS).

    Engine v0.29.0 · clock-ensemble.toml · seed 42Open in Kshana StudioReport

    One-day column: Engine v0.29.0 · lunar-time-budget.toml · deterministic, no seedOpen in Kshana StudioReport

    Dead reckoning

    GNSS/INS coasting

    When GNSS drops, the INS (inertial navigation system) carries on and its error cone opens. Two inertial measurement units (IMUs), one budget.

    Engine v0.29.0 · small-uas-jammed-nav.toml · seed 7Open in Kshana StudioReport
    Timing

    Slot timing

    How long a clock stays inside its guard interval after the last fix: the question time-slotted networks care about.

    Engine v0.29.0 · slot-timing-ocxo-leo.toml · deterministic, no seedOpen in Kshana StudioReport
    Integrity

    RAIM and ARAIM

    Protection levels (PL) from receiver autonomous integrity monitoring (RAIM) and its advanced form (ARAIM), checked against the alert limit: here, the chained mission's integrity-alarm phase. Hatched bars are epochs where no protection level could be formed.

    dashed: alert limit 50 mT+00:56:10 · 30 s epochs

    Engine v0.29.0, build e6bde8f · campaign-jam-spoof-holdover-integrity.toml · seed 20260928Open in Kshana StudioReportJSONTOML

    Telecom

    Timing masks

    MTIE (maximum time interval error) and TDEV (time deviation) of a 24-hour holdover against ITU-T (International Telecommunication Union, Telecommunication Standardization Sector) limits, here the PRTC-A (primary reference time clock, class A) one.

    Engine v0.29.0 · telecom-prtc-holdover-24h.toml · seed 20260925Open in Kshana StudioReport
    Astrodynamics

    Orbits: SGP4 and numerical

    SGP4 (Simplified General Perturbations 4) propagation of a real two-line element set, drawn on real imagery; CCSDS OEM and SP3 ephemerides in and out.

    Engine v0.29.0 · ephemeris.toml · deterministic, no seedOpen in Kshana StudioReport
    Cislunar

    Lunar PNT

    Positioning, navigation and timing around the Moon: horizontal and vertical protection levels (HPL, VPL) from ARAIM on a lunar navigation service.

    Engine v0.29.0 · lunanet-araim.toml · deterministic, no seedOpen in Kshana StudioReport
    Emerging sensors

    Quantum-sensor trade studies

    Weigh a quantum clock against a classical one before anyone buys hardware: holdover across a sweep of the classical clock's noise.

    Engine v0.29.0 · sweep-clock-stability.toml · seed 42Open in Kshana StudioReport
    Runs everywhere

    Browser, terminal, notebook, IDE, assistant

    The same Rust engine ships as WebAssembly for Kshana Studio, a CLI (command-line interface), Python and JavaScript packages, a JetBrains Marketplace plugin for your IDE (integrated development environment) and an MCP (Model Context Protocol) server.

    WebAssemblycargo install kshanapip install kshananpm install kshanaJetBrains Marketplacecargo install kshana-mcpghcr.io imageCCSDS OEMSP3

    CCSDS OEM: Consultative Committee for Space Data Systems Orbit Ephemeris Message. SP3: Standard Product 3 orbit format.

    Scope, stated plainly

    What Kshana is not

    Knowing the edges matters as much as the features.

    Not an RF signal simulatorIt does not generate radio-frequency (RF) waveforms.
    Not a GNSS receiverIt simulates what happens to PNT; it does not track real signals.
    Not a flight productA study and trade-off instrument, every answer labelled Validated or Modelled.
    03AI assistants · kshana-mcp

    Ask your AI assistant. The engine answers.

    Your AI (artificial intelligence) assistant runs the engine over MCP (Model Context Protocol) through kshana-mcp and reads back JSON (JavaScript Object Notation).

    InstallGenerated from the repository

    For anyone, nothing to install.

    The engine runs locally as WebAssembly; nothing is uploaded.

    Then register it in your assistant's MCP client configuration. Full configuration on Developers

    AI assistant + kshana-mcp Recorded session

    The messages an assistant exchanges with kshana-mcp, captured from the server.

    The recorded session plays here step by step.

    Same run in the Studio: Engine v0.29.0 · clock-holdover.toml · seed 42Open in Kshana StudioReport

    04Scroll story · one chained run

    A lie that looks like a fix.

    One receiver, T+01:16:10 of mission time: a clean sky, a jammer, a spoofer that moves the answer instead of blocking it, then a clock left on its own. The 102 satellites are the four systems of the constellation run, on the real Earth. Scroll.

    01 · Nominal

    Every link, accounted for.

    8 satellites tracked at a mean C/N0 (carrier-to-noise density) of 43.0 dB-Hz. The vertical protection level stays between 9.1 and 21.6 m, under the 50 m alert limit.

    02 · Jamming

    Noise swallows the sky.

    A broadband jammer 1.0 km away comes on at -30 dBW. C/N0 falls to 27.7 dB-Hz, just above the 25 dB-Hz tracking floor. Loud, so the receiver knows.

    03 · Spoofing

    A lie that looks like a fix.

    A spoofer pushes the clock at 0.1 ns/s. The RF (radio-frequency) detector alarms at T+00:20:00; the clock-aided monitor needs 370 s, and by then 36.0 ns are already pulled in.

    04 · Holdover

    Then time starts to drift.

    The jammer goes to 10 dBW and every satellite is lost. The clock free-runs from the 37.0 ns the spoofer left and crosses its 50 ns guard at T+00:35:40; the inertial error reaches 24.3 km.

    Campaign: Engine v0.29.0, build e6bde8f · campaign-jam-spoof-holdover-integrity.toml · seed 20260928Open in Kshana StudioReportJSONTOML

    Orbits: Engine v0.29.0, build e6bde8f · constellation-multi-gnss-coverage.toml · deterministic, no seedOpen in Kshana StudioReportJSONTOML

    Open core, Kshana Pro, custom study

    Free for everyone. Pro when the answer has to stand up in a review.

    Kshana Pro is a proprietary overlay that depends on the open core and never forks it, available under contract. No prices on a web page: every paid route starts with a message to contact@ashforde.org.

    Open core · free · AGPL-3.0

    Why everyone needs it

    • Anyone who takes position or time from GNSS is exposed: jamming, spoofing and signal loss reach vehicles, networks, grids and spacecraft alike.
    • 83 of 223 capabilities agree with independent external oracles; the rest are labelled Modelled, out loud.
    • All 75 scenario kinds, free with no feature gate, deterministic from scenario, seed and engine version.
    • The same core under a commercial licence, for closed integration.
    Kshana Pro · under contract

    Why Pro, even more

    • The Pareto front of a design space, with every front design as a scenario the free engine re-runs.
    • Uncertainty and sensitivity over thousands of runs.
    • A one-command mission dossier with a verification matrix and a PDF (Portable Document Format) file.
    • Audit-grade, reproducible evidence packs; clock digital twins calibrated to your device's published Allan budget; architecture trade studies ranked on a figure of merit; model-based systems-engineering (MBSE) and programme tooling.
    Custom study · done for you

    Custom study: the answer, not the tool

    • A Modelled PNT-resilience study of your system, for example an optimism-gap audit. Not a certification.
    • Sensor and resilience models calibrated to your hardware.
    • Export-controlled work under the appropriate clearance and NDA (non-disclosure agreement).
    • Integration, training and consulting.

    Same engine, amplified: real Kshana Pro output

    What Pro includes

    Find where your timing breaks, before it does.

    Launch Kshana Studio