PChat Version 2.1.0 Alpha 1 Released
PChat 2.1.0-alpha1
Changes since PChat 2.0.0.
This is an alpha: the first release on GTK 4, with a new GNOME frontend.
Expect rough edges, and please report what you find.
Highlights
- PChat now runs on GTK 4. The classic frontend has been ported, and there
is a new GNOME frontend built on libadwaita. - Broad IRCv3 support: SASL (including SCRAM and late SASL), STS, batch,
labeled-response, standard replies, setname, bot mode, typing
notifications, MONITOR, UTF8ONLY and more. - Network passwords are kept in the system keyring by default.
- New ways to get PChat: an AppImage that runs on any Linux, a Flatpak,
a portable Windows build, a reworked Windows installer, and a macOS app. - Many security and crash fixes. Most were found in a review before this
release.
New GNOME frontend (libadwaita)
- A new frontend built on libadwaita. It is the one shipped in the AppImage
and the Flatpak (--enable-libadwaita). - It has the classic frontend’s features: channel and ban lists, channel
settings, the URL grabber, the raw log, plugins and scripts with their
menus, DCC transfers, spell checking with Enchant, and a choice of chat
font. - It has a tray icon: StatusNotifierItem on Linux and BSD, the
notification area on Windows, the menu bar on macOS. - Clicking an image link shows the image in the chat, and clicking it
again shows it bigger. A new host is asked about before anything is
fetched. Size, redirects and time are all limited. - It can run in the background through the portal. Starting PChat again
shows the hidden window instead of starting a second copy. - Start at login works from the AppImage, on Windows and on macOS.
- Quitting while connected asks first, as the classic frontend does.
- Clicking a notification shows the tab it came from.
- A channel you’ve left is dimmed in the sidebar.
- mIRC’s extended colours (32–98) are shown as they’re meant to be.
- The chat stays at its newest line as lines come in and when you switch
to it. - The chat title is centred, with the whole topic shown.
- DCC downloads ask where to save and can be opened afterwards.
Classic frontend (GTK 4)
- Ported from GTK 3 to GTK 4. Its list, tree and combo box widgets have
been replaced. - Italic text (
^]) is shown slanted. - Files dropped on a window go to the person in that window, not to
whichever tab has focus. - On Windows, the download folder can be chosen, and save dialogs start
with an empty file name. /lastlogno longer prints lines without a nick twice.- Misspelt words are underlined in red even when colors.conf doesn’t set
a colour. - Links in the chat only open http, https, ftp and mailto.
IRCv3 and protocol
- IRCv3 support, from ZoiteChat. This includes message tags, server-time,
account-notify, extended-join, chghost, echo-message, invite-notify and
cap-notify. - SASL with PLAIN, EXTERNAL and SCRAM-SHA-1/256/512. SASL offered after
connecting is used to log in (SASL 3.2). - STS: a server can require TLS for itself.
- Netsplits and netjoins are one line each (batch), and they’re hidden
when a channel hides joins and parts. - A command’s answer goes to the window it was run in (labeled-response).
- Standard replies (FAIL, WARN, NOTE) are shown as messages.
/setnamechanges your real name on servers that support it.- Bots are marked in the user list.
- Typing notifications are shown.
- The notify list works on networks that use MONITOR (Libera, OFTC, Ergo
and others). - On a UTF8ONLY network, PChat sends UTF-8.
- Long messages are always split correctly, whatever host the server
gives you. NICKandUSERare sent separately, which fixes logging in to some
servers.- Nick completion adds
:after the nick by default, not,.
Security
Passwords and logins
- Network passwords go in the system keyring by default, except in
portable mode. servlist_.conf is made private every time it’s saved. - A password removed from a network, or the network itself, is removed
from the keyring too. A renamed network’s passwords move with it. - A network’s saved passwords and commands are only sent when the
connection is as secure as that network asks for. A plain-text/server
or irc:// link to one of its hosts no longer sends them. /serverand/reconnectto a different host no longer send the
previous server’s password.- A network’s client certificate is only sent to that network.
TLS, STS and SASL
/server,/reconnectand ircs:// links check the server’s certificate.
-insecureturns that off, explicitly.- STS connections always verify the certificate. A plain-text connection
can’t save an STS policy, and an STS duration is capped at ten years. - SCRAM login requires the server to prove it knows the password.
- SCRAM accepts only 4,096 to 1,000,000 iterations, and wipes its keys
after use. - SASL keeps going when the server turns down other capabilities.
- A server can’t grow the CAP LS and SASL buffers without end.
DCC
- Files received over DCC are named safely and can’t leave the download
folder. - On Windows, received files are marked as coming from the internet.
- DCC replies only count when they come from the nick the transfer is
with. - Passive DCC tokens are random.
Commands, plugins and the system
- Every line sent to the server ends at the first CR or LF in it.
- identd only answers the server, and can’t be held open or flooded.
- The D-Bus interface uses GDBus and only answers when remote control is
on. - Log file names can’t leave the log folder.
- Hosts from the server can’t block PChat, and can’t reach
/DNSas
options. - On Windows, DLLs and plugins aren’t loaded from the current directory.
!cmdpopups pass each argument as one. - The CTCP and message flood limits keep working after their first window.
Crash and bug fixes
From the server or other users
- Fixed crashes and out-of-bounds reads that a server or another user could
trigger with: - an out-of-range server-time tag
- irc:// links without a channel
- a bare
\001CTCP - a bare
ERROR - a CTCP PING notice with no time
- a DCC CHAT line of just
\001ACTION - malformed
PREFIX= - chanopt.conf lines without a value
- Lines read after a reconnect aren’t handled as if they came from the new
connection.
Commands and windows
/execoutput with ANSI colours, text events over 4 KB, theme events
over 4 KB, plugin preferences and the WATCH/MONITOR list sent on connect
can no longer overflow their buffers.- Tab completion of a very long word no longer overflows its buffers.
Long nicks, user names and sound settings no longer overflow the
preferences. - Closing a window while choosing a file for it no longer crashes.
- Answering a file or chat offer that has already gone no longer crashes.
- A connect command, user command or
/timerthat closes its own window
or deletes itself no longer crashes. - A plugin unhooking another while hooks run, or asking about a closed
window, no longer crashes. - A warning while connecting from the network list no longer locks the
main window. - On first run, closing the network list without connecting quits PChat
instead of leaving it running unseen. - A nick before a join’s address is no longer turned into a link.
Text and display
- A line too long for the text area is no longer cut in the middle of a
character. - Logging a line made only of colour codes no longer reads before it.
- A link under the pointer no longer outlives its line.
- An image that couldn’t be shown can be tried again, and an image of a
kind PChat can’t read says so.
Connecting and DCC
- A TLS handshake the server cuts off fails at once, not after 90 seconds.
- On Windows, a connect attempt you’ve given up on can no longer disturb
the next one. - A connect that can’t be started says so and doesn’t kill anything else.
- A line in a multibyte character set that is cut off mid-character still
converts. - DCC downloads and client certificates work under a non-ASCII Windows
profile name. Credential Manager keeps a non-ASCII network’s name. - A DCC port range with only a first port set works, and ports still in
TIME_WAIT can be reused.
Configuration
- The network list reads its last line in full, and lines of any length.
- A channel with no network in chanopt.conf is skipped rather than causing
a crash. --urlis checked when PChat starts, as when it’s already running.- Portable mode is detected next to pchat.exe, not in the current
directory.
Plugins
- FiSHLiM, checksum and sysinfo plugins, from ZoiteChat.
- A media player plugin, built separately with cargo.
- New Lua plugin, built against LuaJIT.
- FiSHLiM
- A DH1080 key exchange that fails its check no longer crashes PChat.
- DH1080_INIT no longer silently replaces a stored key.
- The key file is readable only by you.
- An empty CBC message is no longer read past its end.
- It no longer leaks memory with every message.
- It says so when it can’t load Blowfish, and finds OpenSSL’s legacy
provider in the Windows and macOS builds. - checksum: tells only the recipient of a DCC file its checksum. It
used to send your local file path to the channel. - winamp: a title with no
.or many%signs no longer crashes it. - sysinfo: reads any /proc/asound/cards without overrunning or
crashing. - Python: holds its lock from the start, as Python 3.13 and newer
require. - Plugin menu icons: found where PChat is installed, not in the
current directory.
Windows
- Built with autotools in MSYS2 (clang64), with new 32- and 64-bit
installers. - The installer:
- can include the Python, Perl, Tcl and Lua plugins with what each
needs - can make irc:// and ircs:// links open in PChat
- waits for a running PChat to be quit
- upgrades in place, not into a nested bin folder
make-dist.sh -pmakes a portable PChat.- GLib’s proxy lookup replaces MS Proxy support.
macOS
- PChat builds on macOS.
build/macos/make-app.shmakes a self-contained
PChat.app. - Shortcuts use Command, the tray icon is in the menu bar, and irc://
links open in PChat.
Linux and packaging
- An AppImage that runs on any Linux and updates itself. It converts every
character set a network can use. - A Flatpak, with the app ID org.pchat_irc.PChat. It owns only the D-Bus
names PChat uses. - The desktop file offers PChat for irc:// and ircs:// links.
- AppStream metadata, so software centres can show PChat.
- IPv6 is enabled by default on every platform.
- The RPM spec builds again, and
make distmakes a tarball. - Every available translation is installed. The translation template
includes the GNOME frontend.
Removed
- The mail checker.
- The XDCC plugin, which was never built.
- The unused iso-codes lookup and the libxml2 dependency.
- MS Proxy support, replaced by GLib’s proxy lookup.
Downloads
Linux Appimage: https://git.thatzachbacon.com/PChat/PChat/releases/download/v2.1.0-alpha1/PChat-x86_64.AppImage
32bit Windows: https://git.thatzachbacon.com/PChat/PChat/releases/download/v2.1.0-alpha1/PChat-2.1.0-alpha1-x86-setup.exe
64bit Windows: https://git.thatzachbacon.com/PChat/PChat/releases/download/v2.1.0-alpha1/PChat-2.1.0-alpha1-x64-setup.exe
macOS: Still stabilizing things, alpha 2 will cover that
Source code: https://git.thatzachbacon.com/PChat/PChat/releases/download/v2.1.0-alpha1/pchat-2.1.0-alpha1.tar.gz