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

toastyy

v1.1.0

Published

Toastyyy is a performance-first, highly customizable React notification system built on buttery-smooth spring physics. Designed for creative laboratory aesthetics, it features an interactive vector Mascot that dynamically blinks, reacts to hover scales, a

Readme

🍞 Toastyyy — The Interactive React Notification Ecosystem

Toastyyy is a performance-first, highly customizable React notification system built on buttery-smooth spring physics. Designed for creative laboratory aesthetics, it features an interactive vector Mascot that dynamically blinks, reacts to hover scales, and tracks cursor gaze coordinates in real-time.


🌟 Key Features

  • Interactive Toast Mascot: A handcrafted, reactive vector toast character that tracks cursor gazes, blinks asynchronously, and wiggles/squashes on interactions.
  • Dynamic Viewport Position Slots: Render notifications cleanly across five designated layout channels (top-left, top-right, bottom-left, bottom-center, bottom-right).
  • Real-Time Spring Bounce Coefficients: Adjust animation stiffness and custom spring curves using elastic bounce controllers.
  • Dual Theme Presets: Refined light and dark modes matching sleek modern aesthetics.
  • Behavioral Controls: Timed progress indicators, Escape key closures, dynamic timestamps, and customizable action triggers.
  • Gourmet Types: Predefined styles for default, success, error, warning, info, loading spinners, and pulsing promise states.

🚀 Installation

Add the library to your React project:

npm install toastyy

Make sure you have framer-motion (v11.x or later) and lucide-react installed as peer dependencies.


💻 Quick Start

1. Wrap Your Root Component

Initialize the global toast queue by wrapping your tree context with the ToastProvider:

import { ToastProvider } from 'toastyy'

export default function App() {
  return (
    <ToastProvider>
      <MainDashboard />
    </ToastProvider>
  )
}

2. Trigger Customized Alerts

Use the useToasts hook to fire or programmatically update toasts:

import { useToasts } from 'toastyy'

export default function MainDashboard() {
  const { addToast } = useToasts()

  const fireSuccess = () => {
    addToast({
      type: 'success',
      title: 'Golden Toast Fired',
      description: 'Baked to absolute crispy perfection.',
      showDescription: true,
      position: 'bottom-right',
      bounce: 0.40,
      theme: 'light'
    })
  }

  return (
    <button onClick={fireSuccess}>
      Bake Sourdough
    </button>
  )
}

⚙️ Configuration Options

Each notification accepts the following parameters:

interface ToastItem {
  type: 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading' | 'promise'
  title: string
  description?: string
  showDescription?: boolean
  showAction?: boolean
  actionText?: string
  customColor?: string
  hasBorder?: boolean
  bounce?: number
  theme?: 'light' | 'dark'
  showProgress?: boolean
  closeOnEscape?: boolean
  showTimestamp?: boolean
  showCloseButton?: boolean
  position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'
  duration?: number
}

🔄 Programmatic Toast Updates (Promises)

You can dynamically transition a loader toast into a resolved success or error state by leveraging returned IDs and updateToast:

import { useToasts } from 'toastyy'

const triggerProcess = () => {
  const id = addToast({
    type: 'loading',
    title: 'Uploading packages...',
    duration: 8000
  })

  setTimeout(() => {
    updateToast(id, {
      type: 'success',
      title: 'Upload Successful!',
      bounce: 0.15
    })
  }, 2000)
}