Library / SDK
gomuks/gomuks avatar
gomuks/gomuks

gomuks is a Matrix client whose backend doubles as an SDK or a bouncer

A Matrix client written in Go.

1,731 stars156 forksGoAGPL-3.0

At a glance

What is it?
gomuks is an AGPL-3.0 licensed Matrix client written in Go on top of mautrix-go, split into a backend that can be embedded in a client or run as a remote bouncer, plus a mature web frontend and an experimental terminal port. It suits a Matrix user who wants a web or Electron client on their own infrastructure, and the terminal frontend's experimental status plus the AGPL grant are the constraints to weigh.
Who is it for?
gomuks fits a Matrix user who wants their client served from their own infrastructure, since the backend can run as a remote server acting like a bouncer and the web frontend is the one the README calls ready for daily use, with Electron and GeckoView wrappers built on it. It is the wrong choice if you need the terminal client, which the README calls experimental with little beyond basic chatting, or if you cannot work under AGPL-3.0.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

One backend, two deployment shapes

The architecture is the interesting part and it is described in two sentences. gomuks is split into a backend and various frontends. The backend can either be used as a traditional SDK that is built into the client, or as a remote server which acts more like a bouncer.

That choice determines what your session is. Embedded, the backend lives in the client process and dies with it. Remote, the backend is a long-lived server that holds the session and can be shared, which is the shape a bouncer has. Both build on mautrix-go, the Go Matrix library, so the protocol work is not this project's contribution.

The frontends are listed with an honesty that is worth reading closely. gomuks web is the most mature frontend and is ready for daily use. Around it sit an Electron-based desktop app, a GeckoView-based Android app hosted in a separate repository, and a version with the backend embedded in wasm.

The terminal client is the opposite case. gomuks terminal is a port of legacy gomuks, described as still experimental with not many features beyond basic chatting. A version with the backend embedded is planned but does not exist yet, tracked as issue 662, and the README points at the v0.3.1 tag for the legacy terminal client along with issue 476.

The web frontend is the product, the rest is a wrapper

Given that the README calls web the most mature frontend, the practical consequence is that the choice of frontend is largely the choice of shell.

The Electron desktop app and the GeckoView Android app both wrap the same web interface. The wasm build embeds the Go backend in the browser rather than talking to a server, which is a materially different deployment: no backend to run, and a binary compiled to WebAssembly doing the session.

Nexus is the outlier. It is a Flutter frontend that embeds the gomuks backend through the C FFI interface, and the README places it in early development. The C FFI detail is corroborated by the repository contents: cmd/, pkg/, tui/ and desktop/ directories alongside build.sh, build-noweb.sh and build-terminal.sh, so there is more than one build target in the tree.

Install and usage instructions live at docs.mau.fi rather than in the repository, which is where to go before building anything. Discussion happens in a Matrix room at #gomuks:gomuks.app, which is the project's own protocol rather than a separate forum.

A dependency list that describes the feature set

The go.mod is long and unusually informative, because gomuks depends on the mau ecosystem directly and on libraries that each correspond to a capability.

The Matrix layer is maunium.net/go/mautrix, pinned to a pseudo-version rather than a release, and the same pattern appears on go.mau.fi/util. That means gomuks tracks the tip of those libraries, which is consistent with the projects sharing authorship and also means a gomuks build is not reproducible from tags alone without pinning those commits.

Media handling is visible in the dependencies. go.mau.fi/goheif and go.mau.fi/webp cover HEIC and WebP decoding, strukturag/libheif does the native HEIF work, disintegration/imaging and buckket/go-blurhash handle image processing and placeholders, and klauspost/compress is present for archive work.

The terminal side has gdamore/tcell, lithammer/fuzzysearch, chzyer/readline and go-runewidth, plus rivo/uniseg, which is the terminal UI stack. The web side has yuin/goldmark for Markdown, coder/websocket, tidwall/gjson and sjson for JSON handling, and SherClockHolmes/webpush-go.

Storage is mattn/go-sqlite3, so local state is a SQLite database rather than a document store. Logging is rs/zerolog. go.mau.fi/zeroconfig handles configuration and go.mau.fi/mauview is the view layer.

Monthly tags, a moving toolchain line, and two licences

Release naming follows a calendar convention rather than semver alone. Recent tags are v0.2609.0 labelled v26.09 on 2026-09-16, v0.2608.0 labelled v26.08 on 2026-08-16 and v0.2607.0 labelled v26.07 on 2026-07-16. That is one release a month, which for a client following Matrix specification changes is a reasonable rhythm.

The Go side declares go 1.26.0 with toolchain go1.27.1, and the build scripts and a Dockerfile.ci at the root indicate continuous integration. CI runs on GitLab at mau.dev rather than GitHub Actions, which matches the .gitlab-ci.yml at the root and the badge in the README. Pre-commit is configured with separate shell hooks for eslint and tsc, so linting and type checking are enforced before commit rather than in review.

There are two licence files, LICENSE and LICENSE.iOS. The project is AGPL-3.0 licensed, and the separate iOS file exists because the mobile distribution terms differ. Two licence files is worth a moment's attention: if you are building a client that embeds the gomuks backend and distributing it, you are in AGPL territory and you should read which file applies to which artefact.

Maintenance is current. The last push was on 2026-10-15, the day before this article.

Editorial conclusion

gomuks fits a Matrix user who wants their client served from their own infrastructure, since the backend can run as a remote server acting like a bouncer and the web frontend is the one the README calls ready for daily use, with Electron and GeckoView wrappers built on it. It is the wrong choice if you need the terminal client, which the README calls experimental with little beyond basic chatting, or if you cannot work under AGPL-3.0. Before deploying, read docs.mau.fi for the install instructions rather than building from the scripts at the repository root, decide whether you want the embedded backend or the remote one, since that choice determines whether your session lives in the client or on a server, and check the Flutter Nexus frontend only if early development is acceptable.

Frequently asked questions

What is gomuks and what is it written in?

gomuks is a Matrix client written in Go using the mautrix-go library. It is split into a backend and several frontends, and the project is AGPL-3.0 licensed.

Can the gomuks backend run as a remote server?

Yes. The README says the backend can be used as a traditional SDK built into the client, or as a remote server which acts more like a bouncer. There is also a build with the backend embedded in wasm for the web.

Which gomuks frontend is ready for daily use?

gomuks web, which the README describes as the most mature frontend. Around it sit an Electron-based desktop app and a GeckoView-based Android app. gomuks terminal is a port of the legacy client and is still experimental with few features beyond basic chatting.

Where are gomuks installation instructions?

At docs.mau.fi, which the README links for installation and usage. The repository itself contains build.sh, build-noweb.sh and build-terminal.sh plus a Dockerfile.ci, but the documentation site is the intended starting point.

How often does gomuks release?

Roughly monthly, using a calendar-flavoured version scheme: v0.2609.0 is labelled v26.09 and was released on 2026-09-16, with v26.08 and v26.07 in the two months before it. The last push was on 2026-10-16.

Official sources

  1. gomuks/gomuks on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/gomuks-gomuks.svg)](https://hysenlabs.com/projects/gomuks-gomuks)

Was this useful?