Configuration
Please see this page for information regarding database configuration or where to access it.
The CONFIG_PATH environment variable can be set to make Spacebar use a JSON file instead of a database table.
Spacebar's configuration is done through the config table of your database.
The table schema consists of two columns key and value, where value is a JSON value.
For now, you can update this through SQL manually or a GUI database editor such as
DBeaver.
Array Types
Arrays are represented by _[number] in a config key. For example, multiple guild_defaultFeatures may be assigned such as
| key | value |
|---|---|
guild_defaultFeatures_0 |
DISCOVERABLE |
guild_defaultFeatures_1 |
ANIMATED_ICON |
| etc | etc |
Available Configuration Options
| key | default | type | description |
|---|---|---|---|
| gateway_endpointPrivate | null | string | Used for internal communication with gateway |
| gateway_endpointPublic | null | string | Publicly announced gateway endpoint |
| cdn_endpointPrivate | null | string | CDN endpoint. See gateway_endpointPrivate |
| cdn_endpointPublic | null | string | CDN endpoint. See gateway_endpointPublic |
| cdn_resizeHeightMax | 1000 | number | Maximum image resize height for embeds. |
| cdn_resizeWidthMax | 1000 | number | Maximum image resize width for embeds. |
| cdn_imagorServerUrl | null | string | Endpoint to proxy embed images, e.g. using Imagor. |
| api_defaultVersion | 9 | string | API version to use when not specified |
| api_activeVersions_0 | 6, 7, 8, 9 | string[] | Allowed API version numbers. Array. |
| api_endpointPublic | null | string | Endpoint the API is available at, usually <Base URL>/api |
| general_instanceName | Spacebar Instance | string | Announced instance name |
| general_instanceDescription | This is a Spacebar instance made in the pre-release days | string | Announced instance description |
| general_frontPage | null | string | Announced instance front page |
| general_tosPage | null | string | Announced instance TOS page |
| general_correspondenceEmail | null | string | Announced instance correspondence email |
| general_correspondenceUserID | null | Snowflake | Announced instance correspondence user ID (from this instance) |
| general_image | null | string | Announced instance image URL |
| general_instanceId | Snowflake of instance creation date | Snowflake | Announced instance ID. Deprecated. |
| general_autoCreateBotUsers | false | boolean | Whether to automatically create a bot when creating an application |
| limits_user_maxGuilds | 1048576 | number | Maxmimum guilds a user can join |
| limits_user_maxUsername | 32 | number | Maximum username length |
| limits_user_maxFriends | 5000 | number | Maximum number of friends per user |
| limits_guild_maxRoles | 1000 | number | Maximum number of roles in a guild |
| limits_guild_maxEmojis | 2000 | number | Maximum number of emojis in a guild |
| limits_guild_maxMembers | 25000000 | number | Maximum number of members in a guild |
| limits_guild_maxChannels | 65535 | number | Maximum number of channels in a guild |
| limits_guild_maxChannelsInCategory | 65535 | number | Maximum number of channels per category in a guild |
| limits_message_maxCharacters | 1048576 | number | Maximum character count per message |
| limits_message_maxTTSCharacters | 160 | number | Maximum character count per text to speech messages |
| limits_message_maxReactions | 2048 | number | Maximum number of reactions per message |
| limits_message_maxAttachmentSize | 1073741824 | number | Maximum total attachment size per message |
| limits_message_maxBulkDelete | 1000 | number | Maximum number of messages deletable through bulk delete |
| limits_message_maxEmbedDownloadSize | 5242880 | number | Maximum download size of external embeddable content |
| limits_channel_maxPins | 500 | number | Maximum number of pins per channel |
| limits_channel_maxTopic | 1024 | number | Maximum channel topic character length |
| limits_channel_maxWebhooks | 100 | number | Maximum number of webhooks per channel |
| limits_rate_enabled | false | boolean | Whether rate limits are enabled |
| limits_rate_ip_count | 500 | number | Allowed number of requests per IP within window |
| limits_rate_ip_window | 5 | number | IP rate limit window, in seconds |
| limits_rate_global_count | 250 | number | Allowed number of requests globally within window |
| limits_rate_global_window | 5 | number | Global rate limit window, in seconds |
| limits_rate_error_count | 10 | number | Number of allowed errors per user within window |
| limits_rate_error_window | 5 | number | User error rate limit window, in seconds |
| limits_rate_routes_guild_count | 5 | number | Allowed number of /guild* requests per user within window |
| limits_rate_routes_guild_window | 5 | number | User /guild* rate limit window, in seconds |
| limits_rate_routes_webhook_count | 10 | number | Allowed number of /webhooks* requests per user within window |
| limits_rate_routes_webhook_window | 5 | number | User /webhooks* rate limit window, in seconds |
| limits_rate_routes_channel_count | 10 | number | Allowed number of /channel* requests per user within window |
| limits_rate_routes_channel_window | 5 | number | User /channel* rate limit window, in seconds |
| limits_rate_routes_auth_login_count | 5 | number | Allowed number of IP /login requests within window |
| limits_rate_routes_auth_login_window | 60 | number | IP /login rate limit window, in seconds |
| limits_rate_routes_auth_register_count | 2 | number | Allowed number of IP /register requests within window |
| limits_rate_routes_auth_register_window | 43200 | number | IP /register rate limit window, in seconds |
| limits_absoluteRate_register_limit | 25 | number | Absolute number of registrations instance-wide per window |
| limits_absoluteRate_register_window | 3600000 | number | Global /register rate limit window, in milliseconds |
| limits_absoluteRate_register_enabled | true | boolean | Whether absolute register rate limits are enabled |
| limits_absoluteRate_sendMessage_limit | 200 | number | Absolute number of messages instance-wide per window |
| limits_absoluteRate_sendMessage_window | 60000 | number | Global sendMessage window, in milliseconds |
| limits_absoluteRate_sendMessage_enabled | true | boolean | Whether absolute message sending rate limits are enabled |
| metrics_timeout | 30000 | number | Currently unused |
| security_captcha_enabled | false | boolean | Whether to enable captchas for login/register |
| security_captcha_service | null | "recaptcha", "hcaptcha" | Which captcha service to use |
| security_captcha_sitekey | null | string | Captcha service sitekey |
| security_captcha_secret | null | string | Captcha service secret |
| security_twoFactor_generateBackupCodes | true | boolean | Whether to generate backup codes for MFA users |
| security_autoUpdate | true | boolean | Automatically updates NPM packages daily. Currently unused |
| security_requestSignature | Random secret | string | The signature required for CDN or Imagor usage |
| security_jwtSecret | Random secret | string | The secret used for user token generation |
| security_forwardedFor | null | string | HTTP header for user's real IP |
| security_ipdataApiKey | Spacebar IPdata key | string | API key used for IP geolocation and proxy detection |
| security_mfaBackupCodeCount | 10 | number | Number of MFA backup codes to generate |
| security_statsWorldReadable | true | boolean | Whether instance stats are publically accessible or require right |
| security_defaultRegistrationTokenExpiration | 604800000 | number | Registration token expiry in milliseconds |
| login_requireCaptcha | false | boolean | Whether login requires captcha verification |
| login_requireVerification | false | boolean | Whether login requires email verification |
| register_email_required | false | boolean | Whether an email is required for registration |
| register_email_allowlist | false | boolean | Whether register_email_domains is an allowlist |
| register_email_blocklist | true | boolean | Whether register_email_domains is a blocklist |
| register_email_domains | [] | string[] | The email domains list to use as a block/allow list |
| register_dateOfBirth_required | true | boolean | Whether a date of birth is required for registration |
| register_dateOfBirth_minimum | 13 | number | The minimum age of registration |
| register_password_required | false | boolean | Whether a password is required for registration |
| register_password_minLength | 8 | number | Minimum password length |
| register_password_minNumbers | 2 | number | Minimum number of number characters in passwords |
| register_password_minUpperCase | 2 | number | Minimum number of uppercase characters in passwords |
| register_password_minSymbols | 0 | number | Minimum number of symbols in passwords |
| register_disabled | false | boolean | Whether registration is disabled |
| register_requireCaptcha | true | boolean | Whether registration requires captcha verification |
| register_requireInvite | false | boolean | Whether registration requires a guild invite |
| register_guestsRequireInvite | true | boolean | Whether guests accounts require a guild invite |
| register_allowNewRegistration | true | boolean | Whether registration is enabled. Deprecated, use register_disabled. |
| register_allowMultipleAccounts | true | boolean | Allow multiple accounts with the same client fingerprint |
| register_blockProxies | true | boolean | Whether proxies are blocked from registration |
| register_incrementingDiscriminators | false | boolean | Whether discriminators are random or incrementing |
| register_defaultRights | 875069521787904 | string | The rights assigned to users upon registration |
| regions_default | spacebar | string | The default voice region to use |
| regions_useDefaultAsOptimal | true | boolean | Whether to calculate closest or use default as optimal voice region |
| regions_available_0_id | spacebar | string[] | The available voice region IDs |
| regions_available_0_name | Spacebar | string[] | The available voice region names |
| regions_available_0_endpoint | 127.0.0.1:3004 | string[] | The available voice region endpoint URLs |
| regions_available_0_vip | false | boolean[] | Whether this voice region is VIP exclusive |
| regions_available_0_custom | false | boolean[] | Whether this is a custom voice region (used for events/etc) |
| regions_available_0_deprecated | false | boolean[] | Whether this is a deprecated voice region (clients avoid these) |
| guild_discovery_showAllGuilds | false | boolean | Whether guild discovery shows guilds without the DISCOVERABLE feature |
| guild_discovery_useRecommendation | false | boolean | Currently unused |
| guild_discovery_offset | 0 | number | Default offset when returning discoverable guilds. Currently unused |
| guild_discovery_limit | 24 | number | Maximum number of guild discovery elements per page |
| guild_autoJoin_enabled | true | boolean | Whether users auto join guild(s) on registration |
| guild_autoJoin_canLeave | true | boolean | Whether users can leave the auto-joined guild(s) |
| guild_defaultFeatures_0 | null | string | Features automatically granted to guilds upon creation |
| gif_enabled | true | boolean | Whether GIF features are enabled |
| gif_provider | tenor | "tenor" | Which GIF service to use |
| gif_apiKey | Spacebar tenor API key | string | GIF service API key |
| rabbitmq_host | null | string | RabbitMQ connection string |
| templates_enabled | true | boolean | Whether guild templates are enabled |
| templates_allowTemplateCreation | true | boolean | Whether new guild templates can be created |
| templates_allowDiscordTemplates | true | boolean | Whether guild templates from Discord.com can be fetched |
| templates_allowRaws | true | boolean | Whether raw guild templates are allowed |
| sentry_enabled | false | boolean | Whether server-side Sentry analytics is enabled |
| sentry_endpoint | Spacebar sentry endpoint | string | Sentry endpoint |
| sentry_traceSampleRate | 1 | number | Sentry sample rate (1 means all requests) |
| sentry_environment | System hostname | string | Sentry environment name |
| defaults_user_premium | true | boolean | Whether users are given premium upon registration |
| defaults_user_premiumType | 2 | number | The premium type given to users upon registration |
| defaults_user_verified | true | boolean | Whether users get verified email upon registration |
| defaults_guild_maxPresences | 250000 | number | Maximum number of presences in a guild upon guild creation |
| defaults_guild_maxVideoChannelUsers | 200 | number | Maximum default number of users in a voice channel with video enabled |
| defaults_guild_afkTimeout | 300 | number | AFK timeout in seconds upon guild creation |
| defaults_guild_defaultMessageNotifications | 1 | number | Message notification level upon guild creation |
| defaults_guild_explicitContentFilter | 0 | number | Explicit content filter level upon guild creation |
| external_twitter | null | string | Twitter API key used for Twitter embeds |
| email_provider | null | "smtp", "mailgun", "mailjet", "sendgrid" | Which email transport to use |
| email_senderAddress | null | string | Sender email address. Defaults to general_correspondenceEmail |
| email_smtp_host | null | string | SMTP host for sending email |
| email_smtp_port | null | number | SMTP port |
| email_smtp_secure | null | boolean | Use TLS for SMTP |
| email_smtp_username | null | string | SMTP username |
| email_smtp_password | null | string | SMTP password |
| email_mailgun_apiKey | null | string | Mailgun API key |
| email_mailgun_domain | null | string | Mailgun domain |
| email_mailjet_apiKey | null | string | Mailjet API key |
| email_mailjet_apiSecret | null | string | Mailjet API secret |
| email_sendgrid_apiKey | null | string | Sendgrid API key |
| passwordReset_requireCaptcha | false | boolean | Require captcha to send password reset email |