Skip to content

0.052.050

Latest

Choose a tag to compare

@danhetrick danhetrick released this 09 Jul 16:48

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 /config command.
  • 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.zip contains the Python code for MERK; unzip the source to any folder, navigate to that folder with your favorite console application, and type python merk.py to 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.zip can be unzipped to any folder, and contains an executable and a directory with support files; unzip to any folder, and double click on merk.exe to run MERK.
    • merk-windows-setup-0.052-050.zip contains an installer for MERK; unzip and double click setup.exe.
  • Linux PyInstaller distribution
    • merk-linux-0.052-050.zip can be unzipped to any folder, and contains an executable and a directory with support files; unzip to any folder, and double click on merk to run MERK.
    • merk-linux-0.052-050.flatpak can be installed with flatpack install --user merk-linux-0.052-050.flatpak.
  • Other files
    • MERK_User_Guide.pdf contains a guide for using MERK, as well as writing scripts and plugins. It is available in the app, in the "help" menu.
    • CHANGELOG contains 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