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

@ecologi-action-ltd/mycelia

v0.20.0

Published

Mycelia Design System - Accessible React components with vanilla-extract styling

Downloads

3,939

Readme

Mycelia Design System

A React component library built with React Aria Components and vanilla-extract.

Features

  • Accessible by default - Built on React Aria Components for full WCAG compliance
  • Type-safe tokens - Design tokens available as TypeScript values or vanilla-extract theme contracts
  • Figma aligned - Tokens and components match the Mycelia Figma Design System

Installation

npm install @ecologi-action-ltd/mycelia

Typography

Mycelia uses Hanken Grotesk as its primary typeface. Add this to your HTML <head>:

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">

Or import in your CSS:

@import url('https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&display=swap');

Setup

1. Import styles

Import the CSS file in your app's entry point:

import '@ecologi-action-ltd/mycelia/styles.css';

2. Apply the theme

Add the theme class to your root element. Import it from @ecologi-action-ltd/mycelia/theme:

import { myceliaTheme } from '@ecologi-action-ltd/mycelia/theme';

// In your root layout/component
<body className={myceliaTheme}>
  {children}
</body>

Next.js App Router

For Next.js App Router, your layout.tsx should look like:

import '@ecologi-action-ltd/mycelia/styles.css';
import { myceliaTheme } from '@ecologi-action-ltd/mycelia/theme';

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <head>
        <link rel="preconnect" href="https://fonts.googleapis.com" />
        <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
        <link
          href="https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&display=swap"
          rel="stylesheet"
        />
      </head>
      <body className={myceliaTheme}>
        {children}
      </body>
    </html>
  );
}

Client-side routing

For Link components to work with client-side navigation, wrap your app with RouterProvider. This is exported from a separate entry point to avoid requiring "use client" in server components.

For full details, see the React Aria routing documentation.

Next.js App Router example

Create a client provider component:

// app/providers.tsx
"use client";

import { RouterProvider } from '@ecologi-action-ltd/mycelia/router';
import { useRouter } from 'next/navigation';

export function Providers({ children }: { children: React.ReactNode }) {
  const router = useRouter();
  return <RouterProvider navigate={router.push}>{children}</RouterProvider>;
}

Then use it in your layout:

// app/layout.tsx
import '@ecologi-action-ltd/mycelia/styles.css';
import { myceliaTheme } from '@ecologi-action-ltd/mycelia/theme';
import { Providers } from './providers';

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body className={myceliaTheme}>
        <Providers>{children}</Providers>
      </body>
    </html>
  );
}

3. Use components

import { Button, Text } from '@ecologi-action-ltd/mycelia';

<Text variant="h1">Welcome to Mycelia</Text>
<Button variant="primary">Get Started</Button>

Using Tokens

Tokens can be used directly in your own styles without vanilla-extract:

import { tokens } from '@ecologi-action-ltd/mycelia/tokens';

const styles = {
  backgroundColor: tokens.color.surface.primary.default,
  borderRadius: tokens.radius.md,
  padding: tokens.spacing['16'],
};

For vanilla-extract users, use the theme contract for type-safe CSS variable access:

import { vars } from '@ecologi-action-ltd/mycelia/theme';
import { style } from '@vanilla-extract/css';

export const card = style({
  backgroundColor: vars.color.surface.primary.default,
  borderRadius: vars.radius.md,
});

Documentation

Run Storybook to explore all components and tokens:

npm run storybook

Development

See CONTRIBUTING.md for development setup and adding new components.

Releasing

This project uses Changesets for version management and releases.

Adding a changeset

When making changes that should be released, create a changeset:

npm run changeset

This will prompt you to:

  1. Select the type of change (patch, minor, major)
  2. Write a summary of the changes

A markdown file will be created in .changeset/ - commit this with your PR.

When to add a changeset

  • patch: Bug fixes, documentation updates
  • minor: New features, non-breaking changes
  • major: Breaking changes

Skip changesets for internal changes like CI updates or refactors that don't affect the public API.

How releases work

  1. PRs with changesets are merged to main
  2. A "Version Packages" PR is automatically created/updated
  3. When the Version PR is merged, the package is published to npm

Testing PR changes

PR preview packages are automatically published. Install them via the link in the PR comments:

npm i https://pkg.pr.new/@ecologi-action-ltd/mycelia@<commit-hash>

License

MIT