Skip to main content

Kshana: the mark, a compass reticle marking the precise instant, beside the wordmark kshana

Kshana · क्षण · the precise instant
An open-source simulator for PNT (positioning, navigation and timing) resilience.

Release v0.29.2 83 of 223 capabilities validated against independent external oracles About 95% line coverage, gated at 85% in continuous integration Licence: AGPL-3.0-only, or a commercial licence DOI 10.5281/zenodo.20528627

Rehearse the minute GNSS goes dark: Kshana's mission console, drawn from a real run of the engine, a chained jamming, spoofing, holdover and integrity campaign over the 102 satellites of GPS, Galileo, BeiDou and GLONASS

Rehearse the minute GNSS goes dark

Kshana replays jamming, spoofing and clock holdover when GNSS (Global Navigation Satellite System) signals fail, and tells you how long a system keeps time and position inside its budget, and which clock or sensor buys the most margin. This is the Python package: the engine in a notebook or a script. Every run is reproducible bit for bit from the scenario, the seed and the engine version.

Try it first with nothing to install: Kshana Studio runs the whole engine in your browser, compiled to WebAssembly, and uploads nothing.

Evidence

83 of 223 capabilities validated against independent external oracles; 136 honestly labelled Modelled, 4 partner-owned. Each capability carries one label in a machine-checked ledger: VALIDATED (an independent external oracle agrees: real data, an independent implementation or published reference vectors), MODELLED (internally consistent, and said out loud) or PARTNER (a hardware partner owns it). Among the checks: all 666 SGP4 (Simplified General Perturbations 4) vectors of AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 to 4.12 mm, and the Cowell force model to 0.08 m against Orekit 12.2.

How a capability earns its label: capability, oracle, test, ledger label. The verification status across all 223 capabilities: 83 Validated, 136 Modelled, 4 Partner-owned

Install

pip install kshana

Wheels are built on each release tag for Linux, macOS and Windows, each for x86-64 and 64-bit ARM, and one abi3 wheel per platform covers CPython 3.9 and newer. To build from source instead, use maturin: pip install maturin && maturin develop --features python.

Usage

The example is complete: it carries its own scenario, so it runs as written with nothing else on disk.

import json, kshana

# A complete scenario, not a sketch: scenarios/clock-holdover.toml without its comment
# lines. It runs 2 h, 10 min of GNSS then about 1.8 h with GNSS denied, and asks how long
# a strontium optical clock and a chip-scale atomic clock (CSAC) each hold time to within
# 20 ns. sigma_y(1s) is a clock's Allan deviation at an averaging time of one second;
# q_wf, the white-frequency-noise intensity, is its square.
toml = """
seed = 42
threshold_ns = 20.0

[time]
step_s = 10.0
duration_s = 7200.0

[gnss]
windows = [
  { t0 = 0.0,    t1 = 600.0,  state = "nominal" },
  { t0 = 600.0,  t1 = 7200.0, state = "denied" },
]

[clock_quantum]
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (Origlia/Schiller/Bongs et al., arXiv:1503.08457); q_wf=sigma_y(1s)^2; ground-demonstrator maturity, not flown; flicker/aging not modeled"
y0   = 5.0e-17
q_wf = 1.0e-30
q_rw = 0.0

[clock_classical]
id = "csac-sa45s"
provenance = "Microchip SA65 / SA.45s CSAC datasheet sigma_y(1s)=3e-10; q_wf=sigma_y(1s)^2; flicker/aging not modeled"
y0   = 5.0e-10
q_wf = 9.0e-20
q_rw = 0.0
"""

result = json.loads(kshana.run(toml))       # the full result document
print(result["quantum"]["fom"]["integrity"])

# The JSON result, the chart as SVG (Scalable Vector Graphics) and a one-line summary,
# all from one engine run:
result_json, chart_svg, summary = kshana.run_full(toml)
print(kshana.version(), summary)

Every other reference scenario is a file under scenarios/ in the repository; pass its text to kshana.run the same way. With the Rust command-line interface (CLI) installed, kshana example <name> prints each scenario bundled in the binary, and kshana example lists them.

Beyond run / run_full / version, the module exposes run_typed (a structured result object), validate_toml (lint → list of error strings), scenario_kinds (the dispatchable kinds as a Python list of dictionaries), list_kinds (the same metadata as one JSON string — kept as a string so existing callers do not break; call json.loads(kshana.list_kinds()), or use scenario_kinds() for the parsed list), and error_kind (the KshanaError tag for a rejected scenario) — see docs/PYTHON_API.md.

Every capability in the verification matrix is labelled validated (checked against an independent external oracle), modelled or partner-owned; optical-clock figures are space goals on ground hardware (no strontium optical clock has flown). Maturity is not uniform across domains — Earth PNT is validated against real data; deep-space and Mars navigation is modelled, with only its building blocks (light time, planet positions) validated against external oracles; real-mission deep-space OD (orbit determination) is on the roadmap.

Capabilities

The engine has 75 scenario kinds; kshana kinds lists them with their fields.

  • Spectrum: how a jammer takes the GNSS L band, band by band.
  • Clocks and timing: holdover against a threshold, time transfer, and telecom holdover against the masks of the International Telecommunication Union's standardization sector (ITU-T).
  • Constellations around any body: coverage, dilution of precision and availability around the Earth, the Moon or Mars, and the solar system at one epoch.
  • Low-Earth-orbit navigation: signal, pass and link, navigation message, and a fused fix, stage by stage.
  • Campaigns: a chained mission, a sweep or a Monte Carlo ensemble in one scenario.
  • Reports, animation and exports: every figure with its unit and label; an animated drawing of a run; SP3 (Standard Product 3), CCSDS (Consultative Committee for Space Data Systems) orbit messages, CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK (Systems Tool Kit) and SigMF (Signal Metadata Format) files.

