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

paws-http

v1.0.0

Published

Terminal-native runner for JetBrains Rider / IntelliJ .http flow files, with an interactive Ink TUI and a plain-text reporter for CI.

Downloads

21

Readme

paws-http

A terminal-native HTTP flow runner. Run and explore Rider/IntelliJ .http files from the command line, with an interactive three-pane TUI or straight-line output for CI.

paws-http running the bundled examples

paws-http is to the terminal what the JetBrains HTTP Client is to Rider. Point it at a .http file (or a directory full of them) and it'll run the requests, execute the JavaScript pre- and post-scripts, evaluate client.test/client.assert assertions, and chain values between steps via client.global.set.

Why

  • Runs where Rider can't — CI, remote SSH, containers, Linux boxes.
  • Same files as Rider — no separate format to maintain.
  • Fast feedback — an interactive TUI for day-to-day exploration, a pretty console reporter for scripts and pipelines.

Install

Run it without installing:

npx paws-http

Or install globally:

npm install -g paws-http

Requires Node.js 22+.

Hacking on paws-http itself? See CONTRIBUTING.md for the source-based setup with Bun.

Quick start

Try the bundled examples (they hit public APIs — no local server needed):

paws-http                         # launcher
paws-http run examples            # interactive three-pane view
paws-http run examples/01-hello.http
paws-http run examples/01-hello.http --only 1.1   # single step, non-interactive

Usage

paws-http                         browse files interactively (launcher)
paws-http run <file.http>         run a single .http flow
paws-http run <dir>               run every .http in a directory, recursively
paws-http run <file> --only 1.3   run one step from a file
paws-http env list                list environments in the nearest env.json

  -e, --env <name>          environment (default: local)
  -f, --fail-fast           stop on the first failed step
      --only <step>         run only the step with this num (e.g. 1.2)
  -n, --non-interactive     force the console reporter (skip the TUI)

paws-http auto-picks a mode: if your terminal is a TTY you get the Ink-based three-pane TUI; otherwise you get a coloured console report and a non-zero exit code on failure. Pass -n / --non-interactive (or set CI=1, or pipe stdout) to force the console reporter explicitly — handy for scripts and pipelines.

Interactive keys

Navigation

| key | action | | ----------- | ----------------------------------------- | | / | cycle panes (Files → Requests → Response) | | Tab | next pane | | 1 2 3 | jump to Files / Requests / Response | | / | move within the active pane | | , / . | cycle through files (works in any pane) | | h / l | switch tab in the Response pane |

Running

| key | action | | --- | --------------------------------- | | s | run the selected step (only) | | r | run every step in the active file | | a | run every step in every file |

Other

| key | action | | ----- | ------ | | q | quit | | esc | quit |

Environments

paws-http reads the same environment files as Rider, discovered by walking up from the .http file:

  • http-client.env.json — checked into the repo, one object per environment.
  • http-client.private.env.json — gitignored, merged on top for local secrets.
{
  "local": {
    "baseurl": "http://localhost:8080",
    "Security": {
      "Auth": {
        "admin_auth": { "Type": "Mock", "Token": "{{admin_token}}" }
      }
    }
  },
  "dev": {
    "baseurl": "https://api.example.dev",
    "Security": {
      "Auth": { "admin_auth": { "Type": "OAuth2" } }
    }
  }
}

OAuth2 entries in v1 look for a pre-fetched bearer token under Security.Auth.<name>.Token in the private env file — paws-http won't run the OAuth2 flow for you.

Supported HTTP file syntax

  • ### 1.1 Title separators (numeric labels optional)
  • All methods: GET / POST / PUT / PATCH / DELETE / HEAD / OPTIONS
  • Short-form GET: a bare URL on a line after ###
  • Optional trailing HTTP/1.1 on the request line
  • Indented URL continuation lines
  • Headers: Key: Value
  • Bodies: inline JSON / text, or < ./path/to/file for a file upload
  • < {% … %} pre-request script
  • > {% … %} response handler (client.test, client.assert, etc.)
  • Built-in vars: {{$timestamp}} {{$uuid}} {{$random.integer(a, b)}} {{$auth.token("name")}}
  • Environment files (http-client.env.json + private overrides)
  • # and // comments

Not yet supported: import … from "utilities", OAuth2 flows, JSONPath body expansion ({{$.items..name}}).

Example .http file

### 1.1 Create a post
POST {{baseurl}}/posts
Content-Type: application/json

{
  "title": "hello",
  "userId": 1
}

> {%
    client.test("created", function() {
        client.assert(response.status === 201, "expected 201");
    });
    client.global.set("post_id", response.body.id);
%}

### 1.2 Read it back
GET {{baseurl}}/posts/{{post_id}}

License

MIT — see LICENSE.