Releases: Cod-e-Codes/marchat
Release list
v1.3.4
v1.3.4
Released: 3 August 2026
Commit: e76adb9
Server
- File uploads: Fix oversized uploads under the WebSocket DoS read ceiling (32 MiB) get a System reply on a live connection;
SetReadLimitsits above policy wire size so gorilla does not close with empty 1009 before the reply can flush. Residual over-ceiling reads logErrReadLimitonly (#114 follow-up)
Documentation
- PROTOCOL, TESTING, and README document DoS ceiling vs policy reject; main-module coverage refreshed to 46.3%
Version and packaging
- Install and build defaults: install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1, andscripts/build-linux.shtarget v1.3.4 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.4; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.4 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation). - Post-release helper:
scripts/post-release-v1.3.4.ps1for Chocolatey checksum sync and manifest render after assets upload.
Assets
- marchat-v1.3.4-linux-amd64.zip
- marchat-v1.3.4-linux-arm64.zip
- marchat-v1.3.4-windows-amd64.zip
- marchat-v1.3.4-darwin-amd64.zip
- marchat-v1.3.4-darwin-arm64.zip
Full Changelog: v1.3.3...v1.3.4
Breaking changes
- WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
Migration guide
- Binaries: use v1.3.4 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade; no database schema changes in this release.
- Operators on v1.3.3: upgrade the server for the client-facing oversized-file System message; marchat clients already map close 1009 from v1.3.3.
- Packaging maintainers: run
scripts/post-release-v1.3.4.ps1orpackaging/ci/render-release-manifests.shafter zips publish to refresh SHA256 inpackaging/and downstream manifests.
Docker Image
A multi-architecture Docker image (linux/amd64, linux/arm64) is available on Docker Hub:
docker pull codecodesxyz/marchat:v1.3.4
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.3.3
v1.3.3
Released: 3 August 2026
Commit: 0e8a2e0
Server
- File uploads: Fix oversized file WebSocket messages use explicit read-limit handling with correct rejection logging; read limit accounts for base64 JSON wire size; rejects declared
sizeand actual payload length above the limit; sends a System reply when the connection is still writable (#114)
Note: v1.3.3 improved rejection logging and the client 1009 banner, but a System chat reply for wire-oversized uploads often did not reach clients (gorilla closes with empty 1009 before the reply can flush). Upgrade to v1.3.4 for the client-facing System message fix.
Client
- File uploads: Fix WebSocket close 1009 (message too big) shows a file-size error instead of a generic reconnect warning
Plugins
- Archive extraction: Fix zip/tar extraction uses
os.OpenRootscoped writes andfilepath.IsLocalentry validation (CodeQL go/zipslip)
Dependencies
- modernc.org/sqlite v1.55.0 (SQLite 3.53.3; modernc.org/libc v1.74.1)
- github.com/mattn/go-runewidth v0.0.27
Documentation
- PROTOCOL and TESTING document file rejection behavior; main-module coverage refreshed to 46.4%
Version and packaging
- Install and build defaults: install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1, andscripts/build-linux.shtarget v1.3.3 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.3; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.3 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation). - Post-release helper:
scripts/post-release-v1.3.3.ps1for Chocolatey checksum sync and manifest render after assets upload.
Assets
- marchat-v1.3.3-linux-amd64.zip
- marchat-v1.3.3-linux-arm64.zip
- marchat-v1.3.3-windows-amd64.zip
- marchat-v1.3.3-darwin-amd64.zip
- marchat-v1.3.3-darwin-arm64.zip
Full Changelog: v1.3.2...v1.3.3
Breaking changes
- WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
Migration guide
- Binaries: use v1.3.3 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade; no database schema changes in this release.
- Operators on v1.3.2: upgrade server and client together if file uploads are used; plugin installs benefit from archive extraction hardening.
- Packaging maintainers: run
scripts/post-release-v1.3.3.ps1orpackaging/ci/render-release-manifests.shafter zips publish to refresh SHA256 inpackaging/and downstream manifests.
Docker Image
A multi-architecture Docker image (linux/amd64, linux/arm64) is available on Docker Hub:
docker pull codecodesxyz/marchat:v1.3.3
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.3.2
v1.3.2
Released: 15 July 2026
Commit: d1efa76
Server
- Sender stamping: Security server overwrites client-supplied
senderon text and file outbound paths (stampSenderTimedOutboundinserver/client.go) - Content validation: Security rejects NUL bytes in persistable content before insert (
server/message_validate.go) - Persist failure: Security does not broadcast when message persistence fails (
server/client.go)
Client
- Desktop notifications: Security Windows toast XML built in Go with
xml.EscapeTextand shown viapowershell -EncodedCommand; macOSosascriptusesstrconv.Quotestring literals (no shell interpolation of wire content) (client/notification_desktop.go)
Documentation
- Trust boundaries: PROTOCOL, SECURITY, ARCHITECTURE, and TESTING document server sender stamping and safe desktop notification paths for untrusted wire content
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.3.2 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.2; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.2 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation). - Post-release helper:
scripts/post-release-v1.3.2.ps1for Chocolatey checksum sync and manifest render after assets upload.
Assets
- marchat-v1.3.2-linux-amd64.zip
- marchat-v1.3.2-linux-arm64.zip
- marchat-v1.3.2-windows-amd64.zip
- marchat-v1.3.2-darwin-amd64.zip
- marchat-v1.3.2-darwin-arm64.zip
Full Changelog: v1.3.1...v1.3.2
Breaking changes
- WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
Migration guide
- Binaries: use v1.3.2 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade; no database schema changes in this release.
- Operators on v1.3.1: upgrade the server if untrusted clients can connect (sender stamping fix); upgrade the client if desktop notifications are enabled (Alt+N).
- Packaging maintainers: run
scripts/post-release-v1.3.2.ps1orpackaging/ci/render-release-manifests.shafter zips publish to refresh SHA256 inpackaging/and downstream manifests.
Docker Image
A multi-architecture Docker image (linux/amd64, linux/arm64) is available on Docker Hub:
docker pull codecodesxyz/marchat:v1.3.2
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.3.1
v1.3.1
Released: 14 July 2026
Commit: 3088ebc
Server
- Handshake replay: Fix history replay sets
type: "text"on channel messages so reconnect scrollback renders in the client (was omitted due to zero-valueomitempty) (server/handlers.go)
Toolchain and dependencies
- Go: 1.25.12 in go.mod, nested plugin modules, CI, and Dockerfile (stdlib fixes for reachable GO-2026-5856 / crypto/tls ECH privacy leak and package-level GO-2026-4970 / os symlink escape reported by govulncheck on 1.25.11)
- Dependencies: charm.land/bubbles/v2 v2.1.1 (textarea prompt styling fix); golang.org/x/crypto v0.54.0; golang.org/x/term v0.45.0 (transitive golang.org/x/sys v0.47.0, golang.org/x/text v0.40.0, github.com/sahilm/fuzzy v0.1.3)
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.3.1 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.1; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.1 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation). - Post-release helper:
scripts/post-release-v1.3.1.ps1for Chocolatey checksum sync and manifest render after assets upload.
Assets
- marchat-v1.3.1-linux-amd64.zip
- marchat-v1.3.1-linux-arm64.zip
- marchat-v1.3.1-windows-amd64.zip
- marchat-v1.3.1-darwin-amd64.zip
- marchat-v1.3.1-darwin-arm64.zip
Full Changelog: v1.3.0...v1.3.1
Breaking changes
- WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
Migration guide
- Binaries: use v1.3.1 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade; no database schema changes in this release.
- Operators on v1.3.0: upgrade server and client together if reconnect scrollback appeared blank after login (history replay
typefix). - Packaging maintainers: run
scripts/post-release-v1.3.1.ps1orpackaging/ci/render-release-manifests.shafter zips publish to refresh SHA256 inpackaging/and downstream manifests.
Docker Image
A multi-architecture Docker image (linux/amd64, linux/arm64) is available on Docker Hub:
docker pull codecodesxyz/marchat:v1.3.1
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.3.0
v1.3.0
Released: 6 July 2026
Commit: 1b78dee
Client
- Charm v2 migration: Bubble Tea, Bubbles, and Lip Gloss on
charm.land/*/v2(tea.View,KeyPressMsg, bubbles setters) (client/main.go,client/render.go) - Transcript wrap: ANSI-aware word-wrap for chat bodies; long URLs wrap at path boundaries with hyperlink style and OSC 8
Style.Hyperlinkhrefs (ASCII hyphens) (client/render.go) - Wrapped URL clicks: Mouse click-to-open fallback for wrapped URLs; OSC 8 terminals should use embedded hyperlinks; copy from message otherwise (#103)
- Reactions: Aliases
thumbsup/thumbsdownand commands:unreact,:thumbsup,:thumbsdown(client/commands.go) - E2E search: When encryption is on and server search returns no matches, a
Systemline notes ciphertext-only matching (client/main.go) - Composer and viewport: Fix composer chrome, multiline keys, placeholder cursor, and scroll-to-tail follow; mouse wheel routes to the active viewport (
client/main.go) - Overlays: Help and DB overlays suppress typing, URL clicks, and read-receipt flush until closed (
client/main.go) - System feedback: Ephemeral
Systemcommand feedback uses the banner; transcript notices stay channel-scoped (client/main.go,client/render.go) - Reconnect: Backoff advances on failure; transcript notices, reactions, and read receipts stay channel-scoped after reconnect (
client/websocket.go,client/main.go) - E2E logging: E2E paths do not log plaintext (
client/)
Server
- Handshake replay: Replay up to 50 visible messages on every handshake, including reconnect (
server/hub.go,server/handlers.go) - Channel stamping: Outbound messages stamped to the sender's channel; typing, reactions, and read receipts channel-scoped (
server/hub.go,server/client.go) - Postgres: Fix boolean SQL for search, pin toggle, and pinned listing (
server/db_dialect.go,server/db.go) - MySQL: Fix
parseTime=truewhen unset in DSN handling (server/db.go) :backup: SQLite-only; Postgres/MySQL use native backup tools (server/, docs)- Admin TUI: Mouse scroll on tabs and tables (
server/admin_panel.go) :cleardb: Clearsuser_message_state(server/db.go)
Plugins
- IPC: Fix serialized plugin stdin writes so chat fan-out and command RPC cannot corrupt IPC lines (
plugin/host,plugin/manager)
Documentation
- README, TESTING, ARCHITECTURE, and PROTOCOL updated for channel stamping, reconnect, wrapped URL limitation (#103), SQLite-only
:backup, and plugin IPC - Tooling: Project Agent skills under
.cursor/skills/and.cursor/rules/marchat.mdc
CI and packaging
- Go: 1.25.11 unchanged in go.mod, go.yml, release.yml, and Dockerfile
- Dependencies: charm.land/bubbletea/v2 v2.0.8, charm.land/bubbles/v2 v2.1.0, charm.land/lipgloss/v2 v2.0.5 (replaces Charm v1); github.com/charmbracelet/colorprofile v0.4.3, github.com/charmbracelet/x/ansi v0.11.7, github.com/lucasb-eyer/go-colorful v1.4.0, github.com/mattn/go-runewidth v0.0.24; github.com/jackc/pgx/v5 v5.10.0; golang.org/x/crypto v0.53.0; golang.org/x/term v0.44.0; modernc.org/sqlite v1.53.0
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.3.0 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.0; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.0 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation). - Post-release helper:
scripts/post-release-v1.3.0.ps1for Chocolatey checksum sync and manifest render after assets upload.
Assets
- marchat-v1.3.0-linux-amd64.zip
- marchat-v1.3.0-linux-arm64.zip
- marchat-v1.3.0-windows-amd64.zip
- marchat-v1.3.0-darwin-amd64.zip
- marchat-v1.3.0-darwin-arm64.zip
Full Changelog: v1.2.0...v1.3.0
Breaking changes
- Charm v2: Client TUI depends on Charm v2 modules (
charm.land/bubbletea/v2,bubbles/v2,lipgloss/v2). Rebuild clients from this release; mixed old/new client builds against the same server are supported on the wire but TUI behavior may differ. - WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
- Wrapped URLs: Click-to-open for long wrapped URLs is unreliable in some terminals; prefer OSC 8 hyperlinks or copy the URL (#103).
Migration guide
- Binaries: use v1.3.0 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade; no database schema changes in this release.
- Postgres / MySQL operators: benefit from boolean and
parseTimefixes on upgrade; SQLite operators: note:backupremains SQLite-only. - Packaging maintainers: run
scripts/post-release-v1.3.0.ps1orpackaging/ci/render-release-manifests.shafter zips publish to refresh SHA256 inpackaging/and downstream manifests.
Docker Image
A multi-architecture Docker image (linux/amd64, linux/arm64) is available on Docker Hub:
docker pull codecodesxyz/marchat:v1.3.0
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.2.0
v1.2.0
Released: 6 June 2026
Commit: 86762b8
Client
- Direct message E2E: When encryption is enabled, DMs use the same wire path as channel
text(encryptedplus base64 nonce || ciphertext with the global key). Applies to:dm <user> <msg>, DM mode compose, and code snippets sent while a DM thread is open (:code/ Alt+C) (client/main.go,shared/crypto.go) - Code snippets in DM mode:
:code/ Alt+C while a DM thread is open routes through the DM send path (and E2E when enabled), not channeltext(client/main.go)
Server
- WebSocket Origin: Origin checks compare parsed hostnames instead of substring matching; empty origin remains allowed for TUI clients (
server/request_context.go,server/handlers.go) - Allowed origins: Optional
MARCHAT_ALLOWED_ORIGINScomma-separated allowlist for extra WebSocket origins - Trusted proxies:
getClientIPand web-admin login rate limiting honorX-Forwarded-For/X-Real-IPonly when the immediate peer is listed inMARCHAT_TRUSTED_PROXIES(comma-separated IPs or CIDRs) (server/request_context.go)
Plugins
- Store downloads: Validate SHA-256 checksums before extraction (HTTP and
file://), reject oversize archives, and roll back failed updates (plugin/store,plugin/manager) - Install path: Parse
file://URLs correctly on Linux and Windows viaplugin/fileurl; detect archive type from the URL path (including query strings); extract to a staging directory with zip-slip checks; set the execute bit on the plugin binary by exact name match after ZIP/TAR extract; do not leave an empty plugin directory when install download fails
Documentation
- README, ARCHITECTURE, PROTOCOL, CLIENT_HOOKS, deploy/CADDY-REVERSE-PROXY.md, and SECURITY.md updated for DM E2E, trusted-proxy client IP, and stricter Origin checks
CI and packaging
- Go: 1.25.11 in go.mod, go.yml, release.yml, and Dockerfile builder image; nested plugin/sdk and plugin/examples/echo modules aligned on the same
godirective - Dependencies: golang.org/x/crypto v0.52.0; modernc.org/sqlite v1.51.0 (was v1.50.0); transitive filippo.io/edwards25519 v1.2.0 via github.com/go-sql-driver/mysql
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.2.0 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.2.0; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.2.0 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation).
Assets
- marchat-v1.2.0-linux-amd64.zip
- marchat-v1.2.0-linux-arm64.zip
- marchat-v1.2.0-windows-amd64.zip
- marchat-v1.2.0-darwin-amd64.zip
- marchat-v1.2.0-darwin-arm64.zip
Full Changelog: v1.1.0...v1.2.0
Breaking changes
- Reverse proxies: Servers behind Caddy, nginx, or similar must set
MARCHAT_TRUSTED_PROXIESto the proxy peer IP or CIDR if you rely onX-Forwarded-Forfor client IP logging or web-admin login rate limits. Without it, onlyRemoteAddris used. - WebSocket Origin: Stricter hostname matching may reject origins that previously passed substring checks. Add legitimate origins to
MARCHAT_ALLOWED_ORIGINSif needed. - WebSocket JSON protocol: No other intentional breaking change; DM E2E uses the existing encrypted
textwire shape when E2E is enabled.
Migration guide
- Binaries: use v1.2.0 archives from this release page, or install.ps1 / install.sh with their default version.
- Server behind a proxy: set
MARCHAT_TRUSTED_PROXIES(see deploy/CADDY-REVERSE-PROXY.md); restart after upgrade. - Client / server: restart after upgrade; no database schema changes in this release.
- Audits: run
govulncheck ./...on Go 1.25.11+ 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.2.0
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.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:latestv1.0.0
v1.0.0
Released: 17 Apr 2026
Commit: b22e4ad
Client
- Chrome: Terminal-native footer and banner UX (
client/chrome.go, Lipgloss styling) - Read receipts: Shown in the transcript where applicable
- Reconnect: Transcript reset on reconnect so stale lines do not linger after a dropped session
- Sending state: Clearer sending indicator after chat writes and related command-path fixes
- Rate limits: Notice when the server applies WebSocket rate limiting
- Unread: Unread count behavior refined alongside footer chrome
- Themes: Theme loader updates and THEMES.md example alignment
Server
- Admin WebSocket: Clear reply when an unknown admin command is received
- Client connection: Sending-state consistency with client after chat writes
Documentation
- ARCHITECTURE, PROTOCOL, README, TESTING updated for TUI/read-receipt/reconnect behavior and current test metrics
CI and packaging
- Release workflow: Optional
publish-downstream-packagesjob pushes Homebrew tap, Scoop bucket, winget PR (Microsoft fork), and AUR after assets upload (requiresPACKAGING_GITHUB_PAT/AUR_SSH_PRIVATE_KEYwhere used) - Packaging docs: PACKAGING.md covers winget community listing, checksum sync via
packaging/ci/render-release-manifests.sh, and guidance when Defender/VirusTotal flag portable zips
Version and packaging
- SECURITY.md, install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1,scripts/build-linux.sh, README (badge, install snippets, Docker tag, Latest Updates), release workflow defaults, and templates underpackaging/set to v1.0.0 - Chocolatey:
marchat.nuspecaddsiconUrl(logo onmain), clearer title, stable 1.0.0 version;chocolateyinstall.ps1targets the v1.0.0 Windows zip (refresh checksum from the published asset beforechoco pack/ push) - Templates: Zip SHA256 placeholders in-repo must be replaced with values from
render-release-manifests.shafter GitHub release zips exist (see PACKAGING.md)
Assets
- marchat-v1.0.0-linux-amd64.zip
- marchat-v1.0.0-linux-arm64.zip
- marchat-v1.0.0-windows-amd64.zip
- marchat-v1.0.0-darwin-amd64.zip
- marchat-v1.0.0-darwin-arm64.zip
Full Changelog: v0.11.0-beta.5...v1.0.0
Breaking changes
- WebSocket JSON protocol: No intentional breaking change for normal chat clients.
- Keystore / database: No migration called out relative to v0.11.0-beta.5; backups before upgrades remain good practice.
Migration guide
- Binaries: use v1.0.0 archives or install.ps1 / install.sh defaults after publish
- Server / client: restart after upgrade
- Audits: run
govulncheck ./...on Go 1.25.9+ when checking 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.0.0
# or use latest tag
docker pull codecodesxyz/marchat:latestv0.11.0-beta.5
v0.11.0-beta.5
Released: 10 Apr 2026
Commit: c9ad733
Server
- WebSocket: RFC 6455 close frames on handshake errors
- Plugins: Hub no longer drives plugin IPC directly; bounded plugin chat fan-out with documented best-effort, at-most-once delivery semantics
Client
- Experimental: Env-driven exthook and
-doctorintegration
Plugin SDK and examples
- Stdio:
RunStdioandHandlePluginRequestfor the JSON IPC loop; echo example uses the SDK path - Docs: SDK stdio helpers, key file list fixes, README save-data example uses GetConfig and Marshal
- Repo: Ignore
plugin/sdk/covfor coverage output
CI and testing
- CI: Run nested plugin Go modules; align nested Go versions; fmt and govulncheck on SDK; Dependabot Node 20 note in dependabot.yml
- Tests: Server loadverify benches and rate limit coverage;
-doctorparallel tests serializeos.Environhook
Documentation
- TESTING: Bench section; refreshed test metrics, coverage, and lines of code
- Hooks: Example hook nested under
_example_hook - Style: ASCII hyphens where prose was edited
Dependencies
golang.org/x/crypto,golang.org/x/term,modernc.org/sqlite
Version and packaging
- SECURITY.md, install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1,scripts/build-linux.sh, README (badge, install snippets, Docker tag, Latest Updates), and release workflow defaults set to v0.11.0-beta.5
Assets
- marchat-v0.11.0-beta.5-linux-amd64.zip
- marchat-v0.11.0-beta.5-linux-arm64.zip
- marchat-v0.11.0-beta.5-windows-amd64.zip
- marchat-v0.11.0-beta.5-darwin-amd64.zip
- marchat-v0.11.0-beta.5-darwin-arm64.zip
Full Changelog: v0.11.0-beta.4...v0.11.0-beta.5
Breaking changes
- WebSocket JSON protocol: No intentional breaking change for normal chat clients.
- Keystore / database: No schema change called out beyond v0.11.0-beta.4; backups before upgrades remain good practice.
Migration guide
- Binaries: use v0.11.0-beta.5 archives or install.ps1 / install.sh defaults after publish
- Server / client: restart after upgrade
- Audits: run
govulncheck ./...on Go 1.25.9+ when checking 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:v0.11.0-beta.5
# or use latest tag
docker pull codecodesxyz/marchat:latestv0.11.0-beta.4
v0.11.0-beta.4
Released: 9 Apr 2026
Commit: 62e3ca0
E2E and message state
- Message edits: Encrypted payloads keep ciphertext and
is_encryptedconsistent after edit (no stale plain text or wrong encryption flag on the wire)
Client
- Themes: Deterministic cycle order for
:themesand Ctrl+T (built-inssystem→patriot→retro→modern, then custom themes by JSON key inthemes.json); documented in THEMES.md, README, and ARCHITECTURE.md
Documentation
- README / SECURITY.md: Clearer distinction between container/SBOM scanners and
govulncheckreachability; pgx advisory metadata (CVE-2026-33815 / CVE-2026-33816) and Fixed in: N/A lag called out where relevant - Prose: em dashes normalized to ASCII hyphens where edited
Repository hygiene
.gitattributes: enforce LF for text sources; tree renormalized for consistent line endings
Version and packaging
- SECURITY.md, install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1,scripts/build-linux.sh, README (badge, install snippets, Docker tag, Latest Updates), and release workflow defaults set to v0.11.0-beta.4
Assets
- marchat-v0.11.0-beta.4-linux-amd64.zip
- marchat-v0.11.0-beta.4-linux-arm64.zip
- marchat-v0.11.0-beta.4-windows-amd64.zip
- marchat-v0.11.0-beta.4-darwin-amd64.zip
- marchat-v0.11.0-beta.4-darwin-arm64.zip
Full Changelog: v0.11.0-beta.3...v0.11.0-beta.4
Breaking changes
- WebSocket JSON protocol: No intentional breaking change for normal chat clients.
- Keystore / database: No change in this release beyond v0.11.0-beta.3 behavior; routine backups before upgrades remain good practice.
Migration guide
- Binaries: use v0.11.0-beta.4 archives or install.ps1 / install.sh defaults after publish
- Server / client: restart after upgrade
- Audits: run
govulncheck ./...on Go 1.25.9+ when checking 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:v0.11.0-beta.4
# or use latest tag
docker pull codecodesxyz/marchat:latest