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
/op,/deop,/voice, and/devoicecommands. These commands can take as many nicknames as input as the user wants to enter. For example, to "voice" every user in a channel, use a built-in alias and call/voice $_PRESENT.- New feature: view server log on disconnection. If a connection is lost, and "notify on lost/failed connection" is turned on, the user can view the total server log at the time of disconnection.
- New setting: show/hide channel modes in the channel information display.
- New
Windowclass methods for plugins. Send batches of raw IRC commands to the server (without triggering flood protection), re-render a subwindow's chat display, or scroll the subwindow's chat display to the top or the bottom. - The
Windowclass methodsprint()andprints()can now display "raw" Python variables. Values passed to these methods are rendered as f-strings, allowing for these methods to be used for debugging purposes. An optional argument to these methods can be used to print data without interpolating emoji and ASCIImoji shortcodes and aliases into the output. - New built-in alias:
$_SASL. This will be set to1if the client has successfully logged in via SASL, and set to0if not. - Aliases can now be escaped with
\. To display an alias name without interpolating it's value into output, place\before the alias symbol. For example, to display the new$_SASLbuilt-in alias's name, you would use\$_SASL. - More explanations of settings (and how they work) have been added to the Settings dialog.
Files
- Python distribution
merk-0.052-150.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-150.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-150.zipcontains an installer for MERK; unzip and double clicksetup.exe.
- Linux PyInstaller distribution
merk-linux-0.052-150.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-150.flatpakcan be installed withflatpack install --user merk-linux-0.052-150.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.150
APPLICATION CHANGES
- Tweaked how "large" logs are displayed in the Log Manager. Now, some text in
the status bar of the dialog are displayed in red, just like how the log name
is displayed in the red in the log list. - Bugfix: the log list in the Log Manager is now properly reloaded when a log
is exported. - Tweaked the "logs are too large" dialog that can appear on startup.
- Made the nickname color display in the right click userlist menu a bit
cleaner: it's a bit smaller, and has a border around it to hint to users that
you can't click on it. - Changed the "switch to dark/light mode" restart message box to make it
clearer to users that they will disconnect from all servers on restart. - Changed how restarting to switch into light/dark mode works. If triggered
from the checkbox in the "Settings" menu, this will restart and show the
initial connection dialog. - Changed how restarting from the "Settings" dialog works. If triggered, this
will restart the app and go straight to the interface, skipping the
connection dialog. - New commands: /op, /deop, /voice, and /devoice, which sets channel operator
status on a nick, removes channel operator status from a nick, sets voiced
status on a nick, and removes voiced status on a nick, respectively. Multiple
nicks can be passed to each command to perform the mode change on each nick.
These commands can be called from any server or chat subwindow, but if called
from any non-channel subwindow, the channel argument must be used. - Bugfix: calling some commands with "non-standard" arguments could
potentially crash the application. - The $_PRESENT built-in alias now separates all nicks with spaces, rather than
with commas. - Topic tool-tips are now "word-wrapped".
- Bugfix: if a channel topic contained HTML, this would be rendered as HTML
when the user was notified via system message. The HTML in channel topics is
now properly escaped. - The /op, /deop, /voice, and /devoice commands now send MODE commands in
batches, if the number of users being passed to it is very long (for example,
using any of these commands with $_PRESENT may result in a large number of
MODE commands; the MODE command can take 10 users maximum as arguments.
This splits the users passed into groups of 5, sends the first MODE command
immediately, and then sends the rest at a rate of 1 per second). - New feature: view server log on a lost connection. This feature was requested
by user "lostblur". The server log can only be viewed if the "notify on lost/
failed connection" option is enabled. This setting can be found in the
"Connectionn" section of the settings dialog. - Tweaked the "lost connection" message boxes.
- Added an optional argumet to the "/window layout" command to automatically
write the generated layout script to a file. - Added the connection time to the server information menu.
- Tweaked the order of entries in the server information menu.
- Bugfix: changing timestamp settings now refreshes the server information menu
properly. - Bugfix: timestamps in the Log Manager now follow the user's timestamp
preferences. - Timestamps in the Log Manager, WHOIS messages, and "Resumed on" messages now
show whether a given time is AM or PM for messages, etc, if 24-hour timestamps
are not turned on. - The "box" around the channel name/mode and user count in the channel
information display is now slightly "lighter", depending on whether the client
is running in dark or light mode. - Changed the internal setting name for the "show channel name in channel
information display" setting in the config file. This will result in the
setting "resetting" to the default (turned on) for users. - The "channel user count display" will now display if there's only 1 user in
the channel. - Added a setting to toggle whether channel modes are displayed inside the
"channel information display". The new setting has been added to both the
Settings dialog and the configuration file. - Setting search results with "/config TERM" are now sorted alphabetically.
- Setting dumps with "/config" are now sorted alphabetically.
- Added an "available server" count to the connection dialog.
- When calling "/window" with no arguments, the subwindow list is now sorted
alphabetically. - Bugfix: outgoing private messages (when displayed in a channel log, or in
a private chat that is NOT with the target) are now displayed correctly in
the log viewer. - White colored text in the log viewer is now colored grey instead of black.
The user should be able to see the text, yet still know that it was colored. - Bugfix: outgoing private messages suffered the same "bug" previously
mentioned when being exported to JSON or ASCII text with the log manager. - Bugfix: the "hyperlink" color in the dark palette file has been lightened.
Users, if they wish to use the new color, should delete "dark.palette" in the
"styles" directory; the application will recreate the file with the default
colors. - Added a new command-line flag: "--reset-style", which resets the dark mode
palette, the default dark mode text style, and the default light mode text
style to all default values. Using the "--reset-all" command-line flag will
also trigger this reset. - The current line is now always highlighted in the script editor in the
connection dialog. - New built-in alias: $_SASL. This will be set to "1" if the client has
successfully logged in via SASL, and set to "0" if not. - Aliases can now be escaped to display the alias' name WITHOUT interpolating
its value into output. - Bugfix: the /knock command's message didn't work as intended.
- The code for "emojizing" and "asciimojizing" has been centralized.
- The "quit" and "away" message entry boxes in the Settings dialog can now
autocomplete built-in aliases, if alias interpolation is turned on. The
"Autocomplete shortcodes" checkbox on each entry has been changed to simply
"Autocomplete" to reflect the new change; unchecking the box turns off
autocomplete for shortcodes AND built-in aliases. - Bugfix: checking or unchecking the emoji, ASCIImoji, or alias options in the
settings dialog would NOT en/disable autocomplete in the quit and away
message entry boxes, and would require the setting to be set, applied, and
the settings dialog restarted. The features now work as expected. - The input options menu now specifies that the spellcheck language option is
for that window only. - Spellchecking can no longer be toggled from the input options menu. Also,
if spellchecking is turned off, the "Spellcheck for this window" submenu will
no longer appear. - Added more information on how spellchecking language selection works to the
"Spellcheck" section of the settings dialog. - Re-arranged the "Spellcheck" section of the settings dialog.
- Added an option to toggle word highlighting (with the /highlight command) to
the "Settings" menu's "Display" submenu. - Added more explanations and tweaks to the settings dialog.
- Enabling dark mode in the settings dialog now forces the user to restart.
PLUGIN API CHANGES
- New Window class method: batch(). This allows plugins to send a potentially
large number of raw IRC commands to the server at a rate of once per second so
that the server's flood protection is not triggered. Accepts either a string
or a list of strings as an argument. - Bugfix: the Window method execute() should now function as described.
- New Window class method: rerender(). This forces a re-render of the window's
chat log. - New Window class method: scrollBottom(). This scroll's the window's chat
display to the bottom. - New Window class method: scrollTop(). This scroll's the window's chat
display to the top. - Values passed to the Window class methods print() and prints() will now be
rendered as f-strings, allowing "raw" Python variables of any type to be
printed to a subwindow's chat display. - Added an optional argument to the Window class methods print() and prints()
that can be used to print data without following client settings for
interpolating emoji and ASCIImoji shortcodes and aliases into the string to
display. - The Window class methods describe(), note(), say(), message(), action(), and
notice() now check to make sure all arguments are strings.
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 Monday August 10, 2026