emdash-plugin-bulk-upload
Bulk upload admin page plugin for Emdash CMS: a drag-and-drop queue that creates draft entries (with optional linked translations) for every uploaded
Description
Adds a bulk upload page to the Emdash admin. Drop any number of images (or pick them), adjust each file’s title and details, and create a reviewed draft entry per file. Nothing goes live without a human publishing it.
Features
- Drag-and-drop or file-picker queue with previews, in grid or list layout
- Shared details applied to every entry: reference selects loaded from your other collections, plus taxonomy assignment
- Optional linked translation drafts, resolved automatically from your site’s locales
- Idempotent imports: retrying a failed file skips the media upload and entries that already succeeded
- Built with Kumo, the same component system as the Emdash admin, so it looks native
- Admin UI translated into every language the Emdash admin supports
- Ships an optional
month-yearschema-field widget (YYYY-MMpicker)
Install
This is a native-format plugin: it is installed from npm and configured in code, since the file-to-entry mapping is a function in your project.
pnpm add emdash-plugin-bulk-upload @cloudflare/kumo
Register it in astro.config.mjs:
import { bulkUpload } from "emdash-plugin-bulk-upload";
emdash({
plugins: [bulkUpload({ adminEntry: "@/plugins/bulk-upload-admin" })],
});
Then create the admin entry it points at:
// src/plugins/bulk-upload-admin.tsx
import { createBulkUploadAdmin, imageFieldValue } from "emdash-plugin-bulk-upload/admin";
import "emdash-plugin-bulk-upload/styles.css";
export const { pages } = createBulkUploadAdmin({
collection: "posts",
buildData: ({ media, title }) => ({
title,
image: imageFieldValue(media, title),
}),
});
That is a working uploader; reference selects, taxonomies, per-file fields, and label overrides are all optional config on top. Full documentation and screenshots: https://github.com/afonsojramos/emdash-plugin-bulk-upload
Audit summary
Security risk answers “can this plugin harm my site?” — it drives the publish decision. Privacy disclosure answers “what visitor or admin data does this plugin handle?” — it’s informational so you can make your own GDPR call before installing.
- lowsecurityReference to localStorage browser API
Version history
Rejected and revoked versions remain visible so the history is honest. Expand any row with findings to see why. See our review policy.
0.1.2PublishedPassed824.2 KB19 Aug 20261 downloads
Scanner findings (1)
Reference to localStorage browser API
localStorage is a browser-only API and is not available in the plugin runtime. Usually indicates the plugin was built for a browser context. (Detected in admin.js.)