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

stargantt

v0.0.1

Published

StarGantt: a plugin-based Gantt chart library with zero runtime dependencies. Single-file bundle of the core plus all fifteen official plugins (ESM + IIFE, CSS embedded).

Readme

StarGantt

A Gantt chart library where even the basics are plugins — with zero runtime dependencies.

Documentation · Live examples · 日本語版 README (this English README is canonical)

License: MIT Runtime dependencies: 0 Core: <12KB min TypeScript

StarGantt is built like VS Code, not like a widget: a micro-kernel of less than 12 KB (minified) that knows nothing about tasks, dates, or drawing, plus 15 official plugins that implement everything else — rendering, drag editing, dependencies, auto-scheduling, critical path, baselines and earned value, resources, import/export, external data sync — using only the same public API that your plugins get. Don't like a built-in behavior? Replace the plugin.

Quick start

<div id="chart" style="height: 480px"></div>
<script src="stargantt.iife.js"></script>
<script>
  const gantt = StarGantt.create({
    element: document.getElementById("chart"),
    plugins: StarGantt.presetStandard(),
  });

  const day = 86400000;
  const t0 = Math.floor(Date.now() / day) * day;
  gantt.service("stargantt.data").load({
    tasks: [
      { id: "root", parentId: null, name: "Release prep", type: "summary", start: t0, end: t0 + 20 * day },
      { id: "spec", parentId: "root", name: "Design", start: t0, end: t0 + 5 * day, progress: 1 },
      { id: "impl", parentId: "root", name: "Implementation", start: t0 + 5 * day, end: t0 + 15 * day, progress: 0.4 },
      { id: "qa", parentId: "root", name: "Verification", start: t0 + 15 * day, end: t0 + 20 * day },
      { id: "ship", parentId: "root", name: "Release", type: "milestone", start: t0 + 20 * day, end: t0 + 20 * day },
    ],
    links: [
      { id: "l1", sourceId: "spec", targetId: "impl", type: "FS" },
      { id: "l2", sourceId: "impl", targetId: "qa", type: "FS" },
      { id: "l3", sourceId: "qa", targetId: "ship", type: "FS" },
    ],
  });
</script>

That is a complete application: one HTML file, one script tag. Styles are injected by create(). Or with a bundler:

import { create, presetStandard } from "stargantt";

const gantt = create({
  element: document.getElementById("chart")!,
  plugins: presetStandard(), // configurable via PresetStandardConfig
});
gantt.service("stargantt.data").load({ tasks, links }); // fully typed

The six opt-in plugins are composed onto the preset by name:

import { create, presetStandard, tracking, resource } from "stargantt";

const gantt = create({
  element,
  plugins: [...presetStandard(), tracking({ baselines: {} }), resource()],
});

Install

npm install stargantt          # everything: core + all 15 official plugins (ESM + IIFE)

Or compose exactly what you need:

npm install @stargantt/core @stargantt/preset-standard
npm install @stargantt/plugin-tracking      # any individual official plugin
npm install @stargantt/sdk                  # for writing your own plugins

Requirements: a desktop/tablet-class viewport (720 × 540 px or larger). There is no mobile-phone layout, by design.

Packages

| Package | What it is | |---|---| | stargantt | Single-file distribution: core + all 15 official plugins, ESM + IIFE, CSS embedded | | @stargantt/preset-standard | The standard 9-plugin composition (presetStandard()) | | @stargantt/core | The micro-kernel (<12 KB minified, enforced in CI) | | @stargantt/sdk | Typed helpers for plugin authors | | @stargantt/plugin-* | The 15 official plugins, individually installable |

Official plugins

Part of presetStandard():

| Plugin | ID | Does | |---|---|---| | data-store | stargantt.data-store | Tasks, links, resources, assignments, custom fields; every change is a reversible transaction | | view | stargantt.view | Renderer, pane layout, theming, timeline axis and header, grid and today line | | tree-grid | stargantt.tree-grid | Left-hand grid pane and row model, field columns, cell editing, rule-driven bar colouring | | task-bars | stargantt.task-bars | Draws the bars; owns the bar geometry every other plugin measures against | | interaction | stargantt.interaction | Selection, drag-edit, snapping, tooltips, context menu, zoom, clipboard, filter/search, edit dialog | | undo-redo | stargantt.undo-redo | Transaction history: undo replays in reverse, redo forward again | | a11y | stargantt.a11y | Keyboard operability and screen-reader support; extensible shortcut table | | scheduling | stargantt.scheduling | Dependency links, auto-schedule engine, working calendars, critical path, diagnostics | | export | stargantt.export | Image/PDF export, CSV/JSON/iCal/MS-Project interchange, .xlsx writer, read-only embed viewing |

Opt-in (bundled, activated by adding their factory to plugins):

| Plugin | ID | Does | |---|---|---| | tracking | stargantt.tracking | Baselines and slip, progress tracking, cost accounting, earned-value management | | resource | stargantt.resource | Resource ledger, assignment editor, resource-axis panel, over-allocation analysis, load chart | | data-sync | stargantt.data-sync | REST/GraphQL snapshots with delta sync and optimistic write-back, offline snapshots, realtime transports | | portfolio | stargantt.portfolio | Initiative–program–project hierarchy and a headless KPI dashboard | | i18n | stargantt.i18n | Locale-keyed dictionary with a fallback chain, shared by all message catalogs | | perf-tools | stargantt.perf-tools | Frame-time overlay and trace recorder for diagnosing paint performance |

Architecture

  • The core knows nothing about Gantt charts. It provides a plugin host, services, extension points, an event bus, and a command bus — nothing else. Tasks, dates, and rendering are all plugin territory.
  • No back doors. Official plugins are built with exactly the public API third-party plugins get. Anything a built-in plugin can do, yours can too — including replacing a built-in wholesale.
  • Deterministic disposal. Every resource a plugin creates (listeners, DOM, timers) is registered through ctx.own(), and the core owns teardown.
  • Zero runtime dependencies. Nothing under dependencies except workspace-internal @stargantt/* packages, which are part of the library itself.

The full specification lives in docs/specs/architecture.md, the SDK spec, and one spec per plugin.

Documentation

  • User documentation — guides, plugin references, and the API reference; every chart on it is a live StarGantt instance.
  • Examples — 47 self-contained demo pages, each one HTML file against the released bundle.

Contributing

See CONTRIBUTING.md. Short version: this is a hobby project with no support guarantee; the plugin architecture exists so you can build what you need without waiting for a maintainer. Security reports: see SECURITY.md.

License

MIT © wintermaples