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

@cutticat/shutdown

v3.0.3

Published

CuttiCat library for shutting down the application

Readme

@cutticat/shutdown

Library for registering graceful shutdown handlers in CuttiCat Node.js applications.

Contents

Overview

The library registers handlers for:

  • Process signals (SIGINT, SIGTERM, SIGHUP by default)
  • Uncaught exceptions (uncaughtException)
  • Unhandled promise rejections (unhandledRejection)

When a signal or error is received, registered callbacks are invoked, their completion is awaited (with a timeout), and then the process exits with the appropriate exit code.

Installation

pnpm i @cutticat/shutdown

Quick start

import { registerShutdown } from "@cutticat/shutdown"

const shutdown = registerShutdown({
  onShutdown: async (options) => {
    console.log("Shutting down...", options)
    await closeDatabase()
    await closeRedis()
  },
  logger: console,
  timeout: 5000,
})

// Add additional handlers later
shutdown.onShutdown(async () => {
  await flushLogs()
})

API

registerShutdown(options)

Registers graceful shutdown handlers. Returns a RegisteredShutdown object.

Options:

  • onShutdown — callback invoked on shutdown (may be async)
  • register — callback for registering additional handlers (e.g. for an HTTP server)
  • logger — logger or logger factory
  • signals — list of signals (default ["SIGINT", "SIGTERM", "SIGHUP"])
  • timeout — timeout in ms (default 10000)
  • uncaughtException — handle uncaughtException (default true)
  • unhandledRejection — handle unhandledRejection (default true)

RegisteredShutdown

  • status — current status (waiting | disposed | shuttingDown)
  • dispose() — unregisters handlers without performing shutdown
  • shutdown(options) — initiates shutdown
  • onShutdown(callback) — adds a callback
  • register(callback) — registers a handler (receives the shutdown function)

shutdownDefaults

Default option values.

Documentation

Further documentation:

Full API documentation is available in JSDoc comments.

Important

It is recommended to call registerShutdown() once per process. Multiple calls create several sets of handlers for the same events; repeated shutdowns are ignored, but listeners remain until dispose() is called.

onShutdown callbacks are invoked in reverse registration order (LIFO): last registered first (e.g. closing the HTTP server), then earlier ones (DB pool, etc.). Unregister functions from register() on dispose() / shutdown completion also run in reverse order.

Requirements

  • Node.js >= 22.0.0
  • pnpm >= 10.17.0
  • TypeScript >= 5.9.0