<img width="300" src="https://github.com/clearflask/clearflask/raw/2.6.2/clearflask-frontend/public/img/clearflask-text.png" alt="ClearFlask">
Open-source Feedback Management Tool.
Alternative to Canny and UserVoice.



Support our open-source development by choosing cloud hosting with scalable pricing, check us out on our website.
For a quick start using Docker, download
the Docker Compose service file
as docker-compose.yml, and run the following:
docker-compose --profile with-deps up
Point your browser at http://localhost and create an account using email admin@localhost.
You also want to setup outgoing mail, read the Email section.
If you wish to host it on your domain other than localhost, read the DNS section and then
setup SSL/TLS certificates.
For self-hosting, we provide Kubernetes Helm charts.
helm repo add clearflask https://clearflask.github.io/clearflask
helm repo update
helm install clearflask-deps clearflask/clearflask-dependencies \
--set mysql.enabled=true \
--set localstack.enabled=true
TOKEN_SIGNER=$(openssl rand -base64 172 | tr -d '\n')
CURSOR_KEY=$(openssl rand -base64 16)
SSO_SECRET=$(uuidgen)
CONNECT_TOKEN=$(uuidgen)
helm install clearflask clearflask/clearflask \
--set global.domain=yourdomain.com \
--set server.config.searchEngine=READWRITE_MYSQL \
--set server.secrets.tokenSignerPrivKey="$TOKEN_SIGNER" \
--set server.secrets.cursorSharedKey="$CURSOR_KEY" \
--set server.secrets.ssoSecretKey="$SSO_SECRET" \
--set server.secrets.connectToken="$CONNECT_TOKEN"
kubectl port-forward svc/clearflask-connect 3000:80
# Visit http://localhost:3000
See the Helm Chart documentation for more information.
There are several dependencies that you can swap out for ClearFlask:
And a few optional:
clearflask-connect)You can spin up all dependencies via Docker.
Simply add the --profile with-deps to your docker-compose command when starting ClearFlask.
All database content will be persisted to local filesystem under data folder.
Production-ready Helm charts are available:
helm repo add clearflask https://clearflask.github.io/clearflask
helm repo update
helm install clearflask-deps clearflask/clearflask-dependencies \
--set mysql.enabled=true \
--set localstack.enabled=true
This deploys:
All databases are persistent by default using PersistentVolumeClaims. See the Helm Chart documentation for configuration options.
For production workload, you will want to spin up these dependencies yourself and point ClearFlask to their endpoints.
For AWS services, clearflask-server auto-detects Access Keys using either a configuration property or the default
locations. If you are running in EC2 or ECS, keys detection is automated, you just need to create the appropriate IAM
role.
Provide IAM access including create table permission as table is created automatically by ClearFlask on startup.
IAM actions:
Create a private bucket with IAM access to ClearFlask.
IAM actions:
You can also use an API-compatible alternative service such as Wasabi, MinIO...
Recommended is AWS ES, give the proper IAM access
IAM actions, all in these categories:
Alternatively you can deploy it yourself (cheaper) or host it on Elastic. Or you can choose to use MySQL/Aurora as a cheaper alternative.
In order to setup SES, you need to seek limit increase via AWS support.
Change the config property ...EmailServiceImpl$Config.useService to ses and give the proper IAM access.
IAM actions:
Alternatively use any other email provider and fill out the SMTP settings
ClearFlask consists of two components:
No build required - uses pre-built Docker images.
# Add Helm repository
helm repo add clearflask https://clearflask.github.io/clearflask
helm repo update
# Generate required secrets
TOKEN_SIGNER=$(openssl rand -base64 172 | tr -d '\n')
CURSOR_KEY=$(openssl rand -base64 16)
SSO_SECRET=$(uuidgen)
CONNECT_TOKEN=$(uuidgen)
# Install ClearFlask
helm install clearflask clearflask/clearflask \
--set global.domain=yourdomain.com \
--set server.config.searchEngine=READWRITE_MYSQL \
--set server.secrets.tokenSignerPrivKey="$TOKEN_SIGNER" \
--set server.secrets.cursorSharedKey="$CURSOR_KEY" \
--set server.secrets.ssoSecretKey="$SSO_SECRET" \
--set server.secrets.connectToken="$CONNECT_TOKEN"
Features:
For detailed configuration options, deployment scenarios (AWS EKS, GKE, AKS), and troubleshooting, see the Helm Chart documentation.
docker-compose --profile with-deps up which creates few configuration files in your local directoryserver/config-selfhost.cfg.connect/connect.config.json.On the first run, install-specific secrets (VAPID keypair, cursor encryption key, token signing key, SSO key)
are generated automatically into server/config-selfhost.cfg. Installs created before this behavior existed
share publicly-known default secrets: check your server logs for a SECURITY: warning and regenerate any
flagged values using the commands in the config file comments.
Instead of editing the configuration files, common settings can be set with environment variables on the
clearflask-server container. They are applied into config-selfhost.cfg on startup and always take
precedence over values in the file. This is useful on platforms without persistent-file editing
(Railway, PikaPods, Elestio, ...).
| Environment variable | Purpose |
|---|---|
CLEARFLASK_DOMAIN |
Your domain, e.g. feedback.example.com |
CLEARFLASK_SUPER_ADMIN_EMAIL |
Email address allowed to sign up as super-admin |
CLEARFLASK_SIGNUP_ENABLED |
true/false: allow further signups |
CLEARFLASK_AUTH_COOKIE_SECURE |
true when serving over HTTPS |
CLEARFLASK_CONNECT_TOKEN |
Shared secret between Connect and Server; set the same value on both containers |
CLEARFLASK_TELEMETRY_ENABLED |
false to disable telemetry |
CLEARFLASK_SMTP_HOST / CLEARFLASK_SMTP_PORT / CLEARFLASK_SMTP_USER / CLEARFLASK_SMTP_PASSWORD / CLEARFLASK_SMTP_STRATEGY |
Outgoing email via SMTP; setting the host also switches email service to SMTP |
CLEARFLASK_EMAIL_DISPLAY_NAME / CLEARFLASK_EMAIL_FROM_LOCAL_PART / CLEARFLASK_EMAIL_FROM_DOMAIN |
Outgoing email sender identity |
CLEARFLASK_MYSQL_HOST / CLEARFLASK_MYSQL_USER / CLEARFLASK_MYSQL_PASSWORD |
MySQL/MariaDB connection |
CLEARFLASK_DYNAMO_ENDPOINT / CLEARFLASK_ES_ENDPOINT / CLEARFLASK_S3_ENDPOINT |
Dependency service endpoints |
CLEARFLASK_EXTRA_PROPS |
Newline-separated full.property.key=value lines for any other setting |
The clearflask-connect container supports: CLEARFLASK_CONNECT_TOKEN, CLEARFLASK_DOMAIN,
CLEARFLASK_API_BASE_PATH, CLEARFLASK_LISTEN_PORT, CLEARFLASK_DISABLE_AUTO_FETCH_CERTIFICATE
and CLEARFLASK_FORCE_REDIRECT_HTTPS, overriding connect.config.json.
By default, email is configured for AWS SES pointing to your Localstack (which doesn't do anything).
You can choose to setup your own SMTP server or use AWS SES.
Change the configuration to SMTP:
com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.useService: smtpThen you need to gather your SMTP settings and fill out the following:
com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.smtpStrategy: SMTP_TLS
(SMTP_TLS, SMTPS, SMTP)com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.smtpHost: smtp.gmail.com
(e.g. smtp.gmail.com)com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.smtpPort: 587
(587 for SMTP_TLS, 465 for SMTPS, 25 for SMTP)com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.smtpUser: my.name@gmail.com
(e.g. my.name@gmail.com)com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.smtpPassword: asdfqwerzxcvasdf
(To get this working, you need to enable IMAP if not enabled. If you use 2FA, you need to generate an app password and
use it here)com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.emailDisplayName: ClearFlask
(e.g. 'ClearFlask for MyCompany')com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.fromEmailLocalPart: my.name
(first part of your email, for my.name@gmail.com, it would be 'my.name')com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.fromEmailDomainOverride: gmail.com
(domain part of your email, for my.name@gmail.com, it would be 'gmail.com')Change the configuration to SMTP:
com.smotana.clearflask.core.push.provider.EmailServiceImpl$Config.useService: sesThen fill out the SES settings:
com.smotana.clearflask.core.email.AmazonSimpleEmailServiceProvider$Config.region: us-east-1com.smotana.clearflask.core.email.AmazonSimpleEmailServiceProvider$Config.serviceEndpoint: (Leave blank, unless you
need to override)By default, everything is assumed to be on localhost. If you wish to host your portal on yoursite.com
or 192.168.1.123, set the following properties:
connect.config.json:parentDomain: yoursite.com$ claude mcp add clearflask \
-- python -m otcore.mcp_server <graph>