6 {Phoenix.Socket.V1.JSONSerializer, "~> 1.0.0"},
7 {Phoenix.Socket.V2.JSONSerializer, "~> 2.0.0"}
14 installed_frontend_options = [
20 "Name of the installed frontend. Valid config must include both `Name` and `Reference` values."
27 "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values."
36 description: "Name of the frontend."
42 description: "Reference of the frontend to be used."
46 label: "Git Repository URL",
48 description: "URL of the git repository of the frontend"
55 "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`.",
56 example: "https://some.url/builds/${ref}.zip"
60 label: "Build directory",
62 description: "The directory inside the zip file "
65 key: "custom-http-headers",
66 label: "Custom HTTP headers",
67 type: {:list, :string},
68 description: "The custom HTTP headers for the frontend"
72 config :pleroma, :config_description, [
77 description: "Upload general settings",
82 description: "Module which will be used for uploads",
83 suggestions: {:list_behaviour_implementations, Pleroma.Uploaders.Uploader}
87 type: {:list, :module},
89 "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name.",
90 suggestions: {:list_behaviour_implementations, Pleroma.Upload.Filter}
96 "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`."
103 "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain.",
105 "https://cdn-host.com"
112 Proxy requests to the remote uploader.\n
113 Useful if media upload endpoint is not internet accessible.
117 key: :filename_display_max_length,
119 description: "Set max length of a filename to display. 0 = no limit. Default: 30"
125 key: Pleroma.Uploaders.Local,
127 description: "Local uploader-related settings",
132 description: "Path where user's uploads will be saved",
141 key: Pleroma.Uploaders.S3,
143 description: "S3 uploader-related settings",
148 description: "S3 bucket",
154 key: :bucket_namespace,
156 description: "S3 bucket namespace",
157 suggestions: ["pleroma"]
160 key: :truncated_namespace,
163 "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc." <>
164 " For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url."
167 key: :streaming_enabled,
170 "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems."
176 key: Pleroma.Upload.Filter.Mogrify,
178 description: "Uploads mogrify filter settings",
182 type: [:string, {:list, :string}, {:list, :tuple}],
184 "List of actions for the mogrify command. It's possible to add self-written settings as string. " <>
185 "For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings.",
196 key: Pleroma.Upload.Filter.AnonymizeFilename,
198 description: "Filter replaces the filename of the upload",
204 "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original" <>
205 " filename extension by using {extension}, for example custom-file-name.{extension}.",
207 "custom-file-name.{extension}"
214 key: Pleroma.Emails.Mailer,
216 description: "Mailer-related settings",
220 label: "Mailer Enabled",
227 "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)",
229 Swoosh.Adapters.AmazonSES,
231 Swoosh.Adapters.Gmail,
232 Swoosh.Adapters.Mailgun,
233 Swoosh.Adapters.Mailjet,
234 Swoosh.Adapters.Mandrill,
235 Swoosh.Adapters.Postmark,
236 Swoosh.Adapters.SMTP,
237 Swoosh.Adapters.Sendgrid,
238 Swoosh.Adapters.Sendmail,
239 Swoosh.Adapters.SocketLabs,
240 Swoosh.Adapters.SparkPost
244 group: {:subgroup, Swoosh.Adapters.SMTP},
247 description: "Hostname or IP address",
248 suggestions: ["smtp.example.com"]
251 group: {:subgroup, Swoosh.Adapters.SMTP},
254 description: "SMTP port",
255 suggestions: ["1025"]
258 group: {:subgroup, Swoosh.Adapters.SMTP},
261 description: "SMTP AUTH username",
262 suggestions: ["user@example.com"]
265 group: {:subgroup, Swoosh.Adapters.SMTP},
268 description: "SMTP AUTH password",
269 suggestions: ["password"]
272 group: {:subgroup, Swoosh.Adapters.SMTP},
276 description: "Use Implicit SSL/TLS. e.g. port 465"
279 group: {:subgroup, Swoosh.Adapters.SMTP},
281 label: "STARTTLS Mode",
282 type: {:dropdown, :atom},
283 description: "Explicit TLS (STARTTLS) enforcement mode",
284 suggestions: [:if_available, :always, :never]
287 group: {:subgroup, Swoosh.Adapters.SMTP},
290 type: {:dropdown, :atom},
291 description: "SMTP AUTH enforcement mode",
292 suggestions: [:if_available, :always, :never]
295 group: {:subgroup, Swoosh.Adapters.SMTP},
298 description: "SMTP temporary (4xx) error retries",
302 group: {:subgroup, Swoosh.Adapters.Sendgrid},
304 label: "SendGrid API Key",
306 suggestions: ["YOUR_API_KEY"]
309 group: {:subgroup, Swoosh.Adapters.Sendmail},
312 suggestions: ["/usr/bin/sendmail"]
315 group: {:subgroup, Swoosh.Adapters.Sendmail},
318 suggestions: ["-N delay,failure,success"]
321 group: {:subgroup, Swoosh.Adapters.Sendmail},
323 label: "Qmail compat mode",
327 group: {:subgroup, Swoosh.Adapters.Mandrill},
329 label: "Mandrill API Key",
331 suggestions: ["YOUR_API_KEY"]
334 group: {:subgroup, Swoosh.Adapters.Mailgun},
336 label: "Mailgun API Key",
338 suggestions: ["YOUR_API_KEY"]
341 group: {:subgroup, Swoosh.Adapters.Mailgun},
344 suggestions: ["YOUR_DOMAIN_NAME"]
347 group: {:subgroup, Swoosh.Adapters.Mailjet},
349 label: "MailJet Public API Key",
351 suggestions: ["MJ_APIKEY_PUBLIC"]
354 group: {:subgroup, Swoosh.Adapters.Mailjet},
356 label: "MailJet Private API Key",
358 suggestions: ["MJ_APIKEY_PRIVATE"]
361 group: {:subgroup, Swoosh.Adapters.Postmark},
363 label: "Postmark API Key",
365 suggestions: ["X-Postmark-Server-Token"]
368 group: {:subgroup, Swoosh.Adapters.SparkPost},
370 label: "SparkPost API key",
372 suggestions: ["YOUR_API_KEY"]
375 group: {:subgroup, Swoosh.Adapters.SparkPost},
378 suggestions: ["https://api.sparkpost.com/api/v1"]
381 group: {:subgroup, Swoosh.Adapters.AmazonSES},
383 label: "AWS Access Key",
385 suggestions: ["AWS_ACCESS_KEY"]
388 group: {:subgroup, Swoosh.Adapters.AmazonSES},
390 label: "AWS Secret Key",
392 suggestions: ["AWS_SECRET_KEY"]
395 group: {:subgroup, Swoosh.Adapters.AmazonSES},
399 suggestions: ["us-east-1", "us-east-2"]
402 group: {:subgroup, Swoosh.Adapters.Dyn},
404 label: "Dyn API Key",
406 suggestions: ["apikey"]
409 group: {:subgroup, Swoosh.Adapters.SocketLabs},
411 label: "SocketLabs API Key",
413 suggestions: ["INJECTION_API_KEY"]
416 group: {:subgroup, Swoosh.Adapters.SocketLabs},
420 suggestions: ["SERVER_ID"]
423 group: {:subgroup, Swoosh.Adapters.Gmail},
425 label: "GMail API Access Token",
427 suggestions: ["GMAIL_API_ACCESS_TOKEN"]
434 label: "URI Schemes",
436 description: "URI schemes related settings",
440 type: {:list, :string},
441 description: "List of the scheme part that is considered valid to be an URL",
466 description: "Database-related settings",
469 key: :improved_hashtag_timeline,
472 "If `true`, hashtags will be fetched from `hashtags` table for hashtags timeline. When `false`, object-embedded hashtags will be used (slower). Is auto-set to `true` (unless overridden) when HashtagsTableMigrator completes."
480 description: "Instance-related settings",
485 description: "Name of the instance",
492 label: "Admin Email Address",
494 description: "Email used to reach an Administrator/Moderator of the instance",
501 label: "Sender Email Address",
503 description: "Envelope FROM address for mail sent via Pleroma",
512 "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`",
520 description: "Posts character limit (CW/Subject included in the counter)",
528 description: "Character limit of the instance chat messages",
536 description: "Hard character limit beyond which remote posts will be dropped",
544 description: "File size limit of uploads (except for avatar, background, banner)",
550 key: :avatar_upload_limit,
552 description: "File size limit of user's profile avatars",
558 key: :background_upload_limit,
560 description: "File size limit of user's profile backgrounds",
566 key: :banner_upload_limit,
568 description: "File size limit of user's profile banners",
576 description: "A map with poll limits for local polls",
580 max_option_chars: 200,
582 max_expiration: 31_536_000
589 description: "Maximum number of options",
593 key: :max_option_chars,
595 description: "Maximum number of characters per option",
599 key: :min_expiration,
601 description: "Minimum expiration time (in seconds)",
605 key: :max_expiration,
607 description: "Maximum expiration time (in seconds)",
613 key: :registrations_open,
616 "Enable registrations for anyone. Invitations require this setting to be disabled."
619 key: :invites_enabled,
622 "Enable user invitations for admins (depends on `registrations_open` being disabled)"
625 key: :account_activation_required,
627 description: "Require users to confirm their emails before signing in"
630 key: :account_approval_required,
632 description: "Require users to be manually approved by an admin before signing in"
637 description: "Enable federation with other instances"
640 key: :federation_incoming_replies_max_depth,
641 label: "Fed. incoming replies max depth",
644 "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while" <>
645 " fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes.",
651 key: :federation_reachability_timeout_days,
652 label: "Fed. reachability timeout days",
655 "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it",
663 description: "Enable Pleroma's Relay, which makes it possible to follow a whole instance"
669 "Makes the client API in authenticated mode-only except for user-profiles." <>
670 " Useful for disabling the Local Timeline and The Whole Known Network. " <>
671 " Note: when setting to `false`, please also check `:restrict_unauthenticated` setting."
674 key: :quarantined_instances,
675 type: {:list, :string},
677 "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent",
686 description: "Instance static directory",
692 key: :allowed_post_formats,
693 type: {:list, :string},
694 description: "MIME-type list of formats allowed to be posted (transformed into HTML)",
703 key: :extended_nickname_format,
706 "Enable to use extended local nicknames format (allows underscores/dashes)." <>
707 " This will break federation with older software for theses nicknames."
710 key: :cleanup_attachments,
713 Enable to remove associated attachments when status is removed.
714 This will not affect duplicates and attachments without status.
715 Enabling this will increase load to database when deleting statuses on larger instances.
719 key: :max_pinned_statuses,
721 description: "The maximum number of pinned statuses. 0 will disable the feature.",
729 key: :autofollowed_nicknames,
730 type: {:list, :string},
732 "Set to nicknames of (local) users that every new user should automatically follow"
735 key: :autofollowing_nicknames,
736 type: {:list, :string},
738 "Set to nicknames of (local) users that automatically follows every newly registered user"
741 key: :attachment_links,
743 description: "Enable to automatically add attachment link text to statuses"
746 key: :max_report_comment_size,
748 description: "The maximum size of the report comment. Default: 1000.",
754 key: :safe_dm_mentions,
755 label: "Safe DM mentions",
758 "If enabled, only mentions at the beginning of a post will be used to address people in direct messages." <>
759 " This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\")." <>
765 description: "If enabled, system data will be shown on `/api/pleroma/healthcheck`"
768 key: :remote_post_retention_days,
771 "The default amount of days to retain remote posts when pruning the database",
777 key: :user_bio_length,
779 description: "A user bio maximum length. Default: 5000.",
785 key: :user_name_length,
787 description: "A user name maximum length. Default: 100.",
793 key: :skip_thread_containment,
795 description: "Skip filtering out broken threads. Default: enabled."
798 key: :limit_to_local_content,
799 type: {:dropdown, :atom},
801 "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`.",
809 key: :max_account_fields,
811 description: "The maximum number of custom fields in the user profile. Default: 10.",
817 key: :max_remote_account_fields,
820 "The maximum number of custom fields in the remote user profile. Default: 20.",
826 key: :account_field_name_length,
828 description: "An account field name maximum length. Default: 512.",
834 key: :account_field_value_length,
836 description: "An account field value maximum length. Default: 2048.",
842 key: :registration_reason_length,
844 description: "Maximum registration reason length. Default: 500.",
850 key: :external_user_synchronization,
852 description: "Enabling following/followers counters synchronization for external users"
855 key: :multi_factor_authentication,
857 description: "Multi-factor authentication settings",
860 totp: [digits: 6, period: 30],
861 backup_codes: [number: 5, length: 16]
867 label: "TOTP settings",
869 description: "TOTP settings",
870 suggestions: [digits: 6, period: 30],
877 "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters."
884 "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds."
891 description: "MFA backup codes settings",
892 suggestions: [number: 5, length: 16],
898 description: "Number of backup codes to generate."
905 "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters."
912 key: :instance_thumbnail,
913 type: {:string, :image},
915 "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.",
916 suggestions: ["/instance/thumbnail.jpeg"]
919 key: :show_reactions,
921 description: "Let favourites and emoji reactions be viewed through the API."
929 description: "Welcome messages settings",
932 key: :direct_message,
934 descpiption: "Direct message settings",
939 description: "Enables sending a direct message to newly registered users"
944 description: "A message that will be sent to newly registered users",
946 "Hi, @username! Welcome on board!"
950 key: :sender_nickname,
952 description: "The nickname of the local user that sends a welcome message",
962 descpiption: "Chat message settings",
967 description: "Enables sending a chat message to newly registered users"
973 "A message that will be sent to newly registered users as a chat message",
975 "Hello, welcome on board!"
979 key: :sender_nickname,
981 description: "The nickname of the local user that sends a welcome chat message",
991 descpiption: "Email message settings",
996 description: "Enables sending an email to newly registered users"
1000 type: [:string, :tuple],
1002 "Email address and/or nickname that will be used to send the welcome email.",
1004 {"Pleroma App", "welcome@pleroma.app"}
1011 "Subject of the welcome email. EEX template with user and instance_name variables can be used.",
1012 suggestions: ["Welcome to <%= instance_name%>"]
1018 "HTML content of the welcome email. EEX template with user and instance_name variables can be used.",
1019 suggestions: ["<h1>Hello <%= user.name%>. Welcome to <%= instance_name%></h1>"]
1025 "Text content of the welcome email. EEX template with user and instance_name variables can be used.",
1026 suggestions: ["Hello <%= user.name%>. \n Welcome to <%= instance_name%>\n"]
1035 description: "Logger-related settings",
1039 type: [:atom, :tuple, :module],
1041 "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
1042 suggestions: [:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]
1050 label: "ExSyslogger",
1051 description: "ExSyslogger-related settings",
1055 type: {:dropdown, :atom},
1056 description: "Log level",
1057 suggestions: [:debug, :info, :warn, :error]
1063 "A string that's prepended to every message, and is typically set to the app name",
1064 suggestions: ["pleroma"]
1069 description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\"",
1070 suggestions: ["$metadata[$level] $message"]
1074 type: {:list, :atom},
1075 suggestions: [:request_id]
1083 label: "Console Logger",
1084 description: "Console logger settings",
1088 type: {:dropdown, :atom},
1089 description: "Log level",
1090 suggestions: [:debug, :info, :warn, :error]
1095 description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\"",
1096 suggestions: ["$metadata[$level] $message"]
1100 type: {:list, :atom},
1101 suggestions: [:request_id]
1108 label: "Quack Logger",
1109 description: "Quack-related settings",
1113 type: {:dropdown, :atom},
1114 description: "Log level",
1115 suggestions: [:debug, :info, :warn, :error]
1119 type: {:list, :atom},
1120 description: "Configure which metadata you want to report on",
1137 label: "Webhook URL",
1139 description: "Configure the Slack incoming webhook",
1140 suggestions: ["https://hooks.slack.com/services/YOUR-KEY-HERE"]
1146 key: :frontend_configurations,
1149 "This form can be used to configure a keyword list that keeps the configuration data for any " <>
1150 "kind of frontend. By default, settings for pleroma_fe and masto_fe are configured. If you want to " <>
1151 "add your own configuration your settings all fields must be complete.",
1155 label: "Pleroma FE",
1157 description: "Settings for Pleroma FE",
1160 alwaysShowSubjectInput: true,
1161 background: "/static/aurora_borealis.jpg",
1162 collapseMessageWithSubject: false,
1165 hideFilteredStatuses: false,
1166 hideMutedPosts: false,
1167 hidePostStats: false,
1168 hideSitename: false,
1169 hideUserStats: false,
1170 loginMethod: "password",
1171 logo: "/static/logo.svg",
1174 minimalScopesMode: false,
1175 noAttachmentLinks: false,
1176 nsfwCensorImage: "/static/img/nsfw.74818f9.png",
1177 postContentType: "text/plain",
1178 redirectRootLogin: "/main/friends",
1179 redirectRootNoLogin: "/main/all",
1181 sidebarRight: false,
1182 showFeaturesPanel: true,
1183 showInstanceSpecificPanel: false,
1184 subjectLineBehavior: "email",
1185 theme: "pleroma-dark",
1186 webPushNotifications: false
1191 key: :alwaysShowSubjectInput,
1192 label: "Always show subject input",
1194 description: "When disabled, auto-hide the subject field if it's empty"
1198 type: {:string, :image},
1200 "URL of the background, unless viewing a user profile with a background that is set",
1201 suggestions: ["/images/city.jpg"]
1204 key: :collapseMessageWithSubject,
1205 label: "Collapse message with subject",
1208 "When a message has a subject (aka Content Warning), collapse it by default"
1212 label: "PleromaFE Chat",
1214 description: "Disables PleromaFE Chat component"
1220 description: "Enables green text on lines prefixed with the > character"
1223 key: :hideFilteredStatuses,
1224 label: "Hide Filtered Statuses",
1226 description: "Hides filtered statuses from timelines"
1229 key: :hideMutedPosts,
1230 label: "Hide Muted Posts",
1232 description: "Hides muted statuses from timelines"
1235 key: :hidePostStats,
1236 label: "Hide post stats",
1238 description: "Hide notices statistics (repeats, favorites, ...)"
1242 label: "Hide Sitename",
1244 description: "Hides instance name from PleromaFE banner"
1247 key: :hideUserStats,
1248 label: "Hide user stats",
1251 "Hide profile statistics (posts, posts per day, followers, followings, ...)"
1255 type: {:string, :image},
1256 description: "URL of the logo, defaults to Pleroma's logo",
1257 suggestions: ["/static/logo.svg"]
1261 label: "Logo margin",
1264 "Allows you to adjust vertical margins between logo boundary and navbar borders. " <>
1265 "The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.",
1266 suggestions: [".1em"]
1273 "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. " <>
1274 "If you want a colorful logo you must disable logoMask."
1277 key: :minimalScopesMode,
1278 label: "Minimal scopes mode",
1281 "Limit scope selection to Direct, User default, and Scope of post replying to. " <>
1282 "Also prevents replying to a DM with a public post from PleromaFE."
1285 key: :nsfwCensorImage,
1286 label: "NSFW Censor Image",
1287 type: {:string, :image},
1289 "URL of the image to use for hiding NSFW media attachments in the timeline",
1290 suggestions: ["/static/img/nsfw.74818f9.png"]
1293 key: :postContentType,
1294 label: "Post Content Type",
1295 type: {:dropdown, :atom},
1296 description: "Default post formatting option",
1297 suggestions: ["text/plain", "text/html", "text/markdown", "text/bbcode"]
1300 key: :redirectRootNoLogin,
1301 label: "Redirect root no login",
1304 "Relative URL which indicates where to redirect when a user isn't logged in",
1305 suggestions: ["/main/all"]
1308 key: :redirectRootLogin,
1309 label: "Redirect root login",
1312 "Relative URL which indicates where to redirect when a user is logged in",
1313 suggestions: ["/main/friends"]
1317 label: "Scope copy",
1319 description: "Copy the scope (private/unlisted/public) in replies to posts by default"
1323 label: "Sidebar on Right",
1325 description: "Change alignment of sidebar and panels to the right"
1328 key: :showFeaturesPanel,
1329 label: "Show instance features panel",
1332 "Enables panel displaying functionality of the instance on the About page"
1335 key: :showInstanceSpecificPanel,
1336 label: "Show instance specific panel",
1338 description: "Whether to show the instance's custom panel"
1341 key: :subjectLineBehavior,
1342 label: "Subject line behavior",
1344 description: "Allows changing the default behaviour of subject lines in replies.
1345 `email`: copy and preprend re:, as in email,
1346 `masto`: copy verbatim, as in Mastodon,
1347 `noop`: don't copy the subject.",
1348 suggestions: ["email", "masto", "noop"]
1353 description: "Which theme to use. Available themes are defined in styles.json",
1354 suggestions: ["pleroma-dark"]
1362 description: "Settings for Masto FE",
1365 showInstanceSpecificPanel: true
1370 key: :showInstanceSpecificPanel,
1371 label: "Show instance specific panel",
1373 description: "Whenether to show the instance's specific panel"
1384 "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend",
1388 type: {:keyword, :map},
1390 "Keyword of mascots, each element must contain both an URL and a mime_type key",
1393 url: "/images/pleroma-fox-tan-smol.png",
1394 mime_type: "image/png"
1396 pleroma_fox_tan_shy: %{
1397 url: "/images/pleroma-fox-tan-shy.png",
1398 mime_type: "image/png"
1403 key: :default_mascot,
1406 "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`",
1412 key: :default_user_avatar,
1413 type: {:string, :image},
1414 description: "URL of the default user avatar",
1415 suggestions: ["/images/avi.png"]
1424 "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE.",
1428 type: {:list, :map},
1429 description: "Describe the icons of the app",
1432 src: "/static/logo.png"
1435 src: "/static/icon.png",
1439 src: "/static/icon.ico",
1440 sizes: "72x72 96x96 128x128 256x256"
1447 description: "Describe the theme color of the app",
1448 suggestions: ["#282c37", "mediumpurple"]
1451 key: :background_color,
1453 description: "Describe the background color of the app",
1454 suggestions: ["#191b22", "aliceblue"]
1462 description: "Media proxy",
1467 description: "Enables proxying of remote media via the instance's proxy"
1474 "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts.",
1475 suggestions: ["https://example.com"]
1483 provider: Pleroma.Web.MediaProxy.Invalidation.Script
1489 description: "Enables media cache object invalidation."
1494 description: "Module which will be used to purge objects from the cache.",
1496 Pleroma.Web.MediaProxy.Invalidation.Script,
1497 Pleroma.Web.MediaProxy.Invalidation.Http
1504 label: "Advanced MediaProxy Options",
1506 description: "Internal Pleroma.ReverseProxy settings",
1508 redirect_on_failure: false,
1509 max_body_length: 25 * 1_048_576,
1510 max_read_duration: 30_000
1514 key: :redirect_on_failure,
1517 Redirects the client to the origin server upon encountering HTTP errors.\n
1518 Note that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n
1519 **WARNING:** This setting will allow larger files to be accessed, but exposes the\n
1520 IP addresses of your users to the other servers, bypassing the MediaProxy.
1524 key: :max_body_length,
1527 "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache."
1530 key: :max_read_duration,
1532 description: "Timeout (in milliseconds) of GET request to the remote URI."
1538 type: {:list, :string},
1539 description: "List of hosts with scheme to bypass the MediaProxy",
1540 suggestions: ["http://example.com"]
1546 key: :media_preview_proxy,
1548 description: "Media preview proxy",
1554 "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy."
1557 key: :thumbnail_max_width,
1560 "Max width of preview thumbnail for images (video preview always has original dimensions)."
1563 key: :thumbnail_max_height,
1566 "Max height of preview thumbnail for images (video preview always has original dimensions)."
1569 key: :image_quality,
1571 description: "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)."
1574 key: :min_content_length,
1577 "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing."
1583 key: Pleroma.Web.MediaProxy.Invalidation.Http,
1585 description: "HTTP invalidate settings",
1590 description: "HTTP method of request. Default: :purge"
1594 type: {:keyword, :string},
1595 description: "HTTP headers of request",
1596 suggestions: [{"x-refresh", 1}]
1601 description: "Request options",
1605 type: {:map, :string}
1613 key: Pleroma.Web.MediaProxy.Invalidation.Script,
1615 description: "Invalidation script settings",
1620 description: "Path to executable script which will purge cached items.",
1621 suggestions: ["./installation/nginx-cache-purge.sh.example"]
1625 label: "URL Format",
1628 "Optional URL format preprocessing. Only required for Apache's htcacheclean.",
1629 suggestions: [":htcacheclean"]
1637 description: "Gopher settings",
1642 description: "Enables the gopher interface"
1648 description: "IP address to bind to",
1649 suggestions: [{0, 0, 0, 0}]
1654 description: "Port to bind to",
1660 description: "Port advertised in URLs (optional, defaults to port)",
1668 label: "ActivityPub",
1670 description: "ActivityPub-related settings",
1673 key: :unfollow_blocked,
1675 description: "Whether blocks result in people getting unfollowed"
1678 key: :outgoing_blocks,
1680 description: "Whether to federate blocks to other instances"
1683 key: :sign_object_fetches,
1685 description: "Sign object fetches with HTTP signatures"
1688 key: :note_replies_output_limit,
1691 "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)"
1694 key: :follow_handshake_timeout,
1696 description: "Following handshake timeout",
1703 key: :http_security,
1704 label: "HTTP security",
1706 description: "HTTP security settings",
1711 description: "Whether the managed content security policy is enabled"
1717 description: "Whether to additionally send a Strict-Transport-Security header"
1721 label: "STS max age",
1723 description: "The maximum age for the Strict-Transport-Security header if sent",
1724 suggestions: [31_536_000]
1728 label: "CT max age",
1730 description: "The maximum age for the Expect-CT header if sent",
1731 suggestions: [2_592_000]
1734 key: :referrer_policy,
1736 description: "The referrer policy to use, either \"same-origin\" or \"no-referrer\"",
1737 suggestions: ["same-origin", "no-referrer"]
1741 label: "Report URI",
1743 description: "Adds the specified URL to report-uri and report-to group in CSP header",
1744 suggestions: ["https://example.com/report-uri"]
1749 group: :web_push_encryption,
1750 key: :vapid_details,
1751 label: "Vapid Details",
1754 "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it.",
1760 "A mailto link for the administrative contact." <>
1761 " It's best if this email is not a personal email address, but rather a group email to the instance moderation team.",
1762 suggestions: ["mailto:moderators@pleroma.com"]
1767 description: "VAPID public key",
1768 suggestions: ["Public key"]
1773 description: "VAPID private key",
1774 suggestions: ["Private key"]
1780 key: Pleroma.Captcha,
1782 description: "Captcha-related settings",
1787 description: "Whether the captcha should be shown on registration"
1792 description: "The method/service to use for captcha",
1793 suggestions: [Pleroma.Captcha.Kocaptcha, Pleroma.Captcha.Native]
1796 key: :seconds_valid,
1798 description: "The time in seconds for which the captcha is valid",
1805 key: Pleroma.Captcha.Kocaptcha,
1808 "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is" <>
1809 " here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer.",
1814 description: "The kocaptcha endpoint to use",
1815 suggestions: ["https://captcha.kotobank.ch"]
1821 label: "Pleroma Admin Token",
1824 "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)",
1829 description: "Admin token",
1831 "Please use a high entropy string or UUID"
1841 "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration.",
1845 type: {:dropdown, :atom},
1846 description: "Logs verbose mode",
1847 suggestions: [false, :error, :warn, :info, :debug]
1851 type: {:keyword, :integer},
1853 "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)",
1855 activity_expiration: 10,
1856 attachments_cleanup: 5,
1858 federator_incoming: 50,
1859 federator_outgoing: 50,
1861 scheduled_activities: 10,
1867 key: :activity_expiration,
1869 description: "Activity expiration queue",
1875 description: "Backup queue",
1879 key: :attachments_cleanup,
1881 description: "Attachment deletion queue",
1887 description: "Background queue",
1891 key: :federator_incoming,
1893 description: "Incoming federation queue",
1897 key: :federator_outgoing,
1899 description: "Outgoing federation queue",
1905 description: "Email sender queue, see Pleroma.Emails.Mailer",
1909 key: :scheduled_activities,
1911 description: "Scheduled activities queue, see Pleroma.ScheduledActivities",
1915 key: :transmogrifier,
1917 description: "Transmogrifier queue",
1923 description: "Web push notifications queue",
1930 type: {:list, :tuple},
1931 description: "Settings for cron background jobs",
1933 {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker},
1934 {"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker}
1943 description: "Includes custom worker options not interpretable directly by `Oban`",
1947 type: {:keyword, :integer},
1948 description: "Max retry attempts for failed jobs, per `Oban` queue",
1950 federator_incoming: 5,
1951 federator_outgoing: 5
1958 key: Pleroma.Web.Metadata,
1960 description: "Metadata-related settings",
1964 type: {:list, :module},
1965 description: "List of metadata providers to enable",
1967 Pleroma.Web.Metadata.Providers.OpenGraph,
1968 Pleroma.Web.Metadata.Providers.TwitterCard,
1969 Pleroma.Web.Metadata.Providers.RelMe,
1970 Pleroma.Web.Metadata.Providers.Feed
1975 label: "Unfurl NSFW",
1977 description: "When enabled NSFW attachments will be shown in previews"
1986 "If enabled the instance will parse metadata from attached links to generate link previews",
1991 description: "Enables RichMedia parsing of URLs"
1995 type: {:list, :string},
1996 description: "List of hosts which will be ignored by the metadata parser",
1997 suggestions: ["accounts.google.com", "xss.website"]
2001 label: "Ignore TLD",
2002 type: {:list, :string},
2003 description: "List TLDs (top-level domains) which will ignore for parse metadata",
2004 suggestions: ["local", "localdomain", "lan"]
2008 type: {:list, :module},
2010 "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name.",
2012 Pleroma.Web.RichMedia.Parsers.OEmbed,
2013 Pleroma.Web.RichMedia.Parsers.TwitterCard
2018 label: "TTL setters",
2019 type: {:list, :module},
2021 "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name.",
2023 Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
2027 key: :failure_backoff,
2030 "Amount of milliseconds after request failure, during which the request will not be retried.",
2031 suggestions: [60_000]
2037 key: Pleroma.Formatter,
2041 "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs.",
2045 type: [:string, :boolean],
2046 description: "Specify the class to be added to the generated link. Disable to clear.",
2047 suggestions: ["auto-linker", false]
2051 type: [:string, :boolean],
2052 description: "Override the rel attribute. Disable to clear.",
2053 suggestions: ["ugc", "noopener noreferrer", false]
2058 description: "Link URLs will open in a new window/tab."
2062 type: [:integer, :boolean],
2064 "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`",
2065 suggestions: [15, false]
2070 description: "Strip the scheme prefix."
2075 description: "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)"
2079 type: [:atom, :boolean],
2081 "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)",
2082 suggestions: [:no_scheme, true]
2088 key: Pleroma.ScheduledActivity,
2090 description: "Scheduled activities settings",
2093 key: :daily_user_limit,
2096 "The number of scheduled activities a user is allowed to create in a single day. Default: 25.",
2100 key: :total_user_limit,
2103 "The number of scheduled activities a user is allowed to create in total. Default: 300.",
2109 description: "Whether scheduled activities are sent to the job queue to be executed"
2115 key: Pleroma.Workers.PurgeExpiredActivity,
2117 description: "Expired activities settings",
2122 description: "Enables expired activities addition & deletion"
2127 description: "Minimum lifetime for ephemeral activity (in seconds)",
2134 label: "Pleroma Authenticator",
2136 description: "Authenticator",
2139 key: Pleroma.Web.Auth.Authenticator,
2141 suggestions: [Pleroma.Web.Auth.PleromaAuthenticator, Pleroma.Web.Auth.LDAPAuthenticator]
2151 "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
2152 " will be verified by trying to authenticate (bind) to a LDAP server." <>
2153 " If a user exists in the LDAP directory but there is no account with the same name yet on the" <>
2154 " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.",
2159 description: "Enables LDAP authentication"
2164 description: "LDAP server hostname",
2165 suggestions: ["localhosts"]
2170 description: "LDAP port, e.g. 389 or 636",
2171 suggestions: [389, 636]
2177 description: "Enable to use SSL, usually implies the port 636"
2181 label: "SSL options",
2183 description: "Additional SSL options",
2184 suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
2189 description: "Path to file with PEM encoded cacerts",
2190 suggestions: ["path/to/file/with/PEM/cacerts"]
2195 description: "Type of cert verification",
2196 suggestions: [:verify_peer]
2204 description: "Enable to use STARTTLS, usually implies the port 389"
2208 label: "TLS options",
2210 description: "Additional TLS options",
2211 suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
2216 description: "Path to file with PEM encoded cacerts",
2217 suggestions: ["path/to/file/with/PEM/cacerts"]
2222 description: "Type of cert verification",
2223 suggestions: [:verify_peer]
2230 description: "LDAP base, e.g. \"dc=example,dc=com\"",
2231 suggestions: ["dc=example,dc=com"]
2238 "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"",
2247 description: "Authentication / authorization settings",
2250 key: :enforce_oauth_admin_scope_usage,
2251 label: "Enforce OAuth admin scope usage",
2254 "OAuth admin scope requirement toggle. " <>
2255 "If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token " <>
2256 "(client app must support admin scopes). If disabled and token doesn't have admin scope(s), " <>
2257 "`is_admin` user flag grants access to admin-specific actions."
2260 key: :auth_template,
2263 "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`.",
2264 suggestions: ["show.html"]
2267 key: :oauth_consumer_template,
2268 label: "OAuth consumer template",
2271 "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to" <>
2272 " `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`.",
2273 suggestions: ["consumer.html"]
2276 key: :oauth_consumer_strategies,
2277 label: "OAuth consumer strategies",
2278 type: {:list, :string},
2280 "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
2281 " Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\"" <>
2282 " (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_<strategy>).",
2283 suggestions: ["twitter", "keycloak:ueberauth_keycloak_strategy"]
2289 key: :email_notifications,
2291 description: "Email notifications settings",
2297 "emails of \"what you've missed\" for users who have been inactive for a while",
2301 schedule: "0 0 * * 0",
2303 inactivity_threshold: 7
2311 description: "Globally enable or disable digest emails"
2317 "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\".",
2318 suggestions: ["0 0 * * 0"]
2323 description: "Minimum interval between digest emails to one user",
2327 key: :inactivity_threshold,
2329 description: "Minimum user inactivity threshold",
2338 key: Pleroma.Emails.UserEmail,
2340 description: "Email template settings",
2344 type: {:string, :image},
2345 description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
2346 suggestions: ["some/path/logo.png"]
2351 description: "A map with color settings for email templates.",
2354 link_color: "#d8a070",
2355 background_color: "#2C3645",
2356 content_background_color: "#1B2635",
2357 header_color: "#d8a070",
2358 text_color: "#b9b9ba",
2359 text_muted_color: "#b9b9ba"
2366 suggestions: ["#d8a070"]
2369 key: :background_color,
2371 suggestions: ["#2C3645"]
2374 key: :content_background_color,
2376 suggestions: ["#1B2635"]
2381 suggestions: ["#d8a070"]
2386 suggestions: ["#b9b9ba"]
2389 key: :text_muted_color,
2391 suggestions: ["#b9b9ba"]
2399 key: Pleroma.Emails.NewUsersDigestEmail,
2401 description: "New users admin email digest",
2406 description: "Enables new users admin digest email when `true`"
2415 description: "Configure OAuth 2 provider capabilities",
2418 key: :token_expires_in,
2420 description: "The lifetime in seconds of the access token",
2421 suggestions: [2_592_000]
2424 key: :issue_new_refresh_token,
2427 "Keeps old refresh token or generate new refresh token when to obtain an access token"
2430 key: :clean_expired_tokens,
2432 description: "Enable a background job to clean expired OAuth tokens. Default: disabled."
2442 key: :shortcode_globs,
2443 type: {:list, :string},
2444 description: "Location of custom emoji files. * can be used as a wildcard.",
2445 suggestions: ["/emoji/custom/**/*.png"]
2448 key: :pack_extensions,
2449 type: {:list, :string},
2451 "A list of file extensions for emojis, when no emoji.txt for a pack is present",
2452 suggestions: [".png", ".gif"]
2456 type: {:keyword, {:list, :string}},
2458 "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name" <>
2459 " and the value is the location or array of locations. * can be used as a wildcard.",
2461 Custom: ["/emoji/*.png", "/emoji/**/*.png"]
2465 key: :default_manifest,
2468 "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download." <>
2469 " Currently only one manifest can be added (no arrays).",
2470 suggestions: ["https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"]
2473 key: :shared_pack_cache_seconds_per_file,
2474 label: "Shared pack cache s/file",
2477 "When an emoji pack is shared, the archive is created and cached in memory" <>
2478 " for this amount of seconds multiplied by the number of files.",
2488 "Rate limit settings. This is an advanced feature enabled only for :authentication by default.",
2492 type: [:tuple, {:list, :tuple}],
2493 description: "For the search requests (account & status search etc.)",
2494 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2498 type: [:tuple, {:list, :tuple}],
2499 description: "For requests to timelines (each timeline has it's own limiter)",
2500 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2503 key: :app_account_creation,
2504 type: [:tuple, {:list, :tuple}],
2505 description: "For registering user accounts from the same IP address",
2506 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2509 key: :relations_actions,
2510 type: [:tuple, {:list, :tuple}],
2511 description: "For actions on relationships with all users (follow, unfollow)",
2512 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2515 key: :relation_id_action,
2516 label: "Relation ID action",
2517 type: [:tuple, {:list, :tuple}],
2518 description: "For actions on relation with a specific user (follow, unfollow)",
2519 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2522 key: :statuses_actions,
2523 type: [:tuple, {:list, :tuple}],
2525 "For create / delete / fav / unfav / reblog / unreblog actions on any statuses",
2526 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2529 key: :status_id_action,
2530 label: "Status ID action",
2531 type: [:tuple, {:list, :tuple}],
2533 "For fav / unfav or reblog / unreblog actions on the same status by the same user",
2534 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2537 key: :authentication,
2538 type: [:tuple, {:list, :tuple}],
2539 description: "For authentication create / password check / user existence check requests",
2540 suggestions: [{60_000, 15}]
2549 "Before enabling this you must add :esshd to mix.exs as one of the extra_applications " <>
2550 "and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key",
2555 description: "Enables SSH"
2560 description: "Dir with SSH keys",
2561 suggestions: ["/some/path/ssh_keys"]
2566 description: "Handler module",
2567 suggestions: ["Pleroma.BBS.Handler"]
2572 description: "Port to connect",
2573 suggestions: [10_022]
2576 key: :password_authenticator,
2578 description: "Authenticator module",
2579 suggestions: ["Pleroma.BBS.Authenticator"]
2585 label: "Mime Types",
2587 description: "Mime Types settings",
2594 "application/xml" => ["xml"],
2595 "application/xrd+xml" => ["xrd+xml"],
2596 "application/jrd+json" => ["jrd+json"],
2597 "application/activity+json" => ["activity+json"],
2598 "application/ld+json" => ["activity+json"]
2603 key: "application/xml",
2604 type: {:list, :string},
2605 suggestions: ["xml"]
2608 key: "application/xrd+xml",
2609 type: {:list, :string},
2610 suggestions: ["xrd+xml"]
2613 key: "application/jrd+json",
2614 type: {:list, :string},
2615 suggestions: ["jrd+json"]
2618 key: "application/activity+json",
2619 type: {:list, :string},
2620 suggestions: ["activity+json"]
2623 key: "application/ld+json",
2624 type: {:list, :string},
2625 suggestions: ["activity+json"]
2635 description: "Pleroma chat settings",
2648 description: "HTTP settings",
2653 type: [:string, :tuple],
2654 description: "Proxy URL",
2655 suggestions: ["localhost:9020", {:socks5, :localhost, 3090}]
2658 key: :send_user_agent,
2663 type: [:string, :atom],
2665 "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`.",
2666 suggestions: ["Pleroma", :default]
2671 description: "Adapter specific options",
2677 label: "SSL Options",
2678 description: "SSL options for HTTP adapter",
2682 type: {:list, :atom},
2683 description: "List of TLS version to use",
2684 suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
2695 label: "Markup Settings",
2699 key: :allow_inline_images,
2703 key: :allow_headings,
2716 type: {:list, :module},
2718 "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name.",
2719 suggestions: [Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]
2729 key: :deny_follow_blocked,
2740 key: :restricted_nicknames,
2741 type: {:list, :string},
2742 description: "List of nicknames users may not register with.",
2761 "ostatus_subscribe",
2777 key: :email_blacklist,
2778 type: {:list, :string},
2779 description: "List of email domains users may not register with.",
2780 suggestions: ["mailinator.com", "maildrop.cc"]
2786 label: "CORS plug config",
2792 suggestions: [86_400]
2796 type: {:list, :string},
2797 suggestions: ["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"]
2801 type: {:list, :string},
2804 "X-RateLimit-Reset",
2805 "X-RateLimit-Limit",
2806 "X-RateLimit-Remaining",
2817 type: {:list, :string},
2818 suggestions: ["Authorization", "Content-Type", "Idempotency-Key"]
2824 key: Pleroma.Web.Plugs.RemoteIp,
2827 `Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.
2828 **If your instance is not behind at least one reverse proxy, you should not enable this plug.**
2834 description: "Enable/disable the plug. Default: disabled."
2838 type: {:list, :string},
2840 A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `["x-forwarded-for"]`.
2845 type: {:list, :string},
2847 "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128."
2851 type: {:list, :string},
2853 A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `["127.0.0.0/8", "::1/128", "fc00::/7", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]`
2860 key: :web_cache_ttl,
2861 label: "Web cache TTL",
2864 "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration.",
2870 "Activity pub routes (except question activities). Default: `nil` (no expiration).",
2874 key: :activity_pub_question,
2876 description: "Activity pub routes (question activities). Default: `30_000` (30 seconds).",
2877 suggestions: [30_000]
2887 "Render profiles and posts using server-generated HTML that is viewable without using JavaScript",
2892 description: "Enables the rendering of static HTML. Default: disabled."
2900 description: "Configure feed rendering",
2905 description: "Configure title rendering",
2910 description: "Maximum number of characters before truncating title",
2916 description: "Replacement which will be used after truncating string",
2917 suggestions: ["..."]
2927 description: "Custom Runtime Modules",
2932 description: "A path to custom Elixir modules (such as MRF policies)."
2940 description: "Settings for notifications streamer",
2945 description: "Number of workers to send notifications",
2949 key: :overflow_workers,
2951 description: "Maximum number of workers created if pool is empty",
2958 key: :connections_pool,
2960 description: "Advanced settings for `Gun` connections pool",
2963 key: :connection_acquisition_wait,
2966 "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms.",
2970 key: :connection_acquisition_retries,
2973 "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5",
2977 key: :max_connections,
2979 description: "Maximum number of connections in the pool. Default: 250 connections.",
2983 key: :connect_timeout,
2985 description: "Timeout while `gun` will wait until connection is up. Default: 5000ms.",
2989 key: :reclaim_multiplier,
2992 "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1",
3001 description: "Advanced settings for `Gun` workers pools",
3003 Enum.map([:federation, :media, :upload, :default], fn pool_name ->
3007 description: "Settings for #{pool_name} pool.",
3012 description: "Maximum number of concurrent requests in the pool.",
3019 "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made",
3025 description: "Timeout for the pool while gun will wait for response",
3026 suggestions: [10_000]
3034 key: :hackney_pools,
3036 description: "Advanced settings for `Hackney` connections pools",
3041 description: "Settings for federation pool.",
3044 key: :max_connections,
3046 description: "Number workers in the pool.",
3052 description: "Timeout while `hackney` will wait for response.",
3053 suggestions: [150_000]
3060 description: "Settings for media pool.",
3063 key: :max_connections,
3065 description: "Number workers in the pool.",
3071 description: "Timeout while `hackney` will wait for response.",
3072 suggestions: [150_000]
3079 description: "Settings for upload pool.",
3082 key: :max_connections,
3084 description: "Number workers in the pool.",
3090 description: "Timeout while `hackney` will wait for response.",
3091 suggestions: [300_000]
3099 key: :restrict_unauthenticated,
3100 label: "Restrict Unauthenticated",
3103 "Disallow viewing timelines, user profiles and statuses for unauthenticated users.",
3108 description: "Settings for public and federated timelines.",
3113 description: "Disallow view public timeline."
3118 description: "Disallow view federated timeline."
3125 description: "Settings for user profiles.",
3130 description: "Disallow view local user profiles."
3135 description: "Disallow view remote user profiles."
3142 description: "Settings for statuses.",
3147 description: "Disallow view local statuses."
3152 description: "Disallow view remote statuses."
3160 key: Pleroma.Web.ApiSpec.CastAndValidate,
3167 "Enables strict input validation (useful in development, not recommended in production)"
3173 key: :instances_favicons,
3175 description: "Control favicons for instances",
3180 description: "Allow/disallow displaying and getting instances favicons"
3188 descriptions: "S3 service related settings",
3191 key: :access_key_id,
3193 description: "S3 access key ID",
3194 suggestions: ["AKIAQ8UKHTGIYN7DMWWJ"]
3197 key: :secret_access_key,
3199 description: "Secret access key",
3200 suggestions: ["JFGt+fgH1UQ7vLUQjpW+WvjTdV/UNzVxcwn7DkaeFKtBS5LvoXvIiME4NQBsT6ZZ"]
3205 description: "S3 host",
3206 suggestions: ["s3.eu-central-1.amazonaws.com"]
3211 description: "S3 region (for AWS)",
3212 suggestions: ["us-east-1"]
3220 description: "Installed frontends management",
3225 description: "Primary frontend, the one that is served for all pages by default",
3226 children: installed_frontend_options
3231 description: "Admin frontend",
3232 children: installed_frontend_options
3238 "A map containing available frontends and parameters for their installation.",
3239 children: frontend_options
3245 key: Pleroma.Web.Preload,
3247 description: "Preload-related settings",
3251 type: {:list, :module},
3252 description: "List of preload providers to enable",
3254 Pleroma.Web.Preload.Providers.Instance,
3255 Pleroma.Web.Preload.Providers.User,
3256 Pleroma.Web.Preload.Providers.Timelines,
3257 Pleroma.Web.Preload.Providers.StatusNet
3266 description: "Majic/libmagic configuration",
3271 description: "Number of majic workers to start.",
3278 key: Pleroma.User.Backup,
3280 description: "Account Backup",
3283 key: :purge_after_days,
3285 description: "Remove backup achives after N days",
3291 description: "Limit user to export not more often than once per N days",
3298 key: Pleroma.Web.Endpoint.MetricsExporter,
3300 description: "Prometheus app metrics endpoint configuration",
3305 description: "[Pleroma extension] Enables app metrics endpoint."
3309 label: "IP Whitelist",
3310 type: [{:list, :string}, {:list, :charlist}, {:list, :tuple}],
3311 description: "Restrict access of app metrics endpoint to the specified IP addresses."
3315 type: [:boolean, :tuple],
3316 description: "Enables HTTP Basic Auth for app metrics endpoint.",
3317 suggestion: [false, {:basic, "myusername", "mypassword"}]
3322 description: "App metrics endpoint URI path.",
3323 suggestions: ["/api/pleroma/app_metrics"]
3328 description: "App metrics endpoint output format.",
3329 suggestions: [:text, :protobuf]
3335 key: ConcurrentLimiter,
3337 description: "Limits configuration for background tasks.",
3340 key: Pleroma.Web.RichMedia.Helpers,
3342 description: "Concurrent limits configuration for getting RichMedia for activities.",
3343 suggestions: [max_running: 5, max_waiting: 5],
3348 description: "Max running concurrently jobs.",
3354 description: "Max waiting jobs.",
3360 key: Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy,
3362 description: "Concurrent limits configuration for MediaProxyWarmingPolicy.",
3363 suggestions: [max_running: 5, max_waiting: 5],
3368 description: "Max running concurrently jobs.",
3374 description: "Max waiting jobs.",