Pleroma major release: 2.0.0
Pleroma 2.0.0 released with emoji reactions, OStatus removal, configuration from Admin-FE and much more! You can read a blog post about it here.
Pleroma-FE changes
Added
- Tons of color slots including ones for hover/pressed/toggled buttons
- Experimental
--variable[,mod]syntax support for color slots in themes. themodmakes color brighter/darker depending on background color (makes darker color brighter/darker depending on background color) - Paper theme by Shpuld
- Icons in nav panel
- Private mode support
- Support for ‘Move’ type notifications
- Pleroma AMOLED dark theme
- User level domain mutes, under User Settings -> Mutes
- Emoji reactions for statuses
- MRF keyword policy disclosure
Changed
- Updated Pleroma default themes
- theme engine update to 3 (themes v2.1 introduction)
- massive internal changes in theme engine - slowly away from “generate things separately with spaghetti code” towards “feed all data into single ‘generateTheme’ function and declare slot inheritance and all in a separate file”
- Breezy theme updates to make it closer to actual Breeze in some aspects
- when using
--variablein shadows it no longer uses the actual CSS3 variable, instead it generates color from other slots - theme doesn’t get saved to local storage when opening FE anonymously
- Captcha now resets on failed registrations
- Notifications column now cleans itself up to optimize performance when tab is left open for a long time
- 403 messaging
Fixed
- Fixed loader-spinner not disappearing when a status preview fails to load
- anon viewers won’t get theme data saved to local storage, so admin changing default theme will have an effect for users coming back to instance.
- Single notifications left unread when hitting read on another device/tab
- Registration fixed
- Deactivation of remote accounts from frontend
- Fixed NSFW unhiding not working with videos when using one-click unhiding/displaying
- Improved performance of anything that uses popovers (most notably statuses)
Backend changes
Security
- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.
Removed
- Breaking: Removed 1.0+ deprecated configurations
Pleroma.Upload, :strip_exifand:instance, :dedupe_media - Breaking: OStatus protocol support
- Breaking: MDII uploader
- Breaking: Using third party engines for user recommendation
-
API Changes
- Breaking: AdminAPI: migratefromdb endpoint
Changed
Breaking: Pleroma won’t start if it detects unapplied migrations
Breaking: Elixir >=1.8 is now required (was >= 1.7)
Breaking:
Pleroma.Plugs.RemoteIpand:rate_limiterenabled by default. Please ensure your reverse proxy forwards the real IP!Breaking: attachment links (
config :pleroma, :instance, no_attachment_linksandconfig :pleroma, Pleroma.Upload, link_name) disabled by defaultBreaking: OAuth: defaulted
[:auth, :enforce_oauth_admin_scope_usage]setting totruewhich demandsadminOAuth scope to perform admin actions (in addition tois_adminflag on User); make sure to use bundled or newer versions of AdminFE & PleromaFE to access admin / moderator features.Breaking: Dynamic configuration has been rearchitected. The
:pleroma, :instance, dynamic_configurationsetting has been replaced withconfig :pleroma, configurable_from_database. Please backup your configuration to a file and run the migration task to ensure consistency with the new schema.Breaking:
:instance, no_attachment_linkshas been replaced with:instance, attachment_linkswhich still takes a boolean value but doesn’t use double negative language.Replaced pleroma_job_queue and
Pleroma.Web.Federator.RetryQueuewith Oban (seedocs/config.mdon migrating customized worker / retry settings)Introduced quantum job scheduler
Enabled
:instance, extended_nickname_formatin the default configAdd
rel="ugc"to all links in statuses, to prevent SEO spamExtract RSS functionality from OStatus
MRF (Simple Policy): Also use
:accept/:rejecton the actors rather than only their activitiesOStatus: Extract RSS functionality
Deprecated
User.Infoembedded schema (fields moved toUser)Store status data inside Flag activity
Deprecated (reorganized as
UserRelationshipentity) User fields with user AP IDs (blocks,mutes,muted_reblogs,muted_notifications,subscribers).Rate limiter is now disabled for localhost/socket (unless remoteip plug is enabled)
Logger: default log level changed from
warntoinfo.Config mix task
migrate_to_dbtruncatesconfigtable before migrating the config file.Default to
prepare: :unnamedin the database configuration.Instance stats are now loaded on startup instead of being empty until next hourly job.
API Changes
- Breaking EmojiReactions: Change endpoints and responses to align with Mastodon
- Breaking Admin API:
PATCH /api/pleroma/admin/users/:nickname/force_password_resetis nowPATCH /api/pleroma/admin/users/force_password_reset(acceptsnicknamesarray in the request body) - Breaking: Admin API: Return link alongside with token on password reset
- Breaking: Admin API:
PUT /api/pleroma/admin/reports/:idis nowPATCH /api/pleroma/admin/reports, see admin_api.md for details - Breaking:
/api/pleroma/admin/users/invite_tokennow usesPOST, changed accepted params and returns full invite in json instead of only token string. - Breaking: replying to reports is now “report notes”, enpoint changed from
POST /api/pleroma/admin/reports/:id/respondtoPOST /api/pleroma/admin/reports/:id/notes - Mastodon API: stopped sanitizing display names, field names and subject fields since they are supposed to be treated as plaintext
- Admin API: Return
totalwhen querying for reports - Mastodon API: Return
pleroma.direct_conversation_idwhen creating a direct message (POST /api/v1/statuses) - Admin API: Return link alongside with token on password reset
- Admin API: Support authentication via
x-admin-tokenHTTP header - Mastodon API: Add
pleroma.direct_conversation_idto the status endpoint (GET /api/v1/statuses/:id) - Mastodon API:
pleroma.thread_mutedto the Status entity - Mastodon API: Mark the direct conversation as read for the author when they send a new direct message
- Mastodon API, streaming: Add
pleroma.direct_conversation_idto theconversationstream event payload. - Admin API: Render whole status in grouped reports
- Mastodon API: User timelines will now respect blocks, unless you are getting the user timeline of somebody you blocked (which would be empty otherwise).
- Mastodon API: Favoriting / Repeating a post multiple times will now return the identical response every time. Before, executing that action twice would return an error (“already favorited”) on the second try.
- Mastodon API: Limit timeline requests to 3 per timeline per 500ms per user/ip by default.
Added
:chat_limitoption to limit chat characters.cleanup_attachmentsoption to remove attachments along with statuses. Does not affect duplicate files and attachments without status. Enabling this will increase load to database when deleting statuses on larger instances.Refreshing poll results for remote polls
Authentication: Added rate limit for password-authorized actions / login existence checks
Static Frontend: Add the ability to render user profiles and notices server-side without requiring JS app.
Mix task to re-count statuses for all users (
mix pleroma.count_statuses)Mix task to list all users (
mix pleroma.user list)Mix task to send a test email (
mix pleroma.email test)Support for
X-Forwarded-Forand similar HTTP headers which used by reverse proxies to pass a real user IP address to the backend. Must not be enabled unless your instance is behind at least one reverse proxy (such as Nginx, Apache HTTPD or Varnish Cache).MRF: New module which handles incoming posts based on their age. By default, all incoming posts that are older than 2 days will be unlisted and not shown to their followers.
User notification settings: Add
privacy_optionoption.Support for custom Elixir modules (such as MRF policies)
User settings: Add This account is a option.
A new users admin digest email
OAuth: admin scopes support (relevant setting:
[:auth, :enforce_oauth_admin_scope_usage]).Add an option
authorized_fetch_modeto require HTTP signatures for AP fetches.ActivityPub: support for
repliescollection (output for outgoing federation & fetching on incoming federation).Mix task to refresh counter cache (
mix pleroma.refresh_counter_cache)API Changes
- Job queue stats to the healthcheck page
- Admin API: Add ability to fetch reports, grouped by status
GET /api/pleroma/admin/grouped_reports - Admin API: Add ability to require password reset
- Mastodon API: Account entities now include
follow_requests_count(planned Mastodon 3.x addition) - Pleroma API:
GET /api/v1/pleroma/accounts/:id/scrobblesto get a list of recently scrobbled items - Pleroma API:
POST /api/v1/pleroma/scrobbleto scrobble a media item - Mastodon API: Add
upload_limit,avatar_upload_limit,background_upload_limit, andbanner_upload_limitto/api/v1/instance - Mastodon API: Add
pleroma.unread_conversation_countto the Account entity - OAuth: support for hierarchical permissions / Mastodon 2.4.3 OAuth permissions
- Metadata Link: Atom syndication Feed
- Mix task to re-count statuses for all users (
mix pleroma.count_statuses) - Mastodon API: Add
exclude_visibilitiesparameter to the timeline and notification endpoints - Admin API:
/users/:nickname/toggle_activationendpoint is now deprecated in favor of:/users/activate,/users/deactivate, both acceptnicknamesarray - Admin API: Multiple endpoints now require
nicknamesarray, instead of singenickname: POST/DELETE /api/pleroma/admin/users/:nickname/permission_group/:permission_groupare deprecated in favor of:POST/DELETE /api/pleroma/admin/users/permission_group/:permission_groupDELETE /api/pleroma/admin/users(nicknamequery param ornicknamesent in JSON body) is deprecated in favor of:DELETE /api/pleroma/admin/users(nicknamesquery array param ornicknamessent in JSON body)- Admin API: Add
GET /api/pleroma/admin/relayendpoint - lists all followed relays - Pleroma API:
POST /api/v1/pleroma/conversations/readto mark all conversations as read - ActivityPub: Support
Moveactivities - Mastodon API: Add
/api/v1/markersfor managing timeline read markers - Mastodon API: Add the
recipientsparameter toGET /api/v1/conversations - Configuration:
feedoption for user atom feed. - Pleroma API: Add Emoji reactions
- Admin API: Add
/api/pleroma/admin/instances/:instance/statuses- lists all statuses from a given instance - Admin API: Add
/api/pleroma/admin/users/:nickname/statuses- lists all statuses from a given user - Admin API:
PATCH /api/pleroma/users/confirm_emailto confirm email for multiple users,PATCH /api/pleroma/users/resend_confirmation_emailto resend confirmation email for multiple users - ActivityPub: Configurable
typefield of the actors. - Mastodon API:
/api/v1/accounts/:idhassource/pleroma/actor_typefield. - Mastodon API:
/api/v1/update_credentialsacceptsactor_typefield. - Captcha: Support native provider
- Captcha: Enable by default
- Mastodon API: Add support for
account_idparam to filter notifications by the account - Mastodon API: Add
emoji_reactionsproperty to Statuses - Mastodon API: Change emoji reaction reply format
- Notifications: Added
pleroma:emoji_reactionnotification type - Mastodon API: Change emoji reaction reply format once more
- Configuration:
feed.logooption for tag feed. - Tag feed:
/tags/:tag.rss- list public statuses by hashtag. - Mastodon API: Add
reactedproperty toemoji_reactions - Pleroma API: Add reactions for a single emoji.
- ActivityPub:
[:activitypub, :note_replies_output_limit]setting sets the number of note self-replies to output on outgoing federation. - Admin API:
GET /api/pleroma/admin/statsto get status count by visibility scope - Admin API:
GET /api/pleroma/admin/statuses- list all statuses (acceptsgodmodeandlocal_only)
Fixed
Report emails now include functional links to profiles of remote user accounts
Not being able to log in to some third-party apps when logged in to MastoFE
MRF:
Deleteactivities being exempt from MRF policiesOTP releases: Not being able to configure OAuth expired token cleanup interval
OTP releases: Not being able to configure HTML sanitization policy
OTP releases: Not being able to change upload limit (again)
Favorites timeline now ordered by favorite date instead of post date
Support for cancellation of a follow request
API Changes
- Mastodon API: Fix private and direct statuses not being filtered out from the public timeline for an authenticated user (
GET /api/v1/timelines/public) - Mastodon API: Inability to get some local users by nickname in
/api/v1/accounts/:id_or_nickname - AdminAPI: If some status received reports both in the “new” format and “old” format it was considered reports on two different statuses (in the context of grouped reports)
- Admin API: Error when trying to update reports in the “old” format
- Mastodon API: Marking a conversation as read (
POST /api/v1/conversations/:id/read) now no longer brings it to the top in the user’s direct conversation list
- Mastodon API: Fix private and direct statuses not being filtered out from the public timeline for an authenticated user (