Architecture

One open engine at the centre, kshana 0.29.2, with a typed dispatch over 75 kinds; around it the command line, the Rust library, Python, WebAssembly and Kshana Studio, the MCP server, the Docker image and the JetBrains plugin; below it Kshana Pro, a proprietary overlay that depends on the open engine and never forks it

The same scenario file gives the same bytes on every surface. MCP is the Model Context Protocol: kshana-mcp lets an AI (artificial intelligence) assistant run the engine.

Research

Five papers on arXiv are built on the open engine, each with the command behind it: arXiv:2606.22054 (the optimism gap of interference detectors), arXiv:2606.24210 (a conditional timing protection level), arXiv:2607.05415 (how stable a PNT resilience score is), arXiv:2607.02566 (lunar surface station observability with very-long-baseline interferometry) and arXiv:2607.06212 (lunar south-polar geometry and surface beacons). See Research.

Editions

The whole engine is free under the AGPL-3.0. Kshana Pro, a proprietary overlay that depends on the open engine and never forks it, and custom studies are available under contract from Ashforde OÜ: contact@ashforde.org. There are no prices; see docs/PRO.md.

Learn more

Licence

Free and open source under the GNU AGPL-3.0-only (the GNU Affero General Public License, version 3 only). A commercial licence is available from Ashforde OÜ (an Estonian private limited company; OÜ = osaühing) for closed integration; see LICENSING.md. Professionally developed and maintained by Ashforde OÜ.

Metadata

Release files for kshana 0.29.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for kshana 0.29.2
File Size Uploaded
kshana-0.29.2.tar.gz 4.2 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for kshana 0.29.2
File
kshana-0.29.2-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details
kshana-0.29.2-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
kshana-0.29.2-cp39-abi3-manylinux_2_28_x86_64.whl CPython 3.9 abi3 Linux glibc 2.28+ x86-64 Details
kshana-0.29.2-cp39-abi3-manylinux_2_28_aarch64.whl CPython 3.9 abi3 Linux glibc 2.28+ ARM64 Details
kshana-0.29.2-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
kshana-0.29.2-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 33.1 MB

Release files / kshana-0.29.2.tar.gz

Download URL kshana-0.29.2.tar.gz
Size 4.2 MB
Tags Source
SHA-256 checksum
How to use checksums
dba510fd93c1b1688ab16b45dcd0f6d85e2ad599e97a5064fdd78ad3110c825a
BLAKE2b-256 checksum
How to use checksums
7ce52f1fabb301e991c2b8948a21c83217c6349c6728db1188a677761ffb5278
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / kshana-0.29.2-cp39-abi3-win_arm64.whl

Download URL kshana-0.29.2-cp39-abi3-win_arm64.whl
Size 4.7 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
d09b3b5d17f35b348ce2bfb4bb41f74464a294360092ce32999b16b8c15d2754
BLAKE2b-256 checksum
How to use checksums
97bcf66f13db682a48f57635250dd22efa09839a4ecbc21bc44cd2bb0a0bc670
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / kshana-0.29.2-cp39-abi3-win_amd64.whl

Download URL kshana-0.29.2-cp39-abi3-win_amd64.whl
Size 5.1 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
800604c2929e4f1b8cdb457f67c377a36fc3b4ceca72dba06f83d36da696c4a0
BLAKE2b-256 checksum
How to use checksums
d61eda9e9fc57228da4fb1bf25c623631debf77e66bc47e32df3ba6b412a7d4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / kshana-0.29.2-cp39-abi3-manylinux_2_28_x86_64.whl

Download URL kshana-0.29.2-cp39-abi3-manylinux_2_28_x86_64.whl
Size 5.0 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
c6c10db486b96d88b878beeb1d9c689f641c1c4d6d062d14b7dbdc28a6ce61e5
BLAKE2b-256 checksum
How to use checksums
595f223fd2d10e2408e910f725045fc0ab28b80d3829e1864785099960cc206f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / kshana-0.29.2-cp39-abi3-manylinux_2_28_aarch64.whl

Download URL kshana-0.29.2-cp39-abi3-manylinux_2_28_aarch64.whl
Size 4.8 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
3dbee80daf1b81bc4ce7b18f6d84fb254b72388509a6df75c699a58908dc1c28
BLAKE2b-256 checksum
How to use checksums
4bbab549ca0f5e67ba9150790ca2080973c2567fc5ee8efdd7ed6c1bad18fb1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / kshana-0.29.2-cp39-abi3-macosx_11_0_arm64.whl

Download URL kshana-0.29.2-cp39-abi3-macosx_11_0_arm64.whl
Size 4.6 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
331ce5f0f5d541f42b94ebde801c965fae89abe692329efbf5fc6596810c8a42
BLAKE2b-256 checksum
How to use checksums
8bac8d11b3b5b93a503d78da659253dcd0a1313a0345fe2d7dd7ef506f66203d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / kshana-0.29.2-cp39-abi3-macosx_10_12_x86_64.whl

Download URL kshana-0.29.2-cp39-abi3-macosx_10_12_x86_64.whl
Size 4.8 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
65d3f421cc04f7a12929a15fcbdb94e36ccb587a06902372685f0717b9e0173a
BLAKE2b-256 checksum
How to use checksums
8fff99c32727d22a6ae46d4f492b76df86bc18134d991c36ef499cc495166c90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page