Formbricks is an open-source, self-hosted alternative to Typeform and SurveyMonkey that keeps user feedback and in-app surveys on your own infrastructure.
Formbricks provides an embeddable survey engine and experience management suite designed to run entirely on internal infrastructure. Rather than routing customer sentiment through third-party analytics clouds, it lets organizations trigger targeted in-app micro-surveys and shareable feedback forms directly from their own database. Teams retain complete ownership over telemetry, user identities, and survey responses from the moment of capture.
Typeform delivers polished conversational forms hosted on multi-tenant servers, but every submitted email, feedback score, and customer identifier travels to proprietary cloud infrastructure. Formbricks pairs conversational survey logic with self-hosted data isolation. Deploying via Docker against a private PostgreSQL database keeps respondent telemetry, attributes, and feedback inside your network boundaries, satisfying strict GDPR, HIPAA, or SOC 2 compliance mandates without third-party data processing agreements.
The divide centres on distribution and operational boundaries. Typeform shines for stand-alone marketing quizzes and lead capture where hosted infrastructure and prebuilt styling require zero engineering effort. Formbricks focuses on product-led feedback loops, providing lightweight SDKs for React, Next.js, and vanilla JavaScript that trigger micro-surveys based on user events. In exchange, running Formbricks requires maintaining container infrastructure, managing S3-compatible file storage, and handling software upgrades independently.
Can Formbricks be self-hosted with Docker? Yes. Formbricks distributes official Docker images and Helm charts that connect to PostgreSQL and S3-compatible storage for persistent data.
Formbricks vs Typeform — which should you choose? Choose Typeform for standalone marketing quizzes and zero-maintenance lead generation forms. Choose Formbricks when you need event-triggered in-app micro-surveys, unlimited response volume, and complete data control on private infrastructure.
Is Formbricks free for commercial use? The core platform is free for commercial use under open-source terms, while advanced enterprise features like SAML SSO and organization hierarchies require a commercial enterprise license.
Formbricks is the right choice for organizations that treat customer feedback as sensitive first-party telemetry rather than disposable marketing data. With ongoing development in 2026 and an AGPL-3.0 codebase that prevents vendor lock-in, it serves engineering and operations teams well as long as you have the capacity to maintain a self-hosted container stack.
We started this exact setup from scratch in a clean Linux machine on Nov 2, 2026 and checked it through Formbricks's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p formbricks && cd formbricks
curl -fsSL https://open-source.store/tools/formbricks/compose.yml -o compose.ymlcat > .env <<EOF
WEBAPP_URL=http://localhost:3000
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
CRON_SECRET=$(openssl rand -hex 16)
HUB_API_KEY=$(openssl rand -hex 16)
HUB_API_URL=http://localhost:8080
CUBEJS_API_SECRET=$(openssl rand -hex 16)
CUBEJS_API_URL=http://localhost:4000
AUTHZED_TOKEN=$(openssl rand -hex 16)
POSTGRES_PASSWORD=$(openssl rand -hex 12)
AUTHZED_DATABASE_PASSWORD=$(openssl rand -hex 12)
EOFWEBAPP_URL — Public URL of the Formbricks instance, e.g. https://surveys.example.comBETTER_AUTH_SECRET — Random secret used to sign session cookies and auth tokens. Generated above; keep it secret.ENCRYPTION_KEY — 64-character hex key used to encrypt sensitive configuration data. Generated above; keep it secret.CRON_SECRET — Secret token for securing internal cron endpoints. Generated above; keep it secret.HUB_API_KEY — Secret token for internal Hub API requests. Generated above; keep it secret.HUB_API_URL — Base URL for the internal Formbricks Hub API.CUBEJS_API_SECRET — Secret key for internal Cube analytics communication. Generated above; keep it secret.CUBEJS_API_URL — Base URL for the internal Cube analytics API.AUTHZED_TOKEN — Pre-shared key for authenticating with the SpiceDB authorization engine. Generated above; keep it secret.POSTGRES_PASSWORD — Password for the bundled PostgreSQL database superuser. Generated above; keep it secret.AUTHZED_DATABASE_PASSWORD — Password for the SpiceDB user in PostgreSQL. Generated above; keep it secret.docker compose up -dservices:
postgres:
image: pgvector/pgvector:pg18
restart: always
volumes:
- postgres:/var/lib/postgresql
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: formbricks
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres || exit 1"]
interval: 5s
timeout: 3s
retries: 30
start_period: 30s
authzed-db-bootstrap:
image: pgvector/pgvector:pg18
restart: "no"
entrypoint: ["/bin/sh", "-c"]
command:
- |
psql "$$POSTGRES_ADMIN_URL" -v ON_ERROR_STOP=1 -v db_password="$$AUTHZED_DATABASE_PASSWORD" <<'SQL'
SELECT format('CREATE ROLE %I LOGIN PASSWORD %L', 'spicedb', :'db_password')
WHERE NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'spicedb') \gexec
SELECT format('ALTER ROLE %I WITH LOGIN PASSWORD %L', 'spicedb', :'db_password') \gexec
SELECT format('CREATE DATABASE %I OWNER %I', 'spicedb', 'spicedb')
WHERE NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = 'spicedb') \gexec
SELECT format('ALTER DATABASE %I OWNER TO %I', 'spicedb', 'spicedb') \gexec
SQL
environment:
POSTGRES_ADMIN_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres?sslmode=disable
AUTHZED_DATABASE_PASSWORD: ${AUTHZED_DATABASE_PASSWORD}
depends_on:
postgres:
condition: service_healthy
spicedb-migrate:
image: authzed/spicedb:v1.52.0
restart: "no"
command: datastore migrate head
environment:
SPICEDB_DATASTORE_ENGINE: postgres
SPICEDB_DATASTORE_CONN_URI: postgresql://spicedb:${AUTHZED_DATABASE_PASSWORD}@postgres:5432/spicedb?sslmode=disable
depends_on:
authzed-db-bootstrap:
condition: service_completed_successfully
spicedb:
image: authzed/spicedb:v1.52.0
restart: always
command: serve
environment:
SPICEDB_DATASTORE_ENGINE: postgres
SPICEDB_DATASTORE_CONN_URI: postgresql://spicedb:${AUTHZED_DATABASE_PASSWORD}@postgres:5432/spicedb?sslmode=disable
SPICEDB_GRPC_PRESHARED_KEY: ${AUTHZED_TOKEN}
SPICEDB_LOG_FORMAT: json
SPICEDB_LOG_LEVEL: info
SPICEDB_TELEMETRY_ENDPOINT: ""
depends_on:
spicedb-migrate:
condition: service_completed_successfully
healthcheck:
test: ["CMD", "/usr/local/bin/grpc_health_probe", "-addr=localhost:50051"]
interval: 5s
timeout: 5s
retries: 12
start_period: 10s
redis:
image: valkey/valkey:8.0.2
restart: always
command: valkey-server --appendonly yes --maxmemory-policy noeviction
volumes:
- redis:/data
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 5s
timeout: 3s
retries: 30
start_period: 10s
formbricks-migrate:
image: ghcr.io/formbricks/formbricks:6.1.2
restart: "no"
entrypoint: ["sh", "-c"]
command:
- "node /home/nextjs/validate-env.mjs && node packages/database/dist/scripts/apply-migrations.js"
depends_on:
postgres:
condition: service_healthy
environment:
WEBAPP_URL: ${WEBAPP_URL}
BETTER_AUTH_URL: ${WEBAPP_URL}
NEXTAUTH_URL: ${WEBAPP_URL}
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/formbricks?schema=public
BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}
NEXTAUTH_SECRET: ${BETTER_AUTH_SECRET}
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
CRON_SECRET: ${CRON_SECRET}
REDIS_URL: redis://redis:6379
HUB_API_KEY: ${HUB_API_KEY}
HUB_API_URL: ${HUB_API_URL}
CUBEJS_API_URL: ${CUBEJS_API_URL}
CUBEJS_API_SECRET: ${CUBEJS_API_SECRET}
CUBEJS_JWT_ISSUER: formbricks-web
CUBEJS_JWT_AUDIENCE: formbricks-cube
EMAIL_VERIFICATION_DISABLED: "1"
PASSWORD_RESET_DISABLED: "1"
AUTHZED_ENABLED: "true"
AUTHZED_ENDPOINT: spicedb:50051
AUTHZED_TOKEN: ${AUTHZED_TOKEN}
AUTHZED_SYSTEM_KEY: formbricks
AUTHZED_INSECURE: "true"
AUTHZED_CONSISTENCY: fully_consistent
authzed-initialize:
image: ghcr.io/formbricks/formbricks:6.1.2
restart: "no"
entrypoint: ["formbricks-authzed"]
command: ["upgrade", "prepare"]
environment:
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/formbricks?schema=public
WEBAPP_URL: ${WEBAPP_URL}
BETTER_AUTH_URL: ${WEBAPP_URL}
NEXTAUTH_URL: ${WEBAPP_URL}
BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}
NEXTAUTH_SECRET: ${BETTER_AUTH_SECRET}
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
CRON_SECRET: ${CRON_SECRET}
REDIS_URL: redis://redis:6379
HUB_API_KEY: ${HUB_API_KEY}
HUB_API_URL: ${HUB_API_URL}
CUBEJS_API_URL: ${CUBEJS_API_URL}
CUBEJS_API_SECRET: ${CUBEJS_API_SECRET}
CUBEJS_JWT_ISSUER: formbricks-web
CUBEJS_JWT_AUDIENCE: formbricks-cube
LOG_LEVEL: fatal
AUTHZED_ENABLED: "true"
AUTHZED_ENDPOINT: spicedb:50051
AUTHZED_TOKEN: ${AUTHZED_TOKEN}
AUTHZED_SYSTEM_KEY: formbricks
AUTHZED_INSECURE: "true"
AUTHZED_CONSISTENCY: fully_consistent
depends_on:
formbricks-migrate:
condition: service_completed_successfully
spicedb:
condition: service_healthy
formbricks:
image: ghcr.io/formbricks/formbricks:6.1.2
restart: always
ports:
- "3000:3000"
volumes:
- saml-connection:/home/nextjs/apps/web/saml-connection
- uploads:/home/nextjs/apps/web/uploads
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
spicedb:
condition: service_healthy
authzed-initialize:
condition: service_completed_successfully
environment:
WEBAPP_URL: ${WEBAPP_URL}
BETTER_AUTH_URL: ${WEBAPP_URL}
NEXTAUTH_URL: ${WEBAPP_URL}
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/formbricks?schema=public
BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}
NEXTAUTH_SECRET: ${BETTER_AUTH_SECRET}
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
CRON_SECRET: ${CRON_SECRET}
REDIS_URL: redis://redis:6379
HUB_API_KEY: ${HUB_API_KEY}
HUB_API_URL: ${HUB_API_URL}
CUBEJS_API_URL: ${CUBEJS_API_URL}
CUBEJS_API_SECRET: ${CUBEJS_API_SECRET}
CUBEJS_JWT_ISSUER: formbricks-web
CUBEJS_JWT_AUDIENCE: formbricks-cube
EMAIL_VERIFICATION_DISABLED: "1"
PASSWORD_RESET_DISABLED: "1"
SKIP_STARTUP_MIGRATION: "true"
AUTHZED_ENABLED: "true"
AUTHZED_ENDPOINT: spicedb:50051
AUTHZED_TOKEN: ${AUTHZED_TOKEN}
AUTHZED_SYSTEM_KEY: formbricks
AUTHZED_INSECURE: "true"
AUTHZED_CONSISTENCY: fully_consistent
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:3000/api/v2/health || exit 1"]
interval: 10s
timeout: 5s
retries: 30
start_period: 30s
volumes:
postgres:
redis:
saml-connection:
uploads:
Go, gRPC and Protobuf done right, LLM agents in production, and the hard parts of shipping a first product.
Show that Formbricks is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 264 s: ghcr.io/formbricks/formbricks:6.1.2, authzed/spicedb:v1.52.0, ghcr.io/formbricks/formbricks:6.1.2, ghcr.io/formbricks/formbricks:6.1.2, pgvector/pgvector:pg18, pgvector/pgvector:pg18, authzed/spicedb:v1.52.0, valkey/valkey:8.0.2.
Based on the upstream setup. Official compose adapted for single-host deployment: inlines SpiceDB database bootstrap; excludes Cube and Hub analytics (require host file mounts and reverse proxy path rewrites); externalizes secrets to .env.
formbricks-1 | 2026-11-02T01:42:57.977597043Z {"level":"error","time":1793583777959,"pid":1,"hostname":"eb998bcf4f6e","name":"formbricks","err":{"type":"d","message":"jwt malformed","stack":"JsonWebTokenError: jwt malformed\n at b.exports [as verify] (/home/nextjs/apps/web/.next/server/chunks/ssr/[root-of-the-server]__18r4_mhetrt46._.js:2660:2269193)\n at /home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_modules_ee_contacts_lib_contact-survey-link_ts_0jhwsn4x0o9k0._.js:2:1045\n at Module.r (/home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_1u70ag1_goet_._.js:2:724)","name":"JsonWebTokenError"},"msg":"Error verifying contact survey token"}
formbricks-1 | 2026-11-02T01:42:57.977613085Z {"level":"error","time":1793583777976,"pid":1,"hostname":"eb998bcf4f6e","name":"formbricks","err":{"type":"d","message":"jwt malformed","stack":"JsonWebTokenError: jwt malformed\n at b.exports [as verify] (/home/nextjs/apps/web/.next/server/chunks/ssr/[root-of-the-server]__18r4_mhetrt46._.js:2660:2269193)\n at /home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_modules_ee_contacts_lib_contact-survey-link_ts_0jhwsn4x0o9k0._.js:2:1045\n at s (/home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_1u70ag1_goet_._.js:2:1001)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)\n at runNextTicks (node:internal/process/task_queues:69:3)\n at listOnTimeout (node:internal/timers:644:9)\n at process.processTimers (node:internal/timers:618:7)","name":"JsonWebTokenError"},"msg":"Error verifying contact survey token"}
formbricks-1 | 2026-11-02T01:42:57.977621960Z {"level":"error","time":1793583777976,"pid":1,"hostname":"eb998bcf4f6e","name":"formbricks","err":{"type":"d","message":"jwt malformed","stack":"JsonWebTokenError: jwt malformed\n at b.exports [as verify] (/home/nextjs/apps/web/.next/server/chunks/ssr/[root-of-the-server]__18r4_mhetrt46._.js:2660:2269193)\n at /home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_modules_ee_contacts_lib_contact-survey-link_ts_0jhwsn4x0o9k0._.js:2:1045\n at s (/home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_1u70ag1_goet_._.js:2:1001)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)\n at runNextTicks (node:internal/process/task_queues:69:3)\n at listOnTimeout (node:internal/timers:644:9)\n at process.processTimers (node:internal/timers:618:7)","name":"JsonWebTokenError"},"msg":"Error verifying contact survey token"}
formbricks-1 | 2026-11-02T01:42:58.126809127Z {"level":"error","time":1793583778125,"pid":1,"hostname":"eb998bcf4f6e","name":"formbricks","err":{"type":"d","message":"jwt malformed","stack":"JsonWebTokenError: jwt malformed\n at b.exports [as verify] (/home/nextjs/apps/web/.next/server/chunks/ssr/[root-of-the-server]__18r4_mhetrt46._.js:2660:2269193)\n at /home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_modules_ee_contacts_lib_contact-survey-link_ts_0jhwsn4x0o9k0._.js:2:1045\n at Module.r (/home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_1u70ag1_goet_._.js:2:724)","name":"JsonWebTokenError"},"msg":"Error verifying contact survey token"}
formbricks-1 | 2026-11-02T01:42:58.128858543Z {"level":"error","time":1793583778127,"pid":1,"hostname":"eb998bcf4f6e","name":"formbricks","err":{"type":"d","message":"jwt malformed","stack":"JsonWebTokenError: jwt malformed\n at b.exports [as verify] (/home/nextjs/apps/web/.next/server/chunks/ssr/[root-of-the-server]__18r4_mhetrt46._.js:2660:2269193)\n at /home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_modules_ee_contacts_lib_contact-survey-link_ts_0jhwsn4x0o9k0._.js:2:1045\n at s (/home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_1u70ag1_goet_._.js:2:1001)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)\n at runNextTicks (node:internal/process/task_queues:69:3)\n at listOnTimeout (node:internal/timers:644:9)\n at process.processTimers (node:internal/timers:618:7)","name":"JsonWebTokenError"},"msg":"Error verifying contact survey token"}
formbricks-1 | 2026-11-02T01:42:58.138190043Z {"level":"error","time":1793583778131,"pid":1,"hostname":"eb998bcf4f6e","name":"formbricks","err":{"type":"d","message":"jwt malformed","stack":"JsonWebTokenError: jwt malformed\n at b.exports [as verify] (/home/nextjs/apps/web/.next/server/chunks/ssr/[root-of-the-server]__18r4_mhetrt46._.js:2660:2269193)\n at /home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_modules_ee_contacts_lib_contact-survey-link_ts_0jhwsn4x0o9k0._.js:2:1045\n at Module.r (/home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_1u70ag1_goet_._.js:2:724)","name":"JsonWebTokenError"},"msg":"Error verifying contact survey token"}
formbricks-1 | 2026-11-02T01:42:58.138201127Z {"level":"error","time":1793583778133,"pid":1,"hostname":"eb998bcf4f6e","name":"formbricks","err":{"type":"d","message":"jwt malformed","stack":"JsonWebTokenError: jwt malformed\n at b.exports [as verify] (/home/nextjs/apps/web/.next/server/chunks/ssr/[root-of-the-server]__18r4_mhetrt46._.js:2660:2269193)\n at /home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_modules_ee_contacts_lib_contact-survey-link_ts_0jhwsn4x0o9k0._.js:2:1045\n at s (/home/nextjs/apps/web/.next/server/chunks/ssr/apps_web_1u70ag1_goet_._.js:2:1001)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)\n at runNextTicks (node:internal/process/task_queues:69:3)\n at listOnTimeout (node:internal/timers:644:9)\n at process.processTimers (node:internal/timers:618:7)","name":"JsonWebTokenError"},"msg":"Error verifying contact survey token"}
formbricks-1 | 2026-11-02T01:42:58.903435294Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:42:58.903455710Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:42:58.944002169Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:42:58.944016294Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:42:59.949014836Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:42:59.949036544Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:42:59.950470044Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:42:59.950476211Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:02.050872879Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:02.050980254Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:02.052062129Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:02.052072587Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:03.062995462Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:03.063014004Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:03.064138712Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:03.064144504Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:04.018133588Z Error: The Server Reference ID did not match the expected format. Received "x".
formbricks-1 | 2026-11-02T01:43:04.018147588Z Read more: https://nextjs.org/docs/messages/failed-to-find-server-action
formbricks-1 | 2026-11-02T01:43:04.018148921Z at Object.get (apps/web/.next/server/chunks/[root-of-the-server]__02_2sm-ocfxhk._.js:3:2682)
formbricks-1 | 2026-11-02T01:43:04.023742463Z Error: The Server Reference ID did not match the expected format. Received "x".
formbricks-1 | 2026-11-02T01:43:04.023751921Z Read more: https://nextjs.org/docs/messages/failed-to-find-server-action
formbricks-1 | 2026-11-02T01:43:04.023753088Z at Object.get (apps/web/.next/server/chunks/[root-of-the-server]__02_2sm-ocfxhk._.js:3:2682)
formbricks-1 | 2026-11-02T01:43:04.047477504Z Error: The Server Reference ID did not match the expected format. Received "x".
formbricks-1 | 2026-11-02T01:43:04.047486213Z Read more: https://nextjs.org/docs/messages/failed-to-find-server-action
formbricks-1 | 2026-11-02T01:43:04.047487463Z at Object.get (apps/web/.next/server/chunks/[root-of-the-server]__02_2sm-ocfxhk._.js:3:2682)
formbricks-1 | 2026-11-02T01:43:04.058536213Z Error: The Server Reference ID did not match the expected format. Received "x".
formbricks-1 | 2026-11-02T01:43:04.058544213Z Read more: https://nextjs.org/docs/messages/failed-to-find-server-action
formbricks-1 | 2026-11-02T01:43:04.058545379Z at Object.get (apps/web/.next/server/chunks/[root-of-the-server]__02_2sm-ocfxhk._.js:3:2682)
formbricks-1 | 2026-11-02T01:43:07.025764298Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:07.025805631Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:07.027312339Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:07.027320673Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:07.033111839Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:07.033124089Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:07.034269714Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:07.034274339Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:07.056666589Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:07.056684423Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:07.057827131Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:07.057833798Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:07.877307090Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:07.877336965Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:07.906935715Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:07.906972381Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:08.079764006Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:08.079775590Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:08.098468548Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:08.098480048Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:08.100347215Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:08.100380590Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:08.176400090Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:08.176417465Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:08.887549882Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:08.888314132Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:08.890343507Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:08.890350590Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:09.983469549Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:09.983491632Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:09.983493007Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:09.983493882Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:33.894420629Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:33.894452045Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:33.897048670Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:33.897060670Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:36.352618505Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:36.352666588Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:36.359096171Z Error: Invalid Server Actions request.
formbricks-1 | 2026-11-02T01:43:36.359109755Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:41.970657341Z ⨯ TypeError: Failed to parse body as FormData.
formbricks-1 | 2026-11-02T01:43:41.970688591Z at ignore-listed frames {
formbricks-1 | 2026-11-02T01:43:41.970690257Z [cause]: TypeError: missing boundary in content-type header
formbricks-1 | 2026-11-02T01:43:41.970691216Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:41.970692049Z }
formbricks-1 | 2026-11-02T01:43:41.971466299Z ⨯ TypeError: Failed to parse body as FormData.
formbricks-1 | 2026-11-02T01:43:41.971472132Z at ignore-listed frames {
formbricks-1 | 2026-11-02T01:43:41.971473257Z [cause]: TypeError: missing boundary in content-type header
formbricks-1 | 2026-11-02T01:43:41.971474216Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:41.971475007Z }
formbricks-1 | 2026-11-02T01:43:41.979161507Z ⨯ TypeError: Failed to parse body as FormData.
formbricks-1 | 2026-11-02T01:43:41.979176507Z at ignore-listed frames {
formbricks-1 | 2026-11-02T01:43:41.979178299Z [cause]: TypeError: missing boundary in content-type header
formbricks-1 | 2026-11-02T01:43:41.979179299Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:41.979180132Z }
formbricks-1 | 2026-11-02T01:43:41.979356299Z ⨯ TypeError: Failed to parse body as FormData.
formbricks-1 | 2026-11-02T01:43:41.979362966Z at ignore-listed frames {
formbricks-1 | 2026-11-02T01:43:41.979366591Z [cause]: TypeError: missing boundary in content-type header
formbricks-1 | 2026-11-02T01:43:41.979367716Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:41.979368632Z }
formbricks-1 | 2026-11-02T01:43:42.260501591Z ⨯ TypeError: Failed to parse body as FormData.
formbricks-1 | 2026-11-02T01:43:42.260520716Z at ignore-listed frames {
formbricks-1 | 2026-11-02T01:43:42.260521966Z [cause]: TypeError: missing boundary in content-type header
formbricks-1 | 2026-11-02T01:43:42.260522883Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:42.260523674Z }
formbricks-1 | 2026-11-02T01:43:42.260886716Z ⨯ TypeError: Failed to parse body as FormData.
formbricks-1 | 2026-11-02T01:43:42.260891674Z at ignore-listed frames {
formbricks-1 | 2026-11-02T01:43:42.260892508Z [cause]: TypeError: missing boundary in content-type header
formbricks-1 | 2026-11-02T01:43:42.260893299Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:42.260894008Z }
formbricks-1 | 2026-11-02T01:43:42.980505175Z ⨯ TypeError: Failed to parse body as FormData.
formbricks-1 | 2026-11-02T01:43:42.980520550Z at ignore-listed frames {
formbricks-1 | 2026-11-02T01:43:42.980522008Z [cause]: TypeError: missing boundary in content-type header
formbricks-1 | 2026-11-02T01:43:42.980522966Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:42.980523800Z }
formbricks-1 | 2026-11-02T01:43:42.980708883Z ⨯ TypeError: Failed to parse body as FormData.
formbricks-1 | 2026-11-02T01:43:42.980712841Z at ignore-listed frames {
formbricks-1 | 2026-11-02T01:43:42.980713758Z [cause]: TypeError: missing boundary in content-type header
formbricks-1 | 2026-11-02T01:43:42.980714591Z at ignore-listed frames
formbricks-1 | 2026-11-02T01:43:42.980715466Z }
authzed-db-bootstrap-1 | 2026-11-02T01:42:09.126928092Z CREATE ROLE
authzed-db-bootstrap-1 | 2026-11-02T01:42:09.130384175Z ALTER ROLE
authzed-db-bootstrap-1 | 2026-11-02T01:42:09.144810133Z CREATE DATABASE
authzed-db-bootstrap-1 | 2026-11-02T01:42:09.144984383Z ALTER DATABASE
authzed-initialize-1 | 2026-11-02T01:42:16.236454345Z {"audit":{"counters":{"failed":0,"ignored":0,"invalid":0,"mismatchedParents":0,"mismatchedPermissions":0,"missing":0,"orphaned":0,"pruned":0,"reconciled":0,"scanned":0,"skipped":0,"unmanaged":0},"failureCount":0,"status":"reconciled","truncated":false},"datastoreMigrations":"ready","health":{"latencyMs":26,"status":"healthy"},"outbox":{"deadLettered":0,"oldestPendingAgeSeconds":null,"overdueRevocations":0,"pending":0,"revocationsPastCritical":0,"revocationsPastWarning":0},"schema":{"differenceCount":0,"remoteDigest":"sha256:4ba4fbafad5e1f4704d7c434371c1d7da863907b5cdce13ce0113286e7fa0fe3","remoteState":"present","sourceDigest":"sha256:e8d2e5082d530ae37041c6e4abc08163c6252877618de28a34f495baf1c54a34","status":"applied"},"status":"prepared"}