v1.1.0
v1.1.0
Released: 12 May 2026
Commit: 4e4456b
Client
- Channels: Transcript and typing indicators scoped to the active channel view (
client/main.go); switching channels shows only that channel's history and typing - DM sidebar: Thread list with unread counts; hide and reappear behavior; footer shows the active DM peer when in a DM thread
- Local state: DM UI state persisted under the client config directory as
dm_state.json - Commands:
:dm,:dm off,:dms,:dmhide(see in-app help);:dmhideand:dmsare handled before:dmso they are not parsed as:dm hide.../:dm s...(prefix collision fix) - Typing: While composing a DM, outbound typing sends optional
recipienton the wire; inbound DM-scoped typing is shown only when that DM thread is open, and channel-wide typing is hidden while a DM thread is open so neither view leaks the other (client/main.go) - Doctor: Client
-doctorreportsdm_state.jsonstatus and whether the E2E key source for this run isMARCHAT_GLOBAL_E2E_KEYorkeystore.dat(internal/doctor/doctor.go)
Server
- Messages:
messages.channelcolumn (defaultgeneral); migrations add the column on startup for existing DBs; channel messages persist and replay with the correct channel (server/handlers.go, dialect-aware inserts) - Direct messages: Rows store
recipient; history replay includes DM rows only for sender and recipient (case-insensitive); public rows keep an empty recipient - Typing:
TypingMessagewith non-emptyrecipientuses the same DM delivery path as chat DMs (broadcastDMinserver/client.go); emptyrecipientkeeps channel-wide typing - Doctor: Server
-doctorincludes adm_historynote about recipient metadata and reconnect replay visibility (internal/doctor/doctor.go)
Documentation
- ARCHITECTURE, PROTOCOL, README, TESTING, CONTRIBUTING, QUICKSTART, PLUGIN_ECOSYSTEM, and docs/README updated for persistent DMs, typing
recipient, delivery rules, and doctor output; optional graphical clients and marchat-plugins discovery called out where relevant
CI and packaging
- Go: 1.25.10 in go.yml, release.yml, and
Dockerfilebuilder image; nested plugin/sdk and plugin/examples/echo modules aligned on the samegodirective - AUR: Downstream publish job clones aur.archlinux.org over HTTPS before switching
originto SSH for push (.github/workflows/release.yml) - Dependencies: golang.org/x/crypto v0.51.0, golang.org/x/term v0.43.0; github.com/jackc/pgx/v5 v5.9.2, modernc.org/sqlite v1.50.0, github.com/go-sql-driver/mysql v1.10.0 (plus transitive golang.org/x/sys, golang.org/x/text from go mod tidy)
Version and packaging
- Install and build defaults: install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1, andscripts/build-linux.shdownload and build against v1.1.0 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.1.0; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/match the checksums of the published zip archives for this release.
Assets
- marchat-v1.1.0-linux-amd64.zip
- marchat-v1.1.0-linux-arm64.zip
- marchat-v1.1.0-windows-amd64.zip
- marchat-v1.1.0-darwin-amd64.zip
- marchat-v1.1.0-darwin-arm64.zip
Full Changelog: v1.0.0...v1.1.0
Breaking changes
- WebSocket JSON protocol: No intentional breaking change for normal chat clients; DM typing uses optional
recipient, and messages may carrychannelfor persistence and replay. - Keystore / database:
messages.channelis added automatically when missing (SQLite, PostgreSQL, MySQL); backups before upgrades remain good practice.
Migration guide
- Binaries: use v1.1.0 archives from this release page, or install.ps1 / install.sh with their default version.
- Server / client: restart after upgrade; first start applies
messages.channelif missing - Client:
dm_state.jsonappears when DM sidebar features are used; delete the file to reset local DM UI state only - Audits: run
govulncheck ./...on Go 1.25.10+ when checking toolchain and dependency exposure (see SECURITY.md for scanner vs reachability notes)
Docker Image
A multi-architecture Docker image (linux/amd64, linux/arm64) is available on Docker Hub:
docker pull codecodesxyz/marchat:v1.1.0
# or use latest tag
docker pull codecodesxyz/marchat:latest