A monorepo of plugins for EmDash CMS by Devon Hillard, published to npm under the @devondragon scope.
| Package | Version | Description |
|---|---|---|
@devondragon/emdash-plugin-404-viewer |
Admin UI for browsing, searching, and pruning the built-in _emdash_404_log table. |
|
@devondragon/emdash-plugin-featured-image-studio |
Search Unsplash and import photos (with attribution) into your media library — as a standalone admin page or an in-editor field widget. |
More plugins coming — this repo is the home for everything EmDash-related I publish.
Install the package you want and register it with EmDash in your astro.config.mjs:
import { defineConfig } from "astro/config";
import emdash from "emdash";
import { notFoundViewerPlugin } from "@devondragon/emdash-plugin-404-viewer";
export default defineConfig({
integrations: [
emdash({
plugins: [notFoundViewerPlugin()],
}),
],
});Each package has its own README with specifics — see the links in the table above.
This is a pnpm workspace. Packages are built with tsdown and versioned/published via changesets.
pnpm install # install all workspace deps
pnpm build # build every package
pnpm typecheck # tsc --noEmit across all packages
# Work on a single package
pnpm -F @devondragon/emdash-plugin-404-viewer build
pnpm -F @devondragon/emdash-plugin-404-viewer typecheckemdash-plugins/
├── packages/ # one directory per published plugin
├── .changeset/ # pending changesets (tracked in git)
├── .github/workflows/ # CI (typecheck + build) and release (changesets action)
└── docs/ # specs and plans
Releases are automated by the changesets GitHub Action on main:
- Make your changes on a branch.
- Run
pnpm changesetto author a changeset (pick package, bump type, write a summary) and commit it. - Open a PR. CI runs typecheck + build.
- On merge to
main, the Release workflow opens a "Version Packages" PR that applies the changeset (bumps versions, updates CHANGELOGs). - Merging the Version Packages PR publishes to npm via OIDC trusted publishing — no tokens required.
Issues and PRs welcome. If you want to propose a new plugin, open an issue first so we can talk through scope before you build it.
MIT © Devon Hillard