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

@ai-gui/plugin-flashcard

v0.40.0

Published

Flashcards to revise from: one card at a time, hidden answer, self-graded.

Downloads

2,075

Readme

@ai-gui/plugin-flashcard

Cards to revise from: one at a time, answer hidden, self-graded.

The moment a vocabulary list stops being a list. A word shown beside its meaning is a word being read, and reading a word you have already read teaches nothing — what moves it into memory is being asked for it and finding out whether it came. So a card hides its back, and the person says how it went before they are told.

```flashcards
{"version":1,"id":"de-week-1","title":"本周德语词","gradeAction":"revise.word","cards":[
  {"id":"word-1","front":"der Kühlschrank","back":"冰箱","hint":"der Kühl-schrank","example":"Der Kühlschrank ist leer."},
  {"id":"word-2","front":"möchten","back":"想要"}
]}

```ts
import { flashcards } from "@ai-gui/plugin-flashcard"

const plugin = flashcards({ actionRuntime })

What it does not do

Scheduling. Which card comes back tomorrow and which in a month is the host's: only the host knows what else this person is learning and when they last saw it. What travels out is one grade per card — again / hard / good — dispatched through the same action allowlist a form's submission uses:

registry.register({
  type: "revise.word",
  run: ({ cardId, grade }) => scheduleNextAppearance(cardId, grade),
})

Three grades, not two: "I half knew it" is the commonest answer, and a two-way split forces it into a lie in either direction.

Two modes

reveal: "hidden" (the default) is revision — one card, answer hidden, graded.

reveal: "immediate" shows both sides of every card at once and grades nothing. That is the teaching moment: the person is meeting these for the first time, and hiding the meaning of a word nobody has been told is a quiz on a lesson that has not happened.

Keyboard

Space or Enter reveals; 1 2 3 grade. A number pressed before the answer is shown does nothing — otherwise a stray keypress grades a card the person never saw, and the schedule believes it.