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

bun-ws-inspect

v0.0.1

Published

WebSocket inspection lib for Bun.

Readme

bun-ws-inspect

WebSocket inspection lib for Bun.

Allows for metrics tracking (currently very basic metrics are being tracked, but it would be easy to track pretty much whatever), Emitting events that your app can subscribe to for different things - like if you need better observability in the io flow of the ws but dont want 700 log calls in the actual ws handler code Typesafe events, decent dx, and very "out of the way" - which was one of the requirements i had for it myself. zero deps ofc, as all we do is implement events on existing bun builtins

Install

bun add bun-ws-inspect

Usage

Handler (server)

import { InspectedWebSocketClient, InspectedWebSocketHandler } from "bun-ws-inspect";
const log = {
    client: (...data: unknown[]) => console.log("[client]", ...data),
    server: (...data: unknown[]) => console.log("[server]", ...data)
}

const inspector = new InspectedWebSocketHandler({
    /* Here you put everything you normally would've put in the websocket prop in Serve.Options */
    open(ws) {
        log.server("WebSocket opened");
        ws.sendText("six")
    },
    message(ws, message) {
        log.server("Received message", message)
    },
});

// Hook into the events emitted by the inspector (Check src for avaible events)
inspector.on("open", ({ metrics }) => {
    log.server(`Active connections: ${metrics.activeConnections}`);
});

inspector.on("metricsUpdate", (metrics) => {
    log.server("Metrics:", metrics);
});

inspector.on("message", ({ message, metrics }) => {
    log.server("Received:", message, "Total received:", metrics.messagesReceived);
});

Bun.serve({
    port: 3000,
    fetch(req, server) {
        if (server.upgrade(req)) {
            return;
        }
        return new Response("WebSocket server");
    },
    websocket: inspector,
});

Client

import { InspectedWebSocketClient, InspectedWebSocketHandler } from "bun-ws-inspect";
const log = {
    client: (...data: unknown[]) => console.log("[client]", ...data),
    server: (...data: unknown[]) => console.log("[server]", ...data)
}

const ws = new InspectedWebSocketClient("ws://localhost:3000")

// normal Bun WebSocket client calls work
ws.onmessage = (event) => {
    log.client(event.data)
}

// but also - Make sure to look at the src to see avaible events,
ws.on("message", ({ data, metrics }) => {
    log.client("got data:", data) // <-- same as onmessage (event) => event.data
    log.client("metrics", metrics)

    // Reply to the server
    ws.send("seven")
})

Development

bun run example.ts