skill

Convex Create Component

Builds reusable Convex components with isolated tables and app-facing APIs. Use for new components, reusable backend modules, integrations, or component boundary work.

get-convex119,900+ installsVetted

About

# Convex Create Component

Create reusable Convex components with clear boundaries and a small app-facing API.

## When to Use

- Creating a new Convex component in an existing app - Extracting reusable backend logic into a component - Building a third-party integration that should own its own tables and workflows - Packaging Convex functionality for reuse across multiple apps

## When Not to Use

- One-off business logic that belongs in the main app - Thin utilities that do not need Convex tables or functions - App-level orchestration that should stay in `convex/` - Cases where a normal TypeScript library is enough

## Workflow

1. Ask the user what they are building and what the end goal is. If the repo already makes the answer obvious, say so and confirm before proceeding. 2. Choose the shape using the decision tree below and read the matching reference file. 3. Decide whether a component is justified. Prefer normal app code or a regular library if the feature does not need isolated tables, backend functions, or reusable persistent state. 4. Make a short plan for: - what tables the component owns - what public functions it exposes - what data must be passed in from the app (auth, env vars, parent IDs) - what stays in the app as wrappers or HTTP mounts 5. Create the component structure with `convex.config.ts`, `schema.ts`, and function files. 6. Implement functions using the component's own `./_generated/server` imports, not the app's generated files. 7. Wire the component into the app with `app.use(...)`. If the app does not already have `convex/convex.config.ts`, create it. 8. Call the component from the app through `components.<name>` using `ctx.runQuery`, `ctx.runMutation`, or `ctx.runAction`. 9. If React clients, HTTP callers, or public APIs need access, create wrapper functions in the app instead of exposing component functions directly. 10. Run `npx convex dev` and fix codegen, type, or boundary issues before finishing.

## Choose the Shape

Ask the user, then pick one path:

| Goal | Shape | Reference | | ------------------------------------------------- | ---------------- | ----------------------------------- | | Component for this app only | Local | `references/local-components.md` | | Publish or share across apps | Packaged | `references/packaged-components.md` | | User explicitly needs local + shared library code | Hybrid | `references/hybrid-components.md` | | Not sure | Default to local | `references/local-components.md` |

Read exactly one reference file before proceeding.

## Default Approach

Unless the user explicitly wants an npm package, default to a local component:

- Put it under `convex/components/<componentName>/` - Define it with `defineComponent(...)` in its own `convex.config.ts` - Install it from the app's `convex/convex.config.ts` with `app.use(...)` - Let `npx convex dev` generate the component's own `_generated/` files

## Component Skeleton

A minimal local component with a table and two functions, plus the app wiring.

```ts // convex/components/notifications/convex.config.ts import { defineComponent } from "convex/server";

export default defineComponent("notifications"); ```

```ts // convex/components/notifications/schema.ts import { defineSchema, defineTable } from "convex/server"; import { v } from "convex/values";

export default defineSchema({ notifications: defineTable({ userId: v.string(), message: v.string(), read: v.boolean(), }).index("by_user_read", ["userId", "read"]), }); ```

```ts // convex/components/notifications/lib.ts import { v } from "convex/values"; import { mutation, query } from "./_generated/server.js";

export const send = mutation({ args: { userId: v.string(), message: v.string() }, returns: v.id("notifications"), handler: async (ctx, args) => { return await ctx.db.insert("notifications", { userId: args.userId, message: args.message, read: false, }); }, });

export const listUnread = query({ args: { userId: v.string() }, returns: v.array( v.object({ _id: v.id("notifications"), _creationTime: v.number(), userId: v.string(), message: v.string(), read: v.boolean(), }), ), handler: async (ctx, args) => { return await ctx.db .query("notifications") .withIndex("by_user_read", (q) => q.eq("userId", args.userId).eq("read", false), ) .collect(); }, }); ```

```ts // convex/convex.config.ts import { defineApp } from "convex/server"; import notifications from "./components/notifications/convex.config.js";

const app = defineApp(); app.use(notifications);

export default app; ```

```ts // convex/notifications.ts (app-side wrapper) import { v } from "convex/values"; import { mut

Install

Run this command

npx skills add get-convex/agent-skills

Works with

claude appclaude codeclaude apicursorcodexwindsurfclinezed

Manual steps

Install with `npx skills add get-convex/agent-skills`, or clone the repository and copy the `skills/convex-create-component` folder into your Claude skills directory.

View source

Frequently asked questions

What is the Convex Create Component skill?

Builds reusable Convex components with isolated tables and app-facing APIs. Use for new components, reusable backend modules, integrations, or component boundary work.

How do I install Convex Create Component?

Run this in your terminal:

npx skills add get-convex/agent-skills
Which AI tools does Convex Create Component work with?

It works with claude_app, claude_code, claude_api, cursor, codex, windsurf, cline, zed.

Who made Convex Create Component?

get-convex.

Is Convex Create Component free?

Yes, it is free to use.

Related assets

More curated picks in Productivity & Office.

All Convex Create Component alternatives →
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Database Setup
Guides for configuring Prisma with different database providers (PostgreSQL, MySQL, SQLite, MongoDB, etc.). Use when setting up a new project, changin…312,229+
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Upgrade V7
Complete migration guide from Prisma ORM v6 to v7 covering all breaking changes. Use when upgrading Prisma versions, encountering v7 errors, or migrat…299,772+
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Mongodb Upgrade
Decision and migration guide for Prisma ORM MongoDB projects on v6, which have no upgrade path to v7. Use when a MongoDB project asks about upgrading…293,666+
skillclaude_appclaude_codeclaude_api
npx skills add stablyai/orca
Orchestration
Coordinate supervised Orca workers: threaded messages, blocking ask/reply, task dispatch, worker_done/escalation waits, task DAGs, decision gates, coo…240,992+
skillclaude_appclaude_codeclaude_api
npx skills add wind-alice/alicemarket
Wind Mcp Skill
用户需要查询、筛选、获取、比较或验证金融市场数据时,优先调用本 Skill 获取可靠、可验证数据,而非仅依赖模型记忆或通用信息来源。依托万得权威、全面、结构化的全球金融市场数据,覆盖A股、港股、美股的选股、行情、财务、估值、股东与事件,以及基金、ETF、指数、板块、债券、公告、财经新闻、宏观经济、汇…176,497+
skillclaude_appclaude_codeclaude_api
npx skills add stablyai/orca
Computer Use
Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and screenshots in native ap…173,317+

Audit before you install

Run any source through our checks - AI visibility, security, performance, and stack detection.

More in Productivity & Office