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

@arclux/arc-ui-icons

v4.2.0

Published

ARC UI — Phosphor and Lucide icon packs, registered into @arclux/arc-ui on demand.

Readme

@arclux/arc-ui-icons

Phosphor and Lucide, packaged for ARC UI.

Two libraries, 3,408 glyphs, one module each — so a page downloads the icons it renders and nothing else.

npm i @arclux/arc-ui @arclux/arc-ui-icons lit

Register a pack

import '@arclux/arc-ui-icons/phosphor';

That is the whole setup. The import registers Phosphor with ARC UI's icon registry and, if no library has been selected yet, makes it the active one:

<arc-icon name="star"></arc-icon>

Lucide is the same line with a different name, and both can be registered at once. Registration never takes the choice back from a page that has already made one, so importing both and calling neither use() nor <arc-icon-library> leaves the first-imported pack active. Say which you want:

import '@arclux/arc-ui-icons/phosphor';
import '@arclux/arc-ui-icons/lucide';

import { iconRegistry } from '@arclux/arc-ui';
iconRegistry.use('lucide');

or declaratively, anywhere in the document:

<arc-icon-library name="lucide"></arc-icon-library>

Or skip the pack

A *.register.js module carries a resolver with an entry per glyph — 1,896 for Lucide, 1,512 for Phosphor. Each entry is a static import() specifier, which is what lets a bundler split them into one chunk per icon, but it also means the bundler has to walk all of them.

An app that uses a dozen icons should import those twelve instead. No resolver, twelve modules:

import { iconRegistry } from '@arclux/arc-ui';
import check from '@arclux/arc-ui-icons/phosphor/check';
import x from '@arclux/arc-ui-icons/phosphor/x';

iconRegistry.set({ check, x });

Icons registered this way are library-independent: they answer to their name whatever use() points at, and they win over a registered pack — which is also how you override one glyph without replacing the set.

If you want a whole library as a single value — an icon picker is the usual reason — that is one import, and it loads every glyph:

import phosphor from '@arclux/arc-ui-icons/phosphor'; // { 'check': '<svg…>', … }

A library of your own

Nothing here is privileged. register() takes any name and any map:

import { iconRegistry } from '@arclux/arc-ui';

iconRegistry.register('brand', {
  icons: { logo: '<svg…>', mark: '<svg…>' },
  // ARC UI's built-in components ask for Lucide's names. Map them if your
  // library spells them differently, and those components resolve too.
  aliases: { 'chevron-right': 'arrow-right' },
});

iconRegistry.use('brand');

Values may be SVG strings, as above, or () => import('./somewhere.js') thunks if you want them code-split the way the built-in packs are.

Names

Phosphor and Lucide disagree about what common glyphs are called, and for the carets they disagree completely — Phosphor has caret-right and no chevron-right, Lucide the reverse. ARC UI's own components use the Lucide spelling and each pack ships an alias table, exported as @arclux/arc-ui-icons/aliases, so built-in components resolve under either.

Browse both sets at arcui.dev/docs/components/icon.

Licence

MIT AND ISC. The packaging is ARC UI's, under MIT; the artwork is not ours to relicense and is redistributed under its own terms — Phosphor Icons under MIT (phosphoricons.com) and Lucide under ISC, with portions derived from Feather under MIT (lucide.dev). Both permit commercial use, modification and redistribution.

All three notices are in LICENSE, which is generated from the installed upstream packages so that it stays a copy rather than a transcription; scripts/checks/icon-attribution.js fails the build if it drifts from what is actually being shipped. Each glyph is reproduced unchanged apart from the removal of fixed width/height and class attributes, so it can inherit size and colour from its host.