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

@stellaria/nebula-web

v1.1.4

Published

Componentes web del design system Nebula (Vanilla Extract + React Aria + motion)

Readme

@stellaria/nebula-web

The web half of Nebula: 158 components built on three layers — React Aria for behaviour and accessibility, Vanilla Extract for zero-runtime CSS, and motion for animation whose springs come from the theme.

Two products that look nothing alike ship from these same components. You change the theme, never the code.

Install

pnpm add @stellaria/nebula-web @stellaria/nebula-themes @stellaria/nebula-tokens @stellaria/nebula-hooks

react and react-dom are peers — bring your own. @stellaria/nebula-icons is optional, and so are the integrations further down.

Quickstart

Two things the library cannot do for you, and the reason your first render may look wrong:

// app/layout.tsx
import { ThemeScript, NebulaProvider } from "@stellaria/nebula-web";
import "@stellaria/nebula-web/dist/index.css";

export default function Layout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en" suppressHydrationWarning>
      <head>
        <ThemeScript />
      </head>
      <body>
        <NebulaProvider defaultTheme="dark">{children}</NebulaProvider>
      </body>
    </html>
  );
}
  1. Import the stylesheet. The CSS is compiled at build time and shipped as a file; nothing injects it at runtime.
  2. Put <ThemeScript /> in the <head>. It puts the theme class and color-scheme on <html> before hydration, which is what stops a light flash on a dark theme.

Then:

import { Button, Card, Text } from "@stellaria/nebula-web";

<Card withBorder p="lg" r="lg">
  <Text fz="h4">Ready</Text>
  <Button variant="gradient" onPress={() => {}}>
    Go
  </Button>
</Card>;

Subpaths

Heavy dependencies are isolated so the main entry never pays for them. Importing Button does not drag Recharts, TipTap or the table engine — verified with a bundle, not assumed.

| Entry | What it brings | Components | Budget (brotli, per module) | | ---------------------------------- | --------------------------------- | ---------: | --------------------------: | | @stellaria/nebula-web | the catalogue | 149 | Box 19.75 · Button 42.25 | | @stellaria/nebula-web/charts | Recharts | 1 | 131 kB | | @stellaria/nebula-web/datagrid | TanStack Table + virtualiser | 1 | 102.25 kB | | @stellaria/nebula-web/editor | TipTap | 2 | 175.25 kB | | @stellaria/nebula-web/command | command palette, on React Aria | 1 | 80 kB | | @stellaria/nebula-web/media | react-player | 1 | 70 kB | | @stellaria/nebula-web/carousel | Embla | 1 | 51 kB | | @stellaria/nebula-web/dnd | dnd-kit | 2 | 48 kB |

Budgets are enforced in CI by size-limit per module, not for the whole package.

The CSS is all-or-nothing. sideEffects marks the compiled sheets as side-effectful — it has to, or a bundler would drop the styles of the components you use. So importing one component keeps the catalogue's stylesheet. The JavaScript does tree-shake; the CSS does not.

Optional integrations

Declared structurally and never imported, so you install them only if you use them:

| Peer | Used by | Why optional | | ----------------------- | --------------- | ------------------------------------------------ | | form-atoms | form fields | any field works controlled, without a form library | | @pqina/react-pintura | EditorImage | commercial licence: it is never a dependency of ours |

Compatibility

| | | | ------------ | --------------------------------------------------- | | React | 19.2+ | | Next.js | 16+ — App Router, server components by default | | Node | 20+ (build only; the package ships no server code) | | Modules | ESM only. No CJS build | | TypeScript | 5.9+ for consumers |

Server components work out of the box: a component only carries "use client" when it resolves the theme at runtime or holds state. The catalogue says which is which on every page of the docs.

Documentation

https://nebula.stellaria.app

Every component has its own page with props, slot props, the entry point it ships from and a live sample.

Licence

MIT.