Skip to content
Back to skills

Front Plugin

ASecurity

Build Front plugins using the Plugin SDK. Use when creating sidebar plugins, composer plugins, or extending Front's UI. Triggers on plugin, front plugin, sidebar plugin, composer plugin, @frontapp/plugin-sdk.

  • 666 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added February 8, 2026
developmentreactgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill front-plugin --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Front Plugin?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Front Plugin
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-front-plugin/badge)](https://www.skillsdirectory.com/skills/majiayu000-front-plugin)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: front-plugin
description: Build Front plugins using the Plugin SDK. Use when creating sidebar plugins, composer plugins, or extending Front's UI. Triggers on plugin, front plugin, sidebar plugin, composer plugin, @frontapp/plugin-sdk.
---

# Front Plugin Development

Build production-ready plugins for Front using the official Plugin SDK (`@frontapp/plugin-sdk`).

## When to Use This Skill

- Creating a sidebar plugin (context panel in Front)
- Creating a composer plugin (message toolbar integration)
- Extending Front's UI with custom functionality
- Working with the Plugin SDK (not the REST API)

## Plugin Types

1. **Sidebar Plugin** - Appears in Front sidebar, shows context for selected conversation(s)
2. **Composer Plugin** - Appears in message composer toolbar, operates on draft being composed

## Key Distinction

- **Plugin SDK** (`@frontapp/plugin-sdk`) - Client-side, runs in iframe embedded in Front
- **REST API** (`packages/core/src/front/client.ts`) - Server-side, webhooks and API calls

This skill is for the Plugin SDK. For REST API operations (webhooks, drafts via API), see the `front-webhook` skill.

## Quick Start

```tsx
// src/providers/frontContext.tsx
import { createContext, useContext, useEffect, useState } from 'react'
import Front from '@frontapp/plugin-sdk'

const FrontContext = createContext()

export function useFrontContext() {
  return useContext(FrontContext)
}

export function FrontContextProvider({ children }) {
  const [context, setContext] = useState()

  useEffect(() => {
    const subscription = Front.contextUpdates.subscribe(ctx => {
      setContext(ctx)
    })
    return () => subscription.unsubscribe()
  }, [])

  return (
    <FrontContext.Provider value={context}>
      {children}
    </FrontContext.Provider>
  )
}
```

```tsx
// src/App.tsx
import { useFrontContext } from './providers/frontContext'

function App() {
  const context = useFrontContext()

  if (!context) return <div>Waiting for Front context...</div>

  switch (context.type) {
    case 'noConversation':
      return <div>Select a conversation to use this plugin.</div>
    case 'singleConversation':
      return <MainPlugin />
    case 'multiConversations':
      return <div>Select only one conversation.</div>
    default:
      return <div>Unsupported context type</div>
  }
}
```

## Context Types

| Type | Description |
|------|-------------|
| `noConversation` | No conversation selected |
| `singleConversation` | One conversation selected (most common) |
| `multiConversations` | Multiple conversations selected |
| `messageComposer` | Composer plugin context |

## Common SDK Methods

```ts
// List messages in conversation
const messages = await context.listMessages()

// Create a draft reply
await context.createDraft({
  content: { body: 'Hello!', type: 'text' },
  replyOptions: { type: 'replyAll', originalMessageId: latestMessageId }
})

// Update existing draft
await context.updateDraft(draftId, {
  updateMode: 'replace',
  content: { body: 'Updated content', type: 'html' }
})

// Tag conversation
await context.tag(['tag_123'])

// Assign to teammate
await context.assign('tea_456')

// Open URL in popup (for modals)
await context.openUrlInPopup(url, { width: 400, height: 300 })
```

## Available Context Data

```ts
context.teammate        // Current Front user
context.conversation    // Selected conversation (singleConversation only)
context.conversations   // Selected conversations (multiConversations only)
context.draft          // Current draft (messageComposer only)
```

## UI Guidelines

- Support dark/light mode
- No horizontal scrolling (narrow sidebar)
- Use `lucide-react` for icons
- Graceful loading states (never blank screen)
- Handle missing data with fallbacks

## Detailed Reference

See `rules/` directory for:
- Context types and interfaces
- All SDK methods with signatures
- Draft creation/update patterns
- Attachment handling
- Error handling patterns

## Resources

- [Plugin SDK Overview](https://dev.frontapp.com/docs/plugin-overview)
- [SDK Methods Reference](https://dev.frontapp.com/reference/plugin-sdk-objects)
- [Getting Started Example](https://github.com/frontapp/plugin-getting-started)
- [npm package](https://www.npmjs.com/package/@frontapp/plugin-sdk)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.