Skip to content

0.052.150

Latest

Choose a tag to compare

@danhetrick danhetrick released this 10 Aug 14:35
· 8 commits to main since this release

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 /devoice commands. 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 Window class 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 Window class methods print() and prints() 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 to 1 if the client has successfully logged in via SASL, and set to 0 if 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 $_SASL built-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.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-150.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-150.zip contains an installer for MERK; unzip and double click setup.exe.
  • Linux PyInstaller distribution
    • merk-linux-0.052-150.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-150.flatpak can be installed with flatpack install --user merk-linux-0.052-150.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.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