IMPORTANT NOTES
- If your instance has many videos (local or federated) in the database, automatic migrations at next startup can take several minutes to finish. Plan for a short period of downtime during this upgrade
- You need to manually execute a migration script after upgrading, while PeerTube is running and the database migration is complete (
Migrations finished. New migration version schema: 1125in PeerTube startup logs):- Classic installation:
cd /var/www/peertube/peertube-latest && sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production node dist/scripts/migrations/peertube-8.3.js - Docker installation:
cd /var/www/peertube-docker && docker compose exec -u peertube peertube node dist/scripts/migrations/peertube-8.3.js
- Classic installation:
- PeerTube requires PostgreSQL >= 14
- Comment API change:
GET /api/v1/videos/{id}/comment-threads/{threadId}no longer returns the full comment tree- It now returns at most 10 direct replies per comment, down to 5 levels of nesting, by default
- Each node in the returned tree now has a
totalChildrenfield: compare it againstchildren.lengthto know if replies were cut off - To fetch the rest, call the new endpoint:
GET /api/v1/videos/{id}/comments/{commentId}/replies - If you're a plugin author:
filter:api.video-thread-comments.list.resultnow sees only the truncated tree. Two new hooks,filter:api.video-comment-replies.list.params/.result, cover the new replies endpoint
SECURITY
- Security hardening:
- Time safe comparison when checking email verification strings
- Prevent replaying an email check request
- Don't leak account existence in the login endpoint
- Introduce per-account rate limiting for abuse creation and comment creation
- Add specific rate limit for "Confirm token" endpoints (reset password, verify email, confirm 2FA)
- Introduce account login lockout, disabled by default, when there are too many failed attempts for a specific account across multiple IPs. An email is sent to the account owner when the account login is locked
- Migrate OTP encryption to GCM
- Add
nosniffX-Content-Type-OptionsHTTP response header - Sanitize uploaded SVG files (SVG uploads are only allowed via admin endpoints for now)
- Force downloading SVG files using the
Content-Dispositionheader to prevent XSS injections
Sysadmin
- A JSON Schema is available for the YAML configuration in
config/config-schema.json
Configuration
This section is not exhaustive
- Add explicit Redis socket configuration in
redis.socketto provide the redis socket path - Add
user.allow_cross_provider_authconfiguration to support multiple auth plugins for the same PeerTube user #7655 - Add opt-in configuration to automatically add the username and HTTP request id as tags in the log file:
log.tag_requests
Plugins/Themes/Embed API
- Add server plugin hooks (https://docs.joinpeertube.org/api/plugins):
filter:api.video-comment-replies.list.paramsandfilter:api.video-comment-replies.list.resultfor the new/api/v1/videos/{id}/comments/{commentId}/repliescomment endpoint
- Add client plugin hooks (https://docs.joinpeertube.org/api/plugins):
filter:api.video-watch.video-comment-replies.list.paramsandfilter:api.video-watch.video-comment-replies.list.resultwhen loading more replies of a comment
- Add server plugin helpers:
peertubeHelpers.email.createJob({ ... })to send an emailpeertubeHelpers.videos.updateVideo({ ... })to update video metadatapeertubeHelpers.videos.withFile({ ... })to fetch a video file
- Add server registration features to add automatic tags to videos or comments:
registerCommentAutoTagger: (options: RegisterCommentAutoTaggerOptions) => voidregisterVideoAutoTagger: (options: RegisterVideoAutoTaggerOptions) => voidunregisterCommentAutoTagger: (options: RegisterCommentAutoTaggerOptions) => voidunregisterVideoAutoTagger: (options: RegisterVideoAutoTaggerOptions) => void
- Add support for
externalIdwhen returning the user from an auth plugin, so it no longer needs to rely on the user's email to map the auth provider user to a PeerTube user - Add support for
languagewhen returning the user from an auth plugin - Expose
req.cookiesin theonLogouthook of theregisterExternalAuthplugin helper
Features
- 🎉 Add ability to subscribe to a remote blocklist to automatically mute/unmute accounts and servers 🎉
- New Moderation → Blocklist → Subscriptions admin page to add/remove blocklist subscriptions and see their sync state
- Subscriptions are periodically refreshed, automatically muting/unmuting accounts and servers to match the remote list
- Add a notification when a subscription sync mutes or unmutes accounts/servers
- Expose your own instance's blocklist as a public log (
blocklist.public_log.enabledconfiguration) so other admins can subscribe to it
- 🎉 Add ability to subscribe to a remote watched words list, at both the platform and account level 🎉
- New Moderation → Watched words → Subscriptions admin page (instance-wide lists) and a matching subscriptions page in My library (per-account lists) to add/remove subscriptions and see their sync state and imported word count
- Subscribed lists are periodically fetched and synchronized, automatically adding/removing words
- Existing videos and comments are automatically re-tagged in the background when a subscribed list changes
- 🎉 Admins can configure automatic tag policies to automatically block videos with a specific label 🎉
- Add ability for moderators to set an internal note on blocked videos
- Send an email notification on account login from a new device #7737
- Add bulk actions to add/remove videos in a playlist in My Videos
- Add ability to bulk update some video metadata in My Videos and Admin Videos Overview
- Add ability for users to retry video imports and filter them by State
- Users can specify the default privacy for imported videos of a channel synchronization
- Admins/moderators have a special channel picker when updating a video, so they can easily move any local video to another user's channel
- Admins can cancel a local transcoding job
- Allow users to choose the stats interval when listing their channels #7750
- Add "Nobody can embed this video" setting to videos #7716
- Improve local video search by allowing search through the first 1000 characters of descriptions #7612
- Various SEO improvements, including a
lastmodfield in sitemap entries #7738 - Support the
host-metawell-known endpoint for remote subscriptions - Transcription widget:
- Make the transcription widget header sticky to ensure the search function remains easily accessible
- Don't auto-scroll transcription to the current segment after a manual user scroll
- Add a "Sync with video" button after a manual user scroll to restore auto scroll
- Restore transcription widget when refreshing the page
- Improve podcast UX for channels:
- Add a new "Podcast" page when managing a channel to display podcast URLs and information
- The channel now accepts a "Public email" configuration so that the user's email address is not used
- UI & accessibility:
- Improve video stats styling and add quick date filters
- Fade player when video is paused and user becomes inactive #7725
- Underline badges that are filters or links
- Improve video miniature accessibility when listing videos
- Add
...suffix to actions that lead to another step - Improve notifier error message when server returns a
502HTTP status - Hide non-existing metadata in the video watch page
- Performance:
- Faster comment rendering in the web browser
- Limit the number of replies when fetching replies of a thread
- Reduce number of rows returned by the user SQL query
- Reduce server CPU usage when handling multiple lives with a large DVR window
Bug fixes
- Stick live to 1x playback rate
- Correctly cleanup lives on error
- Prevent memory leak in the live segment sha store
- Use correct CSS variable for big play button color #7733
- Fix juddery video with variable fps input
- Abort ffmpeg and HTTP requests on job timeout
- Fix broken byte range request support for video download endpoints when throttling is enabled
- Owner/admin can bypass the download enabled setting
- Fix S3 base url with forced path style
- Prevent duplicated thumbnails
- Support federation to other fediverse platforms that do not support the shared inbox
- More robust channel sync: don't miss videos on the next sync when the previous one was aborted because of a sync error
- Fix videos feed sort for playlists and respect
originallyPublishedAtfor videos - Fix broken views on an instance if the GeoIP request is stuck
- Don't notify again when a video is re-published
- Allow admin to update the default "Prevent email from being sent to the user" behaviour when processing a registration request
- Add all user attributes to audit logs on create/update #7695
- Correctly hide the mobile message if disabled by the admin
- Fix missing sourcemap asset requests #7696