production = true [database] # MongoDB connection URL # Defaults to the container name specified in self-hosted mongodb = "mongodb://${mongo_host}" # Redis connection URL # Defaults to the container name specified in self-hosted redis = "redis://${redis_host}/" [hosts] # Web locations of various services # Defaults assume all services are reverse-proxied # See https://github.com/revoltchat/self-hosted/blob/master/Caddyfile # # Remember to change these to https/wss where appropriate in production! app = "https://${hostname}" api = "https://api.${hostname}/" events = "wss://events.${hostname}/" autumn = "https://file.${hostname}/" january = "https://proxy.${hostname}/" [hosts.livekit] worldwide = "wss://livekit.${domain}" [rabbit] host = "${rabbit_host}" port = ${rabbit_port} username = "${rabbit_user}" password = "${rabbit_passwd}" [api] [api.livekit] [api.livekit.nodes.worldwide] url = "https://livekit.${domain}" lat = 0.0 lon = 0.0 key = "${livekit_api_key}" secret = "${livekit_secret_key}" [api.registration] # Whether an invite should be required for registration # See https://github.com/revoltchat/self-hosted#making-your-instance-invite-only invite_only = true [api.smtp] # Email server configuration for verification # Defaults to no email verification (host field is empty) host = "${smtp.host}" username = "${smtp.username}" password = "${smtp.password}" from_address = "${smtp.from}" # reply_to = "noreply@example.com" port = 465 use_tls = true [api.security] # Authifier Shield API key authifier_shield_key = "" # Legacy voice server management token voso_legacy_token = "" # Whether services are behind the Cloudflare network trust_cloudflare = false # easypwned endpoint easypwned = "" [api.security.captcha] # hCaptcha configuration hcaptcha_key = "" hcaptcha_sitekey = "" [api.workers] # Maximum concurrent connections (to proxy server) max_concurrent_connections = 50 [api.users] [pushd] # this changes the names of the queues to not overlap # prod/beta if they happen to be on the same exchange/instance. # Usually they have to be, so that messages sent from one or the other get sent to everyone production = true # Changes how many users are processed in each chunk when resolving role/everyone mentions. # Increasing this will resolve mentions faster, but will consume more memory while resolving. mass_mention_chunk_size = 200 # none of these should need changing exchange = "revolt.notifications" message_queue = "notifications.origin.message" mass_mention_queue = "notifications.origin.mass_mention" # handles messages that contain role or everyone mentions fr_accepted_queue = "notifications.ingest.fr_accepted" # friend request accepted fr_received_queue = "notifications.ingest.fr_received" # friend request received generic_queue = "notifications.ingest.generic" # generic messages (title + body) ack_queue = "notifications.process.ack" # updates badges for apple devices [pushd.vapid] queue = "notifications.outbound.vapid" private_key = "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUU3WHpRZElsQk9TSW4yaXV4eUdFa2ExTGNhZzhKMEEzL0lFRjhXMklJWGZvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFUTBWUkxtUklsS1Y5bW1FcUM4R3Z3aEFpQzdHb1I3TzNlTzVIOXlvVytYTzVFQzcwbHNHYwp5ZjFrYTlzK3hWZEEzdk4yYmNvRmkrT3BGUG9uY0pWRjV3PT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo" public_key = "BENFUS5kSJSlfZphKgvBr8IQIguxqEezt3juR_cqFvlzuRAu9JbBnMn9ZGvbPsVXQN7zdm3KBYvjqRT6J3CVRec" [pushd.fcm] queue = "notifications.outbound.fcm" key_type = "" project_id = "" private_key_id = "" private_key = "" client_email = "" client_id = "" auth_uri = "" token_uri = "" auth_provider_x509_cert_url = "" client_x509_cert_url = "" [pushd.apn] sandbox = false queue = "notifications.outbound.apn" pkcs8 = "" key_id = "" team_id = "" [files] # Encryption key for stored files # Generate your own key using `openssl -base64 32` encryption_key = "regG4PGKT1sZm6fONrmNq/YrNvKoN1ivzRbmDLi72ns=" # Quality used for lossy WebP previews (set to 100 for lossless) webp_quality = 80.0 # Mime types that cannot be uploaded or served # # Example for Windows executables and Android installation files: # ["application/vnd.microsoft.portable-executable", "application/vnd.android.package-archive"] blocked_mime_types = [] # ClamAV service # hostname:port clamd_host = "" # Mime types that should be virus scanned # # Leave empty to scan all file types scan_mime_types = [ "application/vnd.microsoft.portable-executable", "application/vnd.android.package-archive", "application/zip", ] [files.limit] # Minimum file size (in bytes) min_file_size = 1 # Minimum image resolution min_resolution = [1, 1] # Maximum MP of images max_mega_pixels = 40 # Maximum pixel side of an image max_pixel_side = 10_000 [files.preview] # Maximum image resolution attachments = [1280, 1280] avatars = [128, 128] backgrounds = [1280, 720] icons = [128, 128] banners = [480, 480] emojis = [128, 128] [files.s3] # Configuration for S3 # Defaults included for MinIO + self-hosted setup # # Backblaze B2: # - endpoint is listed on the "Buckets" page # - path_style_buckets is set to true # - region is `eu-central-003` string from endpoint URL # - access_key_id is keyID generated on the "Application Keys" page # - secret_access_key is token generated on the "Application Keys" page # - default_bucket matches the name of the bucket you've created # S3 protocol endpoint endpoint = "http://${minio_host}:9000" # Whether to use path-style buckets # Generally true, except for MinIO path_style_buckets = true # S3 region name region = "minio" # S3 protocol key ID access_key_id = "${minio_user}" # S3 protocol access key secret_access_key = "${minio_pass}" default_bucket = "revolt-uploads" [features] # Feature gate options webhooks_enabled = false # Enable push notifications for mass pings (everyone, online, roles) # When false this will still ping in-client but will not send notifications from pushd mass_mentions_send_notifications = true # Can role/everyone pings be used at all mass_mentions_enabled = true [features.limits] [features.limits.global] group_size = 100 message_embeds = 5 message_replies = 5 message_reactions = 20 server_emoji = 100 server_roles = 200 server_channels = 200 # How many hours since creation a user is considered new new_user_hours = 1 # Maximum permissible body size in bytes for uploads # (should be greater than any one file upload limit) body_limit_size = 20_000_000 [features.limits.new_user] # Limits imposed on new users # Number of outgoing friend requests permitted at any time outgoing_friend_requests = 5 # Maximum number of owned bots bots = 2 # Message content length message_length = 2000 # Number of attachments that can be included message_attachments = 5 # Maximum number of servers the user can create/join servers = 50 [features.limits.new_user.file_upload_size_limit] # Maximum file size limits (in bytes) attachments = 20_000_000 avatars = 4_000_000 backgrounds = 6_000_000 icons = 2_500_000 banners = 6_000_000 emojis = 500_000 [features.limits.default] # Limits imposed on users by default # Number of outgoing friend requests permitted at any time outgoing_friend_requests = 10 # Maximum number of owned bots bots = 5 # Message content length message_length = 2000 # Number of attachments that can be included message_attachments = 5 # Maximum number of servers the user can create/join servers = 100 video = true video_resolution = [0,0] video_aspect_ration = [0,0] [features.limits.default.file_upload_size_limit] # Maximum file size limits (in bytes) attachments = 20_000_000 avatars = 4_000_000 backgrounds = 6_000_000 icons = 2_500_000 banners = 6_000_000 emojis = 500_000 [features.advanced] # The max amount of messages the rabbitmq provider/db mention adder job will delay for before forcing handling of a channel. # default: 5 process_message_delay_limit = 5 [sentry] # Configuration for Sentry error reporting api = "" events = "" files = "" proxy = "" pushd = "" crond = ""