Skip to content

Activating Your License

keplime is a commercial product. Every import keplime requires a valid license file issued by Citra Space. Without one, the import fails with keplime.LicenseError and a message describing what to fix.

Obtaining a license

Contact sales to request a license. You will receive a single file (typically named <your-org>.license) containing the signed license blob.

Installing the license

keplime resolves the license at import time, in this priority order:

  1. KEPLIME_LICENSE environment variable — the license blob itself, inline. Convenient for container deployments and 12-factor setups where secrets are injected as env vars.
  2. KEPLIME_LICENSE_FILE environment variable — an absolute path to the license file on disk.
  3. Default data-dir path{data_dir}/license.key. The data directory is platform-specific:

    • Linux: $XDG_DATA_HOME/keplime (or ~/.local/share/keplime)
    • macOS: ~/Library/Application Support/keplime
    • Windows: %LOCALAPPDATA%\keplime

    The same directory keplime uses for cached EOP and ephemeris data.

Pick whichever fits your deployment.

Verifying activation

After installing the license, confirm it from a Python shell:

import keplime
print(keplime.licensing.info())
# {'license_id': '...', 'customer_id': 'acme-corp',
#  'customer_name': 'Acme Corporation', 'issued_at': 1778446188,
#  'expires_at': None, 'schema_version': 1}

If import keplime fails, the exception message will direct you to one of these install options.

Catching license errors

keplime.LicenseError is the single exception type raised for every license-validation outcome — missing file, malformed blob, tampered signature, expired license, or unsupported schema field.

try:
    import keplime
except keplime.LicenseError as exc:
    # Show the user a friendly message, prompt for a new license, etc.
    print(f"keplime license problem: {exc}")

Note that the exception is also raised at runtime from keplime.licensing.install(...) if the supplied file or blob is unreadable or malformed.

Updating an active license

To install a new license file without restarting Python on a fresh process, use keplime.licensing.install:

import keplime
keplime.licensing.install("/path/to/new.license")

The file is copied to the default data-dir location for use on subsequent imports. The currently running process keeps the license that was validated at its import keplime time — restart Python to pick up the new file.

Air-gapped and offline use

License validation is fully offline. There is no phone-home, no revocation list lookup, and no network requirement at import time. keplime caches the validation result for the process lifetime so even repeated module imports do no further work.