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

@tailwind-styled/plugin-registry

v5.0.0

Published

Plugin discovery and install helper for the tailwind-styled v5 ecosystem

Downloads

12

Readme

@tailwind-styled/plugin-registry

Plugin discovery and install helper for the tailwind-styled v5 ecosystem.

Installation

npm install @tailwind-styled/plugin-registry

Or use the CLI directly:

npx @tailwind-styled/plugin-registry <command>

CLI Commands

search

Search for plugins in the registry.

tw-plugin search <query> [--json]

list

List all available plugins.

tw-plugin list [--json]

info

Get detailed information about a specific plugin.

tw-plugin info <package> [--json]

install

Install a plugin.

tw-plugin install <package> [--dry-run] [--allow-external] [--yes]

uninstall

Uninstall a plugin.

tw-plugin uninstall <package> [--dry-run]

update-check

Check for available updates for installed plugins.

tw-plugin update-check [--json]

verify

Verify the integrity of an installed plugin.

tw-plugin verify <package> [--json]

Options

| Option | Description | |--------|-------------| | --json | Output as JSON (machine-readable) | | --debug | Show timing and execution details | | --registry | Use external registry URL |

Programmatic API

PluginRegistry Class

import { PluginRegistry, getRegistry } from "@tailwind-styled/plugin-registry"

Constructor

new PluginRegistry(registryData?: RegistryData, options?: RegistryOptions)

Static Methods

// Load registry from a custom URL
await PluginRegistry.loadFromUrl(url: string): Promise<PluginRegistry>

Instance Methods

// Get registry version
getVersion(): string

// Search plugins by query (matches name, description, or tags)
search(query: string): PluginInfo[]

// Get all plugins
getAll(): PluginInfo[]

// Get plugin by name
getByName(pluginName: string): PluginInfo | undefined

// Install a plugin
install(pluginName: string, options?: InstallOptions): InstallResult

// Uninstall a plugin
uninstall(pluginName: string, options?: { dryRun?: boolean; npmBin?: string }): { plugin: string; uninstalled: boolean; command: string; exitCode: number }

// Verify plugin integrity
verifyIntegrity(pluginName: string): { ok: boolean; reason?: string }

// Check for update on a specific plugin
checkForUpdate(pluginName: string): { hasUpdate: boolean; current?: string; latest?: string; error?: string }

// Check all plugins for updates
checkAllUpdates(): Array<{ name: string; hasUpdate: boolean; current?: string; latest?: string; error?: string }>

Types

interface PluginInfo {
  name: string
  description: string
  version: string
  tags: string[]
  official?: boolean
  docs?: string
  install?: string
  integrity?: string
}

interface InstallOptions {
  dryRun?: boolean
  npmBin?: string
  allowExternal?: boolean
  confirmExternal?: boolean
}

interface InstallResult {
  plugin: string
  installed: boolean
  command: string
  exitCode: number
}

Error Handling

import { PluginRegistryError } from "@tailwind-styled/plugin-registry"

try {
  registry.install("some-plugin")
} catch (error) {
  if (error instanceof PluginRegistryError) {
    console.error(error.code)    // Error code
    console.error(error.message) // Error message
    console.error(error.context) // Additional context
  }
}

getRegistry

Get the default registry instance.

import { getRegistry } from "@tailwind-styled/plugin-registry"

const registry = getRegistry()

Examples

CLI Examples

# Search for plugins
tw-plugin search forms

# List all plugins
tw-plugin list

# Get plugin info
tw-plugin info @tailwind-styled/plugin-forms

# Install a plugin
tw-plugin install @tailwind-styled/plugin-forms

# Dry run install
tw-plugin install @tailwind-styled/plugin-forms --dry-run

# Uninstall a plugin
tw-plugin uninstall @tailwind-styled/plugin-forms

# Check for updates
tw-plugin update-check

# Verify plugin integrity
tw-plugin verify @tailwind-styled/plugin-forms

# Use JSON output
tw-plugin list --json

# Use custom registry
tw-plugin list --registry https://example.com/registry.json

Programmatic Examples

import { getRegistry, PluginRegistry } from "@tailwind-styled/plugin-registry"

// Get default registry
const registry = getRegistry()

// Search for plugins
const results = registry.search("forms")
console.log(results)

// Get all plugins
const allPlugins = registry.getAll()

// Get plugin info
const plugin = registry.getByName("@tailwind-styled/plugin-forms")
if (plugin) {
  console.log(`Found ${plugin.name} v${plugin.version}`)
  console.log(plugin.description)
}

// Install a plugin
const result = registry.install("@tailwind-styled/plugin-forms", {
  dryRun: true // Check what would happen
})
console.log(result.command) // The npm command that would be run

// Check for updates
const updates = registry.checkAllUpdates()
const updatesAvailable = updates.filter(u => u.hasUpdate)
console.log(`${updatesAvailable.length} plugins have updates`)

// Verify integrity
const verification = registry.verifyIntegrity("@tailwind-styled/plugin-forms")
if (verification.ok) {
  console.log("Plugin integrity verified")
} else {
  console.error(verification.reason)
}

// Load from custom registry
const customRegistry = await PluginRegistry.loadFromUrl(
  "https://example.com/registry.json"
)

License

MIT