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

decklight

v0.2.0

Published

A presentation library designed to be authored by AI agents and humans alike: single-file decks, Keynote-style builds, theme-aware SVG diagrams, and truthful terminal recordings.

Readme

Decklight

The presentation library that presents itself.

A deck is a single HTML file — no build, no server, no framework. Decklight is a presentation library in the Reveal.js tradition, designed to be authored by AI agents and humans alike: describe a slide in plain English and your agent writes it, then — because agents can't eyeball a slide — every feature is verifiable by a headless render (clipped content flags itself, every theme passes machine-checked contrast gates, terminal demos are recorded truth, not screenshots).

SPEC.md is the full contract and demo/showcase.html is the exhaustive self-demo. This README is the quick tour. For the two-minute version, open demo/intro.html — a short deck that explains what Decklight is, each slide live-demoing the feature it describes. See it all live at decklight.io.

Why Decklight

  • Agent-native — describe a slide to your favorite agent; init hands it a skill with the real contract, and overflow flags + contrast gates + headless-render assertions let it verify its own work without eyes.
  • One file, zero build — author a single HTML file, double-click it, present.
  • Diagrams & graphics — native, theme-aware inline SVG, not just bullet lists.
  • Animation — progressive builds, Magic Move between slides, and diagrams that draw themselves in.
  • 61 built-in themes — every one passes WCAG contrast gates and codified palette rules; generate your own with a keystroke.
  • Truthful terminals — real PTY recordings replayed truthfully, never a video.
  • Live narration — text-to-speech presents the deck by itself, in sync, captions included.
  • Everything is text — no binary formats, so decks diff cleanly in git and agents can read, review, and edit every byte.

Quick start

npx decklight init "My Deck"

Scaffolds a self-contained deck.html (double-click it — no server) and a .claude/skills/decklight/ skill + AGENTS.md, so Claude Code (or anything reading AGENTS.md) has the full authoring contract on hand instead of guessing from Reveal.js memory. The skill is sliced from SPEC.md, so it never drifts from the installed runtime.

Or hand-author the anatomy directly:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="decklight/dist/decklight.css">
  <link rel="stylesheet" href="decklight/themes/aurora.css">
</head>
<body>
  <div class="decklight">
    <section>
      <h2>A plain HTML slide</h2>
      <p>With an auto-detected subtitle</p>
      <ul data-build>
        <li>First point</li>
        <li>Second point — steps in on the next advance</li>
      </ul>
      <aside class="notes">Speaker notes. ⟨CLICK⟩ markers align with builds.</aside>
    </section>
  </div>
  <script src="decklight/dist/decklight.js"></script>
  <script>Decklight.init({ transition: 'fade' });</script>
</body>
</html>

Open it in a browser — file:// works for everything, no server needed.

How authoring works

The whole loop is agent-friendly, one file end to end:

  1. decklight init — scaffold a starter deck plus the agent skill above.
  2. Author one HTML file: <section> slides, data-build reveals, inline SVG with theme tokens, <aside class="notes"> split on ⟨CLICK⟩ (notes drive builds, captions, transcript and narration at once).
  3. decklight dev deck.html — the whole live loop under one Ctrl-C: live-reload editing (from your editor or the browser), plus any narration/lip-sync bridges this machine can run (missing prerequisites are skipped with the fix, never a hard failure). In the browser: E edits notes back into the file, L cycles layouts, Z/⇧Z undo/redo, and A asks an installed coding agent — Claude Code, Codex, Gemini, Copilot, Aider and more, auto-detected from $PATH — to edit the deck headlessly; the page reloads when it saves. Edits auto-commit as you go.
  4. decklight rec script.term.yaml — record a truthful terminal cast in a real PTY.
  5. decklight bundle deck.html --themes all — flatten runtime, themes, casts and narration into one offline HTML file to hand off.

Features at a glance

| Feature | In one line | More | |---|---|---| | Markdown | opt a slide into CommonMark with data-markdown; HTML stays the default | SPEC §1 | | Builds | data-build on a container — each child is a step; the layout never jumps | SPEC §2 | | SVG diagrams | inline SVG authored with var(--d-*) tokens; recolors with every theme, strokes draw in | SPEC §3 | | Motion | slide transitions, Magic Move auto-animate, looping element effects — all respect reduced-motion | SPEC §4 | | Theming | 62 themes in 5 packs on one token contract; T picker, ⌃T generates a contract-complete theme | SPEC §5 | | Code | highlight.js themed through --hl-* tokens; data-lines steps highlight ranges as builds | SPEC §6 | | Terminals | decklight rec captures real PTY output; replayed by typing then streaming, never a video | SPEC §7 | | Presenting | speaker view, rehearse cue cards, overview, command palette, slide finder — all on file:// | SPEC §8 | | Narration | TTS reads your notes in sync with builds; the voice is the clock, captions + auto-advance | SPEC §8 |

CLI

| Command | Purpose | |---|---| | decklight init ["Title"] | scaffold a self-contained starter deck + an agent skill | | decklight dev deck.html | the whole authoring loop in one command — live reload + every bridge this machine can run | | decklight rec script.term.yaml | record a terminal cast in a real PTY | | decklight bundle deck.html [--all] | flatten to a self-contained single-file HTML | | decklight tts | live voice bridge — the player synthesizes narration through it |

decklight help for every command and flag — refresh and export are in SPEC §7, edit and lipsync in SPEC §8. Drive a deck programmatically with the JS API. The runtime has zero dependencies (marked and highlight.js are bundled at build time); node-pty and js-yaml are CLI-only.

Keys

| Key | Action | |---|---| | Space | next / previous build or slide | | S | speaker view (again: rehearse cue cards) | | T | theme picker (type to filter) · ⌃T generate a theme | | V | narration on/off | | / | command palette · G find a slide | | ? | help overlay — every key |

Install on another machine

git clone https://github.com/decklight/decklight && cd decklight
npm install        # dev deps for building/recording; decks only need dist/ + themes/
npm run build

Decks reference dist/decklight.{js,css} and one theme file — copy those three files (or a bundle) and nothing else.

Architecture

One HTML file and one theme stylesheet feed a zero-dependency browser runtime; everything with native dependencies or credentials lives in localhost tools (the CLI, the edit live-reload server, the tts bridge); and a verification band — contrast gates, palette rules, headless render assertions, property tests — holds all of it to the SPEC.md contract.

Development

npm test (unit + property tests) · node test/render.mjs (headless-Chrome render assertions) · node test/contrast.mjs (WCAG theme gates) · npm run verify for the lot. The repo culture: every feature is verified end-to-end against a real render, not just unit-tested — see SPEC §10.

Links

  • decklight.io — the showcase deck, live and narrating itself
  • demo/intro.html — the short "what is Decklight" tour
  • demo/showcase.html — the full self-demo, every feature on its own slide
  • SPEC.md — the authoring contract
  • CONTRIBUTING.md — how to contribute (DCO sign-off required)

License

Decklight is free and open source, released under the Apache License 2.0. Contributions are welcome — see CONTRIBUTING.md.