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

@constal/cli

v1.3.6

Published

Task-oriented command line client for the Constal Platform API

Readme

@constal/cli

The command-line client for the public Constal Platform API.

npm install --global @constal/cli
constal --help

Authenticate and select a namespace:

printf '%s' "$CONSTAL_API_KEY" | constal auth login --token-stdin
constal context use --namespace default
constal auth status

The CLI covers deployments, Agents and Runs, Resources and bindings, Credentials, Channels, Policies, analytics, Evals and training, Memory, customers, artifacts, stages, and tables. Run constal help <command> for exact arguments and examples.

Configuration is read in this order:

  1. command-line options
  2. CONSTAL_PLATFORM_URL, CONSTAL_NAMESPACE, and CONSTAL_TENANT
  3. the saved context file

CONSTAL_API_KEY overrides the saved credential. Local files live under $XDG_CONFIG_HOME/constal, or ~/.config/constal when XDG_CONFIG_HOME is unset. Set CONSTAL_CONFIG_DIR to use another directory.

JSON values accept inline JSON, @FILE, or @- for stdin where the command help allows them. Credential material is accepted only through the dedicated file or stdin options and is redacted from CLI output.

See the Constal CLI documentation for complete workflows.

Multiple Constal manifests

Select an authored manifest inside a local project without changing the checkout:

constal deploy . --manifest channels/incoming/constal.channel.json --wait

The selected manifest is placed at the project root in the upload archive. Other root resource manifests are omitted. Relative entry paths remain relative to the project root. For a local Channel, AuthProvider, Policy, or Tool manifest with an omitted or null expectedCurrentDeploymentRevision, the CLI reads the current Resource through the public API and adds its deployment revision as the promotion base in the archive. A missing Resource uses a null base for its first deployment. Explicit revision pins are preserved, and ordinary Agent deployments remain unconditional. The configured namespace must match the component manifest. Git URL and prebuilt archive sources are submitted as supplied; their manifests must already include any required promotion base.

Agent manifests with a ui block

An Agent manifest may declare its web interface inline. constal deploy . then builds the Agent, packages the declared directory as a constal.ui.v1 bundle, and publishes a ui Resource pinned to the Agent revision produced by that deployment; the Agent and its UI are promoted together or not at all.

{
  "kind": "agent",
  "id": "market-landscape",
  "namespace": "default",
  "entry": "src/index.ts",
  "ui": {
    "id": "market-landscape-workspace",
    "displayName": "Market landscape",
    "source": "ui",
    "channel": { "kind": "local", "resourceKind": "channel", "id": "openai-chat-completions" },
    "access": { "mode": "public" },
    "execution": { "mode": "stateless" },
    "labels": { "app.constal.ai/primary": "true" }
  }
}

The declared ui.source directory is always archived: a .constalignore pattern that matches it or one of its parents is skipped for that directory alone, while dist, node_modules, .constal, .env* files, and symbolic links stay excluded inside it. The CLI fails before uploading when ui.source names a reserved directory, is missing or empty, or contains a nested constal.agent.json. An optional <source>/constal.ui.json inside the directory overrides bundle manifest defaults (entry worker.mjs, assets public/ with index.html fallback, durable state); it is never read as a root manifest.

The UI ships inside the Agent archive, so the compressed upload stays under the 10 MiB deployment intake limit; larger UIs use the standalone Resource API. Inline UIs support only immediate rollouts: --rollout canary and candidate builds are rejected. Removing the block later leaves the published UI untouched; delete it explicitly with constal resources delete ui <id>.

After --wait, the deployment record lists the UI under outputs, and the CLI prints UI: <url> (hash <resourceHash>) on stderr:

constal deploy . --wait --output json | jq -r '.outputs[] | select(.resourceKind == "ui") | .resource.url'