utem-cli
v0.1.1
Published
npm wrapper for the UTEM CLI (utem) — control plane for the UTEM security platform. Installs the official PyPI package into an isolated environment.
Maintainers
Readme
utem-cli
npm distribution channel for the UTEM CLI (utem) — the control-plane
command-line interface for the UTEM security platform.
# one-off
npx utem-cli --help
# global install
npm i -g utem-cli
utem --helpWhat this package is (and isn't)
The UTEM CLI itself is a pure-Python application published on PyPI as
utem (the wheel is
utem-<version>-py3-none-any.whl — architecture independent). It is also
distributed via Homebrew (Innavoto/utem-homebrew-tap).
This npm package is a thin wrapper, not a reimplementation. On install it:
- Locates a Python 3.10+ interpreter on your
PATH. - Creates an isolated virtualenv inside the installed package (
.venv/). pip installs the pinnedutemrelease from PyPI into that venv.
The utem command shipped by this package then execs the CLI inside that
venv, forwarding all arguments, stdio and exit codes. Your global Python
environment is never modified.
Requirement: Python 3.10+
Because the CLI is a Python program, this wrapper requires Python 3.10 or
newer on your PATH (the same requirement the Homebrew formula declares via
depends_on "python3"). If Python is missing, install fails soft with an
actionable message and the CLI is provisioned lazily on first utem run.
On Debian/Ubuntu you may also need python3-venv (apt install python3-venv).
Design tradeoff
Two common patterns exist for shipping a CLI on npm:
| Approach | Used here? | Why / why not |
|---|---|---|
| Prebuilt-binary downloader (esbuild style: postinstall fetches a per-OS/arch native binary from GitHub Releases, checksum-verified) | No | The UTEM CLI has no native binary and no per-platform GitHub release assets — it is pure Python. There is nothing arch-specific to download. |
| optionalDependencies per-platform packages | No | Same reason — there are no platform-specific artifacts to split into sub-packages. |
| PyPI-install shim (provision the real package into an isolated venv) | Yes | The canonical artifact is a pure-Python wheel already on PyPI; installing it into an isolated venv is the simplest correct wrapper and requires no new binary build pipeline. |
If the CLI is later shipped as self-contained native binaries (e.g. via PyInstaller) attached to versioned GitHub Releases, this wrapper can be switched to the checksum-verified downloader model without changing its public interface.
Environment variables
| Variable | Effect |
|---|---|
| UTEM_SKIP_POSTINSTALL=1 | Skip provisioning during npm install (CI / air-gapped). The CLI is provisioned lazily on first run. |
CLI auth (UTEM_API_URL, UTEM_TOKEN, UTEM_TENANT_ID) is documented in the
main CLI README.
Versioning
This wrapper is versioned independently of the CLI it installs. The wrapper
version is package.json's version; the CLI version it pins from PyPI is
PINNED_CLI_VERSION in lib/platform.js (currently 0.1.0). Packaging-only
fixes can ship a new wrapper release without a new CLI release.
License
Proprietary — © Innavoto India Pvt Ltd. See the main repository.
