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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@qpub/sdk

v2.0.7

Published

Real-time client for QPub cloud pub/sub service. Supports browsers, Node.js, Bun, and React.

Readme

QPub JavaScript SDK

QPub is a pub/sub channels cloud. This is the official JavaScript client library, including both real-time and REST interfaces.

To meet QPub and see more info and examples, please read the documentation.

Getting Started

Follow these steps to just start building with QPub in JavaScript or see the Quickstart guide which covers more programming languages.

Install with package manager

Use any package manager like npm or yarn to install the JavaScript SDK.

Npm:

npm i @qpub/sdk

Yarn:

yarn add @qpub/sdk

Import as ES module:

import { QPub, Message } from "@qpub/sdk";

Import from CDN:

<script src="https://cdn.jsdelivr.net/npm/@qpub/sdk@latest/build/qpub.umd.js"></script>

Interacting with QPub

Get your API key from QPub dashboard by creating a new project or use existing one.

Connect to QPub:

const socket = new QPub.Socket({ apiKey: "YOUR_API_KEY" });

Subscribe to a channel and listen for any data publishing to receive:

let channel = socket.channels.get("my-channel");
channel.subscribe((message: Message) => {
    console.log({ message });
});

Publish a message:

channel.publish("Hello!");

Publish a message with REST interface:

const rest = new QPub.Rest({ apiKey: "YOUR_API_KEY" });

let channel = rest.channels.get("my-channel");

channel.publish("Hello!");

Publish batch messages:

rest.channels
    .publishBatch(
        ["myChannel", "another-channel"],
        [
            { data: "Hello World 1", event: "fooEvent" },
            { data: "Hello World 2", event: "barEvent" },
            { data: "Hello World 3", event: "barEvent" },
        ]
    )
    .then((result) => {
        console.log(result);
    })
    .catch((err) => {
        console.error(`Error: ${err}`);
    });

React Integration

QPub includes built-in React hooks and components for real-time socket connections.

Use manual subscription with proper cleanup for reliable message handling:

import React, { useCallback, useEffect } from "react";
import { SocketProvider, useChannel, useConnection, Message } from "@qpub/sdk/react";

function App() {
    return (
        <SocketProvider options={{ apiKey: "YOUR_API_KEY" }}>
            <ChatRoom />
        </SocketProvider>
    );
}

function ChatRoom() {
    const { status } = useConnection();
    const { publish, subscribe, unsubscribe, ready } = useChannel("my-channel");

    const handleMessage = useCallback((message: Message) => {
        console.log("Received:", message);
    }, []);

    useEffect(() => {
        if (ready) {
            subscribe(handleMessage);

            return () => {
                unsubscribe();
            }
        }
    }, [channelStatus, subscribe, unsubscribe, handleMessage]);

    return (
        <div>
            <div>Connection: {status}</div>
            <div>Channel ready: {ready ? "✅" : "⏳"}</div>
            <button
                onClick={() => publish("Hello from Socket!")}
                disabled={!ready}
            >
                Send Message
            </button>
        </div>
    );
}

See React Documentation for complete guide.

Token Authentication

QPub provides three methods for secure token generation with different security levels. Learn more in the Token Authentication Guide:

  • generateToken() - Quick server-side token generation
  • issueToken() - Server-validated token generation
  • createTokenRequest() + requestToken() - Secure client-server token exchange (recommended)

Contributing

We welcome contributions! Please see CONTRIBUTING.md for:

  • Development setup and workflow
  • Code standards and best practices
  • Testing guidelines
  • Pull request process
  • Release workflow (for maintainers)

Quick Start for Contributors

# Clone and setup
git clone [email protected]:qpubio/qpub-js.git
cd qpub-js
npm install

# Run tests
npm test

# Build locally
npm run build

For detailed instructions, see the Contributing Guide.

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.