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

@roidmc/horizon-theme

v0.0.12

Published

A modern VitePress theme with dynamic configuration and HMR support

Downloads

51

Readme

@roidmc/horizon-theme

Horizon Theme - A modern VitePress theme

Powered By @roidmc/horizon-pulse-core for dynamic configuration and HMR support.

Installation

npm install @roidmc/horizon-theme
# or
yarn add @roidmc/horizon-theme
# or
pnpm add @roidmc/horizon-theme

Usage

Theme Setup

// .vitepress/theme/index.ts
import { h } from 'vue'
import type { Theme } from 'vitepress'
import horizonTheme from '@roidmc/horizon-theme'

export default {
  ...horizonTheme,
  // Optional: Customize Layout component
  Layout: () => {
    return h(horizonTheme.Layout, null, {})
  }
} satisfies Theme

Custom Layout and enhanceApp

If you customize the enhanceApp function, you must call the theme's enhanceApp to ensure all theme plugins work correctly:

// .vitepress/theme/index.ts
import { h } from 'vue'
import type { Theme } from 'vitepress'
import horizonTheme from '@roidmc/horizon-theme'

export default {
  ...horizonTheme,
  Layout: () => {
    return h(horizonTheme.Layout, null, {})
  },
  async enhanceApp(ctx) {
    // IMPORTANT: Call the theme's enhanceApp first to initialize plugins
    if (horizonTheme.enhanceApp) {
      await horizonTheme.enhanceApp(ctx)
    }

    // Then your custom logic
    const { app, router } = ctx
    app.component('YourCustomComponent', YourCustomComponent)
  }
} satisfies Theme

Configuration

// .vitepress/config.ts
import { defineConfig } from 'vitepress'
import { defineHorizonConfig } from '@roidmc/horizon-theme/config'

export default defineConfig(defineHorizonConfig({
  // i18n plugin
  i18n: {
    debug: false
  },

  // sidebar plugin
  sidebar: {
    debugPrint: false,
    collapsed: true,
    useTitleFromFileHeading: true
  },

  themeConfig: {
    // Theme features
    features: {
      // External link icon
      linkIcon: {
        enable: true,
        style: 'favicon'
      },
      // External link guard
      externalLinkGuard: {
        enable: true,
        whitelist: ['github.com']
      },
      // Image viewer (FancyBox)
      imgViewer: {
        enable: true
      }
    },

    footer: {
      message: 'Made with ❤️',
      copyright: '© Your Company',
      hallowText: 'YOUR COMPANY'
    }
  }
}))

Features

Plugin Enablement

Site Plugins use selective registration - they are only enabled when their configuration key is present in defineHorizonConfig():

| Plugin | Config Key | Description | |--------|-----------|-------------| | i18n | i18n: {} | Internationalization with YAML support | | sidebar | sidebar: {} | Auto-generated sidebar from file structure |

Example - to enable only the sidebar plugin:

export default defineHorizonConfig({
  sidebar: {}  // Sidebar enabled, i18n disabled
})

Theme Plugins are always enabled when configured in themeConfig.features:

| Plugin | Config Key | Description | |--------|-----------|-------------| | linkIcon | features.linkIcon | Add icon to external links | | externalLinkGuard | features.externalLinkGuard | Guard external links with confirmation dialog | | imgViewer | features.imgViewer | Image viewer with FancyBox | | easterEgg | features.easterEgg | Easter egg functionality | | metaGenerator | features.metaGenerator | Add meta generator tag |

Customization

Styles

Coming soon...

Components

Coming soon...

Requirements

  • VitePress 2.0.0-alpha.5 or higher
  • Vue 3.x
  • Node.js 22 or higher

2026 © RoidMC Studios | MPL-2.0 License