[{"data":1,"prerenderedAt":570},["ShallowReactive",2],{"index":3,"mdc-1wlf4y-key":519,"mdc-h8i03g-key":540,"mdc--hwlqzq-key":555},{"id":4,"title":5,"body":6,"console":7,"cta":41,"description":54,"extension":55,"hero":56,"mcp":94,"meta":175,"navigation":16,"path":176,"positioning":177,"primitives":210,"products":280,"productsWorksGreatFor":420,"section":426,"seo":440,"stem":443,"steps":444,"workflows":470,"__hash__":518},"content/index.yml","Give your app a backend in [minutes]{.text-primary}",null,{"eyebrow":8,"title":9,"description":10,"primaryCta":11,"secondaryCta":19,"image":24,"features":28},"The console","See what is running. Fix what needs attention.","Deploy from code or your AI coding agent, then manage every function, queue, schedule, key, and file from one console.",{"label":12,"to":13,"target":14,"icon":15,"trailing":16,"color":17,"size":18},"Explore the console","https://console.rocketstack.sh","_blank","i-lucide-arrow-right",true,"primary","lg",{"label":20,"to":21,"target":14,"icon":15,"trailing":16,"color":22,"variant":23,"size":18},"Create free account","https://console.rocketstack.sh/register","neutral","outline",{"src":25,"alt":26,"urlLabel":27},"/images/rocketstack-console-overview.png","RocketStack console showing deployed resources, primitive counts, and resources requiring attention.","console.rocketstack.sh",[29,33,37],{"title":30,"description":31,"icon":32},"Everything in one view","See functions, queues, storage, schedules, cron jobs, and KV resources across your team.","i-lucide-layers",{"title":34,"description":35,"icon":36},"Problems surface immediately","Find failed deployments, provisioning issues, and resources that need attention without searching through cloud consoles.","i-lucide-alert-triangle",{"title":38,"description":39,"icon":40},"Operate, not just deploy","Manage API keys, usage, observability, Generate, and MCP from the same workspace.","i-lucide-activity",{"title":42,"description":43,"links":44},"Build your [first workflow]{.text-primary}","Create a free account, get your API key, and connect your application through HTTP, SDKs, or MCP.",[45,48],{"label":20,"to":21,"target":14,"trailingIcon":15,"size":46,"color":17,"variant":47},"xl","solid",{"label":49,"to":50,"target":51,"variant":52,"icon":53,"size":46,"color":22},"Read the docs","/docs","_self","subtle","i-lucide-book-open","Add functions, queues, scheduled jobs, state and file storage through one API key. Build from Cursor, Claude or any HTTP client without setting up cloud infrastructure.","yml",{"primitives":57,"proof":82,"links":88},[58,62,66,70,74,78],{"id":59,"label":60,"icon":61},"functions","Functions","i-lucide-zap",{"id":63,"label":64,"icon":65},"kv","KV","i-lucide-database",{"id":67,"label":68,"icon":69},"storage","Object Storage","i-lucide-hard-drive",{"id":71,"label":72,"icon":73},"queue","Queue","i-lucide-inbox",{"id":75,"label":76,"icon":77},"scheduler","Scheduler","i-lucide-calendar-clock",{"id":79,"label":80,"icon":81},"cron","Cron","i-lucide-clock",[83,84,85,86,87],"One API key","Six composable primitives","Standard HTTP","No credit card","Deploy through MCP",[89,91],{"label":90,"icon":15,"trailing":16,"color":17,"to":21,"target":14,"size":46},"Build a live workflow",{"label":92,"icon":32,"size":46,"color":22,"variant":23,"to":93,"target":51},"Explore primitives","#products",{"eyebrow":95,"title":96,"description":97,"benefits":98,"clientsLabel":111,"clients":112,"primaryCta":125,"secondaryCta":128,"examples":130,"footerText":167,"footerLinks":168},"Build with AI","Describe the backend.\nLet your coding agent deploy it.","Use RocketStack MCP from Cursor, Claude, Windsurf, or VS Code to create functions, queues, schedules, state, and storage without leaving your development workflow.",[99,103,107],{"title":100,"description":101,"icon":102},"Describe the outcome","Tell your coding agent what your application needs in plain language.","i-lucide-message-square",{"title":104,"description":105,"icon":106},"Deploy real infrastructure","The agent creates and manages RocketStack primitives through MCP, not just local code.","i-lucide-server",{"title":108,"description":109,"icon":110},"Stay in your editor","Build, inspect, and update backend workflows without switching between cloud consoles.","i-lucide-app-window","Works with MCP-enabled clients",[113,116,119,122],{"name":114,"icon":115},"Cursor","i-lucide-mouse-pointer-2",{"name":117,"icon":118},"Claude","i-simple-icons-anthropic",{"name":120,"icon":121},"Windsurf","i-lucide-wind",{"name":123,"icon":124},"VS Code","i-simple-icons-visualstudiocode",{"label":126,"to":127,"icon":15,"trailing":16,"color":17,"size":18},"Set up RocketStack MCP","/docs/mcp",{"label":129,"to":127,"icon":53,"color":22,"variant":23,"size":18},"Read MCP docs",[131,145,156],{"id":132,"shortLabel":133,"prompt":134,"actions":135,"primitives":141,"result":144},"stripe-webhook","Stripe webhooks","Add reliable Stripe webhook processing to this application.\n\nAcknowledge requests immediately, queue each event, process it in a function, and retry failed deliveries automatically.\n",[136,137,138,139,140],"Creating queue: stripe-events","Deploying function: process-stripe-event","Connecting queue to function","Enabling retries and observability","Workflow deployed successfully",[142,72,143],"Webhook","Function","Reliable webhook processing is now live without configuring servers, workers, or queue infrastructure.",{"id":146,"shortLabel":147,"prompt":148,"actions":149,"primitives":154,"result":155},"file-processing","File processing","Add document uploads to this application. Store each file, queue a processing job, and deploy a function that extracts its metadata.",[150,151,152,153,140],"Configuring object storage","Creating queue: document-processing","Deploying function: extract-document-metadata","Connecting storage workflow",[68,72,143],"Files can now be uploaded and processed asynchronously without blocking application requests.",{"id":157,"shortLabel":158,"prompt":159,"actions":160,"primitives":165,"result":166},"scheduled-reminder","Scheduled reminders","Send a reminder one hour after a user signs up. Deploy the function and schedule each invocation through RocketStack.",[161,162,163,164,140],"Deploying function: send-signup-reminder","Configuring scheduler","Connecting scheduler to function","Adding invocation payload",[76,143],"The application can now schedule reminder delivery without running workers or cron servers.","Prefer code? Use the same RocketStack APIs through",[169,172],{"label":170,"to":171},"HTTP","/docs/api",{"label":173,"to":174},"official SDKs","/docs/sdks",{},"/",{"eyebrow":178,"title":179,"description":180,"ctaNote":181,"alternatives":182,"links":205},"Compare approaches","Choose the backend approach that fits your team","RocketStack sits between limited frontend add-ons and building a complete cloud platform yourself. Keep your existing frontend while adding production-ready backend capabilities through one operating model.","Start with one primitive, then compose more as your application grows.",[183,188,193,199],{"title":184,"worksWellWhen":185,"tradeoff":186,"withRocketStack":187,"icon":110},"Frontend platform add-ons","You only need simple request-response endpoints close to your frontend.","Background jobs, retries, scheduling, state, and file processing quickly become fragmented or require additional services.","Keep your frontend where it is and add the backend capabilities it is missing through one API.",{"title":189,"worksWellWhen":190,"tradeoff":191,"withRocketStack":192,"icon":32},"Specialist backend vendors","You need one specific capability and do not expect the backend to grow much further.","Each new requirement introduces another account, SDK, API key, dashboard, billing model, and integration.","Use functions, queues, scheduling, state, and storage through one account and one API key.",{"title":194,"worksWellWhen":195,"tradeoff":196,"withRocketStack":197,"icon":198},"Building directly on AWS","You have dedicated cloud engineers and need complete infrastructure control.","Your team owns IAM, provisioning, deployments, scaling, monitoring, security, and cost management.","Use production-ready backend primitives without building and operating the cloud platform underneath them.","i-lucide-cloud",{"title":200,"worksWellWhen":201,"tradeoff":202,"withRocketStack":203,"icon":204},"Running background work inside your app","The work is fast, low volume, and safe to lose when a request fails.","Long-running requests time out, failed jobs disappear, and retries, observability, and idempotency become custom application code.","Move asynchronous work into managed, observable workflows with queues and functions.","i-lucide-refresh-cw",[206,209],{"label":207,"icon":15,"trailing":16,"color":17,"to":208,"target":51,"size":18},"Explore common workflows","/workflows",{"label":20,"icon":15,"trailing":16,"size":18,"color":22,"variant":23,"to":21,"target":14},{"eyebrow":211,"title":212,"description":213,"footerText":214,"primaryCta":215,"secondaryCta":216,"items":218},"The primitives","Core backend primitives\nthrough one API","Use each primitive independently or compose them into complete application workflows. One account, one API key, and one operating model.","Not sure which primitive you need? Start with a workflow.",{"label":207,"to":208,"target":51,"icon":15,"trailing":16,"color":17,"size":18},{"label":217,"to":171,"target":51,"icon":53,"color":22,"variant":23,"size":18},"Read the API reference",[219,231,240,250,260,270],{"id":59,"name":60,"description":220,"uses":221,"connectsWith":226,"href":228,"icon":229,"ctaLabel":230},"Run backend code without managing servers or deployment infrastructure.",[222,223,224,225],"API endpoints","Webhook processing","Background jobs","Data transformation",[72,76,80,227],"Storage","/products/functions","i-lucide-code","Explore Functions",{"id":71,"name":72,"description":232,"uses":233,"connectsWith":237,"href":238,"icon":32,"ctaLabel":239},"Move work out of application requests and process it reliably in the background.",[223,234,235,236],"AI jobs","Email delivery","File-processing pipelines",[60,227],"/products/queue","Explore Queue",{"id":75,"name":76,"description":241,"uses":242,"connectsWith":247,"href":248,"icon":77,"ctaLabel":249},"Trigger an action once at an exact time in the future.",[243,244,245,246],"Delayed notifications","Trial expiry","Payment follow-ups","User reminders",[60,72,64],"/products/scheduler","Explore Scheduler",{"id":79,"name":80,"description":251,"uses":252,"connectsWith":257,"href":258,"icon":204,"ctaLabel":259},"Run recurring backend work on a reliable schedule.",[253,254,255,256],"Nightly syncs","Report generation","Data cleanup","Recurring maintenance",[60,72,64],"/products/cron","Explore Cron",{"id":63,"name":64,"description":261,"uses":262,"connectsWith":267,"href":268,"icon":65,"ctaLabel":269},"Store lightweight application state with simple, low-latency API calls.",[263,264,265,266],"Idempotency keys","Workflow state","Feature flags","Temporary data",[60,76,80],"/products/kv","Explore KV",{"id":67,"name":68,"description":271,"uses":272,"connectsWith":277,"href":278,"icon":69,"ctaLabel":279},"Store and retrieve files without managing buckets, permissions, or storage infrastructure.",[273,274,275,276],"User uploads","Documents","Images","Processing pipelines",[72,60],"/products/storage","Explore Storage",[281,304,325,348,371,395],{"id":59,"title":60,"description":282,"outcome":283,"chips":284,"metric":287,"icon":61,"capabilities":288,"code_snippet":303},"Deploy backend endpoints and jobs. Trigger via HTTP, queue, or cron — no servers to manage.","Backend endpoints for your frontend. Zero servers.",[170,285,224,286],"Webhooks","MCP deploy","Runtimes",[289,293,296,299],{"title":290,"description":291,"icon":292},"HTTP endpoints","Deploy functions as API routes. Call them from anywhere.","i-lucide-globe",{"title":294,"description":295,"icon":73},"Queue triggers","Process queue messages with your function code.",{"title":297,"description":298,"icon":81},"Cron triggers","Run functions on a schedule.",{"title":300,"description":301,"icon":302},"Secrets management","Securely inject environment variables.","i-lucide-key-round","POST /functions\n{ \"name\": \"stripe-webhook\", \"runtime\": \"nodejs\" }\n→ { \"id\": \"fn_123\", \"url\": \"https://...\" }\n",{"id":63,"title":305,"description":306,"outcome":307,"chips":308,"metric":310,"icon":65,"capabilities":312,"code_snippet":324},"On-Demand Key/Val Storage","Simple key-value storage as an API. Set, get, delete — no database to manage.","Key-value over HTTP. Nothing to manage.",[309,310,311],"CRUD","TTL","JSON values",[313,317,321],{"title":314,"description":315,"icon":316},"Get, set, delete by key","CRUD operations over HTTP.","i-lucide-key",{"title":318,"description":319,"icon":320},"TTL support","Optional expiration on keys.","i-lucide-timer",{"title":311,"description":322,"icon":323},"Store structured data.","i-lucide-braces","GET  /kv/:key\nPOST /kv/:key  { \"value\": {...} }\nDELETE /kv/:key\n",{"id":67,"title":68,"description":326,"outcome":327,"chips":328,"metric":332,"icon":69,"capabilities":333,"code_snippet":347},"Store files via API. Upload and download with presigned URLs — no buckets to configure.","File storage over HTTP. Managed automatically.",[329,330,310,331],"Upload URLs","Download URLs","Metadata","Presigned",[334,338,342,344],{"title":335,"description":336,"icon":337},"Presigned upload URLs","Get a secure URL to upload files directly.","i-lucide-upload",{"title":339,"description":340,"icon":341},"Presigned download URLs","Generate time-limited download links.","i-lucide-download",{"title":318,"description":343,"icon":320},"Auto-expire files after a duration.",{"title":331,"description":345,"icon":346},"Attach custom metadata to files.","i-lucide-tags","POST /storage/upload-url\n{ \"key\": \"uploads/avatar.png\", \"contentType\": \"image/png\" }\n→ { \"uploadUrl\": \"https://...\" }\n",{"id":71,"title":349,"description":350,"outcome":351,"chips":352,"metric":354,"icon":73,"capabilities":355,"code_snippet":370},"On-Demand Queue","Push messages with a unique UUID, specify a webhook, and receive payloads asynchronously. No queues to provision or scale.","Deliver payloads to any endpoint. Zero infra.",[353,285,354],"UUID per message","Retries",[356,359,363,366],{"title":353,"description":357,"icon":358},"Every message gets a unique identifier for tracking and deduplication.","i-lucide-fingerprint",{"title":360,"description":361,"icon":362},"Configurable webhook URLs","Point to your endpoint — we deliver when ready.","i-lucide-webhook",{"title":364,"description":365,"icon":323},"JSON payloads","Send and receive structured data.",{"title":367,"description":368,"icon":369},"Retry on failure","Automatic retries with exponential backoff.","i-lucide-rotate-ccw","POST /queue\n{ \"webhook\": \"https://yourapp.com/webhook\", \"payload\": {...} }\n→ { \"id\": \"uuid-...\", \"status\": \"queued\" }\n",{"id":75,"title":372,"description":373,"outcome":374,"chips":375,"metric":285,"icon":77,"capabilities":379,"code_snippet":394},"On-Demand Scheduler","Schedule one-off or recurring tasks. Hit an endpoint with a time and webhook — we invoke it when it's due.","Run tasks at the right time. No workers to run.",[376,377,378],"One-time","Recurring","Timezones",[380,384,387,391],{"title":381,"description":382,"icon":383},"One-time schedules","Run a task once at a specific time.","i-lucide-calendar-check",{"title":385,"description":386,"icon":204},"Recurring schedules","Daily, weekly, or custom intervals.",{"title":388,"description":389,"icon":390},"Webhook delivery","We call your endpoint with the payload.","i-lucide-send",{"title":392,"description":393,"icon":292},"Timezone support","Schedule in any timezone.","POST /schedule\n{ \"at\": \"2025-02-01T10:00:00Z\", \"webhook\": \"https://...\", \"payload\": {...} }\n",{"id":79,"title":396,"description":397,"outcome":398,"chips":399,"metric":378,"icon":81,"capabilities":403,"code_snippet":419},"On-Demand Cron Job","Cron-style jobs without running workers. Define a cron expression and webhook; we run it for you.","Cron syntax, zero daemons. We run it.",[400,401,402],"Standard cron","Webhook invoke","No servers",[404,408,411,415],{"title":405,"description":406,"icon":407},"Standard cron syntax","\"0 9 * * *\" — familiar, flexible.","i-lucide-terminal",{"title":409,"description":410,"icon":81},"Webhook invocation","We trigger your endpoint on schedule.",{"title":412,"description":413,"icon":414},"Optional payload","Pass context with each run.","i-lucide-package",{"title":416,"description":417,"icon":418},"No server maintenance","Zero cron daemons to manage.","i-lucide-server-cog","POST /cron\n{ \"expression\": \"0 9 * * *\", \"webhook\": \"https://...\" }\n",[421,422,423,424,425],"vibe coded frontends","webhooks","background jobs","file uploads","billing events",{"title":427,"description":428,"features":429,"footer":439},"Primitives that [work together]{.text-primary}","Queues trigger functions. Cron schedules jobs. KV stores state. Compose what you need — no glue code required.",[430,433,436],{"title":431,"description":432},"Compose primitives","Build workflows without managing infra.",{"title":434,"description":435},"Reliable by default","Retries, timeouts, idempotency, audit trails.",{"title":437,"description":438},"Any stack","REST + SDKs generated from OpenAPI.","Start with a single API key.",{"title":441,"description":442},"RocketStack.sh — Your serverless backend","Functions, queues, schedulers, cron, key-value and object storage. No servers to run.","index",{"eyebrow":445,"title":446,"description":447,"items":448},"Get started","Get started in [3 steps]{.text-primary}","Create an account, copy your API key, and build your first backend workflow.",[449,456,463],{"title":450,"description":451,"detail":452,"image":453},"Create your account","Sign up for free and access every RocketStack primitive.","No credit card required.",{"light":454,"dark":455},"/images/light/connect.svg","/images/dark/connect.svg",{"title":457,"description":458,"detail":459,"image":460},"Get your API key","Copy your key from the RocketStack console and connect your application.","One key for Functions, Queue, Scheduler, Cron, KV, and Storage.",{"light":461,"dark":462},"/images/light/optimize.svg","/images/dark/optimize.svg",{"title":464,"description":465,"detail":466,"image":467},"Build your workflow","Call RocketStack from HTTP, an official SDK, or your MCP-enabled coding client.","Start with a primitive or compose a complete workflow.",{"light":468,"dark":469},"/images/light/track.svg","/images/dark/track.svg",{"eyebrow":471,"title":472,"description":473,"ctaLabel":474,"secondaryCta":475,"items":476},"Common workflows","Start with the job, not the infrastructure","Choose the workflow your application needs. RocketStack composes the functions, queues, schedules, state, and storage behind it.","Build this workflow",{"label":20,"to":21,"target":14,"icon":15,"trailing":16,"color":22,"variant":23,"size":18},[477,491,505],{"id":478,"title":479,"description":480,"icon":362,"primitives":481,"problem":482,"outcome":483,"uses":484,"href":489,"code":490},"webhook-processing","Reliable webhook processing","Acknowledge webhooks immediately, then process them safely in the background with automatic retries.",[142,72,143],"Payment, GitHub, and third-party webhooks can time out or fail when processing happens inside the request.","Respond immediately while RocketStack queues, retries, and processes the event asynchronously.",[485,486,487,488],"Stripe payment events","GitHub webhooks","CRM callbacks","AI job completion events","/workflows/webhook-processing","await fetch(`${ROCKETSTACK_API}/queues/${queueId}/messages`, {\n  method: \"POST\",\n  headers: {\n    Authorization: `Bearer ${ROCKETSTACK_API_KEY}`,\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify({\n    payload: { type: \"payment.completed\", customerId: \"cus_123\" }\n  })\n});\n",{"id":146,"title":492,"description":493,"icon":494,"primitives":495,"problem":496,"outcome":497,"uses":498,"href":503,"code":504},"Asynchronous file processing","Upload a file, queue the work, and process it without blocking the user request.","i-lucide-file-up",[68,72,143],"Large uploads, CSV imports, document parsing, and media processing are unreliable when handled synchronously.","Store the file immediately, then process it safely in the background.",[499,500,501,502],"CSV imports","Document parsing","Image processing","AI document analysis","/workflows/file-processing","const form = new FormData();\nform.append(\"file\", file);\nform.append(\"path\", `uploads/${file.name}`);\n\nawait fetch(`${ROCKETSTACK_API}/storage/objects`, {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${ROCKETSTACK_API_KEY}` },\n  body: form\n});\n\nawait fetch(`${ROCKETSTACK_API}/queues/${queueId}/messages`, {\n  method: \"POST\",\n  headers: {\n    Authorization: `Bearer ${ROCKETSTACK_API_KEY}`,\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify({\n    payload: { type: \"file.uploaded\", path: `uploads/${file.name}` }\n  })\n});\n",{"id":506,"title":507,"description":508,"icon":77,"primitives":509,"problem":511,"outcome":512,"uses":513,"href":516,"code":517},"scheduled-actions","Scheduled application actions","Run something once in the future or repeatedly on a schedule without maintaining workers or cron servers.",[510,143,64],"Scheduler or Cron","Reminders, trial expiry, reports, cleanup, and nightly syncs often require custom workers or application-level cron jobs.","Schedule the action through an API and let RocketStack invoke the workflow at the correct time.",[244,514,515,254],"Reminder emails","Nightly data syncs","/workflows/scheduled-actions","await fetch(`${ROCKETSTACK_API}/schedules`, {\n  method: \"POST\",\n  headers: {\n    Authorization: `Bearer ${ROCKETSTACK_API_KEY}`,\n    \"Content-Type\": \"application/json\"\n  },\n  body: JSON.stringify({\n    name: \"trial-expiry\",\n    runAt: \"2026-08-15T09:00:00Z\",\n    deliveryTarget: { type: \"function\", functionId: \"fn_expire_trial\" },\n    payloadTemplate: { accountId: \"acct_123\" }\n  })\n});\n","SzzzeEVWZhdiZKiytALn7LzPme4b9c1SmmxPkB1kILM",{"data":520,"body":521},{},{"type":522,"children":523},"root",[524],{"type":525,"tag":526,"props":527,"children":528},"element","p",{},[529,532],{"type":530,"value":531},"text","Give your app a backend in ",{"type":525,"tag":533,"props":534,"children":537},"span",{"className":535},[536],"text-primary",[538],{"type":530,"value":539},"minutes",{"data":541,"body":542},{},{"type":522,"children":543},[544],{"type":525,"tag":526,"props":545,"children":546},{},[547,549],{"type":530,"value":548},"Get started in ",{"type":525,"tag":533,"props":550,"children":552},{"className":551},[536],[553],{"type":530,"value":554},"3 steps",{"data":556,"body":557},{},{"type":522,"children":558},[559],{"type":525,"tag":526,"props":560,"children":561},{},[562,564],{"type":530,"value":563},"Build your ",{"type":525,"tag":533,"props":565,"children":567},{"className":566},[536],[568],{"type":530,"value":569},"first workflow",1783778558506]