Published

Activepieces

No-code automation platform: flows built from triggers and "pieces" (integrations), webhooks, schedules, Code steps and AI agents. Fits teams that want a business-user-friendly flow builder on their own server. The self-hosted stack is an app container, a separate worker that runs the flows, PostgreSQL and Redis.

Resources by load level

What the app itself needs at each level, next to what we recommend for a server that runs only this app.

LevelWhat it meansApp requirementsRecommended
LightEstimateUp to 5 builders, 20 active flows, ~500 runs/day, one flow running at a time, payloads under 1 MB; one worker, files in PostgreSQL.2.25 vCPU · 3.5 GiB RAM · 9.25 GiB disk2.82 vCPU · 5.7 GiB RAM · 20.298 GiB disk
MediumEstimateUp to 20 builders, 100 active flows, ~5,000 runs/day, up to 3 flows running at once, payloads of a few MB; one worker at its default concurrency 5.4.75 vCPU · 8.5 GiB RAM · 54.75 GiB disk5.82 vCPU · 11.7 GiB RAM · 72.623 GiB disk
HeavyEstimateUp to 50 builders, 300 active flows, ~25,000 runs/day, 5 flows running at once (the worker's default concurrency and per-project limit); beyond this, add workers.6 vCPU · 11 GiB RAM · 56.25 GiB disk7.32 vCPU · 14.7 GiB RAM · 74.348 GiB disk

Recommended = app requirements + system baseline + safety headroom, under sizing policy 2026.10.0. Options stay at their defaults. “Estimate” means the sources give no number for that case, so it is worked out from them by the method stated under Components. How the numbers are built

Size it in the Stack Sizer

Ready-to-run files

Support level Supported

Compose template from the official sources; not yet verified by a run.

Create docker-compose

Components

What each component needs at each load level, before baseline and headroom.

vCPU / GiB RAM / GiB disk
ComponentLightMediumHeavySources
Activepieces (app: API and UI) (app)0.5 / 1 / 1.51 / 1 / 1.51 / 1 / 1.5[7][10][11][26]
Activepieces worker (worker)0.5 / 1 / 0.51.5 / 3 / 12.5 / 5 / 2[6][9][10][12]
PostgreSQL (database)1 / 1 / 6.52 / 4 / 51.52 / 4 / 51.5[9][12][34][35][36][37][38][39][40]
Redis (BullMQ job queue) (queue)0.25 / 0.5 / 0.750.25 / 0.5 / 0.750.5 / 1 / 1.25[9][10][11][29]
How the estimates are worked out
  • Activepieces (app: API and UI) · Light: RAM: the documented app size of 1 GB (GB taken as GiB). vCPU: the documented app is 1 vCPU per ten workers and used 0.52-0.61 core per pod at 20+ req/s in the benchmark; one busy flow at a time needs about half. Disk: image 1,456,418,304 B unpacked (1.356 GiB) rounded up to 1.5 GiB; no data volume, all state is in PostgreSQL.
  • Activepieces (app: API and UI) · Medium: The documented app size, 1 vCPU / 1 GB, which serves up to ten concurrent-flow workers (GB taken as GiB). Disk as light: the 1.356 GiB unpacked image rounded up to 1.5 GiB.
  • Activepieces (app: API and UI) · Heavy: The documented app size, 1 vCPU / 1 GB, covers up to ten concurrent-flow workers; 5 concurrent flows stay within it. Disk as light: 1.5 GiB for the 1.356 GiB unpacked image.
  • Activepieces worker · Light: Docs size one concurrent flow at 0.5 vCPU / 1 GB (about 300 MB of it warm-process overhead); one flow at a time gives 0.5 vCPU / 1 GiB. Disk: 0.5 GiB for the piece and flow cache volume (ANAROQ assumption, no upstream figure); the image is the app's, pulled once and counted there.
  • Activepieces worker · Medium: 3 concurrent flows × the documented 0.5 vCPU / 1 GB per flow = 1.5 vCPU / 3 GiB; each sandboxed engine process is capped at 1 GiB (AP_SANDBOX_MEMORY_LIMIT 1048576 KB). Disk: 1 GiB cache volume for more pieces and flows (ANAROQ assumption).
  • Activepieces worker · Heavy: Docs give ~2.5 vCPU / 5 GB for a worker at concurrency 5 (5 × 0.5 vCPU / 1 GB); GB taken as GiB. Disk: 2 GiB cache volume for ~300 flows and their pieces (ANAROQ assumption).
  • PostgreSQL · Light: Embedded metadata DB with the image's default config: equals the PostgreSQL profile's light preset (≤ 5 GB data, ≤ 20 concurrent connections) at every load level. Light preset method: shared_buffers 25% of RAM, worst-case work_mem/maintenance_work_mem budget, 0.5 GiB image + 5 GiB data + 1 GiB WAL.
  • PostgreSQL · Medium: Run logs, step files (AP_FILE_STORAGE_LOCATION=DB) and events stay 30 days: 5,000 runs/day × 30 × an assumed 30 KB per run ≈ 4.5 GB, at the edge of the 5 GB sidecar envelope, so the PostgreSQL profile's medium preset (≤ 50 GB). Its method: shared_buffers 1 GiB = 25%, worst-case work_mem budget for 100 connections, 0.5 GiB image + 50 GiB data + 1 GiB WAL.
  • PostgreSQL · Heavy: 30-day retention: 25,000 runs/day × 30 × an assumed 30 KB per run ≈ 22.5 GB of run data, within the PostgreSQL profile's medium preset (≤ 50 GB). Docs say database CPU grows with throughput (~2.5 millicores per req/s); 25,000 runs/day averages 0.29 run/s. Medium method: shared_buffers 1 GiB = 25%, 0.5 GiB image + 50 GiB data + 1 GiB WAL.
  • Redis (BullMQ job queue) · Light: Docs size Redis at 1 vCPU / 1 GB for production fleets; the benchmark's Redis used 0.123 core at 213 req/s, far above this level, so 0.25 vCPU. RAM: half the documented 1 GB for the queue, inline webhook payloads (< 512 KB each) and failed jobs (kept 30 days, up to 100,000). Disk: 43.8 MiB compressed image × 3 (131 MiB) + an RDB snapshot up to the 0.5 GiB dataset, rounded up to 0.75 GiB.
  • Redis (BullMQ job queue) · Medium: As light: the benchmark's Redis used 0.123 core at 213 req/s, still far above ~5,000 runs/day; 0.5 GiB RAM and 0.75 GiB disk (131 MiB image + RDB snapshot).
  • Redis (BullMQ job queue) · Heavy: RAM: the documented 1 GB (GB taken as GiB). vCPU: half the documented 1 vCPU; the benchmark's Redis used 0.123 core at 213 req/s. Disk: 131 MiB image (43.8 MiB compressed × 3) + an RDB snapshot up to the 1 GiB dataset, rounded up to 1.25 GiB.

Ports

Public ports are meant to be reached from outside the stack, usually through a reverse proxy; internal ones stay on the stack's own network.

ComponentPortExposurePurposeSources
Activepieces (app: API and UI)80/tcpPublic, through a proxyUI, REST API, webhooks and the worker's API/Socket.IO endpoint (HTTP; put behind TLS)[2][23]
PostgreSQL5432/tcpInternal onlyPostgreSQL connections from the app[3][9]
Redis (BullMQ job queue)6379/tcpInternal onlyBullMQ job queue between the app and the workers[9][30]

Every port in the catalog, with conflicts between apps

User and permissions (UID/GID)

The user each container's process runs as, and the paths it writes to. A bind mount for one of these paths must be writable by that UID:GID.

ComponentUID:GIDUserStarts as rootWrites toSources
Activepieces (app: API and UI)Derived0:0rootNo—[4][23]
Activepieces workerDerived0:0rootNo/usr/src/app/cache[2][6][23]
PostgreSQL999:999postgresYes, prepares its directories, then drops to this user/var/lib/postgresql/var/run/postgresql[32][33][39]
Redis (BullMQ job queue)999:999redisYes, prepares its directories, then drops to this user/data[30][31]
  • Activepieces (app: API and UI): The Dockerfile sets no USER and the image config has an empty User, so node runs as root (uid 0) and never drops privileges. With AP_ENCRYPTION_KEY and AP_JWT_SECRET set, the app writes no local files; everything goes to PostgreSQL.
  • Activepieces worker: Same image as the app, so root (no USER in the Dockerfile). The worker writes its piece and flow cache to 'cache' under the WORKDIR /usr/src/app, the path the official Compose mounts.

Storage growth

How much each component's data grows per month at each load level, on top of the disk in the profile. A value marked Assumption is ANAROQ's stated assumption, not a figure from the sources; the notes say what it rests on.

GiB per month
ComponentLightMediumHeavySources
PostgreSQLAssumption0.050.20.5[9][12]
What the growth figures rest on
  • PostgreSQL: Run logs, step files and events are deleted after 30 days (AP_EXECUTION_DATA_RETENTION_DAYS), so run data levels off after the first month. What keeps growing: flow versions, connections, Tables records (up to 10,000 per table) and Store values. Activepieces gives no growth figure; this is an ANAROQ assumption.

Upgrade and rollback

How to move to a new version safely, and how to go back if it fails.

Back up first

Dump the database first (pg_dump of the activepieces database) and keep the .env with AP_ENCRYPTION_KEY next to it. [7][20]

Upgrade steps

  1. Read the breaking changes of every version you skip, newest first. [7][21]
  2. Set the same new image tag on the app and on the worker: since 0.85.4 a safeguard requires both to run the same version. [7][21]
  3. Run docker compose pull, then docker compose up -d. [7][20]DerivedThe docs upgrade with their install script or by bumping the pinned tag in docker-compose.yml; pull and up -d is how Compose applies a new tag.

Roll back

Stop the stack, run the rollback command with the newer image (npm run rollback -- --to <old version>, --force if the release has breaking migrations), then switch both services back to the old tag and start. Or restore the dump taken before the upgrade. [20]

Known breaking changes

  • In 0.92.0: Files passed to AI steps (Extract Structured Data, Generate Image) are capped at AP_MAX_FILE_SIZE_MB, 25 MB by default. [21]
  • In 0.90.4: Telemetry is a per-platform setting in the admin UI; AP_TELEMETRY_ENABLED is only its starting value. [21]
  • In 0.88.2: PM2 was removed from the image: a crashed or OOM-killed process now exits the container, so a restart policy is required. [21]
  • In 0.85.4: The worker and the app must run the same image version. [21]
  • In 0.80.0: Nginx was removed from the image; Fastify serves the UI and the API, all API routes are under /api, and the health check moved to /api/v1/health. [21]

Limits

  • One worker runs at most 5 flows at once (AP_WORKER_CONCURRENCY), and each project is limited to 5 concurrent runs by default. More throughput means more worker containers, which this single-server template doesn't add. [9][10][14]
  • A run is stopped after 600 s of active time, files are capped at 25 MB and a run's log at 50 MB, and a worker process has a 1 GB memory budget (~300 MB of it overhead). Split large jobs into several flows. [12]
  • Code steps run in a V8 isolate (SANDBOX_CODE_ONLY): no npm packages, no filesystem. Modes that allow npm with isolation need a privileged container, which this template doesn't grant. [13]
  • Files and run data live in PostgreSQL by default (no S3), and the bundled PostgreSQL has no pgvector, so agent knowledge bases stay hidden. [9][22][24]

Security

  • Serve Activepieces over HTTPS from a reverse proxy that passes WebSockets, and set AP_FRONTEND_URL to that public URL: webhooks and app triggers are built from it, and test runs need the WebSocket. [9][17][18]
  • Flow code can reach anything the worker can reach (AP_NETWORK_MODE defaults to UNRESTRICTED), including the stack's password-less Redis. Only let trusted people build flows, or block internal ranges in the firewall. [16]
  • There is no default login: the first account created becomes the platform administrator. Create it right after the first start. [7]

Backup

  • Back up PostgreSQL (pg_dump): flows, runs, connections and schedules live there, not in the install folder. Keep AP_ENCRYPTION_KEY with it; without the key, stored connections can't be decrypted even from a full backup. [7][19]
  • Keep the Redis volume: async webhooks are acknowledged once queued in Redis, before PostgreSQL has a record, so jobs lost with Redis are gone for good. Everything else is rebuilt from PostgreSQL. [19]

Latest release

Newest upstream release
Activepieces 0.92.3 [27][28]
This profile was checked against

Activepieces 0.92.3

This profile was checked against the newest release.

Checked on
14 Oct 2026
State
Checked within the last 90 days
Where releases are published
Docker Hub tags

Latest releases of every app

Version

Profile status
Published
Checked against release
Activepieces 0.92.3
Profile version
1.0.0
Figures verified
14 Oct 2026
Catalog release
2026.10.10
Sizing policy
2026.10.0
Compose file
Unverified

Sources

  1. Docker Docs: Control startup order in Compose (pg_isready healthcheck, service_healthy) (Official docs · read 11 Oct 2026)
  2. activepieces repository: docker-compose.yml at 0.92.3 (app + worker replicas 5 + pgvector/pgvector:0.8.0-pg14 + redis:7.0.7; app 8080:80) (Official Compose · read 14 Oct 2026)
  3. activepieces repository: .env.example at 0.92.3 (AP_POSTGRES_HOST=postgres, AP_REDIS_HOST=redis, AP_EXECUTION_MODE=UNSANDBOXED) (Official repository · read 14 Oct 2026)
  4. activepieces repository: docker-entrypoint.sh at 0.92.3 (AP_CONTAINER_TYPE, AP_PORT 80, AP_WORKER_TOKEN signed from AP_JWT_SECRET) (Official repository · read 14 Oct 2026)
  5. activepieces repository: system-validator.ts at 0.92.3 (AP_ENCRYPTION_KEY must match ^[A-Za-z0-9]{32}$; AP_JWT_SECRET required) (Official repository · read 14 Oct 2026)
  6. activepieces repository: worker configs.ts at 0.92.3 (a WORKER reaches the app at AP_FRONTEND_URL/api; concurrency default 5; cache dir 'cache') (Official repository · read 14 Oct 2026)
  7. Activepieces Docs: Self host (Docker Compose): 4 containers, at least 2 vCPU and 4 GB RAM, /api/v1/health, worker AP_FRONTEND_URL=http://app (Official docs · read 14 Oct 2026)
  8. Activepieces Docs: Install options (Docker Compose recommended; Activepieces Cloud) (Official docs · read 14 Oct 2026)
  9. Activepieces Docs: Environment variables (AP_ENCRYPTION_KEY 32 hex chars; AP_WORKER_CONCURRENCY 5; retention 30 days; file storage DB) (Official docs · read 14 Oct 2026)
  10. Activepieces Docs: Production setup (worker 0.5 vCPU / 1 GB per flow; app 1 vCPU / 1 GB; Redis 1 vCPU / 1 GB; concurrency 5 worker ~2.5 vCPU / 5 GB) (Official docs · read 14 Oct 2026)
  11. Activepieces Docs: Benchmark (app ~0.52-0.61 core per pod; Redis 123m at 213 req/s; worker idle RSS ~145 Mi) (Official docs · read 14 Oct 2026)
  12. Activepieces Docs: Limits (600 s run timeout, 1 GB worker memory with ~300 MB overhead, 25 MB files, 50 MB run log, 30-day retention) (Official docs · read 14 Oct 2026)
  13. Activepieces Docs: Sandboxing (SANDBOX_CODE_ONLY unprivileged; SANDBOX_PROCESS needs CAP_SYS_ADMIN / privileged) (Official docs · read 14 Oct 2026)
  14. Activepieces Docs: Workers (stateless, pull jobs from Redis, scale by replicas; default concurrency 5 is transitional) (Official docs · read 14 Oct 2026)
  15. Activepieces Docs: Separate workers (worker needs AP_CONTAINER_TYPE, AP_FRONTEND_URL and a token from AP_JWT_SECRET; no DB or Redis access) (Official docs · read 14 Oct 2026)
  16. Activepieces Docs: Network security (AP_NETWORK_MODE defaults to UNRESTRICTED; user code can reach Redis, Postgres, metadata) (Official docs · read 14 Oct 2026)
  17. Activepieces Docs: HTTPS (terminate TLS in a reverse proxy, WebSocket upgrade) (Official docs · read 14 Oct 2026)
  18. Activepieces Docs: Websocket issues (proxy must pass WebSockets; test runs and live updates need them) (Official docs · read 14 Oct 2026)
  19. Activepieces Docs: Disaster recovery (Postgres is the system of record; queued async-webhook jobs exist only in Redis) (Official docs · read 14 Oct 2026)
  20. Activepieces Docs: Rollback (pg_dump first; npm run rollback -- --to <version> with the newer image) (Official docs · read 14 Oct 2026)
  21. Activepieces Docs: Breaking changes (0.92.0 back to 0.30.0) (Release notes · read 14 Oct 2026)
  22. Activepieces Docs: Agent knowledge (needs the pgvector extension; hidden when Postgres lacks it) (Official docs · read 14 Oct 2026)
  23. activepieces repository: Dockerfile at 0.92.3 (node:24.14.0-bullseye-slim, no USER, HEALTHCHECK curl /api/v1/health, EXPOSE 80) (Official repository · read 14 Oct 2026)
  24. activepieces repository: knowledge-base-schema.ts at 0.92.3 (CREATE EXTENSION vector only when available, otherwise skipped) (Official repository · read 14 Oct 2026)
  25. activepieces repository: LICENSE at 0.92.3 (MIT Expat, except packages/ee and packages/server/api/src/app/ee under the Enterprise license) (Official repository · read 14 Oct 2026)
  26. GHCR manifest of ghcr.io/activepieces/activepieces:0.92.3 (linux/amd64): 471,843,650 B compressed; layers decompressed and counted: 1,456,418,304 B (Measurement · read 14 Oct 2026)
  27. Docker Hub: activepieces/activepieces tags (newest 0.92.3, 2026-10-12; same index digest as GHCR 0.92.3) (Official repository · read 14 Oct 2026)
  28. activepieces repository: git tags (newest release tag 0.92.3; its docker-compose.yml pins 0.92.3) (Official repository · read 14 Oct 2026)
  29. Docker Hub: library/redis tag 7.4.11 (linux/amd64 45,896,305 B compressed) (Official repository · read 14 Oct 2026)
  30. redis/docker-library-redis v7.4.11: debian Dockerfile (redis uid/gid 999, VOLUME /data, EXPOSE 6379, redis-cli) (Official repository · read 14 Oct 2026)
  31. redis/docker-library-redis v7.4.11: debian docker-entrypoint.sh (chown, then setpriv to redis) (Official repository · read 14 Oct 2026)
  32. docker-library/postgres: 18/trixie Dockerfile (postgres uid/gid 999, VOLUME /var/lib/postgresql) (Official repository · read 14 Oct 2026)
  33. docker-library/postgres: 18/trixie docker-entrypoint.sh (chown PGDATA, then gosu postgres) (Official repository · read 14 Oct 2026)
  34. PostgreSQL 18 documentation: 19.4 Resource Consumption (Official docs · read 10 Oct 2026)
  35. PostgreSQL 18 documentation: 19.3 Connections and Authentication (Official docs · read 10 Oct 2026)
  36. PostgreSQL 18 documentation: 19.10 Vacuuming (autovacuum settings) (Official docs · read 10 Oct 2026)
  37. PostgreSQL 18 documentation: 19.5 Write Ahead Log (max_wal_size) (Official docs · read 10 Oct 2026)
  38. PostgreSQL 18 documentation: 51.2 How Connections Are Established (Official docs · read 10 Oct 2026)
  39. Docker Official Image postgres: documentation (docker-library/docs) (Official docs · read 10 Oct 2026)
  40. Docker Hub: library/postgres tag 18.6 (compressed image sizes) (Official repository · read 10 Oct 2026)

All self-hosted apps