How Activepieces is put together, and why it runs flows the way it does
This section explains why Activepieces works the way it does: the components, the execution model, and the trade-offs behind them. If you want to do something (size a deployment, set up SSL, scale workers), start with Configure & Operate. Come here when you want the reasoning under those choices.This page describes the main components, with a focus on how flows run.
App: The main application that organizes everything from APIs to scheduled jobs.
Worker: Polls for new jobs, allocates a sandbox from the pool, executes the flows with the engine inside the sandbox, and sends results back to the app.
Sandbox: An isolated execution environment that manages process lifecycle, resource limits, and communication with the engine via WebSocket.
Engine: TypeScript code that parses flow JSON and executes it. It is compiled into a single JS file and runs inside the sandbox.
Postgres and Redis availability is outside the scope of this documentation, as many cloud providers already implement best practices to ensure their availability.
Everything is queue-backed: webhooks and recurring jobs land on Redis, and workers poll them off it. A spike does not drop work. It queues and drains as slots free. For exactly what survives a crash, what runs at-least-once, and where each promise stops, see Guarantees.To scale Activepieces, add replicas of the workers, the app, or the Postgres database. A small Redis instance is enough: it handles thousands of jobs per second and rarely becomes a bottleneck. For the concrete sizing model, see Production Setup.
web: This package contains the user interface, implemented using the React framework.
api: This package contains the main application written in TypeScript with the Fastify framework.
worker: This package contains the logic of accepting flow jobs and executing them using the engine.
server-sandbox: This package contains the sandbox execution environment, including process isolation, pool management, and WebSocket communication between the worker and engine.
common: This package contains the shared logic between worker and app.
engine: This package contains the logic for flow execution within the sandbox. Located under server/engine.
pieces: This package contains the implementation of triggers and actions for third-party apps.
shared: This package contains shared data models and helper functions used by the other packages.
ee: This package contains features that are only available in the paid edition.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Activepieces","colors":{"primary":"#9675FF","light":"#9675FF","dark":"#9675FF"},"logo":{"light":"https://mintcdn.com/activepieces/fJ5Tlm8YTN5F2Mlz/resources/logo/light.svg?fit=max\u0026auto=format\u0026n=fJ5Tlm8YTN5F2Mlz\u0026q=85\u0026s=45ca3c4c50e981e74952921edc9a9fa2","dark":"https://mintcdn.com/activepieces/fJ5Tlm8YTN5F2Mlz/resources/logo/dark.svg?fit=max\u0026auto=format\u0026n=fJ5Tlm8YTN5F2Mlz\u0026q=85\u0026s=19d53837418091737fc386a2863fe6b0","href":"https://www.activepieces.com"},"favicon":"https://mintcdn.com/activepieces/fJ5Tlm8YTN5F2Mlz/favicon.svg?fit=max\u0026auto=format\u0026n=fJ5Tlm8YTN5F2Mlz\u0026q=85\u0026s=3974767b9f13bd8747287d75de7a1204","api":{"openapi":["openapi.json"]},"background":{"color":{"light":"#ffffff","dark":"#090d0d"}},"navbar":{"links":[{"href":"https://github.com/activepieces/activepieces","label":"GitHub"},{"href":"https://www.activepieces.com/pieces","label":"Pieces"}],"primary":{"type":"button","label":"Sign Up","href":"https://cloud.activepieces.com/sign-up"}},"footer":{"socials":{"x":"https://x.com/activepieces","github":"https://github.com/activepieces/activepieces","linkedin":"https://linkedin.com/company/activepieces"}},"styling":{"latex":false},"navigation":{"global":{},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"activepieces","hasAudioNarration":false,"actualSubdomain":"activepieces","customDomains":["www.activepieces.com"],"gitSource":{"type":"github","owner":"activepieces","repo":"activepieces","deployBranch":"main","contentDirectory":"docs","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ade5171531268f76f8ab23f","collectionId":"6092de01-fe07-445f-8b69-78a849da0bb7","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ade5171531268f76f8ab23f"},"feedback":{"edits":true,"issues":true,"agentFeedback":true,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ade5171531268f76f8ab23f","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"Get Started","count":69},{"language":"default","tag":"API Reference","count":63},{"language":"default","tag":"Endpoints","count":60},{"language":"default","tag":"Enterprise Control","count":55},{"language":"default","tag":"Guides","count":54},{"language":"default","tag":"Install Activepieces","count":51},{"language":"default","tag":"About","count":42},{"language":"default","tag":"Build Pieces","count":40},{"language":"default","tag":"Company Handbook","count":39},{"language":"default","tag":"Audit Logs","count":25}]},"assistantConfig":{"enableStarterQuestions":true,"deflection":{"enabled":true,"email":"[email protected]","showHelpButton":true}},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"69df3ea534438eefba3c55ed","deploymentId":"636f0b1d59792292a7e133be","questionText":"what is Activepieces's hiring process ?","status":"active","generatedBy":"manual","createdAt":"2026-04-15T07:30:45.300Z","updatedAt":"2026-04-15T07:30:45.300Z","__v":0},{"_id":"69df3e4d34438eefba3c51ae","deploymentId":"636f0b1d59792292a7e133be","questionText":"How to self-host Activepieces ?","status":"active","generatedBy":"manual","createdAt":"2026-04-15T07:29:17.523Z","updatedAt":"2026-04-15T07:30:56.547Z","__v":0},{"_id":"69df3e2d34438eefba3c4f73","deploymentId":"636f0b1d59792292a7e133be","questionText":"How do I create a new piece ?","status":"active","generatedBy":"manual","createdAt":"2026-04-15T07:28:45.786Z","updatedAt":"2026-04-15T07:30:50.754Z","__v":0}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".pp{--pp-primary:hsl(257 74% 57%);--pp-primary-wash:hsl(257 74% 57% / 0.10);--pp-fg:#171717;--pp-muted:#737373;--pp-faint:#a3a3a3;--pp-border:#e5e5e5;--pp-soft:#f5f5f5;--pp-bg:#ffffff;--pp-switch-off:#d4d4d4;border:1px solid var(--pp-border);border-radius:12px;background:var(--pp-bg);padding:18px 16px;margin:12px 0 20px;font-family:\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:var(--pp-fg);max-width:560px}.pp,.pp *,.pp ::after,.pp ::before{box-sizing:border-box}.pp-field{display:flex;flex-direction:column;gap:6px}.pp-label{display:flex;align-items:center;gap:4px;font-size:14px;font-weight:500;color:var(--pp-fg);margin:0}.pp-req{color:hsl(350 89% 60%)}.pp-desc{font-size:12px;color:var(--pp-muted)}.pp-input,.pp-stepper button{background:var(--pp-bg);color:var(--pp-fg)}.pp-input{display:flex;align-items:center;height:36px;border:1px solid var(--pp-border);border-radius:6px;padding:0 10px;font-size:14px}.pp-input.pp-ph{color:var(--pp-faint)}.pp-textarea{min-height:76px;align-items:flex-start;padding:8px 10px}.pp-select{justify-content:space-between}.pp-caret{width:8px;height:8px;border-right:1.5px solid var(--pp-faint);border-bottom:1.5px solid var(--pp-faint);transform:rotate(45deg);margin-top:-3px;flex:none}.pp-switch{width:34px;height:20px;border-radius:999px;background:var(--pp-primary);position:relative;flex:none}.pp-switch::after{content:\"\";position:absolute;top:2px;left:16px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .15s ease}.pp-switch.pp-off{background:var(--pp-switch-off)}.pp-switch.pp-off::after{left:2px}.pp-switch-row{display:flex;align-items:center;gap:10px}.pp-chip,.pp-switch-row .pp-t{font-size:14px;font-weight:500}.pp-switch-row .pp-d{font-size:12px;color:var(--pp-muted)}.pp-chip{display:inline-flex;align-items:center;gap:5px;background:var(--pp-primary-wash);color:var(--pp-primary);font-size:12.5px;border-radius:999px;padding:2px 6px 2px 9px}.pp-chip .pp-x{color:var(--pp-primary);opacity:.7;font-size:13px}.pp-chips,.pp-code{border:1px solid var(--pp-border);border-radius:6px}.pp-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;min-height:40px;padding:6px 8px}.pp-chips .pp-ph{color:var(--pp-faint);font-size:14px}.pp-code{font-family:ui-monospace,\"SF Mono\",Menlo,Consolas,\"Liberation Mono\",monospace;font-size:12.5px;line-height:1.6;background:var(--pp-soft);padding:10px 12px;color:#3f3f46;white-space:pre;overflow-x:auto}.pp-key{color:hsl(257 74% 45%)}.pp-str{color:hsl(160 84% 30%)}.pp-kv{display:grid;grid-template-columns:1fr 1fr 24px;gap:6px;align-items:center}.pp-kv.pp-one{grid-template-columns:1fr 24px}.pp-iconbtn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--pp-faint)}.pp-add{color:var(--pp-primary);font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:5px;margin-top:8px}.pp-list{display:flex;flex-direction:column;gap:6px}.pp-swatch{width:28px;height:28px;border-radius:6px;border:1px solid var(--pp-border);flex:none;background:hsl(257 74% 57%)}.pp-row{display:flex;align-items:center;gap:8px}.pp-item{border:1px solid var(--pp-border);border-radius:8px;padding:12px;display:flex;flex-direction:column;gap:10px;position:relative}.pp-item .pp-rm{position:absolute;top:8px;right:8px;color:var(--pp-faint)}.pp-note{border:1px solid hsl(257 74% 57%/.18);background:var(--pp-primary-wash);border-radius:8px;padding:12px 14px;font-size:13.5px;line-height:1.5;color:#3f3f46}.pp-note strong{display:block;margin-bottom:2px;color:var(--pp-fg)}.pp-rt{border:1px solid var(--pp-border);border-radius:6px;overflow:hidden}.pp-rt-btn,.pp-rt-toolbar{display:flex;align-items:center}.pp-rt-toolbar{gap:2px;padding:5px 6px;border-bottom:1px solid var(--pp-border);background:#fcfcfd}.pp-rt-btn{justify-content:center;width:26px;height:26px;border-radius:5px;font-size:13px;color:#52525b}.pp-rt-btn.pp-b{font-weight:800}.pp-rt-btn.pp-i{font-style:italic;font-family:Georgia,serif}.pp-rt-btn.pp-u{text-decoration:underline}.pp-rt-sep{width:1px;height:16px;background:var(--pp-border);margin:0 3px}.pp-rt-body{padding:10px 12px;font-size:14px;line-height:1.6;min-height:60px}.pp-mention{background:var(--pp-primary-wash);color:var(--pp-primary);border-radius:5px;padding:1px 5px;font-size:13px;font-weight:500}.pp-cards{display:flex;gap:8px;flex-wrap:wrap}.pp-rcard{flex:1 1 0;min-width:120px;display:flex;align-items:center;gap:10px;border:1px solid var(--pp-border);border-radius:8px;padding:11px 12px}.pp-rcard.pp-sel{border-color:var(--pp-primary);background:hsl(257 74% 57%/.05)}.pp-rcard .pp-ic,.pp-stepper{align-items:center;border-radius:6px}.pp-rcard .pp-ic{width:28px;height:28px;background:var(--pp-soft);display:flex;justify-content:center;color:#52525b;flex:none;font-family:ui-monospace,\"SF Mono\",Menlo,Consolas,\"Liberation Mono\",monospace;font-size:12px}.pp-rcard.pp-sel .pp-ic{background:var(--pp-primary-wash);color:var(--pp-primary)}.pp-rcard .pp-t{font-size:13.5px;font-weight:600}.pp-rcard .pp-d{font-size:11.5px;color:var(--pp-muted)}.pp-stepper{display:inline-flex;border:1px solid var(--pp-border);overflow:hidden;height:36px}.pp-stepper button{width:34px;height:100%;border:0;font-size:16px;border-right:1px solid var(--pp-border);cursor:pointer}.pp-stepper button:last-child{border-right:none;border-left:1px solid var(--pp-border)}.pp-stepper .pp-val{width:46px;text-align:center;font-size:14px;font-variant-numeric:tabular-nums}.pp-stepper-row{display:flex;align-items:center;justify-content:space-between}.pp-reveal{border:1px solid var(--pp-border);background:#fafafa;border-radius:8px;padding:12px 13px}.pp-reveal .pp-divider{margin-top:12px;padding-top:12px;border-top:1px dashed var(--pp-border)}.pp-presets{display:flex;gap:6px;flex-wrap:wrap}.pp-pill{border:1px solid var(--pp-border);border-radius:999px;padding:4px 12px;font-size:13px;color:var(--pp-muted)}.pp-pill.pp-sel{border-color:var(--pp-primary);background:hsl(257 74% 57%/.05);color:var(--pp-primary);font-weight:600}.pp-daterow{display:flex;align-items:flex-end;gap:8px;margin-top:10px}.pp-daterow .pp-col{flex:1}.pp-daterow .pp-cl{font-size:11px;color:var(--pp-muted);margin-bottom:3px}.pp-tabs{display:flex;background:var(--pp-soft);border-radius:8px;padding:3px;gap:2px}.pp-tab{flex:1;text-align:center;font-size:13px;font-weight:500;padding:6px 0;border-radius:6px;color:var(--pp-muted)}.pp-tab.pp-sel{background:var(--pp-bg);color:var(--pp-fg);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.06)}.pp-twoup{display:grid;grid-template-columns:1fr 1fr;gap:10px}.pp-fb{border:1px solid var(--pp-border);border-radius:14px;overflow:hidden}.pp-fb-row{display:flex;align-items:center;gap:10px;padding:11px 12px;border-bottom:1px solid #f0f0f0}.pp-fb-badge,.pp-fb-foot .pp-ic{width:28px;height:28px;border-radius:8px;background:var(--pp-primary-wash);color:var(--pp-primary);display:flex;align-items:center;justify-content:center;flex:none}.pp-fb-lbl{width:72px;flex:none;font-size:13.5px;font-weight:600}.pp-fb-ctrl{flex:1;min-width:0}.pp-fb-x{color:var(--pp-faint);flex:none}.pp-fb-add,.pp-fb-foot{display:flex;align-items:center;border:1px solid var(--pp-border)}.pp-fb-add{gap:6px;margin:10px 12px;border-radius:9px;padding:8px 12px;width:fit-content;color:var(--pp-primary);font-size:13px;font-weight:600}.pp-fb-foot{justify-content:space-between;gap:12px;border-radius:14px;padding:11px 14px;margin-top:10px}.pp-fb-foot .pp-t{font-size:13.5px;font-weight:600}.pp-fb-foot .pp-s{font-size:11.5px;color:var(--pp-muted)}.pp .pp-i{display:inline-block;width:15px;height:15px;flex:none;background-color:currentColor;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}.pp .pp-i-cal{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cpath d='M16 2v4M8 2v4M3 10h18'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cpath d='M16 2v4M8 2v4M3 10h18'/%3E%3C/svg%3E\")}.pp .pp-i-clip{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cpath d='M21.44 11.05l-9.19 9.19a5 5 0 0 1-7.07-7.07l9.19-9.19a3 3 0 0 1 4.24 4.24l-9.2 9.19a1 1 0 0 1-1.41-1.41l8.48-8.49'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cpath d='M21.44 11.05l-9.19 9.19a5 5 0 0 1-7.07-7.07l9.19-9.19a3 3 0 0 1 4.24 4.24l-9.2 9.19a1 1 0 0 1-1.41-1.41l8.48-8.49'/%3E%3C/svg%3E\")}.pp .pp-i-search{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E\")}.pp .pp-i-link{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cpath d='M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1'/%3E%3Cpath d='M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cpath d='M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1'/%3E%3Cpath d='M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1'/%3E%3C/svg%3E\")}.pp .pp-i-user{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cpath d='M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cpath d='M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E\")}.pp .pp-i-sliders{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cline x1='4' y1='6' x2='20' y2='6'/%3E%3Cline x1='7' y1='12' x2='17' y2='12'/%3E%3Cline x1='10' y1='18' x2='14' y2='18'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2'%3E%3Cline x1='4' y1='6' x2='20' y2='6'/%3E%3Cline x1='7' y1='12' x2='17' y2='12'/%3E%3Cline x1='10' y1='18' x2='14' y2='18'/%3E%3C/svg%3E\")}.dark .pp{--pp-fg:#e8e8ea;--pp-muted:#9a9aa5;--pp-faint:#6b6b74;--pp-border:#2d2d34;--pp-soft:#26262c;--pp-bg:#1b1b20;--pp-switch-off:#3f3f46;--pp-primary:hsl(257 82% 72%);--pp-primary-wash:hsl(257 74% 62% / 0.22)}.dark .pp .pp-code,.dark .pp .pp-note,.dark .pp .pp-rcard .pp-ic{color:#c9c8d2}.dark .pp .pp-key{color:hsl(257 82% 76%)}.dark .pp .pp-str{color:hsl(160 60% 62%)}.dark .pp .pp-rt-btn{color:#a1a1aa}.dark .pp .pp-rt-toolbar{background:#232329}.dark .pp .pp-reveal{background:#202026}.dark .pp .pp-fb-row{border-bottom-color:#2d2d34}.vr{--vr-accent:#9675FF;--vr-accent-fg:#ffffff;--vr-marker:#171717;--vr-fg:#171717;--vr-muted:#737373;--vr-border:#e5e5e5;--vr-bg:#ffffff;border:1px solid var(--vr-border);border-radius:12px;background:var(--vr-bg);padding:20px 16px 16px;margin:16px 0 24px;font-family:\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:var(--vr-fg)}.vr,.vr *,.vr ::after,.vr ::before{box-sizing:border-box}.vr-intro{margin-bottom:20px;font-size:13px;color:var(--vr-muted)}.vr-row{display:grid;grid-template-columns:200px 1fr;gap:12px}.vr-lane{position:relative;margin:0 24px 0 0}.vr-head,.vr-marker-label{font-size:13px;font-weight:600}.vr-head{margin-bottom:12px}.vr-marker-label{position:absolute;top:0;transform:translateX(-50%);white-space:nowrap;transition:left 120ms ease}.vr-bars,.vr-labels{display:flex;flex-direction:column;gap:10px;padding:8px 0 16px}.vr-label{display:flex;align-items:center;justify-content:space-between;gap:12px;height:30px}.vr-name{font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}.vr-status{font-size:12px;font-weight:600}.vr-status-on{color:var(--vr-accent)}.vr-status-off{color:var(--vr-muted)}.vr-track{position:relative;height:30px}.vr-bar{position:absolute;top:0;bottom:0;display:flex;align-items:center;padding:0 10px;border-radius:6px;font-size:13px;white-space:nowrap;font-variant-numeric:tabular-nums;transition:background-color 150ms ease,color 150ms ease,border-color 150ms ease}.vr-bar-on{background:var(--vr-accent);color:var(--vr-accent-fg);border:1px solid var(--vr-accent)}.vr-bar-off{background:0 0;color:var(--vr-fg);border:1.5px dashed var(--vr-muted)}.vr-bar-short .vr-bar-text{position:absolute;right:calc(100% + 8px);color:var(--vr-fg)}.vr-marker{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;z-index:1;background:var(--vr-marker);pointer-events:none;transition:left 120ms ease}.vr-axis{position:relative;height:28px;border-top:1px solid var(--vr-muted)}.vr-axis-caption,.vr-tick{font-size:12px;color:var(--vr-muted)}.vr-tick{position:absolute;top:0;padding-top:12px;transform:translateX(-50%);white-space:nowrap}.vr-tick::before{content:\"\";position:absolute;top:0;left:50%;width:1px;height:6px;background:var(--vr-muted)}.vr-axis-caption{margin-top:4px;text-align:right}.vr-control{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;margin-top:16px;cursor:pointer}.vr-control-label{font-weight:600}.vr-control-value{font-weight:600;min-width:56px;text-align:right}.vr-slider{width:100%;margin:0;accent-color:var(--vr-accent);cursor:pointer}@media (max-width:520px){.vr-row{grid-template-columns:112px 1fr;gap:8px}.vr-label{flex-direction:column;align-items:flex-start;justify-content:center;gap:0;height:36px;line-height:1.2}.vr-name{font-size:12px}.vr-track{height:36px}.vr-lane{margin-right:16px}.vr-bar{font-size:0;padding:0}.vr-tick:nth-child(even){display:none}.vr-control{grid-template-columns:1fr auto}.vr-control-label{grid-column:1/-1}}.dark .vr{--vr-accent:#9675FF;--vr-accent-fg:#ffffff;--vr-marker:#e8e8ea;--vr-fg:#e8e8ea;--vr-muted:#9a9aa5;--vr-border:#2d2d34;--vr-bg:#1b1b20}"}],"page":{"pagePath":"install/architecture/overview","slug":"/install/architecture/overview","pageMetadata":{"title":"Overview","description":"How Activepieces is put together, and why it runs flows the way it does","icon":"cube","href":"/install/architecture/overview"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How Activepieces is put together, and why it runs flows the way it does\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`This section explains `,_jsx(_components.strong,{children:`why`}),` Activepieces works the way it does: the components, the execution model, and the trade-offs behind them. If you want to `,_jsx(_components.em,{children:`do`}),` something (size a deployment, set up SSL, scale workers), start with `,_jsx(_components.a,{href:`/install/configure-operate/production-setup`,children:`Configure \u0026 Operate`}),`. Come here when you want the reasoning under those choices.`]}),`\n`,_jsx(_components.p,{children:`This page describes the main components, with a focus on how flows run.`}),`\n`,_jsx(Heading,{level:`2`,id:`components`,children:`Components`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/activepieces/HPdB7kMdQC2Eh_kp/resources/diagrams/activepieces-architecture.png?fit=max\u0026auto=format\u0026n=HPdB7kMdQC2Eh_kp\u0026q=85\u0026s=c784d822d915bf50da11a7ab3a7ff6fb`,alt:`Activepieces production architecture: client, app, Redis job queue, Postgres, S3, and one-flow-per-worker execution tier`,\"data-og-width\":`2400`,width:`2400`,\"data-og-height\":`1520`,height:`1520`,\"data-path\":`resources/diagrams/activepieces-architecture.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/activepieces/HPdB7kMdQC2Eh_kp/resources/diagrams/activepieces-architecture.png?w=280\u0026fit=max\u0026auto=format\u0026n=HPdB7kMdQC2Eh_kp\u0026q=85\u0026s=eb1147277d3abf1cec5d5d37bb08f66c 280w, https://mintcdn.com/activepieces/HPdB7kMdQC2Eh_kp/resources/diagrams/activepieces-architecture.png?w=560\u0026fit=max\u0026auto=format\u0026n=HPdB7kMdQC2Eh_kp\u0026q=85\u0026s=58356e33f378c08748b6529bab8a3a5c 560w, https://mintcdn.com/activepieces/HPdB7kMdQC2Eh_kp/resources/diagrams/activepieces-architecture.png?w=840\u0026fit=max\u0026auto=format\u0026n=HPdB7kMdQC2Eh_kp\u0026q=85\u0026s=ec4a4353d74e0e06e74fa6a22cf458c0 840w, https://mintcdn.com/activepieces/HPdB7kMdQC2Eh_kp/resources/diagrams/activepieces-architecture.png?w=1100\u0026fit=max\u0026auto=format\u0026n=HPdB7kMdQC2Eh_kp\u0026q=85\u0026s=15cbed9c541f9ce3690ac312f74fec24 1100w, https://mintcdn.com/activepieces/HPdB7kMdQC2Eh_kp/resources/diagrams/activepieces-architecture.png?w=1650\u0026fit=max\u0026auto=format\u0026n=HPdB7kMdQC2Eh_kp\u0026q=85\u0026s=1ad7f9336efd6c39341943f77dbace77 1650w, https://mintcdn.com/activepieces/HPdB7kMdQC2Eh_kp/resources/diagrams/activepieces-architecture.png?w=2500\u0026fit=max\u0026auto=format\u0026n=HPdB7kMdQC2Eh_kp\u0026q=85\u0026s=2110fad031305cdafec8c51af0a4c866 2500w`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Activepieces:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`App`}),`: The main application that organizes everything from APIs to scheduled jobs.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Worker`}),`: Polls for new jobs, allocates a sandbox from the pool, executes the flows with the engine inside the sandbox, and sends results back to the app.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sandbox`}),`: An isolated execution environment that manages process lifecycle, resource limits, and communication with the engine via WebSocket.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Engine`}),`: TypeScript code that parses flow JSON and executes it. It is compiled into a single JS file and runs inside the sandbox.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`UI`}),`: Frontend written in React.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Third Party`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Postgres`}),`: The main database for Activepieces.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Redis`}),`: Powers the queue using `,_jsx(_components.a,{href:`https://docs.bullmq.io/`,children:`BullMQ`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`reliability-\u0026-scalability`,children:`Reliability \u0026 Scalability`}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Postgres and Redis availability is outside the scope of this documentation, as many cloud providers already implement best practices to ensure their availability.`})}),`\n`,_jsxs(_components.p,{children:[`Everything is queue-backed: webhooks and recurring jobs land on Redis, and workers poll them off it. A spike does not drop work. It queues and drains as slots free. For exactly what survives a crash, what runs at-least-once, and where each promise stops, see `,_jsx(_components.a,{href:`/install/guarantees/crash-recovery`,children:`Guarantees`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`To scale Activepieces, add replicas of the workers, the app, or the Postgres database. A small Redis instance is enough: it handles thousands of jobs per second and rarely becomes a bottleneck. For the concrete sizing model, see `,_jsx(_components.a,{href:`/install/configure-operate/production-setup`,children:`Production Setup`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`repository-structure`,children:`Repository Structure`}),`\n`,_jsx(_components.p,{children:`The repository is a monorepo built with Turbo, with TypeScript as the primary language. It is divided into several packages:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`13`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`├── packages`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ ├── web`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ ├── server`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ │ ├── api`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ │ ├── worker`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ │ ├── engine`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ │ ├── sandbox`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ │ └── common`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ ├── ee`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ ├── pieces`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ └── shared`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`web`}),`: This package contains the user interface, implemented using the React framework.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`api`}),`: This package contains the main application written in TypeScript with the Fastify framework.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`worker`}),`: This package contains the logic of accepting flow jobs and executing them using the engine.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`server-sandbox`}),`: This package contains the sandbox execution environment, including process isolation, pool management, and WebSocket communication between the worker and engine.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`common`}),`: This package contains the shared logic between worker and app.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`engine`}),`: This package contains the logic for flow execution within the sandbox. Located under `,_jsx(_components.code,{children:`server/engine`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`pieces`}),`: This package contains the implementation of triggers and actions for third-party apps.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`shared`}),`: This package contains shared data models and helper functions used by the other packages.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`ee`}),`: This package contains features that are only available in the paid edition.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Overview","description":"How Activepieces is put together, and why it runs flows the way it does","icon":"cube","href":"/install/architecture/overview"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Components","slug":"components","depth":2,"children":[]},{"title":"Reliability \u0026 Scalability","slug":"reliability-\u0026-scalability","depth":2,"children":[]},{"title":"Repository Structure","slug":"repository-structure","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"activepieces","siteName":"Activepieces","title":"Overview - Activepieces","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-30T11:59:06.192Z","originalFileLocation":"install/architecture/overview.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How Activepieces is put together, and why it runs flows the way it does\">\u003cmeta data-mint-head name=\"application-name\" content=\"Activepieces\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Overview - Activepieces\">\u003cmeta data-mint-head property=\"og:description\" content=\"How Activepieces is put together, and why it runs flows the way it does\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Activepieces\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.activepieces.com/docs/install/architecture/overview\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://activepieces.mintlify.app/_mintlify/api/og/v2?division=Architecture\u0026amp;title=Overview\u0026amp;description=How+Activepieces+is+put+together%2C+and+why+it+runs+flows+the+way+it+does\u0026amp;theme=4762f02fd8bc74d552ceb2c7\u0026amp;signature=3ac3e5eb300533dd6d72fa31421eaadff81e4e43ddbb3a8f317e24ea8561cd68\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Overview - Activepieces\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How Activepieces is put together, and why it runs flows the way it does\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://activepieces.mintlify.app/_mintlify/api/og/v2?division=Architecture\u0026amp;title=Overview\u0026amp;description=How+Activepieces+is+put+together%2C+and+why+it+runs+flows+the+way+it+does\u0026amp;theme=4762f02fd8bc74d552ceb2c7\u0026amp;signature=3ac3e5eb300533dd6d72fa31421eaadff81e4e43ddbb3a8f317e24ea8561cd68\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/activepieces/p9XH-af1QM0u3PKd/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Activepieces\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#9675FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.activepieces.com/docs/install/architecture/overview\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/install/architecture/overview.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.activepieces.com/#organization\",\"name\":\"Activepieces\",\"url\":\"https://www.activepieces.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/activepieces/fJ5Tlm8YTN5F2Mlz/resources/logo/light.svg?fit=max\u0026auto=format\u0026n=fJ5Tlm8YTN5F2Mlz\u0026q=85\u0026s=45ca3c4c50e981e74952921edc9a9fa2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.activepieces.com/docs#website\",\"name\":\"Activepieces\",\"url\":\"https://www.activepieces.com/docs\",\"publisher\":{\"@id\":\"https://www.activepieces.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.activepieces.com/docs/install/architecture/overview#webpage\",\"url\":\"https://www.activepieces.com/docs/install/architecture/overview\",\"name\":\"Overview\",\"description\":\"How Activepieces is put together, and why it runs flows the way it does\",\"dateModified\":\"2026-06-30T11:59:06.192Z\",\"isPartOf\":{\"@id\":\"https://www.activepieces.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.activepieces.com/docs/install/architecture/overview#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.activepieces.com/docs/install/architecture/overview#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Activepieces\",\"item\":\"https://www.activepieces.com/docs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Overview\",\"item\":\"https://www.activepieces.com/docs/install/architecture/overview\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.activepieces.com/docs/install/architecture/overview#article\",\"headline\":\"Overview\",\"name\":\"Overview\",\"description\":\"How Activepieces is put together, and why it runs flows the way it does\",\"url\":\"https://www.activepieces.com/docs/install/architecture/overview\",\"mainEntityOfPage\":{\"@id\":\"https://www.activepieces.com/docs/install/architecture/overview#webpage\"},\"dateModified\":\"2026-06-30T11:59:06.192Z\",\"publisher\":{\"@id\":\"https://www.activepieces.com/#organization\"},\"isPartOf\":{\"@id\":\"https://www.activepieces.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Activepieces\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Activepieces","nav":{"global":{},"tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":"/overview/welcome"}]},{"tab":"Install Activepieces","groups":[{"group":"Install Activepieces","pages":[{"title":"Install Options","sidebarTitle":"Install options","icon":"hand-wave","href":"/install/overview"},{"title":"Self Host Activepieces","sidebarTitle":"Self host (Docker)","icon":"docker","href":"/install/options/docker-compose"},{"title":"Kubernetes Installation","sidebarTitle":"Kubernetes (Helm)","icon":"ship","href":"/install/options/helm"},{"title":"Activate an Enterprise License Key","sidebarTitle":"License key","icon":"key","href":"/install/configure-operate/enterprise-license"},{"group":"Other Options","pages":[{"title":"Hobbyist Installation","sidebarTitle":"Hobby (Docker)","href":"/install/options/docker"},{"title":"Easypanel","href":"/install/options/easypanel"},{"title":"AWS (Pulumi)","href":"/install/options/aws"},{"title":"GCP","href":"/install/options/gcp"},{"title":"Railway","href":"/install/options/railway"},{"title":"Elestio","href":"/install/options/elestio"}]}]},{"group":"Self hosting","pages":[{"title":"Production Setup","icon":"ruler-combined","href":"/install/configure-operate/production-setup"},{"group":"Production Essentials","icon":"rocket","pages":[{"title":"Separate Workers","icon":"robot","href":"/install/configure-operate/separate-workers"},{"title":"Sandboxing Mode","icon":"code","href":"/install/configure-operate/sandboxing"},{"title":"HTTPS","icon":"shield","href":"/install/configure-operate/setup-ssl"},{"title":"S3 Storage","icon":"cloud","href":"/install/configure-operate/setup-s3"}]},{"group":"Operations","icon":"screwdriver-wrench","pages":[{"title":"Worker Groups","icon":"users-gear","href":"/install/configure-operate/worker-groups"},{"title":"App Webhooks","icon":"webhook","href":"/install/configure-operate/setup-app-webhooks"},{"title":"Observability","icon":"chart-line","href":"/install/configure-operate/setup-opentelemetry"},{"title":"Telemetry","icon":"calculator","href":"/install/configure-operate/telemetry"},{"title":"Rollback","icon":"rotate-left","href":"/install/configure-operate/rollback"}]}]},{"group":"Troubleshooting","pages":[{"title":"Queues Dashboard","icon":"gauge-high","href":"/install/troubleshooting/bullboard"},{"title":"Reset Password","icon":"key","href":"/install/troubleshooting/reset-password"},{"title":"Truncated Logs","icon":"file-lines","href":"/install/troubleshooting/truncated-logs"},{"title":"Websocket Issues","icon":"plug","href":"/install/troubleshooting/websocket-issues"}]},{"group":"Reference","pages":[{"title":"Environment Variables","icon":"gear","href":"/install/reference/environment-variables"},{"title":"Limits","icon":"ban","href":"/install/reference/limits"},{"title":"Breaking Changes","icon":"hammer","href":"/install/reference/breaking-changes"}]},{"group":"Guarantees","icon":"shield-check","pages":[{"title":"Crash Recovery","icon":"shield-check","href":"/install/guarantees/crash-recovery"},{"title":"Disaster Recovery","icon":"life-ring","href":"/install/guarantees/disaster-recovery"},{"title":"Reserved Resources","icon":"memory","href":"/install/guarantees/reserved-resources"},{"title":"Execution Isolation","description":"User code in one flow can't read another flow's code, memory, environment, or files","icon":"lock","href":"/install/guarantees/execution-isolation"}]},{"group":"Architecture","pages":[{"title":"Overview","icon":"cube","href":"/install/architecture/overview"},{"title":"Workers","description":"Run, scale, and tune the container that executes your flows","icon":"gears","href":"/install/architecture/workers"},{"title":"Sandboxing","icon":"box","href":"/install/architecture/sandboxing"},{"title":"Durable Execution","icon":"shield-check","href":"/install/architecture/durable-execution"},{"title":"Waitpoints","icon":"hourglass-half","href":"/install/architecture/waitpoints"},{"title":"Network Security","icon":"shield-halved","href":"/install/architecture/network-security"},{"title":"Piece syncing \u0026 versioning","icon":"puzzle-piece","href":"/install/architecture/piece-syncing"},{"title":"Benchmark","icon":"gauge-high","href":"/install/architecture/benchmark"},{"title":"Latency","icon":"stopwatch","href":"/install/architecture/latency"},{"title":"Autoscaling","icon":"arrows-up-down","href":"/install/architecture/autoscaling"}]}]},{"tab":"Enterprise Control","icon":"crown","pages":[{"title":"Enterprise Control","href":"/admin-guide/overview"}]},{"tab":"Build Pieces","pages":[{"title":"Build Pieces","href":"/build-pieces/building-pieces/overview"}]},{"tab":"Embed SDK","pages":[{"title":"Embed SDK","href":"/embedding/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/endpoints/overview"}]}]},"title":"Overview - Activepieces","buildId":"dpl_3DJU2xKhT5gDPFQL5Tqv7AFnkWsF","deploymentId":"dpl_3DJU2xKhT5gDPFQL5Tqv7AFnkWsF","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-zlSAS9__.js","lightbox-handle-r17bVUz3.js"]}