cursor/community-plugins

Plugins from the Cursor community

TypeScript

4,001

915 commits

updated Sep 11, 2026

See the code

README

Cursor Directory

The directory of plugins from the Cursor community.

cursor.directory


Project Structure

├── apps/
│   └── cursor/          # Next.js app
├── supabase/
│   └── migrations/      # Database migrations
└── package.json         # Bun workspace config

All data lives in the database — there is no local data in the repo.

Getting Started

Prerequisites

Setup

  1. Clone the repo
git clone https://github.com/cursor/community-plugins.git
cd community-plugins
  1. Install dependencies
bun install
  1. Configure environment variables
cp apps/cursor/.env.example apps/cursor/.env

Fill in the required values:

VariableRequiredDescription
NEXT_PUBLIC_SUPABASE_URLYesSupabase project URL
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYYesSupabase Publishable key (sb_publishable_..., replaces the legacy anon key)
SUPABASE_SECRET_KEYYesSupabase Secret key (sb_secret_..., replaces the legacy service role key)
NEXT_PUBLIC_APP_URLNoDefaults to http://localhost:3000
  1. Run the database migrations

Apply the migrations in supabase/migrations/ to your Supabase project.

  1. Start the dev server
bun dev

Open http://localhost:3000.


Contributing

All content is submitted through the website — no pull requests needed for data.

Submit a Plugin

  1. Go to cursor.directory/plugins/new
  2. Sign in with GitHub or Google
  3. Paste a GitHub repo URL — we auto-detect components following the Open Plugins standard
  4. Click Submit

Auto-detected components:

ComponentPath
Rulesrules/*.mdc
MCP Servers.mcp.json
Skillsskills/*/SKILL.md
Agentsagents/*.md
Hookshooks/hooks.json
LSP Servers.lsp.json

See the Open Plugins specification and plugin template for details.


Tech Stack

Plugin security scan

Submitted plugins are auto-reviewed by a Cursor SDK agent (composer-2) running in local mode against a fresh clone of the plugin's repo plus its inline component content. The verdict (safe / suspicious / malicious) is written back to plugins.scan_status and surfaces in the admin queue.

The scan is asynchronous and runs out of the request lifecycle:

  1. Enqueue — server actions and the recover-stuck-scans cron call enqueuePluginScan(pluginId) which sends a message to the plugin_scans pgmq queue.
  2. Kick — user-facing actions also fire kickDrainAfterResponse() so the drain route is called via next/server after() immediately after the response is flushed. Scans typically start within a few hundred ms.
  3. Drain — /api/queue/plugin-scans/drain reads one message (vt=900s, n=1), runs runPluginScan(pluginId), archives the message on success, leaves it for VT-expiry on retryable error, or buries it after MAX_ATTEMPTS=5 deliveries.
  4. Cron safety net — Vercel cron hits the same drain route every minute so any messages that missed their kick still get processed.

The drain route uses maxDuration = 800 (Vercel Pro+ Fluid Compute ceiling) and relies on CURSOR_API_KEY + CRON_SECRET from the env file.

cursor/community-plugins

Plugins from the Cursor community

TypeScript

4,001

915 commits

updated Sep 11, 2026

See the code

README

Cursor Directory

The directory of plugins from the Cursor community.

cursor.directory


Project Structure

├── apps/
│   └── cursor/          # Next.js app
├── supabase/
│   └── migrations/      # Database migrations
└── package.json         # Bun workspace config

All data lives in the database — there is no local data in the repo.

Getting Started

Prerequisites

Setup

  1. Clone the repo
git clone https://github.com/cursor/community-plugins.git
cd community-plugins
  1. Install dependencies
bun install
  1. Configure environment variables
cp apps/cursor/.env.example apps/cursor/.env

Fill in the required values:

VariableRequiredDescription
NEXT_PUBLIC_SUPABASE_URLYesSupabase project URL
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYYesSupabase Publishable key (sb_publishable_..., replaces the legacy anon key)
SUPABASE_SECRET_KEYYesSupabase Secret key (sb_secret_..., replaces the legacy service role key)
NEXT_PUBLIC_APP_URLNoDefaults to http://localhost:3000
  1. Run the database migrations

Apply the migrations in supabase/migrations/ to your Supabase project.

  1. Start the dev server
bun dev

Open http://localhost:3000.


Contributing

All content is submitted through the website — no pull requests needed for data.

Submit a Plugin

  1. Go to cursor.directory/plugins/new
  2. Sign in with GitHub or Google
  3. Paste a GitHub repo URL — we auto-detect components following the Open Plugins standard
  4. Click Submit

Auto-detected components:

ComponentPath
Rulesrules/*.mdc
MCP Servers.mcp.json
Skillsskills/*/SKILL.md
Agentsagents/*.md
Hookshooks/hooks.json
LSP Servers.lsp.json

See the Open Plugins specification and plugin template for details.


Tech Stack

Plugin security scan

Submitted plugins are auto-reviewed by a Cursor SDK agent (composer-2) running in local mode against a fresh clone of the plugin's repo plus its inline component content. The verdict (safe / suspicious / malicious) is written back to plugins.scan_status and surfaces in the admin queue.

The scan is asynchronous and runs out of the request lifecycle:

  1. Enqueue — server actions and the recover-stuck-scans cron call enqueuePluginScan(pluginId) which sends a message to the plugin_scans pgmq queue.
  2. Kick — user-facing actions also fire kickDrainAfterResponse() so the drain route is called via next/server after() immediately after the response is flushed. Scans typically start within a few hundred ms.
  3. Drain — /api/queue/plugin-scans/drain reads one message (vt=900s, n=1), runs runPluginScan(pluginId), archives the message on success, leaves it for VT-expiry on retryable error, or buries it after MAX_ATTEMPTS=5 deliveries.
  4. Cron safety net — Vercel cron hits the same drain route every minute so any messages that missed their kick still get processed.

The drain route uses maxDuration = 800 (Vercel Pro+ Fluid Compute ceiling) and relies on CURSOR_API_KEY + CRON_SECRET from the env file.

Significant stargazers

(top 24 of 25)

Peli de Halleux

600 followers · starred Jul 2025

Shoubhit Dash

1,958 followers · starred Aug 2024

Jeff

16 followers · starred Oct 2024

Saatvik Arya

87 followers · starred May 2026