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

@poolsideai/pooleval

v0.0.1

Published

Eval charts for Svelte — animated, themeable bar charts for showing model evaluations.

Readme

pooleval

Eval charts. For Svelte.

A small, opinionated charting component for showing model evals. Drop it in. Customize the colors. Ship.

Install

npm install @poolsideai/pooleval

Requires Svelte 5.

Quick start

<script>
  import PoolEval from '@poolsideai/pooleval';

  const data = [
    { value: 72.4, provider: 'poolside', label: 'Lyra', highlight: true },
    { value: 64,   provider: 'openai',   label: 'Nova 5' },
    { value: 58.7, provider: 'gemini',   label: 'Atlas 2.5 Pro' },
    { value: 51.2, provider: 'claude',   label: 'Orion Opus 4.7' },
    { value: 44,   provider: 'grok',     label: 'Vega 5' },
  ];
</script>

<PoolEval {data} max={100} title="SWE-bench Verified" />

Numbers count up, bars rise from the floor. Hover any column for the model name.

Examples

Monochromatic mode + theming

Pass monochromatic to drop the canonical brand colors and let icons inherit your theme. The highlighted icon picks up --pe-icon-highlight alongside its bar.

<PoolEval
  data={gpqa}
  max={100}
  monochromatic
  title="GPQA Diamond"
  theme={{
    'bar-highlight': '#f97316',
    'text-highlight': '#f97316',
    'icon-highlight': '#f97316',
    'bar-radius': '3px',
    'baseline-color': '#d1d5db',
    'baseline-padding': '14px',
  }}
  darkTheme={{
    'baseline-color': 'rgba(255, 255, 255, 0.2)',
  }}
/>

With units. Without animation.

Pass unit per data point and animate={false} to disable the count-up.

<PoolEval
  data={[
    { value: 142, provider: 'grok',   label: 'Vega mini', highlight: true, unit: 'ms' },
    { value: 168, provider: 'openai', label: 'Nova 5 mini', unit: 'ms' },
    { value: 195, provider: 'gemini', label: 'Atlas 2.5 Flash', unit: 'ms' },
  ]}
  animate={false}
  title="Inference latency, lower is better"
  theme={{
    'bar-highlight': '#111111',
    'text-highlight': '#111111',
    'bar-radius': '4px',
  }}
/>

Rotated labels

Pass labels={true} to show compact model names below the provider icons. The label lane is measured from the longest label.

<PoolEval
  data={labeled}
  max={100}
  labels={true}
  title="Arena win rate"
  theme={{
    'bar-highlight': '#2455ff',
    'text-highlight': '#2455ff',
    'bar-gap': '28px',
  }}
/>

Custom provider icons

Built-in provider SVGs still resolve from provider. For your own provider mark, pass a Svelte component through providerIcons keyed by provider name.

<script>
  import PoolEval from '@poolsideai/pooleval';
  import AcmeProviderIcon from './AcmeProviderIcon.svelte';

  const data = [
    { value: 94, provider: 'acme', label: 'Acme Reasoner', highlight: true },
    { value: 88, provider: 'poolside', label: 'Lyra' },
    { value: 83, provider: 'openai', label: 'Nova 5' },
  ];

  const providerIcons = {
    acme: AcmeProviderIcon,
  };
</script>

<PoolEval {data} {providerIcons} max={100} title="Custom provider icon" />

You can also set icon on a single datum when only one column needs an override:

const data = [
  { value: 94, provider: 'acme', label: 'Acme Reasoner', icon: AcmeProviderIcon },
];

Props

| Prop | Type | Default | Description | |---|---|---|---| | data | Datum[] | [] | Array of data points. See shape below. | | max | number \| null | null | Maximum value used to scale the bars. Auto-detected from data if omitted. | | animate | boolean | true | Animate count-up and bar rise on mount. | | duration | number | 900 | Animation duration in ms. | | tooltip | boolean | true | Show tooltip with model name on hover. | | monochromatic | boolean | false | Use single-color icons that follow --pe-icon-color / --pe-icon-highlight. | | labels | boolean | false | Show rotated text labels below provider icons. | | counts | boolean | true | Show the numeric value above each bar. | | chartHeight | number | 150 | Bar lane height in pixels. | | providerIcons | Record<string, Component> | {} | Custom Svelte components keyed by provider. Used before built-in SVG lookup. | | title | string | "Model evaluation chart" | Accessible title. | | description | string | "" | Accessible description. | | theme | Record<string,string> | {} | CSS variable overrides. See tokens below. | | darkTheme | Record<string,string> | {} | Same as theme but applied in dark mode. | | forceDark | boolean | false | Force dark theme regardless of prefers-color-scheme. | | class | string | "" | Extra class names on the root element. |

