Configuration options
Options are split into a few types:
- Co-op Cloud options are set in your co-op cloud env configuration and relate to Co-op Cloud specific settings
- Core options are set on the server (e.g. co-op cloud env, or if not using co-op cloud, using environment variables)
- App options can be set via environment options, but can also be set using a nice UI
Co-op Cloud options
TYPE
,SITE_URL
,LETS_ENCRYPT_ENV
- leave as-isDOMAIN
- this is the domain name which resolves to karrot. Should be set to the same as app name
GeoIP
GeoIP is optional. The Karrot application just needs the path to the database set via the GeoIP Path option.
To keep the GeoIP database up to date though, you need to run geoipupdate. You need a maxmind account to get GeoIP data. You only need the free account and then you can get an account id and license key.
- in the Co-op Cloud setup this can be achieved by including
compose.geoip.yml
and settingMAXMIND_ACCOUNT_ID
and a secret forMAXMIND_LICENSE_KEY
- if you are using a custom setup, then you need to configure geoipupdate yourself
Core options
This documentation is generated by the server, and available in markdown or html format.
mode (optional)
field | mode |
env var | MODE |
default | dev |
base_url (optional)
field | base_url |
env var | BASE_URL , SITE_URL |
default | http://localhost:8000 |
secret_key
field | secret_key |
env var | SECRET_KEY |
Admin Emails (optional)
Email Address of Instance Admins
field | admin_emails |
env var | ADMIN_EMAILS |
examples | admin1@example.com,admin2@example.com |
Instance admins can access the admin interface, e.g. to configure App Settings
Frontend directory (optional)
Directory to serve frontend files from, if you are not using something else to serve them
field | frontend_dir |
env var | FRONTEND_DIR |
Allowed hosts (optional)
field | allowed_hosts |
env var | ALLOWED_HOSTS |
default | * |
CSRF Trusted Origins (optional)
field | csrf_trusted_origins |
env var | CSRF_TRUSTED_ORIGINS |
default | http://127.0.0.1:8000 |
GeoIP Path (optional)
field | geoip_path |
env var | GEOIP_PATH |
Listen options
File descriptor (optional)
field | listen.fd |
env var | LISTEN_FD |
Host (optional)
field | listen.host |
env var | LISTEN_HOST |
Port (optional)
field | listen.port |
env var | LISTEN_PORT |
Unix socket (optional)
field | listen.socket |
env var | LISTEN_SOCKET |
Concurrency (optional)
How many web workers
field | listen.concurrency |
env var | LISTEN_CONCURRENCY , WORKER_COUNT |
default | 1 |
request timeout seconds (optional)
field | listen.request_timeout_seconds |
env var | REQUEST_TIMEOUT_SECONDS |
default | 60 |
Database options
Database name
field | database.name |
env var | DATABASE_NAME |
User
field | database.user |
env var | DATABASE_USER |
Password
field | database.password |
env var | DATABASE_PASSWORD |
Host (optional)
field | database.host |
env var | DATABASE_HOST |
default | localhost |
Port (optional)
field | database.port |
env var | DATABASE_PORT |
default | 5432 |
Connection max age (optional)
field | database.connection_max_age |
env var | DATABASE_CONN_MAX_AGE |
default | 0 |
database statement query timeout during requests (optional)
field | database.request_timeout_seconds |
env var | REQUEST_DATABASE_TIMEOUT_SECONDS |
default | 60 |
Redis options
Host (optional)
field | redis.host |
env var | REDIS_HOST |
default | localhost |
Port (optional)
field | redis.port |
env var | REDIS_PORT |
default | 6379 |
Unix socket (optional)
field | redis.socket |
env var | REDIS_SOCKET |
Database (optional)
field | redis.db |
env var | REDIS_DB |
default | 0 |
Worker options
immediate (optional)
field | worker.immediate |
default | False |
count (optional)
field | worker.count |
default | 1 |
Upload options
dir (optional)
field | uploads.dir |
env var | FILE_UPLOAD_DIR |
default | ./uploads/ |
temp_dir (optional)
field | uploads.temp_dir |
env var | FILE_UPLOAD_TEMP_DIR |
permissions (optional)
field | uploads.permissions |
env var | FILE_UPLOAD_PERMISSIONS |
directory_permissions (optional)
field | uploads.directory_permissions |
env var | FILE_UPLOAD_DIRECTORY_PERMISSIONS |
Plugin options
dir (optional)
field | plugins.dir |
env var | PLUGIN_DIR |
default | ./plugins/ |
Sentry options
dsn (optional)
field | sentry.dsn |
env var | SENTRY_DSN |
environment (optional)
field | sentry.environment |
env var | SENTRY_ENVIRONMENT |
default | production |
client_dsn (optional)
field | sentry.client_dsn |
env var | SENTRY_CLIENT_DSN |
release (optional)
field | sentry.release |
env var | SENTRY_RELEASE |
release_use_git_rev (optional)
field | sentry.release_use_git_rev |
env var | SENTRY_RELEASE_USE_GIT_REV |
default | True |
Influxdb options
host
field | influx_db.host |
env var | INFLUXDB_HOST |
port
field | influx_db.port |
env var | INFLUXDB_PORT |
user
field | influx_db.user |
env var | INFLUXDB_USER |
password
field | influx_db.password |
env var | INFLUXDB_PASSWORD |
database name
field | influx_db.database |
env var | INFLUXDB_NAME |
timeout (optional)
field | influx_db.timeout |
env var | INFLUXDB_TIMEOUT |
default | 5 |
App options
This documentation is generated by the server, and available in markdown or html format.
Admin Chat Webhook (optional)
field | admin_chat_webhook |
env var | ADMIN_CHAT_WEBHOOK |
General
Site Name (optional)
The name of the site, it will show up in the site title, and other places.
field | general.name |
env var | SITE_NAME |
default | Karrot |
Site Logo URL (optional)
URL to an image that will be used as the logo, a PNG with transparent background is recommended
field | general.logo |
env var | SITE_LOGO |
PNG with transparent background is recommended because there is not good enough support in email clients for other formats, e.g. SVG.
For now, you have to find a way to host the file yourself and provide the URL here. In the future you will be able to upload it here.
Account
Email Verification Time (hours) (optional)
Time until a verification code expires
field | account.email_verification_time_limit_hours |
env var | EMAIL_VERIFICATION_TIME_LIMIT_HOURS |
default | 168 |
Password Reset Time (minutes) (optional)
Time until a password reset link expires
field | account.password_reset_time_limit_minutes |
env var | PASSWORD_RESET_TIME_LIMIT_MINUTES |
default | 180 |
Account Delete Time (minutes) (optional)
Time until an account delete email link expires
field | account.account_delete_time_limit_minutes |
env var | ACCOUNT_DELETE_TIME_LIMIT_MINUTES |
default | 180 |
Email
Configure email settings
Email Backend (optional)
Choose how sending email is handled
field | email.backend |
env var | EMAIL_BACKEND |
default | console |
From Address (optional)
field | email.from_email |
env var | EMAIL_FROM |
default | karrot@example.com |
examples | karrot@example.com |
Email Reply Domain (optional)
Domain to which email replies go to
field | email.reply_domain |
env var | EMAIL_REPLY_DOMAIN |
examples | replies.example.com |
Email Reply Trimmer URL (optional)
Service to handle email reply trimming
field | email.reply_trimmer_url |
env var | EMAIL_REPLY_TRIMMER_URL |
examples | http://localhost:4567/trim |
A service to trim the reply section from emails when receiving incoming emails.
See https://github.com/karrot-dev/email_reply_trimmer_service
SMTP
Host
The host to use for sending email
field | email.smtp.host |
env var | SMTP_HOST |
Port (optional)
Port to use for the SMTP server
field | email.smtp.port |
env var | SMTP_PORT |
default | 25 |
User (optional)
Username to use for the SMTP server
field | email.smtp.user |
env var | SMTP_USER |
Password (optional)
Password to use for the SMTP server
field | email.smtp.password |
env var | SMTP_PASSWORD |
Use TLS (optional)
Use explicit TLS connection, generally on port 587
field | email.smtp.use_tls |
env var | SMTP_USE_TLS |
default | False |
Use SSL (optional)
Use implicit TLS, generally on port 465
field | email.smtp.use_ssl |
env var | SMTP_USE_SSL |
default | False |
SSL Keyfile (optional)
Path to a PEM-formatted private key file
field | email.smtp.ssl_keyfile |
env var | SMTP_SSL_KEYFILE |
SSL Certfile (optional)
Path to a PEM-formatted certificate chain file
field | email.smtp.ssl_certfile |
env var | SMTP_SSL_CERTFILE |
Postal
Configure settings to send email via a postal server
Postal is a self hostable email server.
You can find out more at https://postalserver.io/
Postal API URL (optional)
field | email.postal.api_url |
env var | POSTAL_API_URL |
Postal API Key (optional)
field | email.postal.api_key |
env var | POSTAL_API_KEY |
Postal Webhook Key (optional)
Used for Postal to call back to Karrot
field | email.postal.webhook_key |
env var | POSTAL_WEBHOOK_KEY |
Webhooks allow Postal to make requests to Karrot. The webhook key is what ensures that happens securely.
The webhooks have two purposes:
- receiving tracking events
- receiving incoming email
You might configure this even if you are not using Postal for sending email as you can still use Postal for handling incoming email in that scenario.
Meet
Options for video calling
Video calling is powered by LiveKit.
This can be self-hosted, or you can use their hosted option.
LiveKit Endpoint (optional)
field | meet.livekit_endpoint |
env var | MEET_LIVEKIT_ENDPOINT |
LiveKit API Key (optional)
field | meet.livekit_api_key |
env var | MEET_LIVEKIT_API_KEY |
LiveKit API Secret (optional)
field | meet.livekit_api_secret |
env var | MEET_LIVEKIT_API_SECRET |
Use LiveKit room prefix (optional)
If enabled prefixes room names with the base URL,allowing multiple deployments to use the same instance
field | meet.use_livekit_room_prefix |
env var | MEET_USE_LIVEKIT_ROOM_PREFIX |
default | False |
Web Push
Settings for web push notifications
VAPID Public Key
field | web_push.vapid_public_key |
env var | VAPID_PUBLIC_KEY |
VAPID Private Key
field | web_push.vapid_private_key |
env var | VAPID_PRIVATE_KEY |
VAPID Admin Email
field | web_push.vapid_admin_email |
env var | VAPID_ADMIN_EMAIL |
examples | admin@example.com |
Discourse
URL
field | discourse.url |
env var | PROXY_DISCOURSE_URL |
examples | https://community.karrot.world , https://forum.example.com |
Banner Topic ID (optional)
Topic to use for the banner inside Karrot
field | discourse.banner_topic_id |
env var | FORUM_BANNER_TOPIC_ID |
examples | 930 |
Discussions Feed (optional)
Feed to use for the discussions section
field | discourse.discussions_feed |
env var | FORUM_DISCUSSIONS_FEED |
examples | latest.json |
Upload
Max Upload Size (optional)
Maximum size allowed for image or attachment uploads
field | uploads.max_size |
env var | FILE_UPLOAD_MAX_SIZE |
default | 10m |
examples | 500k , 20m , 1g |
Use Accel Redirect (optional)
Allows nginx to serve files that were uploaded by users, you must also configure this in nginx
field | uploads.use_accel_redirect |
env var | FILE_UPLOAD_USE_ACCEL_REDIRECT |
default | False |
Issues
voting_duration_days (optional)
field | issues.voting_duration_days |
env var | VOTING_DURATION_DAYS |
default | 7 |
voting_due_soon_hours (optional)
field | issues.voting_due_soon_hours |
env var | VOTING_DUE_SOON_HOURS |
default | 12 |
Conversations
message_edit_days (optional)
field | conversations.message_edit_days |
env var | MESSAGE_EDIT_DAYS |
default | 2 |
conversation_closed_days (optional)
field | conversations.conversation_closed_days |
env var | CONVERSATION_CLOSED_DAYS |
default | 7 |
Groups
Trust
group_editor_trust_max_threshold (optional)
Maximum trust needed to get editor role
field | groups.trust.group_editor_trust_max_threshold |
env var | GROUP_EDITOR_TRUST_MAX_THRESHOLD |
default | 3 |
The amount of trust needed to get editor role changes depending on how many people are in the group, as the group gets bigger, more trust is needed. This is the maximum amount of trust that will ever be needed.
Group Inactivity
For managing inactive groups
days_until_group_inactive (optional)
field | groups.inactivity.days_until_group_inactive |
env var | NUMBER_OF_DAYS_UNTIL_GROUP_INACTIVE |
default | 14 |
Membership Inactivity
For managing inactive users in groups
days_until_inactive_in_group (optional)
For marking users inactive
field | groups.membership_inactivity.days_until_inactive_in_group |
env var | NUMBER_OF_DAYS_UNTIL_INACTIVE_IN_GROUP |
default | 30 |
inactive_months_until_removal_notification (optional)
For sending users an email telling them they will be removed from a group
field | groups.membership_inactivity.inactive_months_until_removal_notification |
env var | NUMBER_OF_INACTIVE_MONTHS_UNTIL_REMOVAL_FROM_GROUP_NOTIFICATION |
default | 6 |
days_after_removal_notification_we_actually_remove_them (optional)
For actually removing them, after they have been notified
field | groups.membership_inactivity.days_after_removal_notification_we_actually_remove_them |
env var | NUMBER_OF_DAYS_AFTER_REMOVAL_NOTIFICATION_WE_ACTUALLY_REMOVE_THEM |
default | 7 |
Places
Max Weeks in Advance (optional)
Max allowable value for how many weeks in advance activities are created for a series
field | places.store_max_weeks_in_advance |
env var | PLACE_MAX_WEEKS_IN_ADVANCE , STORE_MAX_WEEKS_IN_ADVANCE |
default | 52 |
This is still dependent on setting it for a specific place, which can use a lower value, but not higher
Activities
Feedback Period (days) (optional)
Time period after an activity that feedback can be submitted
field | activities.feedback_possible_days |
env var | FEEDBACK_POSSIBLE_DAYS |
default | 30 |
Activity Due Soon Notification (hours) (optional)
Time before activity is due that an upcoming activities notification will be issued
field | activities.activity_due_soon_hours |
env var | ACTIVITY_DUE_SOON_HOURS |
default | 6 |
Activity Reminder (hours) (optional)
Time before activity is due that a push notification will be sent
field | activities.activity_reminder_hours |
env var | ACTIVITY_REMINDER_HOURS |
default | 3 |
Activity Left Late (hours) (optional)
Time before activity is due to start that it is considered too late
field | activities.activity_leave_late_hours |
env var | ACTIVITY_LEAVE_LATE_HOURS |
default | 24 |
This will be considered when viewing the activity statistics