npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@krovacloud/cli

v0.6.11

Published

Krova Cloud CLI (krova) — manage Cubes (Firecracker microVMs), browse the catalog, and log in, from your terminal.

Readme

@krovacloud/cli

The Krova Cloud command-line interface (krova) — manage Cubes (Firecracker microVMs), browse the catalog, log in through your browser, and SSH into a Cube, all from your terminal. A pure Node.js CLI built on @krovacloud/sdk — no native binary, no Go toolchain.

npm i -g @krovacloud/cli
krova --help

Requires Node.js ≥ 20.

Log in

krova login            # browser device-authorization flow
# or paste an API key:
krova auth login       # prompts (hidden) for a kro_… key
krova whoami           # confirm the active context + space

Credentials are stored in ~/.config/krova/config.json (mode 0600), as named contexts — switch accounts/spaces like kubectl/aws profiles. The file format is compatible with the previous CLI, so existing logins keep working.

krova context list
krova context use <name>
krova context rename <old> <new>
krova context delete <name>

Cubes

krova list                         # list Cubes (alias: krova cubes list, ls)
krova get <cube>                   # show one Cube (name or ID)
krova cubes create \
  --name web --image ubuntu-24.04 \
  --vcpu 1 --ram 1 --disk 10 \
  --ssh-key "$(cat ~/.ssh/id_ed25519.pub)"
krova cubes power-off <cube>
krova cubes wake <cube>
krova cubes restart <cube>   # cold restart — the only way to pick up a new kernel
krova cubes ssh-port <cube> --port 2222   # in-Cube sshd port, NOT the host port
krova cubes delete <cube>

<cube> is a Cube name or ID — a unique name resolves automatically.

SSH

krova ssh <cube>                    # interactive shell
krova ssh <cube> -- uname -a        # run a command non-interactively
krova ssh <cube> -i ~/.ssh/id_ed25519 -L 8080:localhost:80

The CLI fetches the Cube's SSH endpoint — including which user to log in as — so you never have to remember it. That is ubuntu on Ubuntu images and debian on Debian images, both with passwordless sudo (sudo su for a root shell); Cubes created before August 2026 log in as root. Direct root SSH is disabled on the newer images, which is why the CLI reads the user from the API rather than assuming one.

When the server provides them the CLI also pins the host keys to ~/.config/krova/known_hosts with strict host-key checking (no trust-on-first-use window). The destination is always passed after a -- separator, with host/user validated against option-injection — a hostile value aborts before ssh ever runs.

Domains, snapshots & TCP mappings

Manage a Cube's attached resources. All take a <cube> name or ID and support --json.

# Custom domains
krova domains list <cube>
krova domains add <cube> --domain app.example.com --port 8080
krova domains records <cube> <domain-id>   # the DNS records the domain needs,
                                           # and whether each one resolves yet
krova domains rm <cube> <domain-id>

# Reach the Cube over HTTPS instead of cleartext — only for a Cube that
# terminates TLS itself (a control panel with its own certificate). Visitors
# are on HTTPS either way.
krova domains add <cube> --domain panel.example.com --port 443 --origin-scheme https
krova domains set-origin <cube> <domain-id> https

# Send a PROXY protocol header naming the visitor on each connection to the
# Cube, for an app that reads the visitor from the connection. The app must
# accept it on that port first. Every domain on the same Cube port needs the
# same setting; add --confirm-mixed-proxy-protocol to save a mix anyway.
krova domains add <cube> --domain app.example.com --port 8080 --proxy-protocol v2
krova domains set-proxy-protocol <cube> <domain-id> v2    # or v1, or off

# Snapshots + restore
krova snapshots list <cube>
krova snapshots create <cube> --name nightly
krova snapshots restore <cube> <snapshot-id>   # replaces the Cube's disk
krova snapshots rm <cube> <snapshot-id>

# TCP port mappings (expose a Cube port on the host)
krova tcp list <cube>
krova tcp add <cube> --port 5432 --whitelist 203.0.113.4/32
krova tcp rm <cube> <mapping-id>

Backups

A backup is a Cube's disk and configuration, kept after the Cube is gone. A backup is named or given by ID.

krova backups list
krova backups get nightly
krova backups download nightly     # prints a link valid for 15 minutes; anyone holding it can download the disk

# Offer another space its own copy. It has 48 hours to accept, and pays for its copy from then.
krova backups share nightly <destination-space-id>
krova backups shares               # pending shares into and out of this space
krova backups accept <share-id>    # in the destination space
krova backups decline <share-id>
krova backups cancel <share-id>    # withdraw one this space offered

These need the Backups permissions on the key's member: View Backups for list, get and shares, Manage Backups for the rest. Accepting or declining also works for the destination space's owner.

Catalog

krova regions          # regions with available capacity
krova images           # OS images
krova pricing           # per-resource hourly pricing

Webhooks

krova webhooks listen --secret "$KROVA_WEBHOOK_SECRET"
# verifies each delivery's HMAC signature and prints the event

Global flags

Available on every command (flag > env var > context):

| Flag | Env | Purpose | | --- | --- | --- | | --api-key <key> | KROVA_API_KEY | API key | | --space <id> | KROVA_SPACE_ID | Space ID (else auto-detected) | | --base-url <url> | KROVA_BASE_URL | override the API base URL | | --context <name> | KROVA_CONTEXT | select a named context | | --json | | machine-readable JSON output | | --timeout <dur> | | per-request timeout (e.g. 30s); defaults to 30s |

License

MIT