Open Source IRC Client
A multiple-document interface IRC client for Windows and Linux
Download MERK 0.032.018
MERK is a graphical open source Internet relay chat client. The current development version is 0.032.018. It uses a multiple-document interface, much like the popular Windows IRC client mIRC. MERK is written in Python 3, using the PyQt5 and Twisted libraries, and runs on both Windows and Linux. MERK is updated frequently with new features and bugfixes.
MERK is still in development, but it works, and can be used for most IRC activities.
Join me on the official MERK IRC channel, #merk on the Libera Chat network! Connect to Libera in the client as one of the built-in server suggestions, or at irc.libera.chat, port 6667 (you can also connect via SSL on port 6697). Honestly, I work a lot, so I'm almost always idle, but I pop in and chat a few times a day!

MERK connected to Libera, EFnet, and a local IRC server, on Windows 11.

MERK connected to EFnet, Freenode, and Libera on Linux Mint 20.2.
- Runs on Windows and Linux
- Supports multiple connections (you can chat on more than one IRC server at a time)
- Open source (GPL 3)
- Uses a multiple document interface, much like popular Windows IRC client mIRC
- Multiple channel and server windows can be open for viewing and chatting at once
- All chat windows are contained in a single "parent" window
- Dark mode! Dark mode can be enabled from the commandline, or from the settings dialog (restart required).
- Very configurable, without having to manually edit a configuration file
- Nearly all settings are configurable in the settings dialog
- Control application behavior, logging, features, and more!
- Over 80 different settings can be changed, allowing you to customize MERK to look and function exactly the way you want it to look and function.
- Most settings can be set in the app without requiring a restart. Have fun testing different options!
- Configuration data is stored in JSON
- A built-in list of over 80 IRC servers to connect to
- All text colors (and backgrounds) can be customized
- Text customization can be saved to importable files
- Individual channels can have their own color schemes
- Styles are saved and loaded automatically
- Channel styles are saved and loaded by network, so they work no matter what server you connect to.
- Easy to use GUI text style editor is built-in
- Changes to text style are immediate, without having to restart!
- Built-in spell checker (supports English, Spanish, French, and German)
- Emoji support
- Insert emojis into chat by using shortcodes (such as
:joy:
😂,:yum:
😋, etc.) - A list of supported emoji short codes can be found here
- Insert emojis into chat by using shortcodes (such as
- Command/nickname/channel auto-completion
- Full IRC color support
- Full scripting engine
- Includes a built in script editor, with scripting macros and syntax highlighting
- Automatically execute scripts on connection (to join channels, login in ChanServ, etc.)
- Multithreaded
- Automatic logging of channel and private chats
- Includes a utility to export logs to JSON, CSV, or your own custom format
- Logs are stored in JSON, so parsing/scraping your own logs in easy
MERK requires Python 3, PyQt5, and Twisted. PyQt5 and Twisted can be installed by using pip:
pip install pyqt5
pip install Twisted
To connect to IRC servers via SSL, two additional libraries may be needed:
pip install pyOpenSSL
pip install service_identity
MERK is being developed with Python 3.13 on Windows 11 and Linux Mint.
If you're running Windows, and you're getting errors when trying to run MERK, you may have to install another library, pywin32. You can also install this with pip:
pip install pywin32
To run properly on Linux, the latest version of all required software is recommended.
There are three libraries that comes bundled with MERK:
First, make sure that all the requirements are installed. Next, download MERK. Extract the zipfile to a directory of your choice using your favorite archive/zip program. Open a command prompt, navigate to the directory you extracted MERK to, and type:
python merk.py
usage: python merk.py [-h] [--ssl] [--reconnect] [-p PASSWORD] [-c CHANNEL[:KEY]] [-n NICKNAME]
[-u USERNAME] [-a NICKNAME] [-r REALNAME] [-C NAME] [-D DIRECTORY] [-L]
[-S DIRECTORY] [-Q NAME] [-N] [-X][-M]
[SERVER] [PORT]
options:
-h, --help show this help message and exit
Connection:
SERVER Server to connect to
PORT Server port to connect to (6667)
--ssl, --tls Use SSL/TLS to connect to IRC
--reconnect Reconnect to servers on disconnection
-p PASSWORD, --password PASSWORD
Use server password to connect
-c CHANNEL[:KEY], --channel CHANNEL[:KEY]
Join channel on connection
-n NICKNAME, --nickname NICKNAME
Use this nickname to connect
-u USERNAME, --username USERNAME
Use this username to connect
-a NICKNAME, --alternate NICKNAME
Use this alternate nickname to connect
-r REALNAME, --realname REALNAME
Use this realname to connect
Configuration:
-C NAME, --config-name NAME
Name of the configuration file directory (default: .merk)
-D DIRECTORY, --config-directory DIRECTORY
Location to store configuration files
-L, --config-local Store configuration files in install directory
-S DIRECTORY, --scripts-directory DIRECTORY
Location to look for script files
Miscellaneous:
-Q NAME, --qtstyle NAME
Set Qt widget style (default: Fusion)
-N, --noask Don't ask for connection information on start
-X, --nocommands Don't auto-execute commands on connection
-M, --dark Run in dark mode
It's simple. I don't currently like any of the other IRC clients. I've used many, many other IRC clients for Windows and Linux, and they just didn't feel right. They weren't customizable enough, didn't have features that I wanted, or just plain looked ancient. I wanted a GUI IRC client that looked and felt modern, and could be heavily customized. My previous IRC client was called Ərk, and although I liked developing it and working on it, I honestly didn't use it that much. I fell out of love with the "single window" interface that so many other IRC clients use, and decided to try something "new" (and by "new" I mean 30 years old). I remembered using mIRC back when I was younger, and decided to try and write a new client that used the multiple-document interface style I remember fondly. And thus, MERK was born!
Well, if you were to pronounce "IRC" as a word and not an acronym, it would probably be pronounced /Ərk/. Since the client allows a user to connect to multiple IRC servers at the same time, well, that might be what the "M" stands for. Either that, or "multiple-document interface". "MDIIRC" doesn't exactly roll off the tongue, so we combined the "M" with the word-pronunciation of IRC, and came up with MERK!
Several tools are included in the official MERK repository for developing MERK. The pyrcc5
utility is required, and should be installed automatically when you install PyQt. These are only needed if you're developing MERK, and can be ignored if you're only using the MERK IRC client.
- compile_resources.bat - This batch file compiles the miscellaneous resources (graphics, fonts, etc) required by MERK into a single file,
resources.py
, and inserts the file into the MERK source code. This is for development on the Windows platform. - compile_resources.sh - This shell script basically does the same thing that
compile_resources.bat
does, only it's for development on the Linux platform. - build_readme.py - This is a Python 3 script that rebuilds the README:
- Reads
README.txt
into memory and replaces several symbols in it:! _VERSION_ !
(without spaces) is replaced with MERK's major version! _MINOR_ !
(without spaces) is replaced with MERK's minor version! _FULL_VERSION_ !
(without spaces) is replaced with MERK's major and minor version, with a period in between them.
- Overwrites
README.md
with the edited contents ofREADME.txt
- Reads
- build_dist.py - This is a Python 3 script that, when executed, does several things:
-
Executes either
compile_resources.bat
(if the host system is Windows) orcompile_resources.sh
(if the host system is Linux); if the host system is not running either Windows or Linux,build_dist.py
will exit with an error -
Increments the MERK's minor version (which is stored in
merk/data/minor.txt
) and saves it -
Reads
README.txt
into memory and replaces several symbols in it:! _VERSION_ !
(without spaces) is replaced with MERK's major version! _MINOR_ !
(without spaces) is replaced with MERK's minor version! _FULL_VERSION_ !
(without spaces) is replaced with MERK's major and minor version, with a period in between them.
-
Overwrites
README.md
with the edited contents ofREADME.txt
-
Creates a new directory named
dist
, and copies into it:merk.py
LICENSE
merk.ico
- The
merk
directory and its contents - The
qt5reactor
directory and its contents - The
spellchecker
directory and its contents - The
emoji
directory and its contents
-
Zips up the
dist
directory either using PowerShell (if the host system is Windows) or the zip utility (if the host system is Linux) into a file nameddist.zip
-
Deletes the
dist
directory and its contents -
Renames
dist.zip
to "merk-MAJOR VERSION.zip", referred to asmerk.zip
in this description. -
If
merk.zip
exists in thedownloads
directory, the version in thedownloads
directory is deleted -
If
merk-latest.zip
exists in thedownloads
directory, it is deleted -
merk.zip
is copied into thedownloads
directory, and is copied tomerk-latest.zip
-