2 alias Pleroma.Docs.Generator
7 {Phoenix.Socket.V1.JSONSerializer, "~> 1.0.0"},
8 {Phoenix.Socket.V2.JSONSerializer, "~> 2.0.0"}
15 installed_frontend_options = [
21 "Name of the installed frontend. Valid config must include both `Name` and `Reference` values."
28 "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values."
37 description: "Name of the frontend."
43 description: "Reference of the frontend to be used."
48 description: "URL of the git repository of the frontend"
54 "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`.",
55 example: "https://some.url/builds/${ref}.zip"
60 description: "The directory inside the zip file "
64 config :pleroma, :config_description, [
69 description: "Upload general settings",
74 description: "Module which will be used for uploads",
75 suggestions: {:list_behaviour_implementations, Pleroma.Uploaders.Uploader}
79 type: {:list, :module},
81 "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.",
82 suggestions: {:list_behaviour_implementations, Pleroma.Upload.Filter}
88 "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`."
94 description: "Base URL for the uploads, needed if you use CDN",
96 "https://cdn-host.com"
103 "If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected"
107 label: "Proxy Options",
109 description: "Options for Pleroma.ReverseProxy",
111 redirect_on_failure: false,
112 max_body_length: 25 * 1_048_576,
114 follow_redirect: true,
120 key: :redirect_on_failure,
123 "Redirects the client to the real remote URL if there's any HTTP errors. " <>
124 "Any error during body processing will not be redirected as the response is chunked."
127 key: :max_body_length,
130 "Limits the content length to be approximately the " <>
131 "specified length. It is validated with the `content-length` header and also verified when proxying."
137 description: "HTTP options",
142 description: "Adapter specific options",
147 label: "SSL Options",
148 description: "SSL options for HTTP adapter",
152 type: {:list, :atom},
153 description: "List of TLS versions to use",
154 suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
163 type: [:string, :tuple],
164 description: "Proxy URL",
165 suggestions: ["127.0.0.1:8123", {:socks5, :localhost, 9050}]
172 key: :filename_display_max_length,
174 description: "Set max length of a filename to display. 0 = no limit. Default: 30"
180 key: Pleroma.Uploaders.Local,
182 description: "Local uploader-related settings",
187 description: "Path where user's uploads will be saved",
196 key: Pleroma.Uploaders.S3,
198 description: "S3 uploader-related settings",
203 description: "S3 bucket",
209 key: :bucket_namespace,
211 description: "S3 bucket namespace",
212 suggestions: ["pleroma"]
215 key: :public_endpoint,
217 description: "S3 endpoint",
218 suggestions: ["https://s3.amazonaws.com"]
221 key: :truncated_namespace,
224 "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc." <>
225 " For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in public_endpoint."
228 key: :streaming_enabled,
231 "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."
237 key: Pleroma.Upload.Filter.Mogrify,
239 description: "Uploads mogrify filter settings",
243 type: [:string, {:list, :string}, {:list, :tuple}],
245 "List of actions for the mogrify command. It's possible to add self-written settings as string. " <>
246 "For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings.",
257 key: Pleroma.Upload.Filter.AnonymizeFilename,
259 description: "Filter replaces the filename of the upload",
265 "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original" <>
266 " filename extension by using {extension}, for example custom-file-name.{extension}.",
268 "custom-file-name.{extension}"
277 description: "Websocket based federation",
282 description: "Enable FedSockets"
288 key: Pleroma.Emails.Mailer,
290 description: "Mailer-related settings",
296 "One of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters)," <>
297 " or Swoosh.Adapters.Local for in-memory mailbox",
299 Swoosh.Adapters.SMTP,
300 Swoosh.Adapters.Sendgrid,
301 Swoosh.Adapters.Sendmail,
302 Swoosh.Adapters.Mandrill,
303 Swoosh.Adapters.Mailgun,
304 Swoosh.Adapters.Mailjet,
305 Swoosh.Adapters.Postmark,
306 Swoosh.Adapters.SparkPost,
307 Swoosh.Adapters.AmazonSES,
309 Swoosh.Adapters.SocketLabs,
310 Swoosh.Adapters.Gmail,
311 Swoosh.Adapters.Local
317 description: "Allow/disallow send emails"
320 group: {:subgroup, Swoosh.Adapters.SMTP},
323 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
324 suggestions: ["smtp.gmail.com"]
327 group: {:subgroup, Swoosh.Adapters.SMTP},
330 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
331 suggestions: ["pleroma"]
334 group: {:subgroup, Swoosh.Adapters.SMTP},
337 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
338 suggestions: ["password"]
341 group: {:subgroup, Swoosh.Adapters.SMTP},
345 description: "`Swoosh.Adapters.SMTP` adapter specific setting"
348 group: {:subgroup, Swoosh.Adapters.SMTP},
352 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
353 suggestions: [:always, :never, :if_available]
356 group: {:subgroup, Swoosh.Adapters.SMTP},
359 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
360 suggestions: [:always, :never, :if_available]
363 group: {:subgroup, Swoosh.Adapters.SMTP},
366 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
370 group: {:subgroup, Swoosh.Adapters.SMTP},
373 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
377 group: {:subgroup, Swoosh.Adapters.SMTP},
379 label: "No MX lookups",
381 description: "`Swoosh.Adapters.SMTP` adapter specific setting"
384 group: {:subgroup, Swoosh.Adapters.Sendgrid},
388 description: "`Swoosh.Adapters.Sendgrid` adapter specific setting",
389 suggestions: ["my-api-key"]
392 group: {:subgroup, Swoosh.Adapters.Sendmail},
395 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
396 suggestions: ["/usr/bin/sendmail"]
399 group: {:subgroup, Swoosh.Adapters.Sendmail},
402 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
403 suggestions: ["-N delay,failure,success"]
406 group: {:subgroup, Swoosh.Adapters.Sendmail},
409 description: "`Swoosh.Adapters.Sendmail` adapter specific setting"
412 group: {:subgroup, Swoosh.Adapters.Mandrill},
416 description: "`Swoosh.Adapters.Mandrill` adapter specific setting",
417 suggestions: ["my-api-key"]
420 group: {:subgroup, Swoosh.Adapters.Mailgun},
424 description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
425 suggestions: ["my-api-key"]
428 group: {:subgroup, Swoosh.Adapters.Mailgun},
431 description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
432 suggestions: ["pleroma.com"]
435 group: {:subgroup, Swoosh.Adapters.Mailjet},
439 description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
440 suggestions: ["my-api-key"]
443 group: {:subgroup, Swoosh.Adapters.Mailjet},
446 description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
447 suggestions: ["my-secret-key"]
450 group: {:subgroup, Swoosh.Adapters.Postmark},
454 description: "`Swoosh.Adapters.Postmark` adapter specific setting",
455 suggestions: ["my-api-key"]
458 group: {:subgroup, Swoosh.Adapters.SparkPost},
462 description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
463 suggestions: ["my-api-key"]
466 group: {:subgroup, Swoosh.Adapters.SparkPost},
469 description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
470 suggestions: ["https://api.sparkpost.com/api/v1"]
473 group: {:subgroup, Swoosh.Adapters.AmazonSES},
476 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
477 suggestions: ["us-east-1", "us-east-2"]
480 group: {:subgroup, Swoosh.Adapters.AmazonSES},
483 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
484 suggestions: ["aws-access-key"]
487 group: {:subgroup, Swoosh.Adapters.AmazonSES},
490 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
491 suggestions: ["aws-secret-key"]
494 group: {:subgroup, Swoosh.Adapters.Dyn},
498 description: "`Swoosh.Adapters.Dyn` adapter specific setting",
499 suggestions: ["my-api-key"]
502 group: {:subgroup, Swoosh.Adapters.SocketLabs},
505 description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
508 group: {:subgroup, Swoosh.Adapters.SocketLabs},
512 description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
515 group: {:subgroup, Swoosh.Adapters.Gmail},
518 description: "`Swoosh.Adapters.Gmail` adapter specific setting"
525 description: "`Swoosh.Adapters.Local` adapter specific settings",
528 group: {:subgroup, Swoosh.Adapters.Local},
531 description: "Run the preview server together as part of your app"
534 group: {:subgroup, Swoosh.Adapters.Local},
537 description: "The preview server port",
545 label: "URI Schemes",
547 description: "URI schemes related settings",
551 type: {:list, :string},
552 description: "List of the scheme part that is considered valid to be an URL",
577 description: "Instance-related settings",
582 description: "Name of the instance",
589 label: "Admin Email Address",
591 description: "Email used to reach an Administrator/Moderator of the instance",
598 label: "Sender Email Address",
600 description: "Envelope FROM address for mail sent via Pleroma",
609 "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`",
617 description: "Posts character limit (CW/Subject included in the counter)",
625 description: "Character limit of the instance chat messages",
633 description: "Hard character limit beyond which remote posts will be dropped",
641 description: "File size limit of uploads (except for avatar, background, banner)",
647 key: :avatar_upload_limit,
649 description: "File size limit of user's profile avatars",
655 key: :background_upload_limit,
657 description: "File size limit of user's profile backgrounds",
663 key: :banner_upload_limit,
665 description: "File size limit of user's profile banners",
673 description: "A map with poll limits for local polls",
677 max_option_chars: 200,
679 max_expiration: 31_536_000
686 description: "Maximum number of options",
690 key: :max_option_chars,
692 description: "Maximum number of characters per option",
696 key: :min_expiration,
698 description: "Minimum expiration time (in seconds)",
702 key: :max_expiration,
704 description: "Maximum expiration time (in seconds)",
710 key: :registrations_open,
713 "Enable registrations for anyone. Invitations require this setting to be disabled."
716 key: :invites_enabled,
719 "Enable user invitations for admins (depends on `registrations_open` being disabled)"
722 key: :account_activation_required,
724 description: "Require users to confirm their emails before signing in"
727 key: :account_approval_required,
729 description: "Require users to be manually approved by an admin before signing in"
734 description: "Enable federation with other instances"
737 key: :federation_incoming_replies_max_depth,
738 label: "Fed. incoming replies max depth",
741 "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while" <>
742 " 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.",
748 key: :federation_reachability_timeout_days,
749 label: "Fed. reachability timeout days",
752 "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it",
760 description: "Enable Pleroma's Relay, which makes it possible to follow a whole instance"
766 "Makes the client API in authenticated mode-only except for user-profiles." <>
767 " Useful for disabling the Local Timeline and The Whole Known Network. " <>
768 " Note: when setting to `false`, please also check `:restrict_unauthenticated` setting."
771 key: :quarantined_instances,
772 type: {:list, :string},
774 "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent",
783 description: "Instance static directory",
789 key: :allowed_post_formats,
790 type: {:list, :string},
791 description: "MIME-type list of formats allowed to be posted (transformed into HTML)",
800 key: :extended_nickname_format,
803 "Enable to use extended local nicknames format (allows underscores/dashes)." <>
804 " This will break federation with older software for theses nicknames."
807 key: :cleanup_attachments,
810 Enable to remove associated attachments when status is removed.
811 This will not affect duplicates and attachments without status.
812 Enabling this will increase load to database when deleting statuses on larger instances.
816 key: :max_pinned_statuses,
818 description: "The maximum number of pinned statuses. 0 will disable the feature.",
826 key: :autofollowed_nicknames,
827 type: {:list, :string},
829 "Set to nicknames of (local) users that every new user should automatically follow",
838 key: :attachment_links,
840 description: "Enable to automatically add attachment link text to statuses"
843 key: :max_report_comment_size,
845 description: "The maximum size of the report comment. Default: 1000.",
851 key: :safe_dm_mentions,
852 label: "Safe DM mentions",
855 "If enabled, only mentions at the beginning of a post will be used to address people in direct messages." <>
856 " This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\")." <>
862 description: "If enabled, system data will be shown on `/api/pleroma/healthcheck`"
865 key: :remote_post_retention_days,
868 "The default amount of days to retain remote posts when pruning the database",
874 key: :user_bio_length,
876 description: "A user bio maximum length. Default: 5000.",
882 key: :user_name_length,
884 description: "A user name maximum length. Default: 100.",
890 key: :skip_thread_containment,
892 description: "Skip filtering out broken threads. Default: enabled."
895 key: :limit_to_local_content,
896 type: {:dropdown, :atom},
898 "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`.",
906 key: :max_account_fields,
908 description: "The maximum number of custom fields in the user profile. Default: 10.",
914 key: :max_remote_account_fields,
917 "The maximum number of custom fields in the remote user profile. Default: 20.",
923 key: :account_field_name_length,
925 description: "An account field name maximum length. Default: 512.",
931 key: :account_field_value_length,
933 description: "An account field value maximum length. Default: 2048.",
939 key: :registration_reason_length,
941 description: "Maximum registration reason length. Default: 500.",
947 key: :external_user_synchronization,
949 description: "Enabling following/followers counters synchronization for external users"
952 key: :multi_factor_authentication,
954 description: "Multi-factor authentication settings",
957 totp: [digits: 6, period: 30],
958 backup_codes: [number: 5, length: 16]
964 label: "TOTP settings",
966 description: "TOTP settings",
967 suggestions: [digits: 6, period: 30],
974 "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters."
981 "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds."
988 description: "MFA backup codes settings",
989 suggestions: [number: 5, length: 16],
995 description: "Number of backup codes to generate."
1002 "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters."
1009 key: :instance_thumbnail,
1010 type: {:string, :image},
1012 "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.",
1013 suggestions: ["/instance/thumbnail.jpeg"]
1016 key: :show_reactions,
1018 description: "Let favourites and emoji reactions be viewed through the API."
1026 description: "Welcome messages settings",
1029 key: :direct_message,
1031 descpiption: "Direct message settings",
1036 description: "Enables sending a direct message to newly registered users"
1041 description: "A message that will be sent to newly registered users",
1043 "Hi, @username! Welcome on board!"
1047 key: :sender_nickname,
1049 description: "The nickname of the local user that sends a welcome message",
1059 descpiption: "Chat message settings",
1064 description: "Enables sending a chat message to newly registered users"
1070 "A message that will be sent to newly registered users as a chat message",
1072 "Hello, welcome on board!"
1076 key: :sender_nickname,
1078 description: "The nickname of the local user that sends a welcome chat message",
1088 descpiption: "Email message settings",
1093 description: "Enables sending an email to newly registered users"
1097 type: [:string, :tuple],
1099 "Email address and/or nickname that will be used to send the welcome email.",
1101 {"Pleroma App", "welcome@pleroma.app"}
1108 "Subject of the welcome email. EEX template with user and instance_name variables can be used.",
1109 suggestions: ["Welcome to <%= instance_name%>"]
1115 "HTML content of the welcome email. EEX template with user and instance_name variables can be used.",
1116 suggestions: ["<h1>Hello <%= user.name%>. Welcome to <%= instance_name%></h1>"]
1122 "Text content of the welcome email. EEX template with user and instance_name variables can be used.",
1123 suggestions: ["Hello <%= user.name%>. \n Welcome to <%= instance_name%>\n"]
1132 description: "Logger-related settings",
1136 type: [:atom, :tuple, :module],
1138 "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
1139 suggestions: [:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]
1147 label: "ExSyslogger",
1148 description: "ExSyslogger-related settings",
1152 type: {:dropdown, :atom},
1153 description: "Log level",
1154 suggestions: [:debug, :info, :warn, :error]
1160 "A string that's prepended to every message, and is typically set to the app name",
1161 suggestions: ["pleroma"]
1166 description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\"",
1167 suggestions: ["$metadata[$level] $message"]
1171 type: {:list, :atom},
1172 suggestions: [:request_id]
1180 label: "Console Logger",
1181 description: "Console logger settings",
1185 type: {:dropdown, :atom},
1186 description: "Log level",
1187 suggestions: [:debug, :info, :warn, :error]
1192 description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\"",
1193 suggestions: ["$metadata[$level] $message"]
1197 type: {:list, :atom},
1198 suggestions: [:request_id]
1205 label: "Quack Logger",
1206 description: "Quack-related settings",
1210 type: {:dropdown, :atom},
1211 description: "Log level",
1212 suggestions: [:debug, :info, :warn, :error]
1216 type: {:list, :atom},
1217 description: "Configure which metadata you want to report on",
1234 label: "Webhook URL",
1236 description: "Configure the Slack incoming webhook",
1237 suggestions: ["https://hooks.slack.com/services/YOUR-KEY-HERE"]
1243 key: :frontend_configurations,
1246 "This form can be used to configure a keyword list that keeps the configuration data for any " <>
1247 "kind of frontend. By default, settings for pleroma_fe and masto_fe are configured. If you want to " <>
1248 "add your own configuration your settings all fields must be complete.",
1252 label: "Pleroma FE",
1254 description: "Settings for Pleroma FE",
1257 alwaysShowSubjectInput: true,
1258 background: "/static/aurora_borealis.jpg",
1259 collapseMessageWithSubject: false,
1262 hideFilteredStatuses: false,
1263 hideMutedPosts: false,
1264 hidePostStats: false,
1265 hideSitename: false,
1266 hideUserStats: false,
1267 loginMethod: "password",
1268 logo: "/static/logo.png",
1271 minimalScopesMode: false,
1272 noAttachmentLinks: false,
1273 nsfwCensorImage: "/static/img/nsfw.74818f9.png",
1274 postContentType: "text/plain",
1275 redirectRootLogin: "/main/friends",
1276 redirectRootNoLogin: "/main/all",
1278 sidebarRight: false,
1279 showFeaturesPanel: true,
1280 showInstanceSpecificPanel: false,
1281 subjectLineBehavior: "email",
1282 theme: "pleroma-dark",
1283 webPushNotifications: false
1288 key: :alwaysShowSubjectInput,
1289 label: "Always show subject input",
1291 description: "When disabled, auto-hide the subject field if it's empty"
1295 type: {:string, :image},
1297 "URL of the background, unless viewing a user profile with a background that is set",
1298 suggestions: ["/images/city.jpg"]
1301 key: :collapseMessageWithSubject,
1302 label: "Collapse message with subject",
1305 "When a message has a subject (aka Content Warning), collapse it by default"
1309 label: "PleromaFE Chat",
1311 description: "Disables PleromaFE Chat component"
1317 description: "Enables green text on lines prefixed with the > character"
1320 key: :hideFilteredStatuses,
1321 label: "Hide Filtered Statuses",
1323 description: "Hides filtered statuses from timelines"
1326 key: :hideMutedPosts,
1327 label: "Hide Muted Posts",
1329 description: "Hides muted statuses from timelines"
1332 key: :hidePostStats,
1333 label: "Hide post stats",
1335 description: "Hide notices statistics (repeats, favorites, ...)"
1339 label: "Hide Sitename",
1341 description: "Hides instance name from PleromaFE banner"
1344 key: :hideUserStats,
1345 label: "Hide user stats",
1348 "Hide profile statistics (posts, posts per day, followers, followings, ...)"
1352 type: {:string, :image},
1353 description: "URL of the logo, defaults to Pleroma's logo",
1354 suggestions: ["/static/logo.png"]
1358 label: "Logo margin",
1361 "Allows you to adjust vertical margins between logo boundary and navbar borders. " <>
1362 "The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.",
1363 suggestions: [".1em"]
1370 "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. " <>
1371 "If you want a colorful logo you must disable logoMask."
1374 key: :minimalScopesMode,
1375 label: "Minimal scopes mode",
1378 "Limit scope selection to Direct, User default, and Scope of post replying to. " <>
1379 "Also prevents replying to a DM with a public post from PleromaFE."
1382 key: :nsfwCensorImage,
1383 label: "NSFW Censor Image",
1384 type: {:string, :image},
1386 "URL of the image to use for hiding NSFW media attachments in the timeline",
1387 suggestions: ["/static/img/nsfw.74818f9.png"]
1390 key: :postContentType,
1391 label: "Post Content Type",
1392 type: {:dropdown, :atom},
1393 description: "Default post formatting option",
1394 suggestions: ["text/plain", "text/html", "text/markdown", "text/bbcode"]
1397 key: :redirectRootNoLogin,
1398 label: "Redirect root no login",
1401 "Relative URL which indicates where to redirect when a user isn't logged in",
1402 suggestions: ["/main/all"]
1405 key: :redirectRootLogin,
1406 label: "Redirect root login",
1409 "Relative URL which indicates where to redirect when a user is logged in",
1410 suggestions: ["/main/friends"]
1414 label: "Scope copy",
1416 description: "Copy the scope (private/unlisted/public) in replies to posts by default"
1420 label: "Sidebar on Right",
1422 description: "Change alignment of sidebar and panels to the right"
1425 key: :showFeaturesPanel,
1426 label: "Show instance features panel",
1429 "Enables panel displaying functionality of the instance on the About page"
1432 key: :showInstanceSpecificPanel,
1433 label: "Show instance specific panel",
1435 description: "Whether to show the instance's custom panel"
1438 key: :subjectLineBehavior,
1439 label: "Subject line behavior",
1441 description: "Allows changing the default behaviour of subject lines in replies.
1442 `email`: copy and preprend re:, as in email,
1443 `masto`: copy verbatim, as in Mastodon,
1444 `noop`: don't copy the subject.",
1445 suggestions: ["email", "masto", "noop"]
1450 description: "Which theme to use. Available themes are defined in styles.json",
1451 suggestions: ["pleroma-dark"]
1459 description: "Settings for Masto FE",
1462 showInstanceSpecificPanel: true
1467 key: :showInstanceSpecificPanel,
1468 label: "Show instance specific panel",
1470 description: "Whenether to show the instance's specific panel"
1481 "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend",
1485 type: {:keyword, :map},
1487 "Keyword of mascots, each element must contain both an URL and a mime_type key",
1490 url: "/images/pleroma-fox-tan-smol.png",
1491 mime_type: "image/png"
1493 pleroma_fox_tan_shy: %{
1494 url: "/images/pleroma-fox-tan-shy.png",
1495 mime_type: "image/png"
1500 key: :default_mascot,
1503 "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`",
1509 key: :default_user_avatar,
1510 type: {:string, :image},
1511 description: "URL of the default user avatar",
1512 suggestions: ["/images/avi.png"]
1521 "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE.",
1525 type: {:list, :map},
1526 description: "Describe the icons of the app",
1529 src: "/static/logo.png"
1532 src: "/static/icon.png",
1536 src: "/static/icon.ico",
1537 sizes: "72x72 96x96 128x128 256x256"
1544 description: "Describe the theme color of the app",
1545 suggestions: ["#282c37", "mediumpurple"]
1548 key: :background_color,
1550 description: "Describe the background color of the app",
1551 suggestions: ["#191b22", "aliceblue"]
1561 description: "General MRF settings",
1565 type: [:module, {:list, :module}],
1567 "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name.",
1568 suggestions: {:list_behaviour_implementations, Pleroma.Web.ActivityPub.MRF}
1572 label: "MRF transparency",
1575 "Make the content of your Message Rewrite Facility settings public (via nodeinfo)"
1578 key: :transparency_exclusions,
1579 label: "MRF transparency exclusions",
1580 type: {:list, :string},
1582 "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.",
1593 related_policy: "Pleroma.Web.ActivityPub.MRF.SimplePolicy",
1594 label: "MRF Simple",
1596 description: "Simple ingress policies",
1599 key: :media_removal,
1600 type: {:list, :string},
1601 description: "List of instances to strip media attachments from",
1602 suggestions: ["example.com", "*.example.com"]
1606 label: "Media NSFW",
1607 type: {:list, :string},
1608 description: "List of instances to tag all media as NSFW (sensitive) from",
1609 suggestions: ["example.com", "*.example.com"]
1612 key: :federated_timeline_removal,
1613 type: {:list, :string},
1615 "List of instances to remove from the Federated (aka The Whole Known Network) Timeline",
1616 suggestions: ["example.com", "*.example.com"]
1620 type: {:list, :string},
1621 description: "List of instances to reject activities from (except deletes)",
1622 suggestions: ["example.com", "*.example.com"]
1626 type: {:list, :string},
1627 description: "List of instances to only accept activities from (except deletes)",
1628 suggestions: ["example.com", "*.example.com"]
1631 key: :followers_only,
1632 type: {:list, :string},
1633 description: "Force posts from the given instances to be visible by followers only",
1634 suggestions: ["example.com", "*.example.com"]
1637 key: :report_removal,
1638 type: {:list, :string},
1639 description: "List of instances to reject reports from",
1640 suggestions: ["example.com", "*.example.com"]
1643 key: :avatar_removal,
1644 type: {:list, :string},
1645 description: "List of instances to strip avatars from",
1646 suggestions: ["example.com", "*.example.com"]
1649 key: :banner_removal,
1650 type: {:list, :string},
1651 description: "List of instances to strip banners from",
1652 suggestions: ["example.com", "*.example.com"]
1655 key: :reject_deletes,
1656 type: {:list, :string},
1657 description: "List of instances to reject deletions from",
1658 suggestions: ["example.com", "*.example.com"]
1664 key: :mrf_activity_expiration,
1666 related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy",
1667 label: "MRF Activity Expiration Policy",
1669 description: "Adds automatic expiration to all local activities",
1674 description: "Default global expiration time for all local activities (in days)",
1675 suggestions: [90, 365]
1683 related_policy: "Pleroma.Web.ActivityPub.MRF.SubchainPolicy",
1684 label: "MRF Subchain",
1687 "This policy processes messages through an alternate pipeline when a given message matches certain criteria." <>
1688 " All criteria are configured as a map of regular expressions to lists of policy modules.",
1692 type: {:map, {:list, :string}},
1693 description: "Matches a series of regular expressions against the actor field",
1696 ~r/https:\/\/example.com/s => [Pleroma.Web.ActivityPub.MRF.DropPolicy]
1704 key: :mrf_rejectnonpublic,
1706 related_policy: "Pleroma.Web.ActivityPub.MRF.RejectNonPublic",
1707 description: "RejectNonPublic drops posts with non-public visibility settings.",
1708 label: "MRF Reject Non Public",
1712 key: :allow_followersonly,
1713 label: "Allow followers-only",
1715 description: "Whether to allow followers-only posts"
1720 description: "Whether to allow direct messages"
1726 key: :mrf_hellthread,
1728 related_policy: "Pleroma.Web.ActivityPub.MRF.HellthreadPolicy",
1729 label: "MRF Hellthread",
1731 description: "Block messages with excessive user mentions",
1734 key: :delist_threshold,
1737 "Number of mentioned users after which the message gets removed from timelines and" <>
1738 "disables notifications. Set to 0 to disable.",
1742 key: :reject_threshold,
1745 "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable.",
1754 related_policy: "Pleroma.Web.ActivityPub.MRF.KeywordPolicy",
1755 label: "MRF Keyword",
1757 description: "Reject or Word-Replace messages with a keyword or regex",
1761 type: {:list, :string},
1763 "A list of patterns which result in message being rejected. Each pattern can be a string or a regular expression.",
1764 suggestions: ["foo", ~r/foo/iu]
1767 key: :federated_timeline_removal,
1768 type: {:list, :string},
1770 "A list of patterns which result in message being removed from federated timelines (a.k.a unlisted). Each pattern can be a string or a regular expression.",
1771 suggestions: ["foo", ~r/foo/iu]
1775 type: {:list, :tuple},
1777 "A list of tuples containing {pattern, replacement}. Each pattern can be a string or a regular expression.",
1778 suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}]
1786 related_policy: "Pleroma.Web.ActivityPub.MRF.MentionPolicy",
1787 label: "MRF Mention",
1789 description: "Block messages which mention a specific user",
1793 type: {:list, :string},
1794 description: "A list of actors for which any post mentioning them will be dropped",
1795 suggestions: ["actor1", "actor2"]
1801 key: :mrf_vocabulary,
1803 related_policy: "Pleroma.Web.ActivityPub.MRF.VocabularyPolicy",
1804 label: "MRF Vocabulary",
1806 description: "Filter messages which belong to certain activity vocabularies",
1810 type: {:list, :string},
1812 "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted.",
1813 suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
1817 type: {:list, :string},
1819 "A list of ActivityStreams terms to reject. If empty, no messages are rejected.",
1820 suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
1826 # key: :mrf_user_allowlist,
1828 # related_policy: "Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy",
1831 # "The keys in this section are the domain names that the policy should apply to." <>
1832 # " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID",
1834 # %{"example.org" => ["https://example.org/users/admin"]}
1842 description: "Media proxy",
1847 description: "Enables proxying of remote media to the instance's proxy"
1854 "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts.",
1855 suggestions: ["https://example.com"]
1863 provider: Pleroma.Web.MediaProxy.Invalidation.Script
1869 description: "Enables media cache object invalidation."
1874 description: "Module which will be used to purge objects from the cache.",
1876 Pleroma.Web.MediaProxy.Invalidation.Script,
1877 Pleroma.Web.MediaProxy.Invalidation.Http
1884 label: "Proxy Options",
1886 description: "Options for Pleroma.ReverseProxy",
1888 redirect_on_failure: false,
1889 max_body_length: 25 * 1_048_576,
1891 follow_redirect: true,
1897 key: :redirect_on_failure,
1900 "Redirects the client to the real remote URL if there's any HTTP errors. " <>
1901 "Any error during body processing will not be redirected as the response is chunked."
1904 key: :max_body_length,
1907 "Limits the content length to be approximately the " <>
1908 "specified length. It is validated with the `content-length` header and also verified when proxying."
1914 description: "HTTP options",
1919 description: "Adapter specific options",
1924 label: "SSL Options",
1925 description: "SSL options for HTTP adapter",
1929 type: {:list, :atom},
1930 description: "List of TLS version to use",
1931 suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
1940 type: [:string, :tuple],
1941 description: "Proxy URL",
1942 suggestions: ["127.0.0.1:8123", {:socks5, :localhost, 9050}]
1950 type: {:list, :string},
1951 description: "List of hosts with scheme to bypass the mediaproxy",
1952 suggestions: ["http://example.com"]
1958 key: Pleroma.Web.MediaProxy.Invalidation.Http,
1960 description: "HTTP invalidate settings",
1965 description: "HTTP method of request. Default: :purge"
1969 type: {:keyword, :string},
1970 description: "HTTP headers of request",
1971 suggestions: [{"x-refresh", 1}]
1976 description: "Request options",
1980 type: {:map, :string}
1988 key: Pleroma.Web.MediaProxy.Invalidation.Script,
1990 description: "Script invalidate settings",
1995 description: "Path to shell script. Which will run purge cache.",
1996 suggestions: ["./installation/nginx-cache-purge.sh.example"]
2004 description: "Gopher settings",
2009 description: "Enables the gopher interface"
2015 description: "IP address to bind to",
2016 suggestions: [{0, 0, 0, 0}]
2021 description: "Port to bind to",
2027 description: "Port advertised in URLs (optional, defaults to port)",
2035 label: "ActivityPub",
2037 description: "ActivityPub-related settings",
2040 key: :unfollow_blocked,
2042 description: "Whether blocks result in people getting unfollowed"
2045 key: :outgoing_blocks,
2047 description: "Whether to federate blocks to other instances"
2050 key: :sign_object_fetches,
2052 description: "Sign object fetches with HTTP signatures"
2055 key: :note_replies_output_limit,
2058 "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)"
2061 key: :follow_handshake_timeout,
2063 description: "Following handshake timeout",
2070 key: :http_security,
2071 label: "HTTP security",
2073 description: "HTTP security settings",
2078 description: "Whether the managed content security policy is enabled"
2084 description: "Whether to additionally send a Strict-Transport-Security header"
2088 label: "STS max age",
2090 description: "The maximum age for the Strict-Transport-Security header if sent",
2091 suggestions: [31_536_000]
2095 label: "CT max age",
2097 description: "The maximum age for the Expect-CT header if sent",
2098 suggestions: [2_592_000]
2101 key: :referrer_policy,
2103 description: "The referrer policy to use, either \"same-origin\" or \"no-referrer\"",
2104 suggestions: ["same-origin", "no-referrer"]
2108 label: "Report URI",
2110 description: "Adds the specified URL to report-uri and report-to group in CSP header",
2111 suggestions: ["https://example.com/report-uri"]
2116 group: :web_push_encryption,
2117 key: :vapid_details,
2118 label: "Vapid Details",
2121 "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it.",
2127 "A mailto link for the administrative contact." <>
2128 " It's best if this email is not a personal email address, but rather a group email to the instance moderation team.",
2129 suggestions: ["mailto:moderators@pleroma.com"]
2134 description: "VAPID public key",
2135 suggestions: ["Public key"]
2140 description: "VAPID private key",
2141 suggestions: ["Private key"]
2147 key: Pleroma.Captcha,
2149 description: "Captcha-related settings",
2154 description: "Whether the captcha should be shown on registration"
2159 description: "The method/service to use for captcha",
2160 suggestions: [Pleroma.Captcha.Kocaptcha, Pleroma.Captcha.Native]
2163 key: :seconds_valid,
2165 description: "The time in seconds for which the captcha is valid",
2172 key: Pleroma.Captcha.Kocaptcha,
2175 "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is" <>
2176 " here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer.",
2181 description: "The kocaptcha endpoint to use",
2182 suggestions: ["https://captcha.kotobank.ch"]
2188 label: "Pleroma Admin Token",
2191 "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)",
2196 description: "Admin token",
2198 "Please use a high entropy string or UUID"
2208 [Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration.
2210 Note: if you are running PostgreSQL in [`silent_mode`](https://postgresqlco.nf/en/doc/param/silent_mode?version=9.1),
2211 it's advised to set [`log_destination`](https://postgresqlco.nf/en/doc/param/log_destination?version=9.1) to `syslog`,
2212 otherwise `postmaster.log` file may grow because of "you don't own a lock of type ShareLock" warnings
2213 (see https://github.com/sorentwo/oban/issues/52).
2218 type: {:dropdown, :atom},
2219 description: "Logs verbose mode",
2220 suggestions: [false, :error, :warn, :info, :debug]
2224 type: {:keyword, :integer},
2226 "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)",
2228 activity_expiration: 10,
2229 attachments_cleanup: 5,
2231 federator_incoming: 50,
2232 federator_outgoing: 50,
2234 scheduled_activities: 10,
2240 key: :activity_expiration,
2242 description: "Activity expiration queue",
2246 key: :attachments_cleanup,
2248 description: "Attachment deletion queue",
2254 description: "Background queue",
2258 key: :federator_incoming,
2260 description: "Incoming federation queue",
2264 key: :federator_outgoing,
2266 description: "Outgoing federation queue",
2272 description: "Email sender queue, see Pleroma.Emails.Mailer",
2276 key: :scheduled_activities,
2278 description: "Scheduled activities queue, see Pleroma.ScheduledActivities",
2282 key: :transmogrifier,
2284 description: "Transmogrifier queue",
2290 description: "Web push notifications queue",
2297 type: {:list, :tuple},
2298 description: "Settings for cron background jobs",
2300 {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker},
2301 {"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker}
2310 description: "Includes custom worker options not interpretable directly by `Oban`",
2314 type: {:keyword, :integer},
2315 description: "Max retry attempts for failed jobs, per `Oban` queue",
2317 federator_incoming: 5,
2318 federator_outgoing: 5
2325 key: Pleroma.Web.Metadata,
2327 description: "Metadata-related settings",
2331 type: {:list, :module},
2332 description: "List of metadata providers to enable",
2334 Pleroma.Web.Metadata.Providers.OpenGraph,
2335 Pleroma.Web.Metadata.Providers.TwitterCard,
2336 Pleroma.Web.Metadata.Providers.RelMe,
2337 Pleroma.Web.Metadata.Providers.Feed
2342 label: "Unfurl NSFW",
2344 description: "When enabled NSFW attachments will be shown in previews"
2353 "If enabled the instance will parse metadata from attached links to generate link previews",
2358 description: "Enables RichMedia parsing of URLs"
2362 type: {:list, :string},
2363 description: "List of hosts which will be ignored by the metadata parser",
2364 suggestions: ["accounts.google.com", "xss.website"]
2368 label: "Ignore TLD",
2369 type: {:list, :string},
2370 description: "List TLDs (top-level domains) which will ignore for parse metadata",
2371 suggestions: ["local", "localdomain", "lan"]
2375 type: {:list, :module},
2377 "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.",
2379 Pleroma.Web.RichMedia.Parsers.OEmbed,
2380 Pleroma.Web.RichMedia.Parsers.TwitterCard
2385 label: "TTL setters",
2386 type: {:list, :module},
2388 "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.",
2390 Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
2394 key: :failure_backoff,
2397 "Amount of milliseconds after request failure, during which the request will not be retried.",
2398 suggestions: [60_000]
2404 key: Pleroma.Formatter,
2405 label: "Auto Linker",
2408 "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs.",
2412 type: [:string, :boolean],
2413 description: "Specify the class to be added to the generated link. Disable to clear.",
2414 suggestions: ["auto-linker", false]
2418 type: [:string, :boolean],
2419 description: "Override the rel attribute. Disable to clear.",
2420 suggestions: ["ugc", "noopener noreferrer", false]
2425 description: "Link URLs will open in a new window/tab."
2429 type: [:integer, :boolean],
2431 "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`",
2432 suggestions: [15, false]
2437 description: "Strip the scheme prefix."
2442 description: "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)"
2446 type: [:atom, :boolean],
2448 "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)",
2449 suggestions: [:no_scheme, true]
2455 key: Pleroma.ScheduledActivity,
2457 description: "Scheduled activities settings",
2460 key: :daily_user_limit,
2463 "The number of scheduled activities a user is allowed to create in a single day. Default: 25.",
2467 key: :total_user_limit,
2470 "The number of scheduled activities a user is allowed to create in total. Default: 300.",
2476 description: "Whether scheduled activities are sent to the job queue to be executed"
2482 key: Pleroma.Workers.PurgeExpiredActivity,
2484 description: "Expired activities settings",
2489 description: "Enables expired activities addition & deletion"
2494 description: "Minimum lifetime for ephemeral activity (in seconds)",
2501 label: "Pleroma Authenticator",
2503 description: "Authenticator",
2506 key: Pleroma.Web.Auth.Authenticator,
2508 suggestions: [Pleroma.Web.Auth.PleromaAuthenticator, Pleroma.Web.Auth.LDAPAuthenticator]
2518 "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
2519 " will be verified by trying to authenticate (bind) to a LDAP server." <>
2520 " If a user exists in the LDAP directory but there is no account with the same name yet on the" <>
2521 " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.",
2526 description: "Enables LDAP authentication"
2531 description: "LDAP server hostname",
2532 suggestions: ["localhosts"]
2537 description: "LDAP port, e.g. 389 or 636",
2538 suggestions: [389, 636]
2544 description: "Enable to use SSL, usually implies the port 636"
2548 label: "SSL options",
2550 description: "Additional SSL options",
2551 suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
2556 description: "Path to file with PEM encoded cacerts",
2557 suggestions: ["path/to/file/with/PEM/cacerts"]
2562 description: "Type of cert verification",
2563 suggestions: [:verify_peer]
2571 description: "Enable to use STARTTLS, usually implies the port 389"
2575 label: "TLS options",
2577 description: "Additional TLS options",
2578 suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
2583 description: "Path to file with PEM encoded cacerts",
2584 suggestions: ["path/to/file/with/PEM/cacerts"]
2589 description: "Type of cert verification",
2590 suggestions: [:verify_peer]
2597 description: "LDAP base, e.g. \"dc=example,dc=com\"",
2598 suggestions: ["dc=example,dc=com"]
2605 "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"",
2614 description: "Authentication / authorization settings",
2617 key: :enforce_oauth_admin_scope_usage,
2618 label: "Enforce OAuth admin scope usage",
2621 "OAuth admin scope requirement toggle. " <>
2622 "If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token " <>
2623 "(client app must support admin scopes). If disabled and token doesn't have admin scope(s), " <>
2624 "`is_admin` user flag grants access to admin-specific actions."
2627 key: :auth_template,
2630 "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`.",
2631 suggestions: ["show.html"]
2634 key: :oauth_consumer_template,
2635 label: "OAuth consumer template",
2638 "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to" <>
2639 " `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`.",
2640 suggestions: ["consumer.html"]
2643 key: :oauth_consumer_strategies,
2644 label: "OAuth consumer strategies",
2645 type: {:list, :string},
2647 "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
2648 " Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\"" <>
2649 " (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_<strategy>).",
2650 suggestions: ["twitter", "keycloak:ueberauth_keycloak_strategy"]
2656 key: :email_notifications,
2658 description: "Email notifications settings",
2664 "emails of \"what you've missed\" for users who have been inactive for a while",
2668 schedule: "0 0 * * 0",
2670 inactivity_threshold: 7
2678 description: "Globally enable or disable digest emails"
2684 "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\".",
2685 suggestions: ["0 0 * * 0"]
2690 description: "Minimum interval between digest emails to one user",
2694 key: :inactivity_threshold,
2696 description: "Minimum user inactivity threshold",
2705 key: Pleroma.Emails.UserEmail,
2707 description: "Email template settings",
2711 type: {:string, :image},
2712 description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
2713 suggestions: ["some/path/logo.png"]
2718 description: "A map with color settings for email templates.",
2721 link_color: "#d8a070",
2722 background_color: "#2C3645",
2723 content_background_color: "#1B2635",
2724 header_color: "#d8a070",
2725 text_color: "#b9b9ba",
2726 text_muted_color: "#b9b9ba"
2733 suggestions: ["#d8a070"]
2736 key: :background_color,
2738 suggestions: ["#2C3645"]
2741 key: :content_background_color,
2743 suggestions: ["#1B2635"]
2748 suggestions: ["#d8a070"]
2753 suggestions: ["#b9b9ba"]
2756 key: :text_muted_color,
2758 suggestions: ["#b9b9ba"]
2766 key: Pleroma.Emails.NewUsersDigestEmail,
2768 description: "New users admin email digest",
2773 description: "Enables new users admin digest email when `true`"
2782 description: "Configure OAuth 2 provider capabilities",
2785 key: :token_expires_in,
2787 description: "The lifetime in seconds of the access token",
2791 key: :issue_new_refresh_token,
2794 "Keeps old refresh token or generate new refresh token when to obtain an access token"
2797 key: :clean_expired_tokens,
2799 description: "Enable a background job to clean expired OAuth tokens. Default: disabled."
2809 key: :shortcode_globs,
2810 type: {:list, :string},
2811 description: "Location of custom emoji files. * can be used as a wildcard.",
2812 suggestions: ["/emoji/custom/**/*.png"]
2815 key: :pack_extensions,
2816 type: {:list, :string},
2818 "A list of file extensions for emojis, when no emoji.txt for a pack is present",
2819 suggestions: [".png", ".gif"]
2823 type: {:keyword, {:list, :string}},
2825 "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name" <>
2826 " and the value is the location or array of locations. * can be used as a wildcard.",
2828 Custom: ["/emoji/*.png", "/emoji/**/*.png"]
2832 key: :default_manifest,
2835 "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download." <>
2836 " Currently only one manifest can be added (no arrays).",
2837 suggestions: ["https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"]
2840 key: :shared_pack_cache_seconds_per_file,
2841 label: "Shared pack cache s/file",
2844 "When an emoji pack is shared, the archive is created and cached in memory" <>
2845 " for this amount of seconds multiplied by the number of files.",
2855 "Rate limit settings. This is an advanced feature enabled only for :authentication by default.",
2859 type: [:tuple, {:list, :tuple}],
2860 description: "For the search requests (account & status search etc.)",
2861 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2865 type: [:tuple, {:list, :tuple}],
2866 description: "For requests to timelines (each timeline has it's own limiter)",
2867 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2870 key: :app_account_creation,
2871 type: [:tuple, {:list, :tuple}],
2872 description: "For registering user accounts from the same IP address",
2873 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2876 key: :relations_actions,
2877 type: [:tuple, {:list, :tuple}],
2878 description: "For actions on relationships with all users (follow, unfollow)",
2879 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2882 key: :relation_id_action,
2883 label: "Relation ID action",
2884 type: [:tuple, {:list, :tuple}],
2885 description: "For actions on relation with a specific user (follow, unfollow)",
2886 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2889 key: :statuses_actions,
2890 type: [:tuple, {:list, :tuple}],
2892 "For create / delete / fav / unfav / reblog / unreblog actions on any statuses",
2893 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2896 key: :status_id_action,
2897 label: "Status ID action",
2898 type: [:tuple, {:list, :tuple}],
2900 "For fav / unfav or reblog / unreblog actions on the same status by the same user",
2901 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2904 key: :authentication,
2905 type: [:tuple, {:list, :tuple}],
2906 description: "For authentication create / password check / user existence check requests",
2907 suggestions: [{60_000, 15}]
2916 "Before enabling this you must add :esshd to mix.exs as one of the extra_applications " <>
2917 "and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key",
2922 description: "Enables SSH"
2927 description: "Dir with SSH keys",
2928 suggestions: ["/some/path/ssh_keys"]
2933 description: "Handler module",
2934 suggestions: ["Pleroma.BBS.Handler"]
2939 description: "Port to connect",
2940 suggestions: [10_022]
2943 key: :password_authenticator,
2945 description: "Authenticator module",
2946 suggestions: ["Pleroma.BBS.Authenticator"]
2952 label: "Mime Types",
2954 description: "Mime Types settings",
2961 "application/xml" => ["xml"],
2962 "application/xrd+xml" => ["xrd+xml"],
2963 "application/jrd+json" => ["jrd+json"],
2964 "application/activity+json" => ["activity+json"],
2965 "application/ld+json" => ["activity+json"]
2970 key: "application/xml",
2971 type: {:list, :string},
2972 suggestions: ["xml"]
2975 key: "application/xrd+xml",
2976 type: {:list, :string},
2977 suggestions: ["xrd+xml"]
2980 key: "application/jrd+json",
2981 type: {:list, :string},
2982 suggestions: ["jrd+json"]
2985 key: "application/activity+json",
2986 type: {:list, :string},
2987 suggestions: ["activity+json"]
2990 key: "application/ld+json",
2991 type: {:list, :string},
2992 suggestions: ["activity+json"]
3002 description: "Pleroma chat settings",
3015 description: "HTTP settings",
3020 type: [:string, :tuple],
3021 description: "Proxy URL",
3022 suggestions: ["localhost:9020", {:socks5, :localhost, 3090}]
3025 key: :send_user_agent,
3030 type: [:string, :atom],
3032 "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`.",
3033 suggestions: ["Pleroma", :default]
3038 description: "Adapter specific options",
3044 label: "SSL Options",
3045 description: "SSL options for HTTP adapter",
3049 type: {:list, :atom},
3050 description: "List of TLS version to use",
3051 suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
3062 label: "Markup Settings",
3066 key: :allow_inline_images,
3070 key: :allow_headings,
3083 type: {:list, :module},
3085 "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name.",
3086 suggestions: [Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]
3096 key: :deny_follow_blocked,
3103 key: :mrf_normalize_markup,
3105 related_policy: "Pleroma.Web.ActivityPub.MRF.NormalizeMarkup",
3106 label: "MRF Normalize Markup",
3107 description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.",
3113 suggestions: [Pleroma.HTML.Scrubber.Default]
3123 key: :restricted_nicknames,
3124 type: {:list, :string},
3125 description: "List of nicknames users may not register with.",
3144 "ostatus_subscribe",
3160 key: :email_blacklist,
3161 type: {:list, :string},
3162 description: "List of email domains users may not register with.",
3163 suggestions: ["mailinator.com", "maildrop.cc"]
3169 label: "CORS plug config",
3175 suggestions: [86_400]
3179 type: {:list, :string},
3180 suggestions: ["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"]
3184 type: {:list, :string},
3187 "X-RateLimit-Reset",
3188 "X-RateLimit-Limit",
3189 "X-RateLimit-Remaining",
3200 type: {:list, :string},
3201 suggestions: ["Authorization", "Content-Type", "Idempotency-Key"]
3207 key: Pleroma.Plugs.RemoteIp,
3210 `Pleroma.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.
3211 **If your instance is not behind at least one reverse proxy, you should not enable this plug.**
3217 description: "Enable/disable the plug. Default: disabled."
3221 type: {:list, :string},
3223 "A list of strings naming the `req_headers` to use when deriving the `remote_ip`. Order does not matter. Default: `~w[forwarded x-forwarded-for x-client-ip x-real-ip]`."
3227 type: {:list, :string},
3229 "A list of strings in [CIDR](https://en.wikipedia.org/wiki/CIDR) notation specifying the IPs of known proxies. Default: `[]`."
3233 type: {:list, :string},
3235 "Defaults to [localhost](https://en.wikipedia.org/wiki/Localhost) and [private network](https://en.wikipedia.org/wiki/Private_network)."
3241 key: :web_cache_ttl,
3242 label: "Web cache TTL",
3245 "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration.",
3251 "Activity pub routes (except question activities). Default: `nil` (no expiration).",
3252 suggestions: [30_000, nil]
3255 key: :activity_pub_question,
3257 description: "Activity pub routes (question activities). Default: `30_000` (30 seconds).",
3258 suggestions: [30_000]
3268 "Render profiles and posts using server-generated HTML that is viewable without using JavaScript",
3273 description: "Enables the rendering of static HTML. Default: disabled."
3281 description: "Configure feed rendering",
3286 description: "Configure title rendering",
3291 description: "Maximum number of characters before truncating title",
3297 description: "Replacement which will be used after truncating string",
3298 suggestions: ["..."]
3306 key: :mrf_object_age,
3308 related_policy: "Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy",
3309 label: "MRF Object Age",
3312 "Rejects or delists posts based on their timestamp deviance from your server's clock.",
3317 description: "Required age (in seconds) of a post before actions are taken.",
3318 suggestions: [172_800]
3322 type: {:list, :atom},
3324 "A list of actions to apply to the post. `:delist` removes the post from public timelines; " <>
3325 "`:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; " <>
3326 "`:reject` rejects the message entirely",
3327 suggestions: [:delist, :strip_followers, :reject]
3335 description: "Custom Runtime Modules",
3340 description: "A path to custom Elixir modules (such as MRF policies)."
3348 description: "Settings for notifications streamer",
3353 description: "Number of workers to send notifications",
3357 key: :overflow_workers,
3359 description: "Maximum number of workers created if pool is empty",
3366 key: :connections_pool,
3368 description: "Advanced settings for `Gun` connections pool",
3371 key: :connection_acquisition_wait,
3374 "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms.",
3378 key: :connection_acquisition_retries,
3381 "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5",
3385 key: :max_connections,
3387 description: "Maximum number of connections in the pool. Default: 250 connections.",
3391 key: :connect_timeout,
3393 description: "Timeout while `gun` will wait until connection is up. Default: 5000ms.",
3397 key: :reclaim_multiplier,
3400 "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",
3409 description: "Advanced settings for `Gun` workers pools",
3411 Enum.map([:federation, :media, :upload, :default], fn pool_name ->
3415 description: "Settings for #{pool_name} pool.",
3420 description: "Maximum number of concurrent requests in the pool.",
3427 "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",
3433 description: "Timeout for the pool while gun will wait for response",
3434 suggestions: [10_000]
3442 key: :hackney_pools,
3444 description: "Advanced settings for `Hackney` connections pools",
3449 description: "Settings for federation pool.",
3452 key: :max_connections,
3454 description: "Number workers in the pool.",
3460 description: "Timeout while `hackney` will wait for response.",
3461 suggestions: [150_000]
3468 description: "Settings for media pool.",
3471 key: :max_connections,
3473 description: "Number workers in the pool.",
3479 description: "Timeout while `hackney` will wait for response.",
3480 suggestions: [150_000]
3487 description: "Settings for upload pool.",
3490 key: :max_connections,
3492 description: "Number workers in the pool.",
3498 description: "Timeout while `hackney` will wait for response.",
3499 suggestions: [300_000]
3507 key: :restrict_unauthenticated,
3508 label: "Restrict Unauthenticated",
3511 "Disallow viewing timelines, user profiles and statuses for unauthenticated users.",
3516 description: "Settings for public and federated timelines.",
3521 description: "Disallow view public timeline."
3526 description: "Disallow view federated timeline."
3533 description: "Settings for user profiles.",
3538 description: "Disallow view local user profiles."
3543 description: "Disallow view remote user profiles."
3550 description: "Settings for statuses.",
3555 description: "Disallow view local statuses."
3560 description: "Disallow view remote statuses."
3568 key: Pleroma.Web.ApiSpec.CastAndValidate,
3575 "Enables strict input validation (useful in development, not recommended in production)"
3581 key: :instances_favicons,
3583 description: "Control favicons for instances",
3588 description: "Allow/disallow displaying and getting instances favicons"
3596 descriptions: "S3 service related settings",
3599 key: :access_key_id,
3601 description: "S3 access key ID",
3602 suggestions: ["AKIAQ8UKHTGIYN7DMWWJ"]
3605 key: :secret_access_key,
3607 description: "Secret access key",
3608 suggestions: ["JFGt+fgH1UQ7vLUQjpW+WvjTdV/UNzVxcwn7DkaeFKtBS5LvoXvIiME4NQBsT6ZZ"]
3613 description: "S3 host",
3614 suggestions: ["s3.eu-central-1.amazonaws.com"]
3622 description: "Installed frontends management",
3627 description: "Primary frontend, the one that is served for all pages by default",
3628 children: installed_frontend_options
3633 description: "Admin frontend",
3634 children: installed_frontend_options
3640 "A map containing available frontends and parameters for their installation.",
3649 key: Pleroma.Web.Preload,
3651 description: "Preload-related settings",
3655 type: {:list, :module},
3656 description: "List of preload providers to enable",
3658 Pleroma.Web.Preload.Providers.Instance,
3659 Pleroma.Web.Preload.Providers.User,
3660 Pleroma.Web.Preload.Providers.Timelines,
3661 Pleroma.Web.Preload.Providers.StatusNet