Summary
MERK is a free, open source, multiple-document interface Internet relay chat for Windows, Linux, and macOS. It can be run with Python 3.9+ if PyQt5 and Twisted are installed; to connect to TLS/SSL enabled servers, install pyOpenSSL and service_identity. If you encounter problems running MERK with Python 3.9+ on Windows, you may need to install pywin32. All PyInstaller versions of MERK are built for 64-bit operating systems.
What's New
- Chat messages that mention your nick now have underlined nicknames. This option can be disabled in the "settings" dialog or with the
/configcommand. - New plugin API methods. Plugins can now determine if the application is running in "dark mode" or not, or if the background of a window's current text style is "light" or not. The "rainbow text" example plugin has been updated to show the new functionality. Plugins can now also set text styles for subwindows, and query what text style file (if any) a subwindow is using.
- Timestamps can now be shown in UTC.
- Dates and times are now inserted into logs in the log manager. The day that chat occured on, and the time it was "said", is now "inserted" into the log view and the "human readable" output for export.
- Colors have been added to the log manager viewer. Message senders are now in blue, with messages sent by the client in the same color and underlined. CTCP ACTION messages are in blue with italics. System messages are in red.
- The log viewer's display size is now limited to 5000 lines. Overly large logs can cause MERK to lag and/or lock up. The size of the line limit (and whether it's used at all) can be changed in the "settings" dialog.
- Upgrades and bugfixes to context menus. New options have been added to context menus for the userlist and subwindow text displays.
- The settings dialog now features over 400 options for users to change and configure.
Files
- Python distribution
merk-0.052-050.zipcontains the Python code for MERK; unzip the source to any folder, navigate to that folder with your favorite console application, and typepython merk.pyto run MERK. Instructions for running the source on Windows, Linux, and macOS can be found in the repository.
- Windows PyInstaller distributions
merk-windows-0.052-050.zipcan be unzipped to any folder, and contains an executable and a directory with support files; unzip to any folder, and double click onmerk.exeto run MERK.merk-windows-setup-0.052-050.zipcontains an installer for MERK; unzip and double clicksetup.exe.
- Linux PyInstaller distribution
merk-linux-0.052-050.zipcan be unzipped to any folder, and contains an executable and a directory with support files; unzip to any folder, and double click onmerkto run MERK.merk-linux-0.052-050.flatpakcan be installed withflatpack install --user merk-linux-0.052-050.flatpak.
- Other files
MERK_User_Guide.pdfcontains a guide for using MERK, as well as writing scripts and plugins. It is available in the app, in the "help" menu.CHANGELOGcontains a list of changes in new release.
All downloads contain README.html, which contains usage information about the application and a list of all commands supported by MERK. Further information can be found on the MERK source code repository.
MERK has a plugin framework. For more information about how to write plugins, please see MERK_User_Guide.pdf. The official repository contains some example plugins right here.
Configuration files and logs are stored in a directory named .merk in the user's home directory.
CHANGELOG for 0.052.050
APPLICATION CHANGES
- Bugfix: long nicknames were being unneccesarily elided in CTCP action
messages. - Bugfix: using the /me command in server windows now writes to the current
window just like it does for regular private messages. - Rearranged the entries in the Python editor's "File" menu to closer match the
script editor's "File" menu. - The "Settings" dialog now makes reference to "subwindows" rather than
"windows" when the setting is for subwindows. - The nick display on subwindows for "away" status now matches the display in
channel userlists (that is, the nick is displayed in italics). An option has
been added to toggle this to the "settings" dialog and the config file. - Nickname mentions in chat now show the username that mentioned the nick
underlined. - Bugfix: audio notification triggers aren't as "sensitive", and now only
trigger on nickname mentions that are whole words (that is, if your nickname
is "stu", an audio notification won't trigger if someone says "stuff"). - Tweaks to the "about" dialog.
- Bugfix: bot status icons in userlists were not showing up in text styles with
light backgrounds. I've added an inverted color status icon, and a check to
see if the background is dark or light to make sure it shows up. - Bugfix: using the /delay command could cause the application to crash.
- Added an option to show the current "away" message as a tooltip in the
nickname display, if showing "away" status in the nickname display is turned
on. This option is turned on by default, and can be toggled in the "settings"
dialog or with the /config command. - Turning off the nickname display on chat or server windows now disables the
settings for the "away" status stuff on nickname displays in the "settings"
dialog. - Bugfix: fixed a race condition where logs could be saved multiple times at
the same time. - The banner on the "settings" dialog now matches the banner on the connection
dialog. - Calling the "/ignore" command with no arguments now opens the ignore manager.
- Reworked the "rainbow text" example plugin, and updated the documentation
with the changes. - If a script is passed no arguments, $_0 will now be set to '*' instead of
'none'. - The built-in aliases $_MODE and $_PRESENT are now also set the '*' instead of
'none' if the data for either alias is not found or is not present. - The log manager's status bar now shows what type the current log is, along
with the name of the log (channel or private user) and filename. - Tooltips in the plugin manager now show the size of a plugin's file on disk.
- Bugfix: a race condition with the "join" plugin event has been fixed.
- The "/unalias" command can now delete multiple aliases in one command.
- The icons in the "Settings" dialog's section selector are now slightly
bigger. - Removed the "highlight" icon, and replaced it with the "color" icon.
- Removed the "Normal User" tag from the user info in the userlist right click
menu. - Added the ability to scroll to the top of the text display for server
subwindows. - Removed the "run script" option from channel and private chat subwindow
text display context menus. - Bugfix: the "copy hostmask to clipboard" option in private chat subwindow
context menus works now. - Added the ability to copy miscellaneous data to the clipboard to channel
subwindow text display context menus. - The channel list subwindow now auto-scrolls to the top when searching and
setting user count filters. - Moved emoji and ASCIImoji autocomplete "higher" in the priority list, before
nicknames. - If away messages are elided in the userlist context menu, the full away
message will appear in a tooltip for the elided away message. - Added an option to ignore/unignore users to the private message subwindow
text display context menu. - New built-in alias: $_UTC will show the current time in UTC format.
- If the chat display context menu is shown, and something has been selected
via the cursor, the "extra" stuff in the menus will no longer be shown; the
only things that will be shown is the "copy", "copy link location", and
"select all" options. - Added the option to display timestamps in both chat and logs in UTC. This
option is turned off by default. - The style/palette file generator output has been tweaked.
- Dates are now "injected" into logs in the log manager viewer, and the human
readable output. - Times are also now "injected" into logs in the log manager viewer.
- The log manager viewer now uses color for display. Message senders are now in
blue, with the client's nickname underlined. CTCP ACTION messages are also in
blue and italics. - With especially large logs, the log viewer will only display the last 5000
lines, by default; this can be changed by changing the "maximum_log_view_size"
setting with the "/config" command or by editing the configuration file. This
prevents the log manager from locking up the client when trying to view very
large log files. The full log file is still loaded for export, and can be
viewed in the "export" tab in the log manager. The user is warned that only
the end of the log is being viewed. - Added an option to toggle whether the log viewer is limited to the maximum
log size. - Added new log viewer options to the "Settings" dialog, on the "Logs" page.
- If a user has a color set for their nickname, the color is now shown in the
userlist context menu, in the submenu for "Nickname Color". Both the color
and the color's hex code is shown. - Re-arranged the "Logs" section of the "Settings" dialog.
- Re-worked the "Highlighting" section of the "Settings" dialog.
- Re-worked the "Style Editor"'s layout.
- System messages in the log viewer are now displayed in red.
PLUGIN API CHANGES
- New inherited method: "darkmode()", which returns a True if the application
is running in "dark mode", or False if not. - New Window object method: "is_light()", which returns a True if the text
style background is a light color, and False if not. If the window's text
style cannot be found or does not exist, this will return None. - The Window method "script()"'s "arguments" argument is now optional. The
method now checks to make sure that all arguments are strings, and raises a
ValueError if they are not. - The Window method "move()" will now return a List containing the X and Y
values the subwindow's location if called with no arguments. - New Window method: "style()". Pass the filename of a text style as the only
argument, and that text style will be immediately applied to the subwindow.
Call without an argument to get a subwindow's current text style filename,
or "None" if the subwindow is using the default text style.
WARNING! MERK may appear to be infected with something by your Windows antivirus. It is not infected with anything, it just seems to appear that way because some malware in the past was packed with PyInstaller (at least, this is my theory). I have uploaded all binaries to VirusTotal.
Released Thursday July 9, 2026