Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

payload-smart-deletion

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

payload-smart-deletion

Payload CMS plugin that adds PostgreSQL-style referential actions (cascade, set_null, restrict) to relationship fields.

latest
Source
npmnpm
Version
1.0.11
Version published
Maintainers
1
Created
Source

payload-smart-deletion

Cascading deletes for Payload CMS relationship fields, inspired by PostgreSQL referential actions.

npm version License: MIT

Overview

Mark relationship fields with a cascade action and the plugin handles the rest. When a document is deleted, all referenced documents are deleted too. When trash is enabled, cascades follow soft-delete and restore transitions through the entire document tree.

Features

  • Hard-delete cascade -- permanently deletes referenced documents when the parent is deleted.
  • Soft-delete cascade -- trashes referenced documents when the parent is trashed.
  • Restore cascade -- restores referenced documents when the parent is restored.
  • Polymorphic support -- works with single and polymorphic (relationTo: [...]) relationships.
  • Nested field support -- finds cascade fields inside groups, tabs, and blocks.
  • Automatic trash propagation -- optionally enables trash: true on target collections that need it.

Installation

pnpm add payload-smart-deletion

Usage

1. Add the plugin

Important: smartDeletionPlugin scans all collections at config time. It must be listed after any plugin that injects cascade relationship fields, so those fields are visible during the scan.

// payload.config.ts
import { buildConfig } from "payload";
import { discussionsPlugin } from "payload-discussions";
import { smartDeletionPlugin } from "payload-smart-deletion";

export default buildConfig({
  // ...
  plugins: [
    discussionsPlugin({ collections: ["posts"] }), // injects cascade fields
    smartDeletionPlugin(), // must come after
  ],
});

2. Mark relationship fields

Add custom.smartDeletion: 'cascade' to any relationship field that should cascade deletes:

const Posts: CollectionConfig = {
  slug: "posts",
  trash: true,
  fields: [
    {
      name: "comments",
      type: "relationship",
      relationTo: "comments",
      hasMany: true,
      custom: { smartDeletion: "cascade" },
    },
  ],
};

Deleting a post now deletes all its comments. If the post is trashed, comments are trashed too. Restoring the post restores the comments. Cascades are recursive -- if the target collection also has cascade fields, they are followed automatically.

Plugin options

OptionTypeDefaultDescription
autoEnableTrashbooleantrueWhen the source collection has trash: true, automatically enable trash: true on target collections. When false, logs a warning instead.

Trash behavior

Soft-delete and restore hooks are only registered when the source collection has trash: true. If a target collection does not have trash enabled:

  • With autoEnableTrash: true (default): the plugin enables it automatically.
  • With autoEnableTrash: false: a warning is logged and cascaded deletes will hard-delete target documents instead of trashing them.

Contributing

This plugin lives in the payload-plugins monorepo.

Development

pnpm install

# watch this plugin for changes
pnpm --filter payload-smart-deletion dev

# run the Payload dev app (in a second terminal)
pnpm --filter sandbox dev

The sandbox/ directory is a Next.js + Payload app that imports plugins via workspace:* -- use it to test changes locally.

Code quality

  • Formatting & linting -- handled by Biome, enforced on commit via husky + lint-staged.
  • Commits -- must follow Conventional Commits with a valid scope (e.g. fix(payload-smart-deletion): ...).
  • Changesets -- please include a changeset in your PR by running pnpm release.

Issues & PRs

Bug reports and feature requests are welcome -- open an issue.

License

MIT

Keywords

payload

FAQs

Package last updated on 25 Feb 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts