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

@native-systems/icons

v4.1.2

Published

Icons for native systems projects. Yes, it's public.

Readme

Native systems icons package

This package contains components and types, which are used across native systems software projects.

Version 4.1

Version 4.1 adds independently importable icon modules and a CMS-friendly asynchronous loader while preserving the existing root exports. Existing named and CommonJS imports continue to work without migration. Applications that resolve icon names dynamically should use @native-systems/icons/loader to keep SVG implementations out of the initial bundle.

React-free icon identifiers

The root package exports React components and requires React at runtime. Non-React consumers can import every public icon name without loading the component bundle:

import { iconNames } from '@native-systems/icons/identifiers';

for (const iconName of iconNames) {
  // e.g. validate or enumerate icon identifiers in a backend service
}

Individually loadable icons

The legacy root entry point continues to export every icon. For CMS-driven identifiers, use the loader entry point so the initial bundle contains only the registry and each icon is downloaded in its own asynchronous chunk:

import {
  getIconLoader,
  isNativeIconId,
  loadIconById,
} from '@native-systems/icons/loader';

const loader = getIconLoader(cmsIconId);
const Icon = loader ? await loader().then((module) => module.default) : null;

loadIconById returns null for unknown or removed CMS values:

const Icon = await loadIconById(cmsIconId);

if (!Icon) {
  return <FallbackIcon aria-label="Unknown icon" />;
}

return <Icon aria-hidden="true" />;

Use isNativeIconId when a type guard is useful, or React's lazy API when the component should load during rendering:

const loader = isNativeIconId(cmsIconId) ? getIconLoader(cmsIconId) : null;
const LazyIcon = loader ? React.lazy(loader) : null;

Every icon is emitted as an individual file, while the ESM root re-exports those files so applications can keep concise named imports. Direct imports remain available when an explicit per-icon module path is preferred:

import HeadsetIcon from '@native-systems/icons/icons/HeadsetIcon';

Next.js applications can optimize named imports from the root entry point:

// next.config.js
module.exports = {
  experimental: {
    optimizePackageImports: ['@native-systems/icons'],
  },
};

The loader entry point (@native-systems/icons/loader) remains separate from the root barrel and should be used for asynchronous CMS-driven icon selection.

Steps to deploy new version

  1. Update package version.
  2. Build project via yarn build
  3. Publish build via npm publish
  4. Push changes to repository

Tailwind components

Components must be exposed to tailwind for preflight and purging/compilation to work:

  • v4: @source "../node_modules/@native-systems/icons/**";
  • v3: contents: [".node_modules/@native-systems/icons/**"];

Playground

A React + Vite playground app is available in playground/ to browse all exported icons with search and names (heroicons-style overview).

Useful commands from repository root:

  • yarn playground:install
  • yarn build
  • yarn playground:dev
  • yarn playground:build