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

@lobstar/react

v0.1.0

Published

A collection of React hooks to use Lobstar library for network and lobby management for multiplayer web games

Downloads

6

Readme

@lobstar/react

[!WARNING] This is an early prototype and the API is subject to change and bugs are expected.

A collection of React hooks that make it easy to integrate with the Lobstar library for network and lobby management of multiplayer web games.

npm version license bundlephobia minzipped size

Installation

npm install @lobstar/react

Features

  • Simple WebRTC game session management
  • Lobby creation and joining
  • Player status tracking
  • Ready state management
  • Host controls (kick players, start/end game)
  • Game messaging system
  • React-optimized state updates

Usage

Basic Example

import { useGameLobby } from '@lobstar/react';

function GameLobby() {
  const {
    // Session methods
    host,
    join,
    leave,
    setReady,
    startGame,
    endGame,
    kickPlayer,
    sendMessage,
    sendMessageToHost,
    broadcastMessage,

    // Session state
    state,
    isConnected,
    isPlaying,
    isInLobby,
    isGameOver,

    // Players info
    areAllPlayersReady,
    playersList,
    self,
    hostPlayer,
    isHost,
    maxPlayers,

    // Raw lobstar game session access (for advanced use cases)
    session,
  } = useGameLobby();
  
  // Your component logic here
}

Creating or Joining a Game

// Host a new game
const handleHost = async () => {
  const lobbyId = await host("Player1");
  console.log(`Created lobby: ${lobbyId}`);
};

// Join an existing game
const handleJoin = async () => {
  await join("LOBBY-ID", "Player2");
};

Player Management

// Get all players
const playersList = Object.values(players);

// Check if current player is host
if (isHost) {
  // Host-only functionality
}

// Set ready status
const toggleReady = () => {
  setReady(!self.isReady);
};

// Kick a player (host only)
const removePlayer = (playerId) => {
  kickPlayer(playerId);
};

Game State Management

// Check current state
if (isInLobby) {
  // Show lobby UI
} else if (isPlaying) {
  // Show game UI
}

// Start the game (host only)
const beginGame = () => {
  startGame();
};

// End the game (host only)
const finishGame = () => {
  endGame();
};

Game Communication

// Send a message to specific player
const sendMessage = (playerId, data) => {
  sendMessage(playerId, data);
};

// Broadcast to all players
const broadcastToAll = (data) => {
  broadcastMessage(data);
};

Event Handling

// Handle incoming messages
useGameLobby({
    onMessage: (data, peerId) => {
        console.log(`Message from ${peerId}:`, data);
        // Handle game logic here
    }
});

// Handle kick events
useGameLobby({
    onKicked: (peerId) => {
        console.log(`Player ${peerId} was kicked`);
    }
});

// Handle errors
useGameLobby({
    onError: (error) => {
        console.error(`Error:`, error);
    }
});

Configuration

useGameLobby({
  options: {
    maxPlayers: 8,                 // Maximum players allowed
    playerJoinTimeoutMs: 10000,    // Time in ms before a player is kicked for joining late
    requireReadyBeforeStart: true, // Require all players to be ready
    debug: true,                   // Enable debug logging
    peerOptions: {}                // PeerJS connection options
  },
});

License

MIT