ChangeLog for Quassel IRC
=========================
This is not a full ChangeLog, but rather an end-user FeatureLog that is supposed
to provide a list of new features between Quassel versions. As such, it only
contains end-user visible, mostly major new features. It does not contain (most)
bugfixes, nor is it guaranteed to be complete or up-to-date at all. Also, it does
start at 0.3.0 only, since this was the first version widely available.

Please have a look at <https://bugs.quassel-irc.org/projects/quassel-irc/roadmap> for a
list of closed bug/feature reports (which still does not cover bugs we have
fixed but which were never reported, of course), and for a full list of
changes, the git history at <https://git.quassel-irc.org> is your friend.

Without further ado, let's start:

Version 0.14.0 (2022-01-01)
===========================

NOTE:  Database schema format change, no downgrade possible!

* New baseline for minimum build requirements and dependencies: Ubuntu 16.04 "Xenial Xerus"
  - GCC 5 or Clang 3.4
  - CMake 3.5
  - Qt 5.5.0
* New dependencies:
  - Boost (v1.54 or later, build-time only)
  - zlib (bundled miniz has been removed)
* Support building against Qt 5.15 (and all prior versions down to and including Qt 5.5)
* Remove support for building against Qt4/KDE4
* Require SSL support in Qt
* Don't silently fall back to unencrypted client/core communication if certificate cannot be loaded
* Properly escape LDAP usernames to prevent injection or bypassing authentication
* Strip format codes in ignore list rules (this might affect pre-existing rules)
* Support many more features of IRCv3
* Improve window handling under Wayland
* Support the HAProxy protocol
* Provide a daemon providing Prometheus metrics
* Deprecate local highlight settings (prefer synced ones instead)
* Improve configuration of SASL PLAIN and EXTERNAL
* Add button for strike-through format
* Allow choosing the account to connect to via command-line option
* Make database schema migration more robust
* Make backlog fetch more efficient, allow for fetch-on-demand
* Make syncing and other aspects of the core/client protocol more efficient
* Make RPC implementation more efficient
* Improve log output
* Clean up and modernize large parts of the code base
  - Replace the Qt 4 string-based connect syntax by function pointers
  - Fix many clang-tidy findings
  - Reformat ALL the code using clang-format instead of Uncrustify, with some style changes
* Modernize build system
* Support building shared libraries via the ENABLE_SHARED CMake option (defaults to on)
* Introduce support for (and a small selection of) unit tests via the BUILD_TESTING CMake option
* Use Github Actions as CI system, replacing Travis and Appveyor
* Revamp bundle/DMG creation on macOS
* Many smaller fixes
* Improve documentation and UI help
* Update translations
* Update bundled iconsets and application icons
* Update default network and documentation to point to our new home Libera IRC (since Freenode killed itself)

Version 0.13.1 (2019-02-15)
===========================

* Fix backlog message fetching that was broken when using Qt4
* Improve output to syslog
* Make upgrading the database schema more robust in case of interruption
* Fix alignment of buttons in the input widget
* Fix bug where the nicklist would be hidden on first start
* Allow configuring the listen addresses for the built-in identd (--ident-listen)
* Honor core options even if it was just configured via environment variables
* Fix syncing of auto reconnect retries in network settings
* Update translations

Version 0.13.0 (2018-11-17)
===========================

NOTE:  Database schema and settings format change, no downgrade possible!
NOTE²: Database migration may take a long time (hours for big databases),
       and temporarily require double the disk space until migration is
       complete!

* Use Qt 5 by default (this will be the last feature release still supporting Qt4)
* New branding (application icon)
* UI improvements
  - Improve ChatView color settings
  - Improve default sender colors, and make configurable by palette in QSS
  - Fix font weight parsing and other issues in QSS
  - Settings dialog improvements (tree width, changed state for several pages)
  - Chat list filter/search
  - Shortcuts for formatting options
  - Sender colors by default (and optionally for ACTION messages)
  - Add context menu option in ChatView for enabling the menubar
  - Optionally hide brackets around sender/timestamp
  - Make /list open the channel list dialog, including advanced search for channels
  - Spell checking via Sonnet if KDE Frameworks integration is enabled
  - Support $i:ident, $i:identd, and $i:account in aliases
  - Use system locale for date/time formatting
  - Many other UI improvements and polish (tooltips, tool bars, menus...)
