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

pi-poster

v0.1.3

Published

🎨 Poster integration for pi β€” render React posters to PNG/SVG/PDF/JPG/WebP from an agent session.

Readme

pi-poster

🎨 Poster for pi β€” turn agent intent into a rendered image.

Give pi the ability to author a single-file React poster and render it to PNG / SVG / PDF / JPG / WebP during a session. Tailwind, Recharts, lucide-react, Inter / Source Serif 4 / JetBrains Mono β€” all available out of the box.

"Make me a share image for the v0.2 release" β†’ hero PNG
"One-page PDF report from this CSV"          β†’ editorial layout β†’ PDF
"Year-in-review for our top 10 customers"    β†’ wrapped-style story poster
"OG image for the new docs site"             β†’ 1200Γ—630 social card
"Cover for this README"                      β†’ README hero

Install

pi install npm:pi-poster

That's it. poster-ai ships a headless Chromium binary, so the first render is ready to go.

How the agent uses it

One tool, poster_render, with two ways to source the TSX:

| Param | When | Why | |---|---|---| | tsx | First render | Inline source string. The agent authors a fresh component. | | tsxPath | Iterative edits | Path to a .tsx file. The agent edits the previously-archived source instead of resending the whole component. |

The two are mutually exclusive β€” pass exactly one.

First render (inline)

poster_render({
  tsx: `
    export default () => (
      <div className="w-[1200px] p-12 bg-black text-white">
        <div className="text-[14px] font-bold uppercase tracking-[0.3em] text-cyan-300/70">
          Release Β· v0.2
        </div>
        <h1 className="text-7xl font-black mt-3">Shipped.</h1>
      </div>
    )
  `,
  out: "./release.png"
})

β†’ Rendered /Users/you/proj/release.png Β· 24.3 KB Β· 1200Γ—180 Β· png

Iterative edit (by path)

Every render archives a paired <name>-<ts>.{format,tsx} into .poster/output/. To iterate, the agent edits that .tsx file directly and re-renders by path β€” no need to resend the whole component each turn.

poster_render({
  tsxPath: ".poster/output/release-1776359608903.tsx",
  out: "./release.png"
})

Canvas comes from the TSX

There is no width / height tool param. The root element declares the canvas via Tailwind:

<div className="w-[1600px] p-10 ...">             // landscape / dashboard / twitter
<div className="w-[1200px] p-10 ...">             // square / cover / instagram
<div className="w-[1080px] p-10 ...">             // story / wrapped
<div className="w-[1400px] p-10 ...">             // editorial / magazine
<div className="w-[1200px] h-[630px] p-10 ...">   // OG image (the only fixed-aspect case)

One source of truth. Two sources = overflow + empty-strip bugs.

What the agent gets, for free

  • poster skill β€” authoring contract, layout grammar, color systems, signature patterns (kicker rows, italic reveal words, gradient text, card recipes), and a catalog of pitfalls. Loaded automatically when the agent reaches for a visual deliverable.
  • Pre-flight validation β€” broken canvases (min-h-screen, w-full on root, illegal font sizes, percentage-height traps) are caught before the puppeteer launch, with concrete fix suggestions in the error.
  • Inline preview β€” when the terminal supports images, the rendered PNG/JPG/WebP appears directly under the tool result.
  • Source archive β€” .poster/output/<name>-<ts>.{ext,tsx} keeps the full history of what the agent produced. Add .poster/ to .gitignore if you don't want it in version control.

What posters look like

Every one of these is a single .tsx file the agent can author the same way β€” click any source link to see exactly what the model produced.

For 40+ more examples β€” anatomy diagrams, neon synthwave, NYT-style crosswords, tarot cards, illuminated manuscripts, weather widgets, sankey flows β€” see the full poster-ai gallery.

License

MIT