Plugin catalog for EmDash. MIT licensed.
Each plugin does one thing, ships a companion Astro component that works with no configuration, and publishes to npm under @plugdash/.
| Package | What it does |
|---|---|
| @plugdash/readtime | Word count and reading time, written to post metadata on publish |
| @plugdash/callout | Info, warning, tip, and danger callout blocks in the editor |
| @plugdash/tocgen | Nested table of contents from Portable Text headings |
| @plugdash/shortlink | Short URLs for posts, with resolver route and admin page |
| @plugdash/sharepost | Share button URLs for Twitter, LinkedIn, WhatsApp, Bluesky, email |
| @plugdash/heartpost | Heart button with KV-backed per-post counter and fingerprint dedup |
| @plugdash/engage | Heart, share, and copy-link composed into one component |
| @plugdash/autobuild | Fires a Cloudflare Pages, Netlify, or Vercel build hook on every publish |
pnpm add @plugdash/readtimeRegister in your EmDash config:
// astro.config.mjs
import { readtimePlugin } from "@plugdash/readtime";
export default defineConfig({
integrations: [
emdash({
plugins: [readtimePlugin()],
}),
],
});Import the companion component where you want it to render:
---
import ReadingTime from "@plugdash/readtime/ReadingTime.astro";
---
<ReadingTime post={post} />Each plugin's README covers its own config options and component variants.
pnpm install
pnpm build # build all packages with tsdown
pnpm test # run vitest across all packages
pnpm typecheck # tsc --noEmit in every package
pnpm lint # oxlint
pnpm smoke # verify each built package exports a valid descriptorThe full smoke gate (lint -> build -> typecheck -> test -> smoke) runs on every push via GitHub Actions. Nothing publishes to npm unless all five pass.
Versioning and publishing use changesets.
# describe your change
pnpm changeset
# commit and push
git add -A && git commit -m "feat(readtime): ..."
git pushA "Version Packages" PR opens automatically on main. Merging it bumps versions, updates changelogs, and publishes to npm.
Read AGENTS.md before adding a new plugin. It covers the two-file plugin structure, the stage system, and confirmed EmDash API behavior learned while building these plugins.