* Completely revamp icon theme support
  - Fix icon loading on many platforms (requires newer Qt)
  - Fix tray icons with StatusNotifier
  - Allow selecting a fallback for incomplete system icon themes
  - Ship Quassel-specific icons
  - Add Breeze and Breeze Dark icon themes, use Breeze by default
* Notification improvements
  - New configuration options for tray icon notification
  - Use Plasma notification sounds by default (rather than KDE4's)
  - QtMultimedia notification backend (deprecates Phonon support with Qt 5)
* IRC-related improvements
  - Support for many IRCv3 features, improved capability negotiation
  - Improve handling of user modes
  - Store sender prefixes (@+v...) in database, and optionally show in UI
  - Add support for ZNC self-messages
  - Support twitch.tv's membership capability
  - Support rendering of extended mIRC colors, hex colors, reverse and strikethrough
  - Make IRC rate limits configurable
  - Use UTF-8 server encoding by default (instead of ISO-8859-1, changeable via network settings)
  - Internal identd (may require port forwarding rules)
  - Strict ident mode (always sends user name)
  - Provide CTCP timestamps in ISO 8601 format
  - AutoWho-related fixes, properly support away-notify (removes workaround for non-compliant servers)
  - Command line debug options for showing raw IRC messages
* Security improvements
  - Improved SSL certificate handling
  - Add command line options for SSL certificate/key paths
  - Use SHA-512 to store the core certificate digest
  - Persist blowfish keys for encrypted channels
  - Use CBC by default, like other clients (instead of ECB)
* Move functionality core side (useful for mobile clients)
  - Handle buffer activity, highlights, ignore rules core-side
  - Improved ignore rule support
  - Core-side (synced) highlight rules (in addition to local highlight rules)
* Core/client connection
  - Extended core/client feature negotiation, including diagnostic output
  - System proxy support for the client
  - Allow disconnecting other clients via "Core Info" dialog (if supported by client)
  - LDAP authentication backend for core users (--select-authenticator)
* Regular expressions
  - Unify regex handling (may affect old ignore rules, see release announcement for details)
  - Cache many frequently used regexes to improve performance
* Database changes
  - Use 64 bit timestamps to avoid the Y2038 problem, use millisecond precision
  - Use 64 bit message IDs to support giant backlogs (requires 0.13+ core and client)
  - Store real names and avatar URLs in database (for now, only used by Quasseldroid)
  - Improve database performance
  - Make database upgrades more robust
* Containerization improvements
  - Store core settings in database
  - Allow configuring the core via environment variables
* Logging improvements
  - Allow to configure the log level also for (monolithic or not) client
  - Make debug log window more useful
  - Catch early log messages
  - Slightly reformat console output so it's better readable
* Settings versioning (allows upgrading from older versions, too)
* Multithread the monolithic client, to keep UI responsive even under load
* Properly shutdown client and core on exit
* Fix POSIX signal handling, support console events on Windows
* Build system improvements
* Code fixes for issues found in static analysis
* Many smaller fixes and quality-of-life improvements
* Update inxi script to 3.0.18 (now requires Perl to be installed)
* Translation updates

Version 0.12.5 (2018-04-24)
===========================

* Make "/ " use the rest of the message as a literal
* Use commit date instead of build date to support reproducible builds
* Support Qt 5.6 through Qt 5.10
* Automated OSX builds (via Travis)
* Update deployment and CI settings for OSX and Windows
* Better HIDPI support with recent Qt 5 versions
* Snapcraft packaging support
* Inxi version bump
* Prioritization of PING/PONG messages to prevent timeouts
* Improved touch screen support (scrolling etc.)
* WebEngine support for URL previews (deprecates WebKit support with Qt 5)
* Disable WebKit by default due to it being unmaintained and a security risk
* Strip format codes when checking for highlights
* Properly disconnect from networks when shutting down
* Reload SSL certificates on signal SIGHUP
* Add AppData metadata for quassel and quasselclient
* Allow channel buffer merges
* Improve dock and tray handling on OSX
* Split user messages on newlines, as per the RFC
* Join channels on double-click in platforms other than OSX and Windows
* Support Elliptic Curve keys for client<->core connections on Qt 5.5+
* Add sanity checks for QDataStream deserialization (e.g. for size)
* Prevent clients from trying to login to an unconfigured core, avoiding a crash
* Various bugfixes
* Some code cleanups
* Translation updates

Version 0.12.4 (2016-04-24)
===========================

* Handle STATUSMSG messages (recently abused for query spam)
* Link previews are enabled again in Windows builds
* Fix core crash caused by clients sending invalid handshake data
* Fix session management with Qt 5
* Fix connection issues with non-compliant ircds
* Translation updates

Version 0.12.3 (2016-02-09)
===========================

* Fix activity filters when selecting buffers in custom ChatViews
* Fix default shortcuts when integrated with KDE Frameworks
* Introduce support for Appveyor CI (automated Windows builds)
* Support SnoreNotify 0.7
* Various cleanups and performance improvements
* Various build system fixes
* Channel keys are again remembered between syncs
* Support for Qt 5.5
* Network (re)connection fixes
* Fix possible message loss when running multiple core users on a psql database
* Command line option for specifying SSL certificates and keys
* Many smaller fixes

Version 0.12.2 (2015-04-23)
===========================

* Fix PostgreSQL not re-initializing after reconnect (raising CVE-2013-4422 from the dead)
* Remove warning on startup due to a change in Kdelibs4ConfigMigrator

Version 0.12.1 (2015-04-21)
===========================

* Emergency fix for behavior change in Qt5's psql driver regarding timezones

Version 0.12.0 (2015-04-15)
===========================

* Full support for KDE Frameworks
* Properly split messages with multi-byte encodings and/or encryption
* Improve core password hashing algorithm
  NOTE: This upgrades the database schema, so no downgrades are possible!
* Remote password change
* Core connection improvements
* Build system improvements
* PostgreSQL connection improvements
* Improve Qt 5 support
* Qt 4.8+ or Qt 5.2+ now required
* Several tweaks and fixes
* Translation updates

Version 0.11.0 (2014-09-23)
===========================

* New build requirements:
  - C++11 capable compiler (gcc 4.7+, clang 3.3+, MSVC 2013+)
  - cmake 2.8.9+
* Full support for Qt 5.2+ in addition to Qt 4.6+
* Completely revamp the build system, making use of "new" CMake features

Version 0.10.1 (2014-09-23)
===========================

* Fix buffer hotlist sorting
* Split CTCP messages if they're too long
* Make database problems more obvious
* Fix backlog loading for QuasselDroid
* Properly save the toolbar state on Mac OSX
* Fix a crash with KDE's network detection
* Various other fixes

Version 0.10.0 (2014-03-25)
===========================

* Refactor lots of the protocol and connection code
* Introduce connection probing for reliably negotiating protocol features
* Introduce the new DataStream protocol with streaming compression
* Option for forcing the core to only accept SSL connections
* Support for the Snore notification backend
* Allow searching the web for selected text
* Connection-related fixes
* Allow for hiding inactive networks
* Enable line wrap in the input field
* Show backlog messages in the Chat Monitor
* Remove SSL protocol selection, always use auto-negotiation for best results
* Highlight rules are now case-insensitive by default
* New and updated translations
* Bump inxi version (for /sysinfo)
* Use the raster rendering engine by default on OSX (should improve performance)

Version 0.9.3 (2014-03-25)
==========================

* Notification fixes
* Improve reliability of SSL connections
* Save toolbar state properly on Mac
* Prevent user interaction with the web preview
* Fix fullscreen mode
* Fix spurious crash caused by shaky ircd connections
* Fix adding an unneeded colon to custom commands
* Avoid Qt's DNS cache to properly handle round-robin DNS records

Version 0.9.2 (2013-11-26)
==========================

* Don't crash if /topic contains newlines
* Fix SSL-related issues
* Fix Phonon notifications not playing sound
* Pingout if connection drops during SASL auth phase
* Prevent messages from being sent to status buffers
* Make sure manipulated/buggy clients cannot access backlog of other core users
* Fix context menu issues

Version 0.9.1 (2013-10-11)
==========================

* Fix security issue with Qt 4.8.5 and PostgreSQL
* Phonon notifications for Mac OS X
* Convert tabs in messages into 8 spaces
* Silence superfluous QCA warnings
* Various key- and encryption-related fixes
* Ignore formatting in clickables
* Enable warnings when compiling with Clang
* Updated translations
* Various other small fixes and improvements

Version 0.9.0 (2013-04-16)
==========================

* Halfop support
* Channel-specific highlights
* Support for intermediate CA certificates
* Support the DockManager interface
* OSX Notification Center support
* DH1080 key exchange
* SASL EXTERNAL support
* Improvements for Retina displays on OSX
* Supporting to start minimized to tray
* Rudimentary support for Qt5 (obsolete again because upstream changed too much)
* Refactor of SignalProxy, network and protocol code
* First pieces of the coming protocol abstraction
* Build system improvements
* Various bugfixes
* New and updated translations
* Reformatted ALL the source code

Version 0.8.0 (2012-03-20)
==========================

* Make tab completion key configurable
* Syslog support for the core
* Make the core more robust against random invalid input
* oidentd support
* Build system improvements
* Many new and updated translations
* Various bugfixes

Version 0.7.4 (2012-03-20)
--------------------------

* Improve keyboard navigation
* Bump Oxygen icons
* Conform with icon naming spec
* Remove JS support from webpreview
* Fix support for Qt 4.8
* Several bugfixes and cleanups

Version 0.7.3 (2011-09-08)
--------------------------

* Fix a core crash

Version 0.7.2 (2011-03-24)
--------------------------

* PostgreSQL improvements
* Various bugfixes

Version 0.7.1 (2010-09-21)
--------------------------

* Critical fixes for CTCP and connection handshake

Version 0.7.0 (2010-09-14)
==========================

* Improved DE integration, support for dbusmenu
* Bump Qt dependency: we need Qt 4.6 for client and monolithic now
* Fullscreen mode (F11)
* CTCP CLIENTINFO support
* Shortcuts for navigation between chats (Alt+Left/Right/Up/Down)
* Add blowfish encryption (/setkey and /delkey; needs QCA2)
* Shortcut editing for all platforms (!KDE)
* Improved handling of invites
* New tray icon for highlights
* Global away
* Emacs-style keybindings for the input line
* Improved markerline behavior
  - Allow manual setting (Ctrl+R)
  - Provide shortcut for jumping to the markerline (Ctrl+K)
* New languages: el, gl, ja
* Many bugfixes

Version 0.6.1 (2010-04-16)
--------------------------

* Critical bugfixes

Version 0.6.0 (2010-04-14)
==========================

* New languages: en_GB, es, nl, oc, pt, pt_BR, sq, sv, uk, zh_CN
* Updated existing languages
* Restore last selected buffer on restart
* Optional per-chat history
* SASL authentication support (e.g. supported by Freenode)
* Allow inputting formatted (colored/bold/...) text in the inputline
* Support the StatusNotifierItem DBus spec
  - Replace old-style tray icon where supported (currently KDE >= 4.4)
  - Integrate freedesktop notifications support (libnotify or knotify)
* Systemtray refactoring
  - Replace animation by blinking icon
  - Properly handle notifications and mainwindow toggle
* Improved URL detection
* Sender column is now clickable (double click opens query)
* Improved notification handling
* ChatView performance improvements
* Many buildsystem fixes
  - Improved handling of icons
  - Updated cmake macros
  - Support building with MinGW
  - Support KDE on non-X11 platforms
  - Better handling of SSL libraries
* Solid network state detection support (with KDE)
* Settingspage refactoring
* Improved handling of SSL certificates
* Completely reworked the client/core connection
  - New settingspage for managing core accounts
  - Streamlined login/sync process
  - Configurable timeout
  - Automatic reconnect to core
* Send unknown commands to server
* New stylesheets
* Use gettext for translations

Version 0.5.2 (2010-01-18)
--------------------------

* CTCP ignore
* Buildsystem fixes

Version 0.5.1 (2009-11-21)
--------------------------

* Many Bugfixes
* Updated translations
* Fix issues with Qt >= 4.6

Version 0.5.0 (2009-10-14)
==========================

* Tons of bugfixes
* Many translation updates
* Use DrKonqi/Apport to provide backtraces in case of a crash
* Support for Ayatana's Message Indicator (libindicate; *buntu specific feature for now)
* Fix wordwrap issues
* Improved notification behavior (highlighted channels can now be cycled)
* Improved icon packaging (don't install them if KDE is available and current enough)
* Menubar can now be hidden (Ctrl+M to toggle)
* Ignore list support
* Vast performance improvements in the handling of synced objects
  - Core startup/shutdown now almost instant
  - Joining/leaving large channels much more efficient
* Netsplit detection
* New topic widget dynamically resizes to show all of the topic
* Usability tweaks
  - Reworked configuration dialogs
  - Renamed "Buffer" to "Chat" throughout in all user-visible strings
* Introduce stylesheet-based (QSS) styling for ChatView and the whole application
* Allow configuration of ping timeouts and auto-WHO
* Make toolbars configurable in KDE
* Alt+A shortcut for jumping to cycle through active buffers
* Properly remember the mainwindow state on shutdown/restart
* Multiline input support
* Improved systray notifications
* Lazy backlog fetching for hidden buffers
* Improved flood control
* Spell check support (requires KDE integration)
* /exec support for executing external scripts/programs
* CLI interface for managing core users with quasselcore rather than a script
* Improved ping timeout detection
* PostgreSQL database backend support
* Smart nickname completion (most recently active)

Version 0.4.3 (2009-08-26)
--------------------------

* Bugfixes and translation updates

Version 0.4.2 (2009-05-20)
--------------------------

* Bugfixes and translation updates

Version 0.4.1 (2009-03-18)
--------------------------

* Bugfixes and translation updates

Version 0.4.0 (2009-02-17)
==========================

* Buffer view font can now be changed
* Colored nicknames
* Wizard for setting up identity and networks on first run
* Paste protection warns if you try to paste many lines
* Use login name and real name for default identity
* Add toolbar to main window
* Away log window showing highlighted messages while you're away
* Settings dialog streamlining
* Animated system tray icon
* Shiny new Oxygen icons all over the place, including our new app icon
* Build system improvements
* Put all config and data files in one location and make that configurable
* Allow presetting networks and a list of channels to join on first start
* Change and improve CLI argument handling
* All buffer views are now customizable
* Streamlined monolithic client
* Many usability improvements
* Method for easily hiding and unhiding buffers in buffer views
* Renaming and merging of query buffers
* Improved SSL certificate handling
* Optional support for KDE4
  - KNotify support
  - KDE icon and color theme support
  - Editable shortcuts
* Core now supports a proxy for connections to IRC
* Core supports SSL certs and keys for IRC connections
* Chat Monitor configuration dialog
* Audio notifications
* Clickable channel names in ChatView
* Context menus in ChatView and BufferViews
* Respect the separate clipboards (Ctrl+C / X11 selection) on X11
* Improved mouse handling:
  - Double/triple click selections
  - Drag'n'Drop

Version 0.3.1 (2008-11-20)
--------------------------

* Nick changes and day change messages can now be hidden
* Web previews and status icons can be disabled
* Icons for Online/Away/Offline status of queries
* Load Qt's default translations
* Add new settings for proper message redirection
* Add context menu to links
* Automatic backtraces on Windows
* Add russian translation
* Cut off the sender column on the left in ChatView
* Enable away on detach
* Backlog amount (initial and dynamic) can now be configured
* Shift Up/Down scrolls the ChatView
* Page Up/Down scrolls the ChatView
* ChatView Zoom with Ctrl + / Ctrl -
* Join/Part/Quit... events can now be hidden in ChatView
* Monolithic build features zero configuration: Click'n'Run
* Monolithic build now uses a proper (socket-less) internal connection
* Ctrl+L focuses input line
* Improve notification handling, use proper D-Bus notifications
* Day change messages in ChatView
* Web Preview on hovering over a link (requires QtWebkit)
* Allow icons to be installed externally, optionally use system Oxygen theme
* Improve URL handling in ChatView (underline, single-click invocation)

Version 0.3.0 (2008-08-27)
==========================
The first widely available release of Quassel IRC.
