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

ionic-ds

v0.0.3

Published

Ionic is the app development platform for web developers. Build amazing cross platform mobile, web, and desktop apps all with one shared code base and open web standards

Downloads

10

Readme

Table of Contents

Introduction

A design system is comprised of anything that will help teams efficiently develop consistent interfaces that scale. For example:

  • A components library, snippets, templates or starter projects
  • A style guide
  • Design patterns for colors, typography, iconography or animation
  • Assets like icons, images or fonts
  • Rules for branding voice and tone
  • Design usage documentation and guidelines

As you can see, it covers a broad spectrum of concepts. A specification to describe all that can help us by:

  • Letting design tools know how to use components, snippets, assets, or tokens
  • Having a centralized source of truth for our design system
  • Auto-generating documentation and showcase pages
  • Tracking and versioning changes to the design system

Hadron is a design tool where code is the source of truth. It can read design systems described in this way to allow users to design with them.

Contributing

This repo contains all the information needed to create design systems to be used at Hadron. You can create your own, publish it to NPM, and add it to your project's package.json file without our intervention 1

It also contains all design systems listed there for public usage.

If you want to list your design system too for the public, fork this repo, add it, and then open a pull request. You can get inspiration from existing ones. But remember, this is a prerelease, and the specs might change.

Creating a Design System

A design system it's just a folder with a design-system.json file plus any asset, dependency, or code that it requires. This file have the goal of describing what's available and how to use it.

How it works

Your design system will be a dependency of any project using it. Therefore, if it has any external dependencies, you should put them on the package.json file.

Take the Bulma design system in this repo for example. It has a package.json with the "bulma" dependency:

{
  "name": "@hadronapp/bulma-ds",
  "version": "0.1.0",
  "dependencies": {
    "bulma": "^0.8.2"
  }
}

And it only has snippets. But you could build your entire design system without external dependencies, of course. Or have your components together with your design system definitions, which will make it easier to maintain.

This is the entry point for describing your design system. Place it at the root of your project.

Full example:

{
  "name": "@hadronapp/bulma-ds",
  "displayName": "Bulma",
  "homepage": "https://bulma.io",
  "description": "Bulma is a free, open source CSS framework based on Flexbox.",
  "dependencies": [
    "node_modules/bulma/css/bulma.min.css"
  ],
  "components": [
    "./components/*.ds.js"
  ],
  "tokens": [
    "./tokens/*.json"
  ]
}
  • name { String } - Unique name
  • displayName { String } Optional Readable name.
  • homepage { String } Optional
  • description { String } Optional
  • dependencies { Dependency.<> } Optional Dependencies that you want to include in every document of a project using anything from your design system.
  • components { String.<> } Optional Paths to your components definitions. You can use glob patterns, like in the example above.
  • tokens { String.<> } Optional Paths to your tokens definitions. You can use glob patterns too.

How to define components

Component's definitions are js modules. The default export is the metadata for the component. And the variants named export must be an array with each variant definition for this component.

Take a look a this simple button component with 2 variants. From Bulma design system.

export default {
  displayName: 'Button',
  name: 'button',
  category: 'Elements',
  description: 'The classic button, in different colors, sizes, and states.',
  homepage: 'https://bulma.io/documentation/elements/button'
};

export const variants = [
  {
    displayName: 'Normal',
    picture: {
      src: './pictures/button/normal.webp'
    },
    snippet: {
      html: `<button class="button">Button</button>`
    }
  },
  {
    displayName: 'Primary',
    picture: {
      src: './pictures/button/primary.webp'
    },
    snippet: {
      html: `<button class="button is-primary">Primary</button>`,
    }
  }
];

How to define tokens

Tokens can be used to define class names that are styled on your stylesheets, attributes that are styled in some way for certain -or all- elements, CSS variables or even raw values.

They are defined in JSON files and, like with components, you should refer to them in the design-system.json file.

{
  "category": "icons-styles",
  "type": "class",
  "values": [
    {
      "value": "fa-xs",
      "description": "Icon size: xs"
    },
    {
      "value": "fa-sm",
      "description": "Icon size: sm"
    },
    {
      "value": "fa-2x",
      "description": "Icon size: 2x"
    },
    {
      "value": "fa-3x",
      "description": "Icon size: 3x"
    },
    {
      "value": "fa-rotate-90",
      "description": "Rotate icon 90°"
    }
  ]
}

How to use them at Hadron

Design systems must be NPM packages. You must add that dependency to your project.At the moment, there are 2 ways to do that:

  • Automatically, by pressing install on the public design system list
  • Manually, by creating a package.json file and add it to "dependencies" on your project (there is no UI-form to do that more nicely at this moment)

Specs

Location from the main document to all dependencies that are needed in every document using the design system.

  • It can be a string, which is the path to the dependency.
"node_modules/bootstrap/dist/css/bootstrap.css"
  • Or an object
    • src { String }
    • priority { Number } Optional If defined, this dependency should load before any other that doesn't have "priority" or it's lower. Your won't normally need this. But on some occasions, dependencies must be loaded in order.
    • snippets { String.<> } Optional If provided, it means that this dependency only matters for the specified snippets. Otherwise it'll be considered for all snippets.
    • type { String } Optional
    • Any other attribute Optional They will only be added when importing with HTML elements. Like script tags or link tags
{
	"src": "node_modules/@github/time-elements/dist/time-elements.js",
	"priority": 0,
	"type": "module",
	"snippets": ["html", "vue"],
	...
}
  • name { String }
  • displayName { String } Optional
  • homepage { String } Optional
  • dependencies { Dependency.<> } Optional If there is a dependency that isn't global to all components, you can place it on the components that use it themselves.
  • displayName { String }
  • picture { String | Object }
    • src { String }
    • width { Number } Optional
    • height { Number } Optional
  • snippets { Object }
  • category { String }
  • type { "class" | "attribute" | "css-property" | "css-variable" }
  • values { Object.<> }
    • value { string }
    • description { String }
  • cssProperties { String.<> } Optional Only for "css-property" type. When present, this token is meant to be used for this properties. cssProperties: ["border*", "background"]
  • propertyType { String } Optional Only for "css-property" and "css-variable" types. It can be any string that explains the actual type of the value. Like "color", "background-color", "shadow", "length", ..

Contact

For any ideas or discussion about the design systems API, please open an issue in this repo.

We're also on @hadronapp and spectrum.chat/hadron


1 On hadronapp, installing private npm packages is not currently supported. If you need them, please get in touch and tell us what you're planning to do, as we might accelerate its development.