* Fixed: The `/ffz reload` command is now `/ffz:reload` to remove an undesirable behavior with Twitch's completion handling when backspacing.
* Fixed: Spaces being included in links when they shouldn't be.
* Fixed: Previews of emotes in chat when typing their names directly.
* Changed: Initial work on tracking the audio/video de-sync when using audio APIs for the compressor. This appears as a value in the stream latency metadata tool-tip, but currently drifts whenever the player is paused.
* Changed: Initial work on allowing the extension to be loaded from a bundled extension.
* API Changed: The load tracker now returns a list of reported loading keys when firing events.
* Start using the [pnpm](https://pnpm.io/) package manager rather than npm.
* Replace `node-sass` with `sass`.
* Update versions of many dependencies
* Didn't yet update webpack to v5, since that'll be a mess.
* Clean some old build scripts out of package.json
* Added: Setting to filter out chat messages by type. Can be used to remove hosting and raid notices, among other things.
* Added: Support for clicking badges. It's a native feature that's been missing for ages.
* Changed: Make headers slightly bigger in settings so that they stand out more.
* Fixed: Certain settings inheriting default values when they should not.
* Fixed: Bug in the FFZ Emote Menu when garbage subscription data is returned from Twitch.
* Fixed: Do not suppress error messages in the console when an error happens in an event handler.
* Added: Changelog for Add-Ons.
* Added: Option to disable the player running at a faster rate to reduce the buffer size.
* Changed: Stream Latency metadata now shows you when the player is running at a faster rate.
* Fixed: Formatting of tool-tips for metadata.
* Fixed: Metadata tool-tips not supporting rich children when updating.
* Fixed: Metadata icons not updating when changed dynamically.
* Fixed: The current channel's accent color not being detected in pop-out chat.
* Fixed: Styles not being applied correctly to deleted messages that are part of a channel points reward or part of a re-subscription notice.
* Removed: Support for Rooms messages.
* API Added: Settings now have an `onUIChanged` method that is called when a setting is changed by a UI control, allowing for immediate feedback.
* API Added: Built-in settings components now accept a `buttons` component that is rendered before the reset and profile override buttons.
Initial wave of fixes for the Twitch redesign.
* Fixed: Apollo not loading, breaking many subsystems including chat.
* Fixed: Stream up-time not appearing.
* Fixed: Stream meta-data being styled and positioned incorrectly.
* Fixed: Header styles for the FFZ Control Center.
* Fixed: FFZ menu button not being styled correctly in the site header.
* Fixed: Alignment of chat minimize button when in portrait mode and/or swapped sidebars mode.
* Added: Synchronize applicable settings to `clips.twitch.tv` pages using an iframe.
* Fixed: Issue with chat replay disappearing on `clips.twitch.tv` pages.
* Changed: Pull the FFZ version number from `package.json`.
The Great Maintenance Update. No new features here. Instead, we've updated the build system to webpack 4, updated all our dependencies, and cleaned up a lot of linting issues.
* Fixed: Mentions not appearing in bold font.
* Fixed: Highlighting messages in chat when opening a viewer card by clicking a mention that wasn't all lower-case.
* Fixed: Detection of External add-ons when there is a name collision.
* Changed: Do not report name collision errors.
* Changed: Allow for multi-line add-on descriptions.
Implements an Add-on Loader so that other add-ons, such as the FFZ Add-on Pack, can be loaded directly by FFZ without requiring the user to install multiple extensions into their browser.
* Added: Notify users when a new build of FrankerFaceZ is available.
* Fixed: The option to disable channel hosting. (Revert to previous channel hosting data scheme from 21 days ago.)
* Configure the project to allow the use of JSX in .jsx files.
* Add linting for JSX.
* Rewrite most existing code that uses `createElement` to use JSX syntax.
* Stop importing `createElement as e`. That's what the minifier is for. And we don't have to write it manually so much now because of JSX syntax.