---
title: "Deploy Formbricks"
description: "Formbricks 6.1: open-source surveys, NPS and feedback forms, self-hosted."
category: "Analytics"
url: https://railway.com/deploy/formbricks-1
---

# Deploy Formbricks

Formbricks 6.1: open-source surveys, NPS and feedback forms, self-hosted.

**[Deploy Formbricks on Railway](https://railway.com/template/formbricks-1)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/formbricks-1/manifest.json

- **Creator:** Agaz Self-Host
- **Category:** Analytics

## Template content

### Formbricks

- **Image:** ghcr.io/formbricks/formbricks:6.1.4@sha256:bd5435be93609a528127f95e8720e63902d90330fffe9bbd2d888cfdfd800e5b
- **Start command:** `/bin/sh -c "(until formbricks-authzed upgrade prepare; do echo SpiceDB schema not prepared yet, retrying in 15s; sleep 15; done) & exec /home/nextjs/start.sh"`
- **Health check:** /health
- **Public domain:** Yes

### SpiceDB

- **Image:** authzed/spicedb:v1.52.0-debug@sha256:451007f593c3b1df3b254f1f3677354ca514af234f11b97210f2160a938cc158
- **Start command:** `/bin/sh -c "until spicedb datastore migrate head --datastore-engine postgres; do echo Waiting for the spicedb database, retrying in 5s; sleep 5; done; exec spicedb serve --datastore-engine postgres --log-format json --telemetry-endpoint="`
- **Health check:** /metrics

### Hub

- **Image:** ghcr.io/formbricks/hub:0.14.2@sha256:0049b20fea8023b12dced414c731ba8dbf3d39aa7b3de738d5837222c9c7b2e0
- **Start command:** `/bin/sh -c "until /usr/local/bin/goose -dir /app/migrations postgres \"$DATABASE_URL\" up; do echo Waiting for the hub database, retrying in 5s; sleep 5; done; /usr/local/bin/river migrate-up --database-url \"$DATABASE_URL\" && exec /app/hub-api"`
- **Health check:** /health

### Hub Worker

- **Image:** ghcr.io/formbricks/hub:0.14.2@sha256:0049b20fea8023b12dced414c731ba8dbf3d39aa7b3de738d5837222c9c7b2e0
- **Start command:** `/bin/sh -c "until wget -q -O /dev/null \"$HUB_HEALTH_URL\"; do echo Waiting for Hub to finish its migrations; sleep 5; done; exec /app/hub-worker"`

### Cube

- **Image:** ghcr.io/aalfath/formbricks-railway-cube:6.1.4-2@sha256:74384d8e8fecb80bf81e9edb42c6f318bc60efc5bfbb74e37d1fd5cd3462dbab
- **Health check:** /readyz

### Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### Redis https://cdn.sanity.io/images/sy1jschh/production/0ce0bfdcfbdbf69662b1116671f97c2dd788b655-157x157.svg

- **Image:** redis:8.2
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH"`

## Buckets

- **uploads**

## Documentation

# Deploy and Host Formbricks on Railway

Formbricks is an open-source survey and experience management platform, often self-hosted as an alternative to Typeform or Qualtrics. You build link surveys, website and in-app surveys, and NPS, CSAT or CES questionnaires in a visual editor, then review the responses, with all of the data kept in your own database.

## About Hosting Formbricks

Formbricks 6 runs as several services. This template deploys Formbricks 6.1.4 with everything its official Docker Compose setup expects: PostgreSQL with pgvector, Redis for sessions and caching, Formbricks Hub and its worker, Cube for analytics, SpiceDB for permissions, and a Railway Bucket for file uploads. The services talk over Railway's private network, and only Formbricks gets a public domain. Secrets are generated at deploy time, and every image is pinned to a fixed version. The first deploy takes a few minutes while the databases are created and migrated. When Formbricks is up, open its public URL and create the administrator account.

## Common Use Cases

* Customer feedback surveys (NPS, CSAT, CES) shared as links or embedded on your website
* In-app product surveys and user research in web and mobile apps, using the Formbricks SDK
* Employee and internal surveys, such as eNPS, onboarding or event feedback, where responses must stay on your own infrastructure

## Dependencies for Formbricks Hosting

* PostgreSQL with pgvector (Railway Postgres): Formbricks data, plus separate `hub` and `spicedb` databases on the same server
* Redis (Railway Redis): sessions, caching and rate limiting
* Formbricks Hub and Hub Worker: the feedback record API and its background jobs
* Cube: the analytics query layer
* SpiceDB: permissions
* Railway Bucket: S3-compatible storage for uploaded files

### Deployment Dependencies

* [Formbricks self-hosting documentation](https://formbricks.com/docs/self-hosting/overview)
* [Formbricks 6.1.4 release](https://github.com/formbricks/formbricks/releases/tag/6.1.4)
* [Upstream Docker Compose for 6.1.4](https://github.com/formbricks/formbricks/blob/6.1.4/docker/docker-compose.yml)
* [Formbricks source code](https://github.com/formbricks/formbricks)

### Implementation Details

**First login.** The first person to open the URL creates the administrator account. After that, public sign-up is closed, and other people join through invitations.

**Email (SMTP) is not configured.** Without it, Formbricks can't send invitations (copy the invite link from the organization settings instead), email verification and password reset are turned off, and no email notifications are sent. To turn email on, add these variables to the Formbricks service: `MAIL_FROM`, `MAIL_FROM_NAME`, `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD`, and `SMTP_SECURE_ENABLED=1` if your server uses port 465. Then set `EMAIL_VERIFICATION_DISABLED` and `PASSWORD_RESET_DISABLED` to `0` if you want those features.

**File uploads.** Survey images, file-upload questions and logos are stored in the Railway Bucket. The bucket stays private, and Formbricks signs every upload and download. When it starts, the Cube service adds a CORS rule to the bucket, but only if the bucket has none, so that browsers can upload directly.

**Enterprise features.** Formbricks 6 won't start without Hub and Cube, but the screens that use them (Feedback Data and Analysis dashboards) need a Formbricks Enterprise licence (`ENTERPRISE_LICENSE_KEY`). Surveys and responses work without one.

**Resources.** About 1.2 GB of RAM when idle across all services, most of it Formbricks itself.

**Versions.** Formbricks 6.1.4, Hub 0.14.2, Cube 1.7.50 and SpiceDB 1.52.0, as in upstream's compose for 6.1.4. The Cube image and its setup script are in [aalfath/formbricks-railway-template](https://github.com/aalfath/formbricks-railway-template).

## Why Deploy Formbricks on Railway?


Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Formbricks on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.



## Similar templates

- [Plausible WordPress](https://railway.com/deploy/deploy-plausible-for-wordpress-sites) — Cookie-free WordPress stats from your own Plausible
- [Typesense Multilingual](https://railway.com/deploy/deploy-typesense-multilingual-search) — Locale-aware multilingual search with Typesense
- [Formbricks](https://railway.com/deploy/formbricks-surveys) — Surveys, NPS and in-app feedback on your own Postgres, Hub and Cube

Open this page in a browser: https://railway.com/deploy/formbricks-1
