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

@luxfi/logo

v1.0.10

Published

Official Lux logo package with React components and utilities

Readme

▼ Logo

Universal brand mark. White downward triangle on dark.

Install

pnpm add @luxfi/logo

Usage

import { Logo, Favicon, Wordmark } from '@luxfi/logo'

<Logo size={64} />
<Logo variant="mono" />
<Logo variant="white" />
<Wordmark size={128} />
<Favicon />

Which mark goes on which surface

Every Lux surface wears the full LUX wordmark. lux.exchange is the single exception — it wears the LX mark. A new surface gets the wordmark unless someone says otherwise.

That holds for headers and for square slots alike. In a square, the wordmark is letterboxed — scaled and centred with the leftover as padding. It is never stretched to fill, and never cropped down to LU.

The LX mark does not exist in this package yet. Nothing in the fleet draws the two letters as artwork — where you see "LX" it is either a name string or the rename of Uniswap's UniswapX protocol. It has to be drawn before lux.exchange can wear it. Do not cut it out of the wordmark: an LX lockup is a kerning decision, not a crop.

SVG Functions

import {
  getColorSVG, getMonoSVG, getFaviconSVG,
  getWordmarkSVG, getWordmarkAdaptiveSVG, getWordmarkSquareSVG,
} from '@luxfi/logo'

getColorSVG()            // white ▼ on transparent
getMonoSVG()             // outline ▼
getFaviconSVG()          // ▼ keyed for the tab — reads on light and dark
getWordmarkSVG()         // LUX as paths, white
getWordmarkAdaptiveSVG() // LUX, taking contrast from the ground it lands on
getWordmarkSquareSVG()   // LUX letterboxed into a square, for icon slots

Variants

| Variant | Use | |---------|-----| | color | White ▼ — default, for dark backgrounds | | mono | Outline ▼ — for print, light backgrounds | | white | Same as color — explicit white fill | | menuBar | Uses currentColor — adapts to OS theme | | favicon | ▼ in white with a dark keyline, no container — browser tab |

Icon slots

A tab, a home screen and an app switcher all want a square. Rather than each surface drawing its own, generate the set from this package:

npx lux-icons apps/web/public/brand/lux
# → icon.svg, android-chrome-192x192.png, android-chrome-512x512.png, apple-touch-icon.png

icon.svg is transparent and follows the tab's colour scheme. The PNGs get an explicit ground, because Android and iOS composite them onto whatever they like.

Over the CDN

For consumers that cannot import — a gateway's chains.json, a runtime brand.json — the published svg/ directory is addressable on jsDelivr:

https://cdn.jsdelivr.net/npm/@luxfi/[email protected]/svg/lux-wordmark.svg
https://cdn.jsdelivr.net/npm/@luxfi/[email protected]/svg/lux-wordmark-square.svg
https://cdn.jsdelivr.net/npm/@luxfi/[email protected]/svg/lux-favicon.svg
https://cdn.jsdelivr.net/npm/@luxfi/[email protected]/svg/lux-icon-white.svg

Pin the version. cdn.lux.network is not a home for these — nothing serves it.

Brand Override

This package exports the default ▼ mark. White-label products override via their brand package (@<tenant>/brand, @zooai/brand, etc.) which provides org-specific logos.

License

All rights reserved.

Animated & interactive

The mark ships a self-contained, pure-CSS animated SVG — a load animation, a hover flourish, and a press squash, with zero JavaScript. Inline it into the DOM (not via <img>) for the hover/press interactions to fire. Honors prefers-reduced-motion.

// React — one-line interactive embed
import { Logo } from '@luxfi/logo';
<Logo variant="animated" size={64} />
// Vanilla / any framework
import { getAnimatedSVG, getAnimatedDataUrl } from '@luxfi/logo';
el.innerHTML = getAnimatedSVG();   // interactive (inline in the DOM)
img.src = getAnimatedDataUrl();    // load animation only (fine in <img>)
<!-- Raw SVG over CDN — load animation in <img>; inline the file for hover/press -->
<img src="https://unpkg.com/@luxfi/logo/svg/lux-tri-animated.svg" width="64" alt="" />