2 @documentencoding UTF-8
6 Copyright @copyright{} 2023 @email{stargrave@@stargrave.org, Sergey Matveev}
12 @command{mmc} is a free software
13 @url{https://en.wikipedia.org/wiki/Mattermost, Mattermost} console client.
14 I wrote it solely for my personal needs, but you may find its simplicity
15 and flexibility useful.
17 Mattermost (MM) does not have any sane and convenient client. GUI,
18 mobile versions and browser application requiring you to frequently
19 update your Web-browser are not an option of course.
21 @url{https://github.com/matterhorn-chat/matterhorn, Matterhorn} is the
22 only known console/terminal client for me, but until there will be any
23 official instructions how to bootstrap Haskell compiler, I can not even
24 try it. @url{https://github.com/42wim/matterircd, matterircd} was the
25 only possibility to use that platform (that is forced to be used by my
26 employer) that acts like an ordinary IRC-server bridged with MM.
28 But IRC-client (@url{https://irssi.org/, irssi} in my case) can not send
29 long and multiline messages, because of IRC protocol limitations. And
30 because of frequent cyrillic alphabet usage, that takes twice as long
31 bytes per character, messages are relatively short and are often split
32 on single word boundary. Also it has neither vi-editing capabilities,
33 nor simple way to use/emulate @command{readline} or use external editor.
34 @command{matterircd} converted attached files to URLs that can be used
35 with supplementary utility to download them from the server with proper
38 Fortunately MM is written on Go and has convenient simple library to
39 deal with its API. So I tried to write my own console implementation
40 from the scratch without those IRC-limitations. I thought about bridging
41 to XMPP protocol, that won't have any noticeable limitations, even
42 containing file transfer possibility, but denied the idea as yet another
43 level of complication. Moreover I was not sure that I was satisfied with
44 any known XMPP-client (although in general I liked
45 @url{https://mcabber.com/, mcabber}). Writing an ordinary TUI
46 application with high level library similar to @command{curses} seemed
47 to be pretty complicated task and reinventing of yet another bicycle.
48 Initially I was not a fan at all of
49 @url{https://tools.suckless.org/ii/usage/, suckless} way of chat clients
50 building, where you have bunch of FIFOs per channel you deal with. But
51 more I thought, that idea started to look nicer and nicer.
52 @ref{Architecture, Look} what I came to!