Datum shape

type Datum = {
  value: number;        // numeric value to plot
  provider: string;     // provider key (see list below)
  icon?: Component;     // custom provider icon for this datum
  label?: string;       // model name shown in the tooltip and rotated label
  highlight?: boolean;  // marks this row as the highlighted (accent) bar
  unit?: string;        // appended to the count, e.g. "ms" or "%"
};

Custom icon components render inside the fixed-size provider icon wrapper. They receive these props:

type ProviderIconProps = {
  datum: Datum;
  provider?: string;
  label?: string;
  value: number;
  highlight: boolean;
  monochromatic: boolean;
  size: string; // "var(--pe-icon-size)"
};

Render SVGs or images at width={size} and height={size} to match the chart's icon-size token.

Theming

All visual controls go through CSS variables on the root element. Pass them either through the theme / darkTheme props or via plain CSS overrides.

Bars

| Token | Default | Description | |---|---|---| | bar-color | #d6d6d6 | Default bar fill. | | bar-highlight | #7c3aed | Highlighted bar fill and focus ring. | | bar-width | 22px | Width of each bar column. | | bar-radius | 0px | Corner radius for bars. | | bar-gap | 18px | Space between bar columns. |

Counts

| Token | Default | Description | |---|---|---| | count-color | inherits text-color | Numeric count above each bar. | | count-highlight | inherits text-highlight | Highlighted count text color. | | count-font | inherits font | Font stack for the counts. | | count-font-size | inherits font-size | Font size for the counts. |

Tooltips

| Token | Default | Description | |---|---|---| | tooltip-bg | #111 | Tooltip background color and arrow fill. | | tooltip-color | #fff | Tooltip text color. | | tooltip-font | inherits font | Font stack used by the tooltip. | | tooltip-font-size | inherits font-size | Tooltip text size. | | tooltip-radius | 6px | Tooltip corner radius. |

Base line

| Token | Default | Description | |---|---|---| | baseline-color | rgba(0, 0, 0, 0.10) | Baseline stroke color. | | baseline-width | 1px | Baseline thickness. | | baseline-padding | 10px | How far the baseline extends beyond the outside bars. | | baseline-offset | 0px | Vertical offset from the bar baseline. |

Icons

| Token | Default | Description | |---|---|---| | icon-color | #d6d6d6 | Monochromatic icon color. | | icon-highlight | #7c3aed | Highlighted monochromatic icon color. | | icon-fg | #111 | Foreground color for full-color provider icons. | | icon-size | 20px | Provider icon size. | | icon-gap | 12px | Space between bar base and icon. |

Labels

| Token | Default | Description | |---|---|---| | text-color | #b0b0b0 | Value labels and rotated model labels. | | text-highlight | #7c3aed | Highlighted value and model label text. | | label-color | inherits text-color | Rotated model label text color. | | label-highlight | inherits text-highlight | Highlighted rotated model label text color. | | label-font | inherits font | Font stack used by rotated model labels. | | label-font-size | 11px | Font size for rotated model labels. | | label-gap | 8px | Space between icon and rotated label. |

Chart

| Token | Default | Description | |---|---|---| | bg | transparent | Chart wrapper background. | | font | "JetBrains Mono", ui-monospace, monospace | Font stack used by values, labels, and tooltips. | | font-size | 13px | Base chart font size. |

Supported providers

anthropic, claude, openai, gemini, google, grok, xai, poolside, qwen, deepseek, zai, glm, mistral, devstral, github, generic.

Each ships a brand-color SVG and a monochromatic variant. Aliases (xaigrok, glmzai, devstralmistral) resolve to the canonical mark. Custom components passed through providerIcons or datum icon take precedence over this built-in lookup.

License

MIT.

All product names, logos, and brand marks are the property of their respective owners. Use of these names, logos, and brand marks does not imply endorsement.