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

@openclaw/proxyline

v0.3.7

Published

Process-global proxy routing for Node.js.

Downloads

14,380,283

Readme

Proxyline 🌐 — Keep every Node request in line.

CI npm Node.js License

Proxyline banner

Proxyline installs one process-wide proxy policy across Node's built-in HTTP(S) clients, global fetch and Undici, compatible WebSocket clients, and explicit CONNECT tunnels. It is for Node applications that need one runtime to enforce proxy routing, explain its decisions, and restore the original networking globals.

Documentation is available at proxyline.dev.

Install

pnpm add @openclaw/proxyline undici@^8.5.0

Or with npm:

npm install @openclaw/proxyline undici@^8.5.0

Proxyline requires Node.js 22.19.0 or newer and a host undici version in the >=8.5.0 <9 range. The package is ESM-only and includes TypeScript declarations.

Quick start

Save this as proxy.mjs:

import { installGlobalProxy } from "@openclaw/proxyline";

const proxy = installGlobalProxy({
  mode: "managed",
  proxyUrl: "http://127.0.0.1:3128",
});
console.log(proxy.explain("https://api.example.com/").reason);
proxy.stop();
node proxy.mjs
# managed-proxy-active

This asks Proxyline for a routing decision without connecting to the placeholder proxy. Install Proxyline before loading application or plugin code that may capture networking functions.

Choose a mode

Proxyline has two explicit routing modes:

| Mode | Configuration | Direct traffic | | --- | --- | --- | | managed | A required proxyUrl in code | Only through bypassPolicy, registerBypass(), or withBypass() | | ambient | HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, and NO_PROXY | Whenever the environment has no matching proxy |

Managed mode fails during setup when its proxy configuration is missing or unsupported. Ambient mode reads the environment once at installation and stays inactive when no supported HTTP or HTTPS proxy is configured. See Modes and Environment Variables for the complete rules.

Covered traffic

| Surface | How Proxyline applies the policy | | --- | --- | | node:http and node:https | Patches request methods and replaces global and caller-supplied agents | | Global fetch and Undici | Installs a global dispatcher and a compatible fetch stack | | WebSocket clients | Supplies proxy.createWebSocketAgent() for clients that accept a Node agent | | Explicit tunnels | Supplies openProxyConnectTunnel() for callers that need the connected socket |

proxy.createNodeAgent() and proxy.createUndiciDispatcher() expose the same policy to libraries that accept an agent or dispatcher directly. The surface guide describes ownership, TLS preservation, and cleanup for each API.

Bypasses and proxy trust

Managed mode supports deliberate direct-routing exceptions. A bypassPolicy handles installation-time policy, registerBypass() registers an exact process-wide exception, and withBypass() limits an exception to one async context. Each decision remains visible through explain().

For an HTTPS proxy with a private CA, use proxyTls.ca or proxyTls.caFile. That trust applies only to the proxy connection; destination TLS validation remains separate. See Proxy TLS.

Observability and lifecycle

proxy.explain(url) reports proxied or direct, the reason, the surface, and a credential-redacted proxy URL when one applies. The optional onEvent callback receives installation, shutdown, and decision events.

Only one Proxyline runtime is active in a process. A second installation fails by default; ifActive can reuse a compatible runtime or replace it intentionally. proxy.stop() restores the captured Node HTTP(S) methods, global agents, Undici dispatcher, and fetch globals. See Observability and the API Reference.

Security boundary

Proxyline is a Node-process runtime, not an operating-system sandbox. Raw net or tls sockets, native or private transport stacks, networking functions captured before installation, and DNS traffic are outside its boundary. Combine it with operating-system egress controls when code in the process is not trusted.

Read the security model before treating managed mode as an enforcement boundary.

Documentation

Development

pnpm install --frozen-lockfile
pnpm check
pnpm test
pnpm docs:build

License

MIT