Custom Button logo

Custom Button

By Douwe Pausma

Add custom buttons to your edit views, that trigger custom actions like webhooks!

Latest version

v1.0.0

released September 16, 2026

npm install strapi-plugin-custom-button

Strapi Plugin Custom Button

Add custom buttons to the content-type entry edit view that trigger custom actions: call a webhook or navigate to a URL.

Features

  • Display custom buttons in the side panel of content-type entry edit views
  • Configure multiple buttons, each calling a webhook or opening a page
  • Filter buttons by content-type model
  • Access entry data when building the webhook request body or navigation URL
  • Customizable button appearance (icons, variants)

Installation

npm install strapi-plugin-custom-button

Configuration

Configure the plugin in your Strapi project's config/plugins.ts (or config/plugins.js):

export default ({ env }) => ({
  'custom-button': {
    enabled: true,
    config: {
      cardTitle: 'Actions', // Optional: title of the side panel card
      buttons: [
        {
          id: 'publish-to-cdn',
          name: 'Publish to CDN',
          icon: 'Cloud', // Optional: icon from @strapi/icons
          variant: 'success', // Optional: button variant
          action: 'webhook', // Optional: 'webhook' (default) or 'navigate'
          url: 'https://api.example.com/webhook/publish',
          method: 'POST',
          headers: { // Optional
            'Authorization': 'Bearer your-token',
            'Content-Type': 'application/json',
          },
          body: (entry) => ({ // Optional: function that receives entry data
            contentType: entry.contentType.uid,
            documentId: entry.values.documentId,
          }),
          models: ['api::article.article'], // Optional: limit to specific content-types
        },
        {
          id: 'preview',
          name: 'Preview',
          icon: 'Eye',
          action: 'navigate',
          newTab: true, // Optional: open in a new tab (default) or the current one
          body: (entry) => `https://example.com/preview/${entry.values.slug}`,
          models: ['api::article.article'],
        },
      ],
    },
  },
});

Button Configuration Options

OptionTypeRequiredDescription
idstringYesUnique identifier for the button
namestringYesDisplay text for the button
action'webhook' | 'navigate'NoWhat the button does. Defaults to 'webhook'
urlstringWebhook onlyWebhook URL to call
method'GET' | 'POST' | 'PUT' | 'DELETE'Webhook onlyHTTP method
headersRecord<string, string>NoHTTP headers to include (webhook only)
body(entry) => object | stringNoFunction receiving entry data. For webhooks, returns the request body; for navigation, returns the URL
newTabbooleanNoNavigation only: open the URL in a new tab. Defaults to true
iconstringNoIcon name from @strapi/icons
variantstringNoButton style: 'default', 'secondary', 'tertiary', 'success', 'success-light', 'danger', 'danger-light', 'ghost'
modelsstring[]NoContent-type UIDs to show this button on (shows on all if not specified)

Body Function

The body option accepts a function that receives the entry data. For webhook buttons it returns the object to send as the request body:

body: (entry) => ({
  contentType: entry.contentType.uid,      // e.g., 'api::article.article'
  documentId: entry.values.documentId,     // The entry's document ID
  title: entry.values.title,               // Access any field value
  // ... any other entry fields
})

For navigation buttons it returns the URL to open, either as a string or as an object with a url property:

body: (entry) => `https://example.com/preview/${entry.values.slug}`
// or
body: (entry) => ({ url: `https://example.com/preview/${entry.values.slug}` })

Requirements

  • Strapi v5.36.0 or higher

Contributing

Contributions are welcome! Whether it's bug fixes, new features, or documentation improvements, feel free to open an issue or submit a pull request.

Ideas for Future Features

  • Admin UI for button management - Configure buttons directly in the Strapi admin panel instead of the plugin config file
  • Additional webhook authentication methods
  • Webhook response handling and custom success/error messages

If you're interested in working on any of these, we'd love to see your contribution!

License

MIT

Made in 🇳🇱 by @douwepausma

Submit your content

Share your work with the community and get it listed in the Strapi ecosystem for everyone to discover and use.

Submit
Submit your content