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

backstage-plugin-festive-fun

v0.1.4

Published

Welcome to the backstage-plugin-festive-fun plugin!

Readme

backstage-plugin-festive-fun

Welcome to the backstage-plugin-festive-fun plugin!

This plugin was created through the Backstage CLI

Overview

Looking to bring a bit of festivity to your Backstage instance? We'll you've found the plugin. Festive fun currently delivers all the seasons via animations to Backstage to make the app just a little more fun and engaging. Based upon the season you're in, it will render a festive visual to match. Custom festivity selector can be passed in as well to allow teams to modify which theme should render and when!

Note: This is all being rendered behind the core app at the z-index of -1. Allowing for no conflicts of clicks and flows seamlessly behind any components rendered at z-index of 0 or greater.

Spring

Soothing spring animates flower petals falling as growth begins

https://github.com/benjmac/backstage-plugin-festive-fun/assets/25201407/2b5441c5-e3fb-460e-a053-3a6d127642ab

Summer

Summer vibes animates swelling waves as seen from the beach

https://github.com/benjmac/backstage-plugin-festive-fun/assets/25201407/59cc013f-17cd-49cd-af00-6e5b8d516bf2

Fall

Festive fall animates the lovely fall foliage descending to the ground

https://github.com/benjmac/backstage-plugin-festive-fun/assets/25201407/1ad167c6-5be1-41a4-ae40-317373dde822

Winter

Winter wonderland animates a relaxing snow storm

https://github.com/benjmac/backstage-plugin-festive-fun/assets/25201407/159d332f-452d-47a5-abb5-93b057057a89

Getting started

Install the package

# From your Backstage root directory
yarn add --cwd packages/app backstage-plugin-festive-fun

Add the component

Add the FestiveFun to the root level app creation in packages/app/src/App.tsx:

+ import { FestiveFun } from 'backstage-plugin-festive-fun';

  export default app.createRoot(
    <>
      <AlertDisplay transientTimeoutMs={2500} />
      <OAuthRequestDialog />
      <AppRouter>
        <Root>{routes}</Root>
+       <FestiveFun />
        {/* other components... */}
      </AppRouter>
    </>,
  );

Component Customization

Currently three properties exist for customization.

  • initialShowInSeconds: amount of time component is rendered before disappearing when feature flag is not enabled, default is 15 seconds. Use 0 to not render unless FF enabled.

  • festivity: the festivity that will render and override the auto selector based upon the current date

  • festivitySelector: custom selector to choose when to render which festivity. If no matching value is returned, nothing will be displayed

+ const festivitySelector = () => {
+   const month = new Date().getMonth() + 1;
+   if (month >= 3 && month <= 5) {
+      return 'spring';
+    }
+
+    return 'summer';
+  }

  export default app.createRoot(
    <>
      <AlertDisplay transientTimeoutMs={2500} />
      <OAuthRequestDialog />
      <AppRouter>
        <Root>{routes}</Root>
+       <FestiveFun
+         initialShowInSeconds={600}
+         festivity='summer' // This overrides festivitySelector if defined
+         festivitySelector={festivitySelector}
+       />
        {/* other components... */}
      </AppRouter>
    </>,
  );