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

express-port-switcher

v1.0.3

Published

A smart port management tool that automatically finds and forwards to available ports when preferred ports are in use

Downloads

12

Readme

Express Port Switcher

npm version GitHub

A smart port management tool that automatically tries to bind your Express server to a preferred port (e.g., port 3000), but if that port is already in use, it detects that and forwards incoming requests to an available port instead.

Features

  • 🎯 Try to use preferred port first
  • 🔄 Automatic port forwarding if preferred port is busy
  • 🚀 Works with Express.js applications
  • 📝 TypeScript support out of the box
  • 🎣 Callback when port switching occurs

Installation

npm install express-port-switcher

Usage

import express from "express";
import { PortSwitcher } from "express-port-switcher";

const app = express();
app.get("/", (req, res) => {
  res.send("Hello World!");
});

// Create a new PortSwitcher instance
const portSwitcher = new PortSwitcher({
  preferredPort: 3000, // Default: 3000
  maxAttempts: 100, // Default: 100
  onPortSwitch: (preferredPort, actualPort) => {
    console.log(
      `Port ${preferredPort} was busy, forwarding to port ${actualPort}`
    );
  },
});

// Start the server
portSwitcher
  .listen(app)
  .then((port) => {
    console.log(`Server is running on port ${port}`);
  })
  .catch((err) => {
    console.error("Failed to start server:", err);
  });

API Reference

PortSwitcher

Constructor Options

interface PortSwitcherOptions {
  preferredPort?: number; // The port you'd prefer to use (default: 3000)
  maxAttempts?: number; // Maximum number of ports to try (default: 100)
  onPortSwitch?: (preferredPort: number, actualPort: number) => void; // Callback when port switching occurs
}

Methods

  • listen(app: Express): Promise<number>

    • Starts the Express app on the preferred port, or forwards to an available port if occupied
    • Returns a promise that resolves to the actual port number being used
  • getActualPort(): number | null

    • Returns the actual port the server is running on
    • Returns null if the server hasn't been started
  • close(): Promise<void>

    • Closes both the proxy and the actual server

Utility Functions

The package also exports utility functions:

  • isPortAvailable(port: number): Promise<boolean>

    • Checks if a specific port is available
  • findNextAvailablePort(startPort: number, maxAttempts?: number): Promise<number | null>

    • Finds the next available port starting from startPort
    • Returns null if no ports are available within maxAttempts

License

MIT