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

eidotter

v0.22.2

Published

A DOS Themed Design System

Readme

eiDotter

┌──────────────────────────────────────────────┐
│  C:\> EIDOTTER_                              │
│                                              │
│  DOS terminal design system for React.       │
│  Authentic CGA phosphor. WCAG AA.            │
│  Tree-shakable. No CSS-in-JS runtime.        │
└──────────────────────────────────────────────┘

npm CI license React

eiDotter is a React component library that takes the DOS/CGA terminal aesthetic seriously: authentic 16-color palette, bitmap-accurate typography, phosphor glow physics, keyboard-first interactions. 36 components across forms, navigation, windowing, timelines, and terminal chrome — shipped as ES modules with a prebuilt stylesheet so consumers don't need Tailwind to use it.

Storybook  ·  CHANGELOG  ·  Issues  ·  npm


Install

npm install eidotter

Quick start

import { Terminal, Alert, Button } from 'eidotter';
import 'eidotter/styles';

function App() {
  return (
    <Terminal title="MY-APP.EXE">
      <Alert color="success" title="System Ready">
        DOS interface loaded successfully.
      </Alert>
      <Button variant="primary">Execute</Button>
    </Terminal>
  );
}

A single CSS import pulls everything: font, tokens, component styles, and compiled Tailwind utilities. Tailwind is not required to use eiDotter — consume it as plain React + one stylesheet.

Setup

Styles

import 'eidotter/styles';                    // Everything: font + tokens + components + utilities
import 'eidotter/themes/amber-mono.css';     // Optional: theme override
import 'eidotter/utilities';                 // Optional: .dos-* typography classes for raw HTML

Granular imports are still available (eidotter/fonts.css, eidotter/tokens.css) if you want to override the font or tokens independently.

With Tailwind

If you already use Tailwind, register eiDotter's preset and drop the eidotter/styles import (the preset compiles utilities in your build):

// tailwind.config.js
module.exports = {
  presets: [require('eidotter/tailwind.preset')],
  content: ['./src/**/*.{ts,tsx,jsx}'],
};
<div className="bg-dos-bg-primary text-dos-text-accent font-dos">
  DOS terminal content
</div>

The preset auto-registers tailwindcss-react-aria-components and tailwindcss-animate if they resolve. Migrating from the pre-0.19.2 dual-preset split? See CHANGELOG → 0.19.2.

Documentation

| | | |---|---| | Live docs | Storybook — every component with stories, controls, and source | | Design tokens | src/tokens/*.json (DTCG format) → tokens.css via Style Dictionary | | Themes | amber-mono (default), cga-amber, cga-mode4-p0/p1, cga-mode5 | | Font | Perfect DOS VGA 437 by Zeh Fernando — pixel-perfect-vector TTF (every glyph outline axis-aligned). Free-to-redistribute per bundled license. Single-weight; all fontWeight tokens resolve to 400 | | Icons | pixelarticons (MIT) — DOS pixel-art glyphs | | Accessibility | WCAG AA, React Aria primitives under interactive components, prefers-reduced-motion + prefers-contrast honored throughout |

Components

36 components across five families — complete catalog in Storybook.

| Component | Purpose | |---|---| | Terminal | DOS window with title bar, minimize/maximize/close controls | | Modal | Dialog overlay on React Aria primitives (ModalOverlay + Modal + Dialog) | | CommandPrompt | Interactive command-line input with blinking cursor | | CmdPalette | ⌘K overlay with scored search, keyboard nav, configurable hotkey | | Header | Sticky site header (retro / modern variants), composes branding + Nav | | Footer | Site footer with default legal links (Impressum + Datenschutz) | | Nav | Responsive navigation with desktop + mobile variants |

| Component | Purpose | |---|---| | Card | Content container (elevated, bordered, glow, interactive, minimal, callout) | | Accordion | Collapsible content sections (Section + AccordionFill) | | Alert | Inline alert banner with featured icon, actions, 6 color variants | | Badge | Status indicator chips | | Tag | Interactive labels for tags, categories, filter chips | | Notification | Toast popup with layered amber glow, auto-dismiss, progress variant | | Stat | Key-value display for metrics | | Progress | DOS-style progress bar with block characters | | Separator | Horizontal / vertical divider | | Breadcrumb | Navigation path display |

| Component | Purpose | |---|---| | Button | DOS-style buttons (primary, secondary, ghost, link) on React Aria Button | | Input | Text input with error variant, React Aria TextField | | Checkbox | [X]-bracket indicator, React Aria Checkbox | | Switch | Toggle on/off, React Aria Switch | | Tabs | Tabbed navigation on React Aria TabList/Tab/TabPanel | | FilterBar | Multi-select toggle group for faceted filtering |

| Component | Purpose | |---|---| | ChatMessage | Chat message with role-based DOS styling and streaming cursor | | ChatHistory | Scrollable message list with auto-scroll + role="log" | | ChatInput | Multiline textarea with Enter-to-send | | ChatContainer | Composes ChatHistory + ChatInput — drop inside Terminal | | DosFigure | Demoscene painted-screen media placeholder with scanline sweep | | Icon | SVG icons backed by pixelarticons | | InlineLink | In-flow anchor with dotted underline + / glyph | | InlineExpand | Inline disclosure widget for prose |

| Component | Purpose | |---|---| | TimelineContainer | Multi-zoom timeline (year / month / day / hour views) | | TimelineNode | Axis markers with shape variants and glow | | TextScramble | DOS text decode animation | | RetroEffects | CRT scanlines, noise, phosphor glow | | Tokens | Design-token reference display (Storybook only) |

Design tokens

Authentic 16-color CGA palette plus amber/phosphor variants, exposed as CSS custom properties:

--color-cga-amber: #FFB000;         /* Primary accent */
--color-cga-amber-bright: #FDCA9F;
--color-cga-amber-dim: #9A5700;
--color-cga-black: #020003;         /* Background */
/* …16-color CGA palette + semantic tokens */

Semantic tokens (--color-semantic-*) and Tailwind classes (bg-dos-*, text-dos-*, border-dos-*) are the preferred surface — the raw CGA names are primitives. Full reference in src/styles/tokens.css or in Storybook's Tokens page.

Theming is attribute-driven:

<div data-theme="amber-mono">…</div>

Development

npm install
npm run storybook        # Launch Storybook on :6006
npm run build            # Production build (tsup + tsc)
npm run test             # Jest + React Testing Library
npm run lint             # ESLint
npm run build-tokens     # Rebuild tokens from src/tokens/*.json

Design notes

eiDotter commits to the constraints that other "DOS-inspired" systems relax:

  • 16 colors, no more. The palette is a historical fact, not a starting point. Extensions (amber, green, phosphor variants) are declared themes, not ad-hoc hex codes.
  • Single-weight typography. Perfect DOS VGA 437 has no bold variant — authentic DOS never had one. All fontWeight tokens resolve to 400 and font-synthesis: none blocks browser faux-bold. Emphasis comes from color, uppercase on labels, or inverse video — never weight.
  • Phosphor as physics, not decoration. Warmup animations, glow layers, and scanline effects are wired into component states; consumers don't opt in per-component.
  • Keyboard-first. React Aria powers every interactive component. Focus rings are loud amber on amber-dim. prefers-reduced-motion and prefers-contrast are honored across the board.
  • Tree-shakable, no CSS-in-JS. Runtime deps are minimal and on-purpose: React Aria + pixelarticons, both MIT. Component CSS ships compiled; you pay no CSS-in-JS cost at runtime.

The aesthetic is a constraint the system holds itself to — not a theme that can be turned off.

License

CC-BY-NC-4.0 — Creative Commons Attribution-NonCommercial 4.0 International. Bundled third-party licenses (pixelarticons MIT, Perfect DOS VGA 437 free-redistribution by Zeh Fernando, Flexi IBM VGA True CC BY-SA 4.0 — kept for legacy consumers) attributed in LICENSE.md.