2 alias Pleroma.Docs.Formatter
7 {Phoenix.Socket.V1.JSONSerializer, "~> 1.0.0"},
8 {Phoenix.Socket.V2.JSONSerializer, "~> 2.0.0"}
15 config :pleroma, :config_description, [
20 description: "Upload general settings",
25 description: "Module which will be used for uploads",
27 Formatter.uploaders_list()
32 type: {:list, :module},
33 description: "List of filter modules for uploads",
35 Formatter.filters_list()
41 description: "If enabled Pleroma will add name parameter to the url off the upload",
50 description: "Base url for the uploads, needed if you use CDN",
52 "https://cdn-host.com"
58 description: "If enabled, Pleroma will proxy media requests instead of redirecting to it",
67 description: "Proxy options, see `Pleroma.ReverseProxy` documentation",
68 suggestions: ["somehow created link to Pleroma.ReverseProxy options"]
74 key: Pleroma.Uploaders.Local,
76 description: "Local uploader-related settings",
81 description: "Path where user uploads will be saved",
90 key: Pleroma.Uploaders.S3,
92 description: "S3 uploader-related settings",
97 description: "S3 bucket",
103 key: :bucket_namespace,
105 description: "S3 bucket namespace",
106 suggestions: ["pleroma"]
109 key: :public_endpoint,
111 description: "S3 endpoint",
112 suggestions: ["https://s3.amazonaws.com"]
115 key: :truncated_namespace,
118 "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc." <>
119 " For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in public_endpoint.",
126 key: Pleroma.Upload.Filter.Mogrify,
128 description: "Uploads mogrify filter settings",
132 type: [:string, {:list, :string}, {:list, :tuple}],
133 description: "List of actions for the mogrify command",
136 ["strip", "auto-orient"],
138 ["strip", "auto-orient", {"implode", "1"}]
145 key: Pleroma.Upload.Filter.AnonymizeFilename,
147 description: "Filter replaces the filename of the upload",
153 "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original" <>
154 " filename extension by using {extension}, for example custom-file-name.{extension}",
156 "custom-file-name.{extension}",
164 key: Pleroma.Emails.Mailer,
166 description: "Mailer-related settings",
172 "One of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters)," <>
173 " or Swoosh.Adapters.Local for in-memory mailbox",
175 Swoosh.Adapters.SMTP,
176 Swoosh.Adapters.Sendgrid,
177 Swoosh.Adapters.Sendmail,
178 Swoosh.Adapters.Mandrill,
179 Swoosh.Adapters.Mailgun,
180 Swoosh.Adapters.Mailjet,
181 Swoosh.Adapters.Postmark,
182 Swoosh.Adapters.SparkPost,
183 Swoosh.Adapters.AmazonSES,
185 Swoosh.Adapters.SocketLabs,
186 Swoosh.Adapters.Gmail
192 description: "Allow/disallow send emails",
199 group: {:subgroup, Swoosh.Adapters.SMTP},
202 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
203 suggestions: ["smtp.gmail.com"]
206 group: {:subgroup, Swoosh.Adapters.SMTP},
209 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
210 suggestions: ["pleroma"]
213 group: {:subgroup, Swoosh.Adapters.SMTP},
216 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
217 suggestions: ["password"]
220 group: {:subgroup, Swoosh.Adapters.SMTP},
223 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
224 suggestions: [true, false]
227 group: {:subgroup, Swoosh.Adapters.SMTP},
230 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
231 suggestions: [:always, :never, :if_available]
234 group: {:subgroup, Swoosh.Adapters.SMTP},
237 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
238 suggestions: [:always, :never, :if_available]
241 group: {:subgroup, Swoosh.Adapters.SMTP},
244 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
248 group: {:subgroup, Swoosh.Adapters.SMTP},
251 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
255 group: {:subgroup, Swoosh.Adapters.SMTP},
258 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
259 suggestions: [true, false]
262 group: {:subgroup, Swoosh.Adapters.Sendgrid},
265 description: "`Swoosh.Adapters.Sendgrid` adapter specific setting",
266 suggestions: ["my-api-key"]
269 group: {:subgroup, Swoosh.Adapters.Sendmail},
272 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
273 suggestions: ["/usr/bin/sendmail"]
276 group: {:subgroup, Swoosh.Adapters.Sendmail},
279 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
280 suggestions: ["-N delay,failure,success"]
283 group: {:subgroup, Swoosh.Adapters.Sendmail},
286 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
287 suggestions: [true, false]
290 group: {:subgroup, Swoosh.Adapters.Mandrill},
293 description: "`Swoosh.Adapters.Mandrill` adapter specific setting",
294 suggestions: ["my-api-key"]
297 group: {:subgroup, Swoosh.Adapters.Mailgun},
300 description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
301 suggestions: ["my-api-key"]
304 group: {:subgroup, Swoosh.Adapters.Mailgun},
307 description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
308 suggestions: ["pleroma.com"]
311 group: {:subgroup, Swoosh.Adapters.Mailjet},
314 description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
315 suggestions: ["my-api-key"]
318 group: {:subgroup, Swoosh.Adapters.Mailjet},
321 description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
322 suggestions: ["my-secret-key"]
325 group: {:subgroup, Swoosh.Adapters.Postmark},
328 description: "`Swoosh.Adapters.Postmark` adapter specific setting",
329 suggestions: ["my-api-key"]
332 group: {:subgroup, Swoosh.Adapters.SparkPost},
335 description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
336 suggestions: ["my-api-key"]
339 group: {:subgroup, Swoosh.Adapters.SparkPost},
342 description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
343 suggestions: ["https://api.sparkpost.com/api/v1"]
346 group: {:subgroup, Swoosh.Adapters.AmazonSES},
349 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
350 suggestions: ["us-east-1", "us-east-2"]
353 group: {:subgroup, Swoosh.Adapters.AmazonSES},
356 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
357 suggestions: ["aws-access-key"]
360 group: {:subgroup, Swoosh.Adapters.AmazonSES},
363 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
364 suggestions: ["aws-secret-key"]
367 group: {:subgroup, Swoosh.Adapters.Dyn},
370 description: "`Swoosh.Adapters.Dyn` adapter specific setting",
371 suggestions: ["my-api-key"]
374 group: {:subgroup, Swoosh.Adapters.SocketLabs},
377 description: "`Swoosh.Adapters.SocketLabs` adapter specific setting",
381 group: {:subgroup, Swoosh.Adapters.SocketLabs},
384 description: "`Swoosh.Adapters.SocketLabs` adapter specific setting",
388 group: {:subgroup, Swoosh.Adapters.Gmail},
391 description: "`Swoosh.Adapters.Gmail` adapter specific setting",
400 description: "URI schemes related settings",
404 type: {:list, :string},
405 description: "List of the scheme part that is considered valid to be an URL",
431 description: "Instance-related settings",
436 description: "Name of the instance",
444 description: "Email used to reach an Administrator/Moderator of the instance",
452 description: "Email used for notifications",
460 description: "The instance's description, can be seen in nodeinfo and /api/v1/instance",
468 description: "Posts character limit (CW/Subject included in the counter)",
476 description: "Hard character limit beyond which remote posts will be dropped",
484 description: "File size limit of uploads (except for avatar, background, banner)",
490 key: :avatar_upload_limit,
492 description: "File size limit of user's profile avatars",
498 key: :background_upload_limit,
500 description: "File size limit of user's profile backgrounds",
506 key: :banner_upload_limit,
508 description: "File size limit of user's profile banners",
516 description: "A map with poll limits for local polls",
520 max_option_chars: 200,
522 max_expiration: 31_536_000
529 description: "Maximum number of options",
533 key: :max_option_chars,
535 description: "Maximum number of characters per option",
539 key: :min_expiration,
541 description: "Minimum expiration time (in seconds)",
545 key: :max_expiration,
547 description: "Maximum expiration time (in seconds)",
553 key: :registrations_open,
555 description: "Enable registrations for anyone, invitations can be enabled when false",
562 key: :invites_enabled,
564 description: "Enable user invitations for admins (depends on registrations_open: false)",
571 key: :account_activation_required,
573 description: "Require users to confirm their emails before signing in",
582 description: "Enable federation with other instances",
589 key: :federation_incoming_replies_max_depth,
592 "Max. depth of reply-to activities fetching on incoming federation, to prevent out-of-memory situations while" <>
593 " 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",
599 key: :federation_reachability_timeout_days,
602 "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it",
608 key: :federation_publisher_modules,
609 type: [:list, :module],
610 description: "List of modules for federation publishing",
612 Pleroma.Web.ActivityPub.Publisher,
620 description: "Enable Pleroma's Relay, which makes it possible to follow a whole instance",
627 key: :rewrite_policy,
628 type: {:list, :module},
629 description: "A list of MRF policies enabled",
631 Pleroma.Web.ActivityPub.MRF.NoOpPolicy,
639 "Makes the client API in authentificated mode-only except for user-profiles." <>
640 " Useful for disabling the Local Timeline and The Whole Known Network",
647 key: :quarantined_instances,
648 type: {:list, :string},
650 "List of ActivityPub instances where private(DMs, followers-only) activities will not be send",
657 key: :managed_config,
660 "Whenether the config for pleroma-fe is configured in this config or in static/config.json",
669 description: "Instance static directory",
675 key: :allowed_post_formats,
676 type: {:list, :string},
677 description: "MIME-type list of formats allowed to be posted (transformed into HTML)",
688 key: :mrf_transparency,
691 "Make the content of your Message Rewrite Facility settings public (via nodeinfo)",
698 key: :mrf_transparency_exclusions,
699 type: {:list, :string},
701 "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value",
707 key: :extended_nickname_format,
710 "Set to true to use extended local nicknames format (allows underscores/dashes)." <>
711 " This will break federation with older software for theses nicknames",
718 key: :max_pinned_statuses,
720 description: "The maximum number of pinned statuses. 0 will disable the feature",
728 key: :autofollowed_nicknames,
729 type: {:list, :string},
731 "Set to nicknames of (local) users that every new user should automatically follow",
740 key: :no_attachment_links,
743 "Set to true to disable automatically adding attachment link text to statuses",
750 key: :welcome_message,
753 "A message that will be send to a newly registered users as a direct message",
755 "Hi, @username! Welcome to the board!",
760 key: :welcome_user_nickname,
762 description: "The nickname of the local user that sends the welcome message",
769 key: :max_report_comment_size,
771 description: "The maximum size of the report comment (Default: 1000)",
777 key: :safe_dm_mentions,
780 "If set to true, only mentions at the beginning of a post will be used to address people in direct messages." <>
781 " This is to prevent accidental mentioning of people when talking about them (e.g. \"@friend hey i really don't like @enemy\")." <>
791 description: "If set to true, system data will be shown on /api/pleroma/healthcheck",
798 key: :remote_post_retention_days,
801 "The default amount of days to retain remote posts when pruning the database",
807 key: :user_bio_length,
809 description: "A user bio maximum length (default: 5000)",
815 key: :user_name_length,
817 description: "A user name maximum length (default: 100)",
823 key: :skip_thread_containment,
825 description: "Skip filter out broken threads. The default is true",
832 key: :limit_to_local_content,
833 type: [:atom, false],
835 "Limit unauthenticated users to search for local statutes and users only. The default is :unauthenticated ",
843 key: :dynamic_configuration,
846 "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`",
853 key: :max_account_fields,
855 description: "The maximum number of custom fields in the user profile (default: 10)",
861 key: :max_remote_account_fields,
864 "The maximum number of custom fields in the remote user profile (default: 20)",
870 key: :account_field_name_length,
872 description: "An account field name maximum length (default: 512)",
878 key: :account_field_value_length,
880 description: "An account field value maximum length (default: 512)",
886 key: :external_user_synchronization,
888 description: "Enabling following/followers counters synchronization for external users",
899 description: "Logger-related settings",
903 type: [:atom, :tuple, :module],
905 "Where logs will be send, :console - send logs to stdout, {ExSyslogger, :ex_syslogger} - to syslog, Quack.Logger - to Slack.",
906 suggestions: [[:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]]
914 description: "ExSyslogger-related settings",
919 description: "Log level",
920 suggestions: [:debug, :info, :warn, :error]
926 "A string that's prepended to every message, and is typically set to the app name",
927 suggestions: ["pleroma"]
932 description: "It defaults to \"$date $time [$level] $levelpad$node $metadata $message\"",
933 suggestions: ["$metadata[$level] $message"]
937 type: {:list, :atom},
939 suggestions: [[:request_id]]
947 description: "Console logger settings",
952 description: "Log level",
953 suggestions: [:debug, :info, :warn, :error]
958 description: "It defaults to \"$date $time [$level] $levelpad$node $metadata $message\"",
959 suggestions: ["$metadata[$level] $message"]
963 type: {:list, :atom},
965 suggestions: [[:request_id]]
972 description: "Quack-related settings",
977 description: "Log level",
978 suggestions: [:debug, :info, :warn, :error]
982 type: {:list, :atom},
983 description: "Configure which metadata you want to report on",
1001 description: "Configure the Slack incoming webhook",
1002 suggestions: ["https://hooks.slack.com/services/YOUR-KEY-HERE"]
1008 key: :frontend_configurations,
1010 description: "A keyword list that keeps the configuration data for any kind of frontend",
1015 description: "Settings for Pleroma FE",
1018 theme: "pleroma-dark",
1019 logo: "/static/logo.png",
1020 background: "/images/city.jpg",
1021 redirectRootNoLogin: "/main/all",
1022 redirectRootLogin: "/main/friends",
1023 showInstanceSpecificPanel: true,
1024 scopeOptionsEnabled: false,
1025 formattingOptionsEnabled: false,
1026 collapseMessageWithSubject: false,
1027 hidePostStats: false,
1028 hideUserStats: false,
1030 subjectLineBehavior: "email",
1031 alwaysShowSubjectInput: true
1038 description: "Which theme to use, they are defined in styles.json",
1039 suggestions: ["pleroma-dark"]
1044 description: "URL of the logo, defaults to Pleroma's logo",
1045 suggestions: ["/static/logo.png"]
1051 "URL of the background, unless viewing a user profile with a background that is set",
1052 suggestions: ["/images/city.jpg"]
1055 key: :redirectRootNoLogin,
1058 "relative URL which indicates where to redirect when a user isn't logged in",
1059 suggestions: ["/main/all"]
1062 key: :redirectRootLogin,
1065 "relative URL which indicates where to redirect when a user is logged in",
1066 suggestions: ["/main/friends"]
1069 key: :showInstanceSpecificPanel,
1071 description: "Whenether to show the instance's specific panel",
1072 suggestions: [true, false]
1075 key: :scopeOptionsEnabled,
1077 description: "Enable setting an notice visibility and subject/CW when posting",
1078 suggestions: [true, false]
1081 key: :formattingOptionsEnabled,
1084 "Enable setting a formatting different than plain-text (ie. HTML, Markdown) when posting, relates to :instance, allowed_post_formats",
1085 suggestions: [true, false]
1088 key: :collapseMessageWithSubject,
1091 "When a message has a subject(aka Content Warning), collapse it by default",
1092 suggestions: [true, false]
1095 key: :hidePostStats,
1097 description: "Hide notices statistics(repeats, favorites, ...)",
1098 suggestions: [true, false]
1101 key: :hideUserStats,
1104 "Hide profile statistics(posts, posts per day, followers, followings, ...)",
1105 suggestions: [true, false]
1111 "Copy the scope (private/unlisted/public) in replies to posts by default",
1112 suggestions: [true, false]
1115 key: :subjectLineBehavior,
1117 description: "Allows changing the default behaviour of subject lines in replies.
1118 `email`: Copy and preprend re:, as in email,
1119 `masto`: Copy verbatim, as in Mastodon,
1120 `noop`: Don't copy the subjec",
1121 suggestions: ["email", "masto", "noop"]
1124 key: :alwaysShowSubjectInput,
1126 description: "When set to false, auto-hide the subject field when it's empty",
1127 suggestions: [true, false]
1134 description: "Settings for Masto FE",
1137 showInstanceSpecificPanel: true
1142 key: :showInstanceSpecificPanel,
1144 description: "Whenether to show the instance's specific panel",
1145 suggestions: [true, false]
1156 "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend",
1162 "Keyword of mascots, each element MUST contain both a url and a mime_type key",
1166 url: "/images/pleroma-fox-tan-smol.png",
1167 mime_type: "image/png"
1169 pleroma_fox_tan_shy: %{
1170 url: "/images/pleroma-fox-tan-shy.png",
1171 mime_type: "image/png"
1177 key: :default_mascot,
1180 "This will be used as the default mascot on MastoFE (default: :pleroma_fox_tan)",
1191 description: "Message Rewrite Facility",
1194 key: :media_removal,
1195 type: {:list, :string},
1196 description: "List of instances to remove medias from",
1197 suggestions: ["example.com", "*.example.com"]
1201 type: {:list, :string},
1202 description: "List of instances to put medias as NSFW(sensitive) from",
1203 suggestions: ["example.com", "*.example.com"]
1206 key: :federated_timeline_removal,
1207 type: {:list, :string},
1209 "List of instances to remove from Federated (aka The Whole Known Network) Timeline",
1210 suggestions: ["example.com", "*.example.com"]
1214 type: {:list, :string},
1215 description: "List of instances to reject any activities from",
1216 suggestions: ["example.com", "*.example.com"]
1220 type: {:list, :string},
1221 description: "List of instances to accept any activities from",
1222 suggestions: ["example.com", "*.example.com"]
1225 key: :report_removal,
1226 type: {:list, :string},
1227 description: "List of instances to reject reports from",
1228 suggestions: ["example.com", "*.example.com"]
1231 key: :avatar_removal,
1232 type: {:list, :string},
1233 description: "List of instances to strip avatars from",
1234 suggestions: ["example.com", "*.example.com"]
1237 key: :banner_removal,
1238 type: {:list, :string},
1239 description: "List of instances to strip banners from",
1240 suggestions: ["example.com", "*.example.com"]
1249 "This policy processes messages through an alternate pipeline when a given message matches certain criteria." <>
1250 " All criteria are configured as a map of regular expressions to lists of policy modules.",
1255 description: "Matches a series of regular expressions against the actor field",
1258 ~r/https:\/\/example.com/s => [Pleroma.Web.ActivityPub.MRF.DropPolicy]
1266 key: :mrf_rejectnonpublic,
1271 key: :allow_followersonly,
1273 description: "whether to allow followers-only posts",
1274 suggestions: [true, false]
1279 description: "whether to allow direct messages",
1280 suggestions: [true, false]
1286 key: :mrf_hellthread,
1288 description: "Block messages with too much mentions",
1291 key: :delist_threshold,
1294 "Number of mentioned users after which the message gets delisted (the message can still be seen, " <>
1295 " but it will not show up in public timelines and mentioned users won't get notifications about it). Set to 0 to disable",
1299 key: :reject_threshold,
1302 "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable",
1311 description: "Reject or Word-Replace messages with a keyword or regex",
1315 type: [:string, :regex],
1317 "A list of patterns which result in message being rejected, each pattern can be a string or a regular expression",
1318 suggestions: ["foo", ~r/foo/iu]
1321 key: :federated_timeline_removal,
1322 type: [:string, :regex],
1324 "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",
1325 suggestions: ["foo", ~r/foo/iu]
1329 type: [{:string, :string}, {:regex, :string}],
1331 "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",
1332 suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}]
1340 description: "Block messages which mention a user",
1344 type: {:list, :string},
1345 description: "A list of actors, for which to drop any posts mentioning",
1346 suggestions: [["actor1", "actor2"]]
1352 key: :mrf_vocabulary,
1354 description: "Filter messages which belong to certain activity vocabularies",
1358 type: {:list, :string},
1360 "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted",
1361 suggestions: [["Create", "Follow", "Mention", "Announce", "Like"]]
1365 type: {:list, :string},
1367 "A list of ActivityStreams terms to reject. If empty, no messages are rejected",
1368 suggestions: [["Create", "Follow", "Mention", "Announce", "Like"]]
1374 # key: :mrf_user_allowlist,
1377 # "The keys in this section are the domain names that the policy should apply to." <>
1378 # " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID",
1380 # ["example.org": ["https://example.org/users/admin"]],
1382 # ["example.org": ["https://example.org/users/admin"]]
1390 description: "Media proxy",
1395 description: "Enables proxying of remote media to the instance's proxy",
1396 suggestions: [true, false]
1402 "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts",
1403 suggestions: ["https://example.com"]
1408 description: "Options for Pleroma.ReverseProxy",
1409 suggestions: [[max_body_length: 25 * 1_048_576, redirect_on_failure: false]]
1413 type: {:list, :string},
1414 description: "List of domains to bypass the mediaproxy",
1415 suggestions: ["example.com"]
1423 description: "Gopher settings",
1428 description: "Enables the gopher interface",
1429 suggestions: [true, false]
1434 description: "IP address to bind to",
1435 suggestions: [{0, 0, 0, 0}]
1440 description: "Port to bind to",
1446 description: "Port advertised in urls (optional, defaults to port)",
1453 key: Pleroma.Web.Endpoint,
1455 description: "Phoenix endpoint configuration",
1460 description: "http protocol configuration",
1462 [port: 8080, ip: {127, 0, 0, 1}]
1467 type: {:list, :tuple},
1468 description: "dispatch settings",
1473 {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
1474 {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
1475 {Phoenix.Transports.WebSocket,
1476 {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, websocket_config}}},
1477 {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
1479 # end copied from config.exs
1494 description: "port",
1504 description: "configuration for generating urls",
1506 [host: "example.com", port: 2020, scheme: "https"]
1512 description: "Host",
1520 description: "port",
1528 description: "Scheme",
1537 key: :instrumenters,
1538 type: {:list, :module},
1540 suggestions: [Pleroma.Web.Endpoint.Instrumenter]
1546 suggestions: ["https"]
1549 key: :secret_key_base,
1552 suggestions: ["aK4Abxf29xU9TTDKre9coZPUgevcVCFQJe/5xP/7Lt4BEif6idBIbjupVbOrbKxl"]
1558 suggestions: ["CqaoopA2"]
1561 key: :render_errors,
1564 suggestions: [[view: Pleroma.Web.ErrorView, accepts: ~w(json)]],
1570 suggestions: [Pleroma.Web.ErrorView]
1574 type: {:list, :string},
1576 suggestions: ["json"]
1584 suggestions: [[name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2]],
1590 suggestions: [Pleroma.PubSub]
1596 suggestions: [Phoenix.PubSub.PG2]
1601 key: :secure_cookie_flag,
1604 suggestions: [true, false]
1607 key: :extra_cookie_attrs,
1608 type: {:list, :string},
1610 suggestions: ["SameSite=Lax"]
1618 description: "ActivityPub-related settings",
1621 key: :unfollow_blocked,
1623 description: "Whether blocks result in people getting unfollowed",
1624 suggestions: [true, false]
1627 key: :outgoing_blocks,
1629 description: "Whether to federate blocks to other instances",
1630 suggestions: [true, false]
1633 key: :sign_object_fetches,
1635 description: "Sign object fetches with HTTP signatures",
1636 suggestions: [true, false]
1639 key: :follow_handshake_timeout,
1641 description: "Following handshake timeout",
1648 key: :http_security,
1650 description: "HTTP security settings",
1655 description: "Whether the managed content security policy is enabled",
1656 suggestions: [true, false]
1661 description: "Whether to additionally send a Strict-Transport-Security header",
1662 suggestions: [true, false]
1667 description: "The maximum age for the Strict-Transport-Security header if sent",
1668 suggestions: [31_536_000]
1673 description: "The maximum age for the Expect-CT header if sent",
1674 suggestions: [2_592_000]
1677 key: :referrer_policy,
1679 description: "The referrer policy to use, either \"same-origin\" or \"no-referrer\"",
1680 suggestions: ["same-origin", "no-referrer"]
1685 description: "Adds the specified url to report-uri and report-to group in CSP header",
1686 suggestions: ["https://example.com/report-uri"]
1691 group: :web_push_encryption,
1692 key: :vapid_details,
1695 "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it",
1701 "a mailto link for the administrative contact." <>
1702 " It's best if this email is not a personal email address, but rather a group email so that if a person leaves an organization," <>
1703 " is unavailable for an extended period, or otherwise can't respond, someone else on the list can",
1704 suggestions: ["Subject"]
1709 description: "VAPID public key",
1710 suggestions: ["Public key"]
1715 description: "VAPID private keyn",
1716 suggestions: ["Private key"]
1722 key: Pleroma.Captcha,
1724 description: "Captcha-related settings",
1729 description: "Whether the captcha should be shown on registration",
1730 suggestions: [true, false]
1735 description: "The method/service to use for captcha",
1736 suggestions: [Pleroma.Captcha.Kocaptcha]
1739 key: :seconds_valid,
1741 description: "The time in seconds for which the captcha is valid",
1748 key: Pleroma.Captcha.Kocaptcha,
1751 "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is" <>
1752 " here: https://github.com/koto-bank/kocaptcha. The default endpoint https://captcha.kotobank.ch is hosted by the developer",
1757 description: "the kocaptcha endpoint to use",
1758 suggestions: ["https://captcha.kotobank.ch"]
1766 "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the 'admin_token' parameter",
1771 description: "Token",
1772 suggestions: ["some_random_token"]
1777 group: :pleroma_job_queue,
1780 description: "Pleroma Job Queue configuration: a list of queues with maximum concurrent jobs",
1783 key: :federator_outgoing,
1785 description: "Outgoing federation queue",
1789 key: :federator_incoming,
1791 description: "Incoming federation queue",
1797 description: "Email sender queue, see Pleroma.Emails.Mailer",
1803 description: "Web push notifications queue",
1807 key: :transmogrifier,
1809 description: "Transmogrifier queue",
1813 key: :scheduled_activities,
1815 description: "Scheduled activities queue, see Pleroma.ScheduledActivities",
1819 key: :activity_expiration,
1821 description: "Activity expiration queue",
1827 description: "Background queue",
1834 key: Pleroma.Web.Federator.RetryQueue,
1841 description: "If set to true, failed federation jobs will be retried",
1842 suggestions: [true, false]
1847 description: "The maximum amount of parallel federation jobs running at the same time",
1851 key: :initial_timeout,
1853 description: "The initial timeout in seconds",
1859 description: "The maximum number of times a federation job is retried",
1866 key: Pleroma.Web.Metadata,
1868 decsription: "Metadata-related settings",
1872 type: {:list, :module},
1873 description: "List of metadata providers to enable",
1876 Pleroma.Web.Metadata.Providers.OpenGraph,
1877 Pleroma.Web.Metadata.Providers.TwitterCard,
1878 Pleroma.Web.Metadata.Providers.RelMe
1885 description: "If set to true nsfw attachments will be shown in previews",
1903 "if enabled the instance will parse metadata from attached links to generate link previews",
1904 suggestions: [true, false]
1908 type: {:list, :string},
1909 description: "list of hosts which will be ignored by the metadata parser",
1910 suggestions: [["accounts.google.com", "xss.website"]]
1914 type: {:list, :string},
1915 description: "list TLDs (top-level domains) which will ignore for parse metadata",
1916 suggestions: [["local", "localdomain", "lan"]]
1920 type: {:list, :module},
1921 description: "list of Rich Media parsers",
1923 Formatter.richmedia_parsers()
1928 type: {:list, :module},
1929 description: "list of rich media ttl setters",
1931 [Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl]
1938 key: :fetch_initial_posts,
1940 description: "Fetching initial posts settings",
1946 "if enabled, when a new user is federated with, fetch some of their latest posts",
1947 suggestions: [true, false]
1952 description: "the amount of pages to fetch",
1958 group: :auto_linker,
1961 description: "Configuration for the auto_linker library",
1965 type: [:string, false],
1966 description: "specify the class to be added to the generated link. false to clear",
1967 suggestions: ["auto-linker", false]
1971 type: [:string, false],
1972 description: "override the rel attribute. false to clear",
1973 suggestions: ["noopener noreferrer", false]
1978 description: "set to false to remove target='_blank' attribute",
1979 suggestions: [true, false]
1984 description: "Set to true to link urls with schema http://google.com",
1985 suggestions: [true, false]
1989 type: [:integer, false],
1991 "Set to a number to truncate urls longer then the number. Truncated urls will end in `..`",
1992 suggestions: [15, false]
1997 description: "Strip the scheme prefix",
1998 suggestions: [true, false]
2003 description: "link urls with rarely used schemes (magnet, ipfs, irc, etc.)",
2004 suggestions: [true, false]
2010 key: Pleroma.ScheduledActivity,
2012 description: "Scheduled activities settings",
2015 key: :daily_user_limit,
2018 "the number of scheduled activities a user is allowed to create in a single day (Default: 25)",
2022 key: :total_user_limit,
2025 "the number of scheduled activities a user is allowed to create in total (Default: 300)",
2031 description: "whether scheduled activities are sent to the job queue to be executed",
2032 suggestions: [true, false]
2038 key: Pleroma.ActivityExpiration,
2040 description: "Expired activity settings",
2045 description: "whether expired activities will be sent to the job queue to be deleted",
2046 suggestions: [true, false]
2053 description: "Authenticator",
2056 key: Pleroma.Web.Auth.Authenticator,
2059 suggestions: [Pleroma.Web.Auth.PleromaAuthenticator, Pleroma.Web.Auth.LDAPAuthenticator]
2068 "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
2069 " will be verified by trying to authenticate (bind) to an LDAP server." <>
2070 " If a user exists in the LDAP directory but there is no account with the same name yet on the" <>
2071 " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.",
2076 description: "enables LDAP authentication",
2077 suggestions: [true, false]
2082 description: "LDAP server hostname",
2083 suggestions: ["localhosts"]
2088 description: "LDAP port, e.g. 389 or 636",
2089 suggestions: [389, 636]
2094 description: "true to use SSL, usually implies the port 636",
2095 suggestions: [true, false]
2100 description: "additional SSL options",
2106 description: "true to start TLS, usually implies the port 389",
2107 suggestions: [true, false]
2112 description: "additional TLS options",
2118 description: "LDAP base, e.g. \"dc=example,dc=com\"",
2119 suggestions: ["dc=example,dc=com"]
2125 "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"",
2134 description: "Authentication / authorization settings",
2137 key: :auth_template,
2140 "authentication form template. By default it's show.html which corresponds to lib/pleroma/web/templates/o_auth/o_auth/show.html.ee",
2141 suggestions: ["show.html"]
2144 key: :oauth_consumer_template,
2147 "OAuth consumer mode authentication form template. By default it's consumer.html which corresponds to" <>
2148 " lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex",
2149 suggestions: ["consumer.html"]
2152 key: :oauth_consumer_strategies,
2155 "the list of enabled OAuth consumer strategies; by default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
2156 " Each entry in this space-delimited string should be of format <strategy> or <strategy>:<dependency>" <>
2157 " (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_<strategy>).",
2158 suggestions: ["twitter", "keycloak:ueberauth_keycloak_strategy"]
2164 key: :email_notifications,
2166 description: "Email notifications settings",
2172 "emails of \"what you've missed\" for users who have been inactive for a while",
2176 schedule: "0 0 * * 0",
2178 inactivity_threshold: 7
2185 description: "globally enable or disable digest emails",
2186 suggestions: [true, false]
2192 "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"",
2193 suggestions: ["0 0 * * 0"]
2198 description: "Minimum interval between digest emails to one user",
2202 key: :inactivity_threshold,
2204 description: "Minimum user inactivity threshold",
2213 key: Pleroma.Emails.UserEmail,
2215 description: "Email template settings",
2219 # type: [:string, nil],
2220 description: "a path to a custom logo. Set it to nil to use the default Pleroma logo",
2221 suggestions: ["some/path/logo.png", nil]
2226 description: "a map with color settings for email templates.",
2229 link_color: "#d8a070",
2230 background_color: "#2C3645",
2231 content_background_color: "#1B2635",
2232 header_color: "#d8a070",
2233 text_color: "#b9b9ba",
2234 text_muted_color: "#b9b9ba"
2242 suggestions: ["#d8a070"]
2245 key: :background_color,
2248 suggestions: ["#2C3645"]
2251 key: :content_background_color,
2254 suggestions: ["#1B2635"]
2260 suggestions: ["#d8a070"]
2266 suggestions: ["#b9b9ba"]
2269 key: :text_muted_color,
2272 suggestions: ["#b9b9ba"]
2282 description: "Configure OAuth 2 provider capabilities",
2285 key: :token_expires_in,
2287 description: "The lifetime in seconds of the access token",
2291 key: :issue_new_refresh_token,
2294 "Keeps old refresh token or generate new refresh token when to obtain an access token",
2295 suggestions: [true, false]
2298 key: :clean_expired_tokens,
2300 description: "Enable a background job to clean expired oauth tokens. Defaults to false",
2301 suggestions: [true, false]
2304 key: :clean_expired_tokens_interval,
2307 "Interval to run the job to clean expired tokens. Defaults to 86_400_000 (24 hours).",
2308 suggestions: [86_400_000]
2319 key: :shortcode_globs,
2320 type: {:list, :string},
2321 description: "Location of custom emoji files. * can be used as a wildcard",
2322 suggestions: [["/emoji/custom/**/*.png"]]
2325 key: :pack_extensions,
2326 type: {:list, :string},
2328 "A list of file extensions for emojis, when no emoji.txt for a pack is present",
2329 suggestions: [[".png", ".gif"]]
2335 "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the groupname" <>
2336 " and the value the location or array of locations. * can be used as a wildcard",
2339 # Put groups that have higher priority than defaults here. Example in `docs/config/custom_emoji.md`
2340 Custom: ["/emoji/*.png", "/emoji/**/*.png"]
2345 key: :default_manifest,
2348 "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download." <>
2349 " Currently only one manifest can be added (no arrays)",
2350 suggestions: ["https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"]
2358 description: "Database related settings",
2363 description: "If RUM indexes should be used. Defaults to false",
2364 suggestions: [true, false]
2372 description: "Rate limit settings. This is an advanced feature and disabled by default.",
2376 type: [:tuple, {:list, :tuple}],
2377 description: "for the search requests (account & status search etc.)",
2378 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2381 key: :app_account_creation,
2382 type: [:tuple, {:list, :tuple}],
2383 description: "for registering user accounts from the same IP address",
2384 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2387 key: :relations_actions,
2388 type: [:tuple, {:list, :tuple}],
2389 description: "for actions on relations with all users (follow, unfollow)",
2390 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2393 key: :relation_id_action,
2394 type: [:tuple, {:list, :tuple}],
2395 description: "for actions on relation with a specific user (follow, unfollow)",
2396 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2399 key: :statuses_actions,
2400 type: [:tuple, {:list, :tuple}],
2402 "for create / delete / fav / unfav / reblog / unreblog actions on any statuses",
2403 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2406 key: :status_id_action,
2407 type: [:tuple, {:list, :tuple}],
2409 "for fav / unfav or reblog / unreblog actions on the same status by the same user",
2410 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2418 "To enable simple command line interface accessible over ssh, add a setting like this to your configuration file",
2423 description: "Enables ssh",
2424 suggestions: [true, false]
2429 description: "Dir with ssh keys",
2430 suggestions: ["/some/path/ssh_keys"]
2435 description: "Handler module",
2436 suggestions: ["Pleroma.BBS.Handler"]
2441 description: "Port to connect",
2442 suggestions: [10_022]
2445 key: :password_authenticator,
2447 description: "Authenticator module",
2448 suggestions: ["Pleroma.BBS.Authenticator"]
2455 description: "Mime types",
2463 "application/xml" => ["xml"],
2464 "application/xrd+xml" => ["xrd+xml"],
2465 "application/jrd+json" => ["jrd+json"],
2466 "application/activity+json" => ["activity+json"],
2467 "application/ld+json" => ["activity+json"]
2472 key: "application/xml",
2473 type: {:list, :string},
2475 suggestions: [["xml"]]
2478 key: "application/xrd+xml",
2479 type: {:list, :string},
2481 suggestions: [["xrd+xml"]]
2484 key: "application/jrd+json",
2485 type: {:list, :string},
2487 suggestions: [["jrd+json"]]
2490 key: "application/activity+json",
2491 type: {:list, :string},
2493 suggestions: [["activity+json"]]
2496 key: "application/ld+json",
2497 type: {:list, :string},
2499 suggestions: [["activity+json"]]
2508 description: "Tesla settings",
2513 description: "Tesla adapter",
2514 suggestions: [Tesla.Adapter.Hackney]
2522 description: "Pleroma chat settings",
2528 suggestions: [true, false]
2541 description: "Enables suggestions",
2545 key: :third_party_engine,
2547 description: "URL for third party engine",
2549 "http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-suggestions-api.cgi?{{host}}+{{user}}"
2555 description: "Request timeout to third party engine",
2556 suggestions: [300_000]
2561 description: "Limit for suggestions",
2568 suggestions: ["https://vinayaka.distsn.org"]
2574 key: Pleroma.Web.Endpoint.MetricsExporter,
2576 description: "Prometheus settings",
2581 description: "API endpoint with metrics",
2582 suggestions: ["/api/pleroma/app_metrics"]
2587 group: :http_signatures,
2589 description: "HTTP Signatures settings",
2595 suggestions: [Pleroma.Signature]
2601 key: Pleroma.Uploaders.MDII,
2609 suggestions: ["https://mdii.sakura.ne.jp/mdii-post.cgi"]
2615 suggestions: ["https://mdii.sakura.ne.jp"]
2623 description: "HTTP settings",
2627 type: [:string, :atom, nil],
2629 suggestions: ["localhost:9020", {:socks5, :localhost, 3090}, nil]
2632 key: :send_user_agent,
2635 suggestions: [true, false]
2644 # Workaround for remote server certificate chain issues
2645 partial_chain: &:hackney_connect.partial_chain/1,
2646 # We don't support TLS v1.3 yet
2647 versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"]
2661 key: :allow_inline_images,
2664 suggestions: [true, false]
2667 key: :allow_headings,
2670 suggestions: [true, false]
2676 suggestions: [true, false]
2682 suggestions: [true, false]
2686 type: {:list, :module},
2688 suggestions: [[Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]]
2699 key: :deny_follow_blocked,
2702 suggestions: [true, false]
2708 key: :mrf_normalize_markup,
2716 suggestions: [Pleroma.HTML.Scrubber.Default]
2727 key: :restricted_nicknames,
2728 type: {:list, :string},
2749 "ostatus_subscribe",
2776 suggestions: [86_400]
2780 type: {:list, :string},
2782 suggestions: [["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"]]
2791 "X-RateLimit-Reset",
2792 "X-RateLimit-Limit",
2793 "X-RateLimit-Remaining",
2803 suggestions: [true, false]
2807 type: {:list, :string},
2809 suggestions: [["Authorization", "Content-Type", "Idempotency-Key"]]