* **Important** You need to execute manually a migration script (can be executed after your upgrade, while your PeerTube instance is running) to generate small avatar miniatures:
*`PUT /api/v1/videos/{id}/watching` is deprecated, use `POST /api/v1/videos/videos/{id}/views` instead: https://docs.joinpeertube.org/api-rest-reference.html#operation/addView
* Add ability to set RTMP/RTMPS listening hostname using `rtmp.hostname`/`rtmps.hostname` and public RTMP/RTMPS hostname using `rtmp.public_hostname`/`rtmps.public_hostname`
### Docker
* Use NodeJS 16 in PeerTube docker image: administrators may have to reinstall PeerTube plugins that use native NodeJS dependencies
* Support readonly tmp directory (if you want to use `tmp` directory as a volume)
### Plugins/Themes/Embed API
* Theme:
* Add `--mainBackgroundHoverColor` and `--greySecondaryBackgroundColor` CSS variables
* Add server plugin hooks
*`filter:api.video-playlist.videos.list.params` and `filter:api.video-playlist.videos.list.result`
* Support `getSettings()`, `isLoggedIn()` and `getAuthHeader()` client plugin helpers in embed
### Features
* :tada: Add video edition from the PeerTube web interface :tada:
* Cut the video (set a new start/new end)
* Add an intro at the beginning and/or an outro at the end of the video
* Add an icon/watermark in the top right corner of the video
* PeerTube will automatically transcode the new video and replace the original one
* :tada: Add latency setting support for lives (small latency without P2P or high latency to increase P2P ratio) :tada:
* :tada: Add ability to save a replay of every streaming session of a permanent live :tada:
* Add simple subtitle edition from video captions tab in video edition form [#4666](https://github.com/Chocobozzz/PeerTube/pull/4666)
* Display live streaming sessions details in permanent live information modal
* Add ability to also mute users when banning them [#4650](https://github.com/Chocobozzz/PeerTube/pull/4650)
* UI improvements:
* Add ability for admins to display author avatar in video miniatures [#4639](https://github.com/Chocobozzz/PeerTube/pull/4639) [#4823](https://github.com/Chocobozzz/PeerTube/pull/4823)
* Display author avatar in embed
* Move admin comments list in *Overviews* menu
* Add a *Refresh* button to admin comments list
* Add ability to sort videos by total views
* Add *Persian* locale support
### Bug fixes
* Video uploads fixes:
* Fix invalid token during long uploads
* Fix upload on server with a slow disk
* Fix upload of some videos with unknown duration (`.m2v` for example)
* Fix 2 hours limit on uploads
* Fix upload page title [#4904](https://github.com/Chocobozzz/PeerTube/pull/4904)
* Fix `.ac3` and `.mts` upload on some OS
* Fix avatar with account username starting with a number
* Fix client html cache on theme update
* Disallow unlisted video indexation
* Allow oembed to fetch unlisted videos
* Stop removing remote Mastodon rates
* Fix email links displayed twice in text version
* Fix user quota inconsistencies in admin when users use lives
* Fix admin instance following list when sorting by *Redundancy allowed*
* More reliable object storage upload when using multipart [#4903](https://github.com/Chocobozzz/PeerTube/pull/4903)
* Correctly handle HTTP signature draft 11 requests (without `date` header but with `(created)`)
* Introduce ability for plugins to create client pages: https://docs.joinpeertube.org/contribute-plugins?id=create-client-page
* Plugins that register custom video fields can choose in which tab they want to display them and can report errors: https://docs.joinpeertube.org/contribute-plugins?id=add-custom-fields-to-video-form
* Add new client plugin id selectors
* Add `#plugin-selector-about-instance-moderation`, `#plugin-selector-about-instance-other-information`, `#plugin-selector-about-instance-features`, `#plugin-selector-about-instance-statistics`, `#plugin-selector-about-menu-instance`, `#plugin-selector-about-menu-peertube`, `#plugin-selector-about-menu-network` in about page [#4597](https://github.com/Chocobozzz/PeerTube/pull/4597)
* Add `#plugin-selector-menu-user-dropdown-language-item` in menu [#4597](https://github.com/Chocobozzz/PeerTube/pull/4597)
* Add client plugin hooks
*`filter:login.instance-about-plugin-panels.create.result` and `filter:signup.instance-about-plugin-panels.create.result` to add custom instance information in login/signup pages
* Add server plugin hooks
*`filter:api.server.stats.get.result`
*`filter:api.video.upload.video-attribute.result`, `filter:api.video.import-url.video-attribute.result`, `filter:api.video.import-torrent.video-attribute.result`, `filter:api.video.live.video-attribute.result` when creating a video object
*`action:api.video-caption.created` and `action:api.video-caption.deleted` [#4650](https://github.com/Chocobozzz/PeerTube/pull/4650)
* Server helpers
*`videos.getFiles(videoId: number)` to list video files (webtorrent, hls and thumbnail files)
*`videos.ffprobe(path: string)` to get `ffprobe` JSON result
* Publish [@peertube/peertube-type](https://www.npmjs.com/package/@peertube/peertube-types) NPM module that can be used by TypeScript plugins
* Add ability to disable P2P in embed using `p2p` query parameter in embed URL
### Maintenance
* REST API
* Deprecate `webTorrentEnabled` in favour of `p2pEnabled` for user model
* Add ability to pause/resume the job queue
* Also publish stable releases on https://builds.joinpeertube.org/release
* Add ability for admins to specify `youtube-dl`/`yt-dlp` python binary path [#4706](https://github.com/Chocobozzz/PeerTube/pull/4706)
* Check video privacy before listing or accepting captions, comments or rates
* Check video import target URL does not resolve to internal IP. This technique has some limits so if you have private HTTP services on your server/network publicly accessible, we recommend to use a proxy or a dedicated interface for PeerTube
* **Important** You need to execute manually a migration script (can be executed after your upgrade, while your PeerTube instance is running) to migrate HLS files name:
*`filter:api.video-watch.video-playlist-elements.get.params` and `filter:api.video-watch.video-playlist-elements.get.result` [#4387](https://github.com/Chocobozzz/PeerTube/pull/4387)
* Allow configuration to be static/readonly [#4315](https://github.com/Chocobozzz/PeerTube/pull/4315)
### CLI tools
* Add [create-move-video-storage-jobs](https://docs.joinpeertube.org/maintain-tools?id=create-move-video-storage-jobjs) script to move local video files in object storage [#4481](https://github.com/Chocobozzz/PeerTube/pull/4481)
* Removed `peertube-repl` and `peertube-watch` scripts
* Apply import interval only when reasonable [#4552](https://github.com/Chocobozzz/PeerTube/pull/4552)
### Features
* :tada: Add videos overview in admin
* List all available videos on the instance
* Display video information summary: file type, file size, privacy, state, embed...
* **Debian Bullseye admins:** Debian Bullseye removed `python` binary/link in favour of explicit `python2`/`python3` binaries. But `youtube-dl` used by PeerTube needs it so you'll have to install [python-is-python2](https://packages.debian.org/bullseye/python-is-python2) or [python-is-python3](https://packages.debian.org/bullseye/python-is-python3) **before** upgrading PeerTube
* **Deprecate** `videoLanguageManager.addLanguage` and `videoLanguageManager.deleteLanguage`: use `videoLanguageManager.addConstant` and `videoLanguageManager.deleteConstant` instead
* **Deprecate** `videoCategoryManager.addCategory` and `videoCategoryManager.deleteCategory`: use `videoCategoryManager.addConstant` and `videoCategoryManager.deleteConstant` instead
* **Deprecate** `videoLicenceManager.addLicence` and `videoLicenceManager.deleteLicence`: use `videoLicenceManager.addConstant` and `videoLicenceManager.deleteConstant` instead
* Introduce `.getConstantValue()`, `.getConstants()` and `.resetConstants()` for `videoLanguageManager`, `videoCategoryManager`, `videoLicenceManager`, `videoPrivacyManager` and `playlistPrivacyManager`
* Add server plugin hooks:
*`filter:api.overviews.videos.list.params` and `filter:api.overviews.videos.list.result`
* **Important:** v3.2.0 introduced a `pg_dump` export bug in the auto upgrade script. v3.2.1 fixed this bug. To upgrade from v3.2.**0**:
* You can upgrade manually https://docs.joinpeertube.org/install-any-os?id=manually
* Or you can apply the changes introduced in this commit: https://github.com/Chocobozzz/PeerTube/commit/86dc0b9cc9374cba7548bb613ff43d92f90570a8 and then use the auto upgrade script
*`filter:left-menu.links.create.result` to add/remove left menu links
*`filter:internal.player.videojs.options.result` to filter options sent to videojs player [#4126](https://github.com/Chocobozzz/PeerTube/pull/4126)
* Add server plugin hooks (https://docs.joinpeertube.org/api-plugins):
*`action:api.video-playlist-element.created`
### Features
* :tada: Add ability to create a custom homepage using HTML, markdown and [custom HTML tags](https://docs.joinpeertube.org/api-custom-client-markup) [#4007](https://github.com/Chocobozzz/PeerTube/pull/4007)
* :tada: Add ability to search playlists in PeerTube instance and [SepiaSearch](https://sepiasearch.org/)
* :tada: Shorter public URLs (old URLs are still supported):
* Handle short UUID (`8r4jooaQpHp8tw1E1qpSeYq` instead of `3caf7bea-5ceb-4959-81a0-b44d184e897c`) for playlists and videos
* Use `/w/:id` instead of `/videos/watch/:id` and `/w/p/:id` instead of `/videos/watch/playlist/:id`
* Use `/a/:accountName` instead of `/accounts/:accountName` and `/c/:channelName` instead of `/video-channels/:channelName` [#4009](https://github.com/Chocobozzz/PeerTube/pull/4009)
* Provide `/@:username` page that automatically redirect to the account or channel page [#4009](https://github.com/Chocobozzz/PeerTube/pull/4009)
* :tada: Add RTL layout support
* Add ability to use HTML, markdown and [custom HTML tags](https://docs.joinpeertube.org/api-custom-client-markup) in instance description
* Default to dark theme (if available) if requested by the web browser
* Or you can apply the changes introduced in this commit: https://github.com/Chocobozzz/PeerTube/commit/86dc0b9cc9374cba7548bb613ff43d92f90570a8 and then use the auto upgrade script
* **Important:** You must update your nginx configuration to add the `upload-resumable` endpoint: https://github.com/Chocobozzz/PeerTube/blob/develop/support/nginx/peertube#L81
* By default, HLS transcoding is now enabled and webtorrent is disabled. We suggest you to reflect this change.
See [the documentation](https://docs.joinpeertube.org/admin-configuration?id=webtorrent-transcoding-or-hls-transcoding) for more information
* PeerTube client now displays bigger video thumbnails.
To fix old thumbnails quality, run `regenerate-thumbnails` script after your PeerTube upgrade: https://docs.joinpeertube.org/maintain-tools?id=regenerate-thumbnailsjs
* Support HTML placeholders for plugins. See [the documentation](https://docs.joinpeertube.org/contribute-plugins?id=html-placeholder-elements) for more information
*`player-next` next to the PeerTube player
* Support storing files for plugins in a dedicated directory. See [the documentation](https://docs.joinpeertube.org/contribute-plugins?id=storage) for more information
* Transcoding:
* Add `inputOptions` option support for transcoding profile [#3917](https://github.com/Chocobozzz/PeerTube/pull/3917)
* Add `scaleFilter.name` option support for transcoding profile [#3917](https://github.com/Chocobozzz/PeerTube/pull/3917)
* Plugin settings:
* Add ability to register `html` and `select` setting
* Add ability to hide a plugin setting depending on the form state
* Plugin form fields (to add inputs to video form...):
* Add ability to hide a plugin field depending on the form state using `.hidden` property
* Add channel and playlist stats to stats endpoint [#3747](https://github.com/Chocobozzz/PeerTube/pull/3747)
* Support `playlistPosition=last` and negative index (`playlistPosition=-2`) URL query parameters for playlists [#3974](https://github.com/Chocobozzz/PeerTube/pull/3974)
* My videos:
* Add ability to sort videos (publication date, most viewed...)
* Add ability to only display live videos
* Automatically resume videos for non logged-in users [#3885](https://github.com/Chocobozzz/PeerTube/pull/3885)
* Admin plugins:
* Show a modal when upgrading a plugin to a major version
* Display a setting button after plugin installation
* Add ability to search live videos
* Use bigger thumbnails for feeds
* Parse video description markdown for Opengraph/Twitter/HTML elements
* Open the remote interaction modal when replying to a comment if we are logged-out
* Add script printing command to generate a resolution for a given file [#3507](https://github.com/Chocobozzz/PeerTube/pull/3507)
* Add `--wait-interval <seconds>` option to video-import script to wait between two video imports [#3310](https://github.com/Chocobozzz/PeerTube/pull/3310)
### Plugins/Themes/Embed API
* Add server plugin hooks (https://docs.joinpeertube.org/api-plugins):
*`filter:api.user.me.videos.list.params` and `filter:api.user.me.videos.list.result`
* Add server helpers:
*`videos.loadByIdOrUUID`
* Add server transcoding helpers (https://docs.joinpeertube.org/contribute-plugins?id=add-new-transcoding-profiles):
*`transcodingManager.addVODProfile`
*`transcodingManager.addVODEncoderPriority`
*`transcodingManager.addLiveProfile`
*`transcodingManager.addLiveEncoderPriority`
### Features
* Transcoding:
* Fair transcoding jobs priority: give an higher priority to `optimize` jobs and decrease priority of transcoding jobs depending on the amount of videos uploaded by the user during the last 7 days [#3637](https://github.com/Chocobozzz/PeerTube/pull/3637)
* Higher niceness priority for live transcoding compared to vod transcoding [#3577](https://github.com/Chocobozzz/PeerTube/pull/3577)
* Allow admins to choose a transcoding profile. New transcoding profiles can be added by PeerTube plugins that can inject custom ffmpeg encoders/parameters
* Add transcoding support for 1440p (Quad HD/QHD/WQHD) videos [#3518](https://github.com/Chocobozzz/PeerTube/pull/3518)
* Add transcoding progress in admin transcoding jobs list
* Use `veryfast` preset for default transcoding profile (same result size but faster)
* Transcode audio uploads to lower configured resolutions
* Transcode HLS playlists in a `tmp` directory (less bugs/inconsistencies)
* Allow admins to choose the transcoding jobs concurrency
* Async torrent creation on video upload. We hope that it should fix some weird upload errors
* Add `.m4a` audio upload support
* Accessibility/UI:
* Move orange admin buttons on the left side
* Hide title to left menu toggle icon
* Add username information in profile settings
* Improve about page layout
* Add refresh button in jobs list
* Add ability to set a custom user quota
* Rewrite prose for JavaScript disabled message [#3684](https://github.com/Chocobozzz/PeerTube/pull/3684)
* Video import:
* Stricter youtube-dl format selectors for import (don't import HDR videos and cap to the max supported resolution) [#3516](https://github.com/Chocobozzz/PeerTube/pull/3516)
* Don't publish imported videos before the user submitted the second step form
* Allow admins to choose the import jobs concurrency
* Implement *hot* and *best* trending algorithms [#3625](https://github.com/Chocobozzz/PeerTube/pull/3625) & [#3681](https://github.com/Chocobozzz/PeerTube/pull/3681)
* Admin config:
* Add URL fragment support in admin config page to go on the appropriate tab
* Improve submit error message
* Allow admins to disable ping requests logging [#3550](https://github.com/Chocobozzz/PeerTube/pull/3550)
* Add a setting so PeerTube periodically cleans up remote AP interactions
* Add ability for admins to update plugin auth field of a particular user
* Support `webp` avatar upload
* Implement remote comment/subscription
* Register a service worker [#3464](https://github.com/Chocobozzz/PeerTube/pull/3464)
* Add ability to remove one's avatar for account and channels [#3467](https://github.com/Chocobozzz/PeerTube/pull/3467)
* Show first decimal for video views above a thousand [#3564](https://github.com/Chocobozzz/PeerTube/pull/3564)
* Allow user to search through their watch history [#3576](https://github.com/Chocobozzz/PeerTube/pull/3576)
* Allow users/visitors to search through an account's videos [#3589](https://github.com/Chocobozzz/PeerTube/pull/3589)
* Use an HTML link to display feed url
* Allow AP resolution for default account/channel pages (`/accounts/:name/video-channels` and `/video-channels/:name/videos`)
* Redirect to login on 401, display 403 variant [#3632](https://github.com/Chocobozzz/PeerTube/pull/3632)
* Performance:
* Optimize videos list API endpoint
* Optimize videos list views sort SQL query
* Avoid as much as possible to process remote thumbnail
* Proxify remote torrent requests from local clients (like we do for captions and previews)
* Optimize rate POST endpoint
* Tighten hotkeys definitions to not conflict with the web browser hotkeys [#3702](https://github.com/Chocobozzz/PeerTube/pull/3702)
* Add more AP stats to stats endpoint
* Increase jobs request timeout to 7 seconds
* Increase broadcast request concurrency to 30
### Bug fixes
* Fix remote subscribe input alignment
* Fix loading bar for HTTP requests
* Fix table header overflow
* Disable wait transcoding checkbox instead of hiding it when uploading an incompatible video for the web
* Fix sendmail emailer configuration
* Add missing niceness to ffmpeg thumbnail process
* Videos with only HLS files:
* Fix RSS feed
* Correctly wait transcoding before federating
* Fix redundancy
* Correctly remove torrents
* Localize decimal separator in video miniatures [#3643](https://github.com/Chocobozzz/PeerTube/pull/3643)
* Check banned status on external authentication
* Remove all video redundancies when purging the cache
* Fix URI search admin config update
* Fix broken HLS playback with videos that contain an unknown channel layout
* Fix HLS generation after file import script
* Ensure we don't receive things from local actors
* Try to recover from network errors in HLS player
* Fix comments sorting dropdown z-index
* Fix create transcoding job script depending on the transcoding configuration
* Fix NSFW policy in my videos, account videos and channel videos pages
* Fix complete description loading of a previous video
* Fix video comments display with deleted comments
* Don't override preview image on import
* Fix Accept AP messages sending to previously accepted followers
* Fix import script when using the instance uses the search index
* Fix player freeze on Safari with a video that has many subtitles
* Fix anonymous user settings
* Fix preview upload with capitalized ext
* Fix abuses list crash on deleted video
* More robust channel change federation
* Fix emptying video tags
* Fix broken local actors that do not have a public/private key
* Update the default configuration to not federate unlisted videos. We recommend to admins to update [this setting](https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L196)
* Update the default configuration to remove remote video views to reduce DB size and improve performances. We recommend to admins to update [this setting](https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L170)
* Add ability for auth plugins to redirect user on logout [#32](https://framagit.org/framasoft/peertube/PeerTube/-/merge_requests/32) & [#33](https://framagit.org/framasoft/peertube/PeerTube/-/merge_requests/33)
* Add `input-password` setting to plugins [#3375](https://github.com/Chocobozzz/PeerTube/issues/3375)
* Add custom fields in video update/upload form using `registerVideoField` (https://docs.joinpeertube.org/contribute-plugins?id=add-custom-fields-to-video-form)
* :tada: Add ability to report comments and accounts
* :tada: Add messaging system between local reporter of an abuse and moderators so they can easily communicate
* :tada: Users can now see their abuse reports, and have notifications when an abuse state changed (accepted/rejected) or when moderators added a new message
* Add embed to block list details [@rigelk in #2926](https://github.com/Chocobozzz/PeerTube/pull/2926)
* Video playlists:
* :tada: Add ability to embed playlists
* :tada: Add ability to put a video multiple times in a playlist (with different startAt/stopAt parameters or not)
* Video comments:
* Add uni-code emojis native display in comments [@Kimsible in #3046](https://github.com/Chocobozzz/PeerTube/pull/3046)
* Add delete and re-draft action on a comment that doesn't have replies [@Kimsible in #3046](https://github.com/Chocobozzz/PeerTube/pull/3046)
* Hide deleted comments when there aren't replies [@Kimsible in #3046](https://github.com/Chocobozzz/PeerTube/pull/3046)
* Accessibility/UI:
* Disable vertical scroll instead of hide on desktop browsers [@Kimsible in #2962](https://github.com/Chocobozzz/PeerTube/pull/2962)
* Update my-account sub-menus icons [@Kimsible in #2977](https://github.com/Chocobozzz/PeerTube/pull/2977)
* Improve navigation sub-menu and tabs effects [@Kimsible in #2971](https://github.com/Chocobozzz/PeerTube/pull/2971)
* Hide generic channel display name and avatar on watch view [@Kimsible in #2988](https://github.com/Chocobozzz/PeerTube/pull/2988)
* Display user quota progress bars above upload form [@Kimsible in #2981](https://github.com/Chocobozzz/PeerTube/pull/2981)
* Improve mobile accessibility by moving table action cells on the left [@Kimsible in #2980](https://github.com/Chocobozzz/PeerTube/pull/2980)
* Directly display download button in watch page on logged-out users [@rigelk in #2919](https://github.com/Chocobozzz/PeerTube/pull/2919)
* Improve users list table display in admin (add badge, progress bar) [@rigelk in #2991](https://github.com/Chocobozzz/PeerTube/pull/2991)
* Add dynamic column display for users list table in admin [@rigelk in #2991](https://github.com/Chocobozzz/PeerTube/pull/2991)
* Add anchor links to about/instance [@Kimsible in #3064](https://github.com/Chocobozzz/PeerTube/pull/3064)
* Improve select components [@rigelk in #3035](https://github.com/Chocobozzz/PeerTube/pull/3035)
* Add content overlay for opened menu on touchscreens [@Kimsible in #3088](https://github.com/Chocobozzz/PeerTube/pull/3088)
* Add alert and hide upload view when no upload is possible [@Kimsible in #2966](https://github.com/Chocobozzz/PeerTube/pull/2966)
* Allow sorting notifications by unread/newest **@rigelk**
* Add open-graph and twitter-card metas for accounts, video-channels and playlists urls [@Kimsible in #2996](https://github.com/Chocobozzz/PeerTube/pull/2996)
* Add channel name to create-user admin form [@Kimsible in #2984](https://github.com/Chocobozzz/PeerTube/pull/2984)
A new endpoint to report videos will be created in PeerTube 2.4 and will also allow to report accounts and comments (`/videos/abuse` will be removed in 3.0)
* Renamed videos blacklist feature to videos blocks/blocklist
### Documentation
* Add feeds routes to the openapi spec **@rigelk**
* Add notifications routes to the openapi spec **@rigelk**
* Add redundancy routes to the openapi spec **@rigelk**
* Add plugins routes to the openapi spec **@rigelk**
* Add examples, descriptions and missing filters for abuses routes in the openapi spec **@rigelk**
* Update CentOS insutructions in dependencies.md [@cgarwood82 in 2904](https://github.com/Chocobozzz/PeerTube/pull/2904)
### Maintenance
* Switched image processing library from native dependency `sharp` to pure JS implementation `jimp`. Admins don't have to compile `sharp` anymore and `jimp` is lighter
* Provide specific engine boundaries for NodeJS and Yarn [@rigelk in 0c4bacb](https://github.com/Chocobozzz/PeerTube/commit/0c4bacbff53bc732f5a2677d62a6ead7752e2405)
* Add ability to set `database.name` config option [@gramakri in #2898](https://github.com/Chocobozzz/PeerTube/pull/2898)
### Docker
* Fix `POSTGRES` env variables in docker-compose ([@kimsible in #2538](https://github.com/Chocobozzz/PeerTube/pull/2538/files))
* Fix OpenDKIM permissions in docker-compose setup [@kimsible in #2868](https://github.com/Chocobozzz/PeerTube/pull/2868)
* Add ability to override client assets: logo - favicon - PWA icons - PWA manifest name and description [@kimsible in #2897](https://github.com/Chocobozzz/PeerTube/pull/2897)
* Block IP of infohash spammers [db48de8](https://github.com/Chocobozzz/PeerTube/commit/db48de8597897e5024f8e9ed5acb1a8f40748169)
* Allow limiting video-comments rss feeds to an account or video channel [@rigelk in 00494d6](https://github.com/Chocobozzz/PeerTube/commit/00494d6e2ae915741f47869dcd359d9728a0af91)
* **/!\ VERY IMPORTANT /!\\** We added a unique index on actors usernames to fix some federation bugs.
Please check now if you have conflicts:
* Go inside your database using `sudo -u postgres psql peertube_prod` and run `select "preferredUsername" from actor where "serverId" is null group by "preferredUsername" having count(*) > 1;`
* If you have some results, it seems you have duplicate channels/accounts.
For every entry, you'll have to change the preferredUsername of the entry you want (so they are unique).
The updated actors could have some federations issues
* Changed `auto_follow_index` setting configuration: you now have to use the complete URL in `index_url`.
If you used the default one, you now need to use `https://instances.joinpeertube.org/api/v1/instances/hosts`.
This way, you can also use a direct raw URL (Gitlab, Github, pastebin, etc.) using [a simple text format](https://framagit.org/framasoft/peertube/instances-peertube#peertube-auto-follow) and easily maintain small communities or instance recommendation lists.
* Add nginx configuration to redirect videos to an S3 bucket ([@rigelk](https://github.com/rigelk)) and update of the [corresponding documentation](https://docs.joinpeertube.org/admin-remote-storage).
* Optimize SQL request when broadcasting an activity
* Support infinite scrolling in the discover page
* Add ability for admins to create a user without a password. PeerTube will send a reset password link to the user ([@JohnXLivingston](https://github.com/JohnXLivingston))
* Improve embed title background opacity
* Add origin instance URL in watch page
* Clearer description of advanced search options
* Always copy full actor handle in video channels view ([@rigelk](https://github.com/rigelk))
* Add `sendmail` support ([@immae](https://github.com/immae)) to `smtp` configuration
* Support `rel="me"` links in markdown
* Use `originallyPublishedAt` from body on import if it exists
* Sort outbox by *DESC createdAt* order
* Increase video comment max length limit
### Bug fixes
* Update default user theme to `instance-default` (Jorge Silva)
* Fix user dropdown menu with long texts ([@rigelk](https://github.com/rigelk))
* Fix load more comments on infinite scroll ([@ipbc-dev](https://github.com/ipbc-dev))
* Fix CSP issue on WebFinger service ([@ZanyMonk](https://github.com/ZanyMonk))
* **/!\ VERY IMPORTANT /!\\** You need to execute manually a script (can be executed after your upgrade, while your PeerTube instance is running) to create HLS video torrents:
* **/!\ VERY IMPORTANT /!\\** In the next PeerTube release (v2.2.0), we'll add a unique index on actors usernames to fix some federation bugs.
Please check now if you have conflicts using:
* Go inside your database using `sudo -u postgres psql peertube_prod` and run `select "preferredUsername" from actor where "serverId" is null group by "preferredUsername" having count(*) > 1;`
* If you have some results, it seems you have duplicate channels/accounts.
For every entry, you'll have to change the preferredUsername of the entry you want (so they are unique).
The updated actors could have some federations issues
* We now use Buster for the docker image, so the image name changed:
*`production-stretch` becomes `production-buster`
*`v2.x.x-stretch` becomes `v2.x.x-buster`
* Users cannot create more than 20 channels now to avoid UX and actor name squatting issues
* We added a warning if the `videos` directory is the same than the `redundancy` one in your configuration file: it can create some bugs
* Add ability to generate HLS videos using `create-transcoding-job` script (see [the documentation](https://docs.joinpeertube.org/maintain-tools?id=create-transcoding-jobjs))
* Update nginx template: (you need to [update manually](https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/production.md#nginx))
* Add streaming playlists endpoint
* Add `client_body_temp_path` hint
* Relax TLS/SSL ciphers hardening to allow Android 4.4.2 to use the PeerTube instance API
* Add `maxFileSize`, `maxFiles` and `anonymizeIP` log options in configuration file
### Features
* :tada: Add *internal* video privacy mode. *Internal* videos are only available to other logged in users of your instance, and are not federated
* :tada: Add hyperlink video timestamps in comments & video descriptions ([@Lesterpig](https://github.com/lesterpig) & [@rigelk](https://github.com/rigelk))
* :tada: Comments improvements:
* Support basic markdown
* Soft delete video comments instead of destroying them ([@alcalyn](https://github.com/alcalyn))
* Add commentator name alongside fid for video comments ([@rigelk](https://github.com/rigelk))
* Add a cancel button in comment form ([@rigelk](https://github.com/rigelk))
* Show number of comments under a video in watch page ([@rigelk](https://github.com/rigelk))
* Add user moderation dropdown ([@rigelk](https://github.com/rigelk))
* Add ability to sort comments by *total replies* or *created date* ([@rigelk](https://github.com/rigelk))
* Add *total replies from video author* indicator ([@rigelk](https://github.com/rigelk))
* Comment name emphasis for video author ([@rigelk](https://github.com/rigelk))
* Add "Watch later" button in video miniature overlay ([@rigelk](https://github.com/rigelk))
* Add ability to transcode videos in an audio only video container ([@Yetangitu](https://github.com/Yetangitu))
* Add playlist search input in *add to playlist* dropdown ([@rigelk](https://github.com/rigelk))
* Add search bars for a user's videos and playlists ([@rigelk](https://github.com/rigelk))
* Support playlists in share modal
* Better UI for a better world:
* Add play/pause bezels to the video player ([@rigelk](https://github.com/rigelk))
* Use icons instead of buttons in watch page (like/dislike, support...) ([@rigelk](https://github.com/rigelk))
* Improve *PeerTube* section in About page and add links to the documentation
* Removed old JSON LD signature implementation. There will be some **federation incompatibilities** with forwarded activities sent
by PeerTube instances <v2.0.0
* Replaced configuration key `email.object` with `email.subject`: https://github.com/Chocobozzz/PeerTube/commit/916937d7daf386e4e2d37b2ca22db07b644b02df
### Plugins/Themes API
* Add plugin hook on registration `filter:api.user.signup.allowed.result`
### Docker
* Fix traefik version docker compose (**you need to update your `docker-compose.yml` file**: https://github.com/Chocobozzz/PeerTube/commit/f1b38883922fd59b36f093e44a5091e090d20862)
* **Important:** Deprecate NodeJS 8 (support ends on [December 2019](https://github.com/nodejs/Release#release-schedule)). Please upgrade to NodeJS 10.
* **Important:** Updated nginx template (you need to [update manually](https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/production.md#nginx))
* Fix long server responses on dual stack servers: https://github.com/Chocobozzz/PeerTube/commit/fd2ddcae8ff4eb10bf7168ac3c8801f06b37627f
* **Important:** With the new theme system, we removed the dark mode button. Your administrator has to install [the dark theme](https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-theme-dark)
from their admin panel, and then users can choose this theme in their settings
* Changed the playlist REST API to fix various issues. See https://github.com/Chocobozzz/PeerTube/pull/1998 for more information
* Removed magnet URI support in download modal since most of the BitTorrent clients do not understand the `xs` parameter
* Renamed `Overview` page to `Discover`
### Security
* Moderators can only create and update regular users (thanks GGC-Project)
### Maintenance
* Create a dedicated `package.json` for CLI tools to reduce server dependencies size
* Add ability to set root password by environment at first start ([@darnuria](https://github.com/darnuria))
* Removed unused `uuid` actor field (we already have a unique identifier that is the `preferredUsername`)
* Add ability to disable PeerTube log rotation ([@NassimBounouas](https://github.com/NassimBounouas))
* Speedup font display ([@BO41](https://github.com/BO41))
* Improve static files HTTP cache
* Add `--since` and `--until` parameters to import videos script to easily sync external channels ([@fflorent](https://github.com/fflorent))
* Optimize `/watch/:uuid` endpoint
* Optimize Sequelize (SQL ORM) queries generation (consumes less CPU)
* Prune script is faster and can prune avatar files
* CSP configuration changed: it's now in a [dedicated section](https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L110)
* Add GitPod support ([@jankeromnes](https://github.com/jankeromnes)) that could help people to contribute on PeerTube: https://github.com/Chocobozzz/PeerTube/blob/develop/.github/CONTRIBUTING.md#online-development
* Add reminder to restart PeerTube in upgrade script ([@ldidry](https://github.com/ldidry))
* Add argument to dockerfile to pass options to npm run build ([@NaPs](https://github.com/NaPs))
* Add `NOCLIENT` env support to only install server dependencies. Example: `NOCLIENT=true yarn install --pure-lockfile` ([@rigelk](https://github.com/rigelk))
* **Important:**: Add host network mode to the reverse proxy section (without this, it could break videos views and P2P: https://github.com/Chocobozzz/PeerTube/issues/1643#issuecomment-464789666)
* **Important:**: Add a network section to [docker-compose.yml template](https://github.com/Chocobozzz/PeerTube/blob/develop/support/docker/production/docker-compose.yml)
and update your [.env](https://github.com/Chocobozzz/PeerTube/blob/develop/support/docker/production/.env#L8) to fix IP forwarding issue ([@Nutomic](https://github.com/nutomic))
* Add Japanese & Nederlands & Português (Portugal) support
* Add experimental HLS support
* Better playback
* Better bandwidth management (for both client & server)
* Needs to store another video file per resolution, so enabling this option multiplies the videos storage by 2 (only new uploaded videos, this is not retroactive)
* Requires ffmpeg >= 4
* Better instance's followers management:
* Add ability to remove an instance's follower
* Add ability to forbid all new instance's followers
* Add ability to manually approve new instance's followers
* Add notification on new instance's follower
* Improve UI:
* Increase player default height
* Reduce big play button border width
* Increase thumbnail sizes
* Add hover effect on video miniature
* Add "my library" section in menu
* Add missing icons in some buttons/dropdown
* 2 rows per overview section
* Increase video thumbnail blur ([@Zig-03](https://github.com/Zig-03))
* Improve video miniatures list on mobile
* Add animation when opening user notifications
* Add ability for admins to disable the tracker (and so the P2P aspect of PeerTube, in order to improve users privacy for example)
* Add original publication date attribute to videos, and add ability to filter on it (Andrés Maldonado)
* Add video miniature dropdown
* Add ability for admins to declare their instance as dedicated to NSFW content
* Improve SEO (there is still work to be done)
* Login is now case insensitive (if using official web client)
* Add NSFW policy & users signup policy & auto blacklist strategy in features table in about page
* Improve comment deletion warning
* Restore videos list component on history back
* Add ability to consult server logs in admin
* Allow administrators to change/reset a user's password ([@rigelk](https://github.com/rigelk))
* Add a debug page to help admins to fix IP configuration issues
* Add ability for admins to limit users videos history size
* Add ability for admins to delete old remote videos views (reduce database size)
* Optimize video update page load
* Less refresh jobs
* Cleanup invalid AP rates/comments/shares
* Better videos redundancy config error handling
* Check emails are enabled if the admin requires email verification ([@joshmorel](https://github.com/joshmorel))
* **Docker:** Check you have all the storage fields in your `/config/production.yaml` file: https://github.com/Chocobozzz/PeerTube/blob/develop/support/docker/production/config/production.yaml#L34
* **nginx:** Add redundancy endpoint in static file. **You should add it in your nginx configuration: https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/production.md#nginx**
* **nginx:** Add socket io endpoint. **You should add it in your nginx configuration: https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/production.md#nginx**
* Add some security directives in the systemd unit configuration file ([@rigelk](https://github.com/rigelk) & [@mkoppmann](https://github.com/mkoppmann))
* Pending video published (after transcoding or a scheduled update)
* My account or one of my channel has a new follower
* Someone (except muted accounts) mentioned me in comments
* A user registered on the instance (for moderators)
* Notification actions:
* Add a web notification
* Send an english email
* Add contact form in about page (**enabled by default**)
* Add ability to unfederate a local video in blacklist modal (**checkbox checked by default**)
* Support additional video extensions if transcoding is enabled (**enabled by default**)
* Redirect to the last url on login
* Add ability to automatically set the video caption in URL. Example: https://peertube2.cpy.re/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d?subtitle=ru
* Explain what features are enabled on the instance in the about page
* Add an error message in the forgot password modal if the instance email system is not configured
* Add sitemap
* Add well known url to change password ([@rigelk](https://github.com/rigelk))
* Remove 8GB video upload limit on client side. There may still be such limit depending on the reverse proxy configuration ([@scanlime](https://github.com/scanlime))
**Important:** Before upgrading run the following commands (no need to stop PeerTube) on your PeerTube database (in this example it's *peertube_prod*):
* Add ability to change the language of the interface (currently available: english, french, basque, catalan, czech and esperanto)
* Subtitles/captions support (.srt and .vtt)
* Add advanced search
* Add ability to click on category/language/licence/tags in watch page
* Improve explanations of P2P & Privacy section in about page
* Avoid design latency when the admin set custom CSS
* Add ability to update video channel avatar
* Limit video resolution depending on the video element size (Nitesh Sawant)
* Show "Other videos" on a <1300pxviewport([@Simounet](https://github.com/simounet))
* Add QR code to share videos URL ([@DeeJayBro](https://github.com/DeeJayBro))
* Add "agree to the terms" checkbox in registration form
* Add tracker rate limiter
* Add author URL in OEmbed response
* Display username instead of email in menu
* Clarifying what extensions are accepted for upload ([@rigelk](https://github.com/rigelk))
* Thumbnail support for RSS feeds ([@rigelk](https://github.com/rigelk))
* Open CORS on API and static resources ([@rezonant](https://github.com/rezonant)
* B-adapt 1 and B-frames 16 on ffmpeg transcoding: ([@Anton-Latukha](https://github.com/Anton-Latukha)). See https://github.com/Chocobozzz/PeerTube/pull/774 for more information
* Support Redis socket ([@rigelk](https://github.com/rigelk))
* Improve video `start` param to support string times (for example: 2m42s))
* Display table next/prev/first/last icons in admin tables
* NodeInfo support ([@rigelk](https://github.com/rigelk))