
Convex Runtime
- 74 installs
- 125 repo stars
- Updated February 4, 2026
- igorwarzocha/opencode-workflows
Implement Convex runtime features: HTTP actions, file storage, full-text and vector search, and cron/scheduled functions.
About
A skill for Convex runtime features beyond core CRUD. A developer uses it to build webhooks, file uploads, search indexes, vectorSearch actions, and scheduled or cron background jobs.
- searchIndex/vectorIndex definitions with documented term, filter, and dimension limits
- Scheduled functions and cron jobs are durable; auth must be passed explicitly
Convex Runtime by the numbers
- 74 all-time installs (skills.sh)
- +3 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #3,066 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/igorwarzocha/opencode-workflows --skill convex-runtimeAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 74 |
|---|---|
| repo stars | ★ 125 |
| Last updated | February 4, 2026 |
| Repository | igorwarzocha/opencode-workflows ↗ |
What it does
Implement Convex runtime features: HTTP actions, file storage, full-text and vector search, and cron/scheduled functions.
Files
<overview> Implement Convex runtime features: HTTP actions, file storage, search (full text + vector), and scheduling. </overview>
<reference>
- HTTP actions: https://docs.convex.dev/functions/http-actions
- File storage: https://docs.convex.dev/file-storage
- Uploading files: https://docs.convex.dev/file-storage/upload-files
- Serving files: https://docs.convex.dev/file-storage/serve-files
- File metadata: https://docs.convex.dev/file-storage/file-metadata
- Full text search: https://docs.convex.dev/search/text-search
- Vector search: https://docs.convex.dev/search/vector-search
- Scheduling: https://docs.convex.dev/scheduling
- Scheduled functions: https://docs.convex.dev/scheduling/scheduled-functions
- Cron jobs: https://docs.convex.dev/scheduling/cron-jobs
</reference>
<context name="Runtime Concepts">
- Full text search:
searchIndexwithsearchFieldand optionalfilterFields; relevance-ordered; prefix matching on final term; fuzzy matches are deprecated; limits 16 terms, 8 filters, 1024 scanned. - Vector search:
vectorIndexwithvectorFieldanddimensions(2-4096); vector field isv.array(v.float64()); actions-only; limits 256 results, 64 filters, 4 vector indexes per table. - Scheduling: scheduled functions are durable and stored in DB; cron jobs run on fixed schedules; auth not propagated, You MUST pass identity explicitly.
- File storage: upload URLs for large files; HTTP action uploads limited to 20MB; metadata in
_storage.
</context>
<rules>
Runtime Operations
- HTTP actions: define handlers with
httpAction, register inconvex/http.tsviahttpRouter(default export REQUIRED). - HTTP Syntax:
http.route({
path: "/api/echo", // Exact path
method: "POST",
handler: httpAction(async (ctx, req) => {
const body = await req.bytes();
return new Response(body, { status: 200 });
}),
});- HTTP actions MUST be exposed at
https://<deployment>.convex.site. - Upload URL flow: generate URL mutation → client POST → store
storageId; URLs expire after 1 hour. - HTTP upload flow:
ctx.storage.store(blob)then mutation. Uploads via HTTP actions are limited to 20MB. - Serving files:
ctx.storage.getUrl(storageId)in queries/mutations; returns signed URL ornull. - File metadata:
ctx.db.system.get("_storage", id)orquery("_storage");storage.getMetadata()is deprecated. - Scheduling:
ctx.scheduler.runAfter/runAt; cron jobs inconvex/crons.tsusingcronJobs(). - Cron Scheduling: You MUST use
crons.intervalorcrons.cron. You MUST NOT use deprecated helpers likecrons.hourly,crons.daily, orcrons.weekly. - Cron internal calls: If a cron calls an internal function, You MUST import the
internalobject from_generated/apito reference it, even if defined in the same file.
Core Rules
- HTTP actions MUST be routed only via
convex/http.tsdefault export. - HTTP actions MUST parse
Requestmanually as they do not support validators. - Search Example:
const messages = await ctx.db.query("messages")
.withSearchIndex("search_body", (q) =>
q.search("body", "hello hi").eq("channel", "#general")
).take(10);- Vector search MUST be actions-only; results are non-reactive.
- Search behavior: full text search is relevance-ordered and uses prefix matching on the final term; fuzzy matches are deprecated.
- You SHOULD prefer search/vector filters in index definitions and query filters.
- Scheduled functions MUST remain backward compatible with args.
</rules>