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

hcg-toast

v1.0.0

Published

Lightweight vanilla JavaScript toast notification library. Success, error, warning, and info types, auto-dismiss, sticky toasts, six positions, stack limits, pause on hover, and TypeScript definitions. Zero dependencies.

Readme

hcg-toast

A lightweight, zero-dependency JavaScript toast / notification library. Show success, error, warning, and info messages with auto-dismiss, sticky toasts, six screen positions, stack limits, pause on hover, optional progress bars, and custom icons.

hcg-toast — JavaScript toast notifications with success, error, info, and warning types

  • Zero dependencies, ~6 KB unminified
  • UMD build - works with <script> tags, CommonJS, and bundlers
  • Global API: toast() with shorthand helpers and toast.create() for custom instances
  • Custom icons via icon, iconHtml, or hide with icon: false
  • Accessible: role="alert" / role="status" with aria-live="off" on non-errors (avoids browser freezes during rapid bursts); errors use aria-live="assertive"
  • TypeScript definitions included

Links

Demo

Try the live demo and full documentation, or open index.html from the GitHub repo over a local server for a working example.

npx serve .

Installation

Install from npm:

npm install hcg-toast

Or download hcg-toast.js and hcg-toast.css and include them on your page:

<link rel="stylesheet" href="hcg-toast.css">
<script src="hcg-toast.js"></script>

In a module / Node environment:

require('hcg-toast/hcg-toast.css');
const toast = require('hcg-toast');

Or with ESM:

import toast from 'hcg-toast';
import 'hcg-toast/hcg-toast.css';

Usage

Singleton (default)

<link rel="stylesheet" href="hcg-toast.css">
<script src="hcg-toast.js"></script>
<script>
    toast.success('Changes saved!');
    toast.error('Upload failed', { title: 'Error', duration: 6000 });
    toast.dismiss(id);
    toast.dismissAll();
    toast.configure({ position: 'bottom-right', maxToasts: 5 });
</script>

Typed helpers

Shorthand methods set the toast type for you so you do not need to pass type on every call. Each helper uses the matching icon and accent color.

toast.success('Profile updated.');
toast.error('Could not save changes.');
toast.warning('You have unsaved edits.');
toast.info('Sync complete.');

// equivalent to toast(message, { type: 'success' })
toast('Saved!', { type: 'success', title: 'Done' });

Each call to show() (or a typed helper) returns a numeric toast id you can pass to dismiss(id).

Custom instance

const bottomToast = toast.create({
    position: 'bottom-center',
    maxToasts: 3,
});

bottomToast.info('Processing…', { duration: 0, closable: true });
bottomToast.dismissAll();
bottomToast.destroy();

Custom icons

By default each type shows a built-in icon (info, success, warning, error). Override per toast or set a default on the instance:

// Emoji or text icon
toast.success('Backup complete.', { icon: '💾' });

// SVG or HTML icon (trusted markup only)
toast.info('Syncing files…', {
  iconHtml: '<svg viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path d="M10 3a7 7 0 100 14A7 7 0 0010 3z"/></svg>'
});

// Hide the icon column
toast('Plain message.', { icon: false });

// Default icon for all toasts on an instance
const stars = toast.create({ icon: '⭐' });
stars.info('You have a new message.');

iconHtml takes precedence over icon when both are set. Only pass trusted HTML to iconHtml.

Options

| Option | Type | Default | Description | | ---------------- | ----------------------------------------- | ------------- | -------------------------------------------------------- | | message | string | required | Main body text | | title | string | - | Optional heading above the message | | type | 'info' \| 'success' \| 'warning' \| 'error' | 'info' | Toast variant (icon and accent color) | | duration | number | 4000 | Auto-dismiss delay in ms; 0 = sticky until dismissed | | closable | boolean | true | Show a close button | | pauseOnHover | boolean | true | Pause the auto-dismiss timer while hovered | | position | see below | 'top-right' | Screen position for this instance's container | | maxToasts | number | 5 | Max visible toasts; oldest dismissed when exceeded (per call or instance default) | | showProgress | boolean | true | Show a progress bar when duration > 0 | | icon | string \| false | type default | Custom icon text or emoji; false hides the icon | | iconHtml | string | - | Custom icon HTML (e.g. SVG); overrides icon | | ariaLive | 'off' \| 'polite' \| 'assertive' | 'off' | Live region on each toast; errors default to 'assertive' when unset | | onShow | (toast) => void | - | Called after the enter class is applied (animation start) | | onDismiss | (toast, reason) => void | - | Called when removed; reason: 'timeout', 'close', 'api' |

Positions: top-left, top-center, top-right, bottom-left, bottom-center, bottom-right

Instance methods

| Method | Returns | Description | | --------------- | -------------- | ----------------------------------------------------- | | show(msg, opts) | number \| null | Show a toast; returns id | | success(msg, opts) | number \| null | Shorthand for type: 'success' | | error(msg, opts) | number \| null | Shorthand for type: 'error' | | warning(msg, opts) | number \| null | Shorthand for type: 'warning' | | info(msg, opts) | number \| null | Shorthand for type: 'info' | | dismiss(id) | void | Remove one toast with exit animation | | dismissAll() | void | Remove all toasts immediately | | configure(opts) | void | Merge default options for this instance | | destroy() | void | Dismiss all, remove container, detach instance |

The default singleton exposes the same methods on toast itself, plus toast.create(). Calling toast.destroy() removes the default instance so the next call recreates it.

Styling

All default styles live in hcg-toast.css, using plain single-class selectors and CSS custom properties on .hcg-toast-container. Edit that file directly, or override any rule from your own stylesheet (loaded after it). Available class hooks:

  • .hcg-toast-container - fixed-position stack host (position modifiers: --top-right, --bottom-center, etc.)
  • .hcg-toast-item - individual toast (type modifiers: --info, --success, --warning, --error)
  • .hcg-toast-icon, .hcg-toast-body, .hcg-toast-title, .hcg-toast-message
  • .hcg-toast-close - dismiss button
  • .hcg-toast-progress-track / .hcg-toast-progress - auto-dismiss track and shrinking bar (shown when duration > 0 and showProgress: true)
  • .hcg-toast-item--enter / .hcg-toast-item--exit - animation states
.hcg-toast-container {
    --hcg-toast-radius: 8px;
    --hcg-toast-success-accent: #10b981;
}

Multiple instances

Create as many toast containers as you need. Each call to toast.create() returns a fully independent instance with its own position, defaults, stack, and API. The shared hcg-toast.css styles them all, so you only link it once.

const topRight = toast.create({ position: 'top-right' });
const bottomCenter = toast.create({ position: 'bottom-center', maxToasts: 2 });

topRight.success('Saved!');
bottomCenter.info('Syncing…', { duration: 0 });

bottomCenter.destroy();

Notes when running several instances:

  • Each instance injects its own .hcg-toast-container when first used.
  • toast.configure() only affects the default singleton, not custom instances.
  • Call each instance's destroy() when removing it permanently.

Browser support

Works in all modern browsers that support CSS transitions and requestAnimationFrame (Chrome, Firefox, Safari, Edge). Respects prefers-reduced-motion: reduce by disabling enter/exit and progress animations (the progress track stays visible for timed toasts).

License

MIT - HTML Code Generator (https://www.html-code-generator.com/)