[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-78623":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":15,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},78623,"community-plugins","cursor\u002Fcommunity-plugins","cursor","Plugins from the Cursor community","https:\u002F\u002Fcursor.directory",null,"TypeScript",3949,676,25,3,0,7,14,9,68.39,false,"main",[],"2026-06-12 04:01:23","# Cursor Directory\n\nThe directory of plugins from the Cursor community.\n\n**[cursor.directory](https:\u002F\u002Fcursor.directory)**\n\n---\n\n## Project Structure\n\n```\n├── apps\u002F\n│   └── cursor\u002F          # Next.js app\n├── supabase\u002F\n│   └── migrations\u002F      # Database migrations\n└── package.json         # Bun workspace config\n```\n\nAll data lives in the database — there is no local data in the repo.\n\n## Getting Started\n\n### Prerequisites\n\n- [Bun](https:\u002F\u002Fbun.sh)\n- A [Supabase](https:\u002F\u002Fsupabase.com) project\n\n### Setup\n\n1. **Clone the repo**\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fcursor\u002Fcommunity-plugins.git\ncd community-plugins\n```\n\n2. **Install dependencies**\n\n```bash\nbun install\n```\n\n3. **Configure environment variables**\n\n```bash\ncp apps\u002Fcursor\u002F.env.example apps\u002Fcursor\u002F.env\n```\n\nFill in the required values:\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `NEXT_PUBLIC_SUPABASE_URL` | Yes | Supabase project URL |\n| `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY` | Yes | Supabase Publishable key (`sb_publishable_...`, replaces the legacy anon key) |\n| `SUPABASE_SECRET_KEY` | Yes | Supabase Secret key (`sb_secret_...`, replaces the legacy service role key) |\n| `NEXT_PUBLIC_APP_URL` | No | Defaults to `http:\u002F\u002Flocalhost:3000` |\n\n4. **Run the database migrations**\n\nApply the migrations in `supabase\u002Fmigrations\u002F` to your Supabase project.\n\n5. **Start the dev server**\n\n```bash\nbun dev\n```\n\nOpen [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000).\n\n---\n\n## Contributing\n\nAll content is submitted through the website — no pull requests needed for data.\n\n### Submit a Plugin\n\n1. Go to [cursor.directory\u002Fplugins\u002Fnew](https:\u002F\u002Fcursor.directory\u002Fplugins\u002Fnew)\n2. Sign in with GitHub or Google\n3. Paste a GitHub repo URL — we auto-detect components following the [Open Plugins](https:\u002F\u002Fopen-plugins.com) standard\n4. Click **Submit**\n\nAuto-detected components:\n\n| Component | Path |\n|-----------|------|\n| Rules | `rules\u002F*.mdc` |\n| MCP Servers | `.mcp.json` |\n| Skills | `skills\u002F*\u002FSKILL.md` |\n| Agents | `agents\u002F*.md` |\n| Hooks | `hooks\u002Fhooks.json` |\n| LSP Servers | `.lsp.json` |\n\nSee the [Open Plugins specification](https:\u002F\u002Fopen-plugins.com\u002Fplugin-builders\u002Fspecification) and [plugin template](https:\u002F\u002Fgithub.com\u002Fcursor\u002Fplugin-template) for details.\n\n---\n\n## Tech Stack\n\n- **Framework**: [Next.js](https:\u002F\u002Fnextjs.org) (App Router, Turbopack)\n- **Runtime**: [Bun](https:\u002F\u002Fbun.sh)\n- **Database**: [Supabase](https:\u002F\u002Fsupabase.com) (PostgreSQL)\n- **Job Queue**: [Supabase Queues](https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fqueues) (`pgmq`) drained by a 1-min Vercel cron\n- **Styling**: [Tailwind CSS](https:\u002F\u002Ftailwindcss.com)\n- **UI**: [Radix UI](https:\u002F\u002Fradix-ui.com) + [shadcn\u002Fui](https:\u002F\u002Fui.shadcn.com)\n- **Search**: [Fuse.js](https:\u002F\u002Ffusejs.io) (client-side fuzzy search)\n- **URL State**: [nuqs](https:\u002F\u002Fnuqs.47ng.com)\n- **Linting**: [Biome](https:\u002F\u002Fbiomejs.dev)\n\n## Plugin security scan\n\nSubmitted plugins are auto-reviewed by a Cursor SDK agent (`composer-2`) running\nin `local` mode against a fresh clone of the plugin's repo plus its inline\ncomponent content. The verdict (`safe` \u002F `suspicious` \u002F `malicious`) is written\nback to `plugins.scan_status` and surfaces in the admin queue.\n\nThe scan is asynchronous and runs out of the request lifecycle:\n\n1. **Enqueue** — server actions and the recover-stuck-scans cron call\n   `enqueuePluginScan(pluginId)` which sends a message to the `plugin_scans`\n   pgmq queue.\n2. **Kick** — user-facing actions also fire `kickDrainAfterResponse()` so the\n   drain route is called via `next\u002Fserver` `after()` immediately after the\n   response is flushed. Scans typically start within a few hundred ms.\n3. **Drain** — `\u002Fapi\u002Fqueue\u002Fplugin-scans\u002Fdrain` reads one message\n   (`vt=900s`, `n=1`), runs `runPluginScan(pluginId)`, archives the message on\n   success, leaves it for VT-expiry on retryable error, or buries it after\n   `MAX_ATTEMPTS=5` deliveries.\n4. **Cron safety net** — Vercel cron hits the same drain route every minute so\n   any messages that missed their kick still get processed.\n\nThe drain route uses `maxDuration = 800` (Vercel Pro+ Fluid Compute ceiling) and\nrelies on `CURSOR_API_KEY` + `CRON_SECRET` from the env file.\n\n","cursor\u002Fcommunity-plugins 是一个汇集了Cursor社区插件的目录项目。它使用TypeScript编写，基于Next.js框架和Bun运行时环境构建，并采用Supabase作为数据库解决方案来存储所有数据。项目还集成了Tailwind CSS、Radix UI等技术栈以提供良好的用户体验。特别地，它支持通过GitHub或Google账号提交新插件，且能自动识别符合Open Plugins标准的组件。此项目非常适合那些希望为Cursor平台贡献或查找插件的开发者们使用。",2,"2026-06-11 03:57:04","high_star"]