Repository navigation
Releases: Cod-e-Codes/marchat
Release list
v1.3.8
v1.3.8
Released: 1 October 2026
Commit: 052a575
Server
- Message size: Cap chat
contentat 32 KiB by default (MARCHAT_MAX_MESSAGE_BYTES, orMARCHAT_MAX_MESSAGE_MB). Oversizedtext,dm,edit,search, and command bodies get a System reply and stay connected; nothing is persisted or broadcast. Encrypted ciphertext uses the same byte cap. Plugin chat and command replies over the cap are dropped before broadcast. File uploads keep their own limit. Admin TUI, web admin, and-doctorshow the message cap.
Client
- Message size: Reject oversized composer, DM, code snippet, edit, and search bodies before send, including E2E wire
contentafter encryption. WebSocket close 1009 is reported as a message-too-big error.
Dependencies
- modernc.org/sqlite v1.59.0 (transitive modernc.org/libc v1.75.7; modernc.org/mathutil v1.7.1 and modernc.org/memory v1.12.1 unchanged); github.com/mattn/go-runewidth v0.0.30
Version and packaging
- Install and build defaults: install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1, andscripts/build-linux.shtarget v1.3.8 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.8; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.8 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation).
Assets
- marchat-v1.3.8-linux-amd64.zip
- marchat-v1.3.8-linux-arm64.zip
- marchat-v1.3.8-windows-amd64.zip
- marchat-v1.3.8-darwin-amd64.zip
- marchat-v1.3.8-darwin-arm64.zip
Full Changelog: v1.3.7...v1.3.8
Breaking changes
- WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
- Database: No schema migration.
- Message size: Chat
contentlonger than 32 KiB (default) is rejected. Previously those bodies were stored and broadcast. File uploads keep their own limit.
Migration guide
- Binaries: use v1.3.8 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade. No schema migration.
- Operators: the default chat cap is 32 KiB of UTF-8
content. Encrypted messages are measured as ciphertext, so the plaintext that fits is shorter (about 24,450 ASCII characters). Raise the cap withMARCHAT_MAX_MESSAGE_BYTESorMARCHAT_MAX_MESSAGE_MBwhen you need longer messages. - Packaging maintainers: run
packaging/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.8
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.3.7
v1.3.7
Released: 12 September 2026
Commit: aac5d26
Documentation
- Bots: Pointer to marchat-bot (standalone Go WebSocket bot SDK; not a plugin) in README, PROTOCOL, docs/README, CLIENT_HOOKS, and PLUGIN_ECOSYSTEM
Dependencies
- golang.org/x/crypto v0.57.0; golang.org/x/term v0.46.0 (transitive golang.org/x/sync v0.23.0, golang.org/x/sys v0.48.0, golang.org/x/text v0.42.0, golang.org/x/mod v0.41.0, golang.org/x/tools v0.49.0)
- modernc.org/sqlite v1.58.0 (transitive modernc.org/libc v1.75.6, modernc.org/mathutil v1.7.1, modernc.org/memory v1.12.1)
- github.com/jackc/pgx/v5 v5.11.0; github.com/go-sql-driver/mysql v1.10.1; github.com/mattn/go-runewidth v0.0.29
Toolchain
- Go 1.26.8 in go.mod, nested plugin modules (plugin/sdk, plugin/examples/echo), CI (.github/workflows/go.yml, .github/workflows/release.yml), and Dockerfile. Minimum required by golang.org/x/crypto v0.57.0 is 1.26.0 (module
godirective).
Version and packaging
- Install and build defaults: install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1, andscripts/build-linux.shtarget v1.3.7 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.7; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.7 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation). - Post-release helper: versioned
scripts/post-release-v*.ps1helpers were dropped; usepackaging/ci/render-release-manifests.shafter assets upload (PACKAGING.md). Chocolatey remainschoco packinpackaging/chocolatey/.
Assets
- marchat-v1.3.7-linux-amd64.zip
- marchat-v1.3.7-linux-arm64.zip
- marchat-v1.3.7-windows-amd64.zip
- marchat-v1.3.7-darwin-amd64.zip
- marchat-v1.3.7-darwin-arm64.zip
Full Changelog: v1.3.6...v1.3.7
Breaking changes
- WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
- Database: No schema migration.
- Toolchain: Source builds and CI now require Go 1.26.8+ (was 1.25.13+). Prebuilt binaries and Docker images do not require a local Go install.
Migration guide
- Binaries: use v1.3.7 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade. No schema migration.
- Operators building from source: install Go 1.26.8 or later before
go build/go test. - Packaging maintainers: run
packaging/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.7
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.3.6
v1.3.6
Released: 1 September 2026
Commit: 97ea0c9
Server
- SQLite: Fix file-backed SQLite keeps a single-connection writer pool (
MaxOpenConns(1),_txlock=immediate) and adds a bounded WAL reader pool (MaxOpenConns(4),_query_only=1) so health/admin/history reads are not serialized behind inserts.:memory:and Postgres/MySQL are unchanged. Close withCloseDB. No schema migration (#126, #127)
Documentation
- ARCHITECTURE, TESTING, and database/debugging skills describe the two-pool SQLite layout; main-module coverage 48.3%
Dependencies
- modernc.org/sqlite v1.57.0; charm.land/bubbletea/v2 v2.0.9; charm.land/bubbles/v2 v2.2.1; github.com/mattn/go-runewidth v0.0.28
Version and packaging
- Install and build defaults: install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1, andscripts/build-linux.shtarget v1.3.6 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.6; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.6 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation). - Post-release helper:
scripts/post-release-v1.3.6.ps1for Chocolatey checksum sync and manifest render after assets upload. - Docker: the v1.3.6 image rebuild runs
apk upgradeon Alpine 3.22 and picks up openssl 3.5.8 (no Dockerfile change).
Assets
- marchat-v1.3.6-linux-amd64.zip
- marchat-v1.3.6-linux-arm64.zip
- marchat-v1.3.6-windows-amd64.zip
- marchat-v1.3.6-darwin-amd64.zip
- marchat-v1.3.6-darwin-arm64.zip
Full Changelog: v1.3.5...v1.3.6
Breaking changes
- WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
- Database: No schema migration. File-backed SQLite pooling is process-local.
Migration guide
- Binaries: use v1.3.6 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade. No schema migration; SQLite WAL reader pool is created at process start.
- Operators on v1.3.5: upgrade the server for WAL reader concurrency on health/admin/history SELECTs. Writer
MaxOpenConns(1)is unchanged. - Packaging maintainers: run
scripts/post-release-v1.3.6.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.6
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.3.5
v1.3.5
Released: 15 August 2026
Commit: 89bf9ff
Server
- Moderation: Fix
:kick/:banreject self-targets; kick is online-only (ErrKickNotConnected); ban remains offline-capable (#115, #116) - Messages: Fix empty or whitespace-only plaintext on
text,dm, andeditis rejected whenencryptedis false (#117) - SQLite: Fix
InitDBappliesbusy_timeout/ WAL via DSN on every connection and uses a single open connection so concurrent inserts no longer fail withSQLITE_BUSY(#118) - Persistence: active permanent bans and unexpired temp kicks reload from
ban_historyon hub start (expires_atNULL = permanent). Permanent bans are presence-only in memory.:ban/:kickclose any open row before insert and persist to the DB before in-memory state - Schema: versioned
MigrateSchema(schema_version) hard-fails when required tables orban_history.expires_atare missing. SQLite/Postgres wrap each version in a transaction; MySQL DDL cannot, soschema_versionis recorded after a successful apply - Lookups: connected-user lookups use an O(1)
clientsByUsernamemap
Documentation
- ARCHITECTURE documents
MigrateSchema/schema_version/ban_history.expires_at; TESTING lint pins match CI; main-module coverage 47.8%
Toolchain and CI
- Go 1.25.13 in go.mod, nested plugin modules, CI, and Dockerfile (stdlib fixes for the six reachable findings on 1.25.12)
- CI runs
govulncheck ./...without-show verbose. Pins golangci-lint v2.12.2 and govulncheck v1.6.0;.golangci.yml(v2) enables govet/ineffassign/staticcheck withallminusST*/QF*
Dependencies
- modernc.org/sqlite v1.56.0; github.com/lucasb-eyer/go-colorful v1.4.1; golang.org/x/crypto v0.55.0; github.com/charmbracelet/x/ansi v0.11.8; charm.land/lipgloss/v2 v2.0.6
Version and packaging
- Install and build defaults: install.ps1, install.sh, build-release.ps1,
scripts/build-windows.ps1, andscripts/build-linux.shtarget v1.3.5 release assets on GitHub. - Docs and metadata: SECURITY.md and README (version badge, install snippets, Docker tag) reference v1.3.5; canonical Homebrew, Scoop, winget, Chocolatey, and AUR templates in
packaging/target v1.3.5 (refresh zip SHA256 from published assets beforechoco pack/ manifest validation). - Post-release helper:
scripts/post-release-v1.3.5.ps1for Chocolatey checksum sync and manifest render after assets upload.
Assets
- marchat-v1.3.5-linux-amd64.zip
- marchat-v1.3.5-linux-arm64.zip
- marchat-v1.3.5-windows-amd64.zip
- marchat-v1.3.5-darwin-amd64.zip
- marchat-v1.3.5-darwin-arm64.zip
Full Changelog: v1.3.4...v1.3.5
Breaking changes
- WebSocket JSON protocol: No intentional breaking change; keystore and E2E wire encoding unchanged.
- Database: Existing databases are migrated at server start (
schema_version,ban_history.expires_at). Startup hard-fails if required tables or that column are missing after migration. Back up the DB before upgrading.
Migration guide
- Binaries: use v1.3.5 archives from this release page, or install.ps1 / install.sh with their default version.
- Client / server: restart after upgrade. The server applies schema migrations on start; SQLite/Postgres wrap each version in a transaction; MySQL DDL cannot participate in a wrapping transaction.
- Operators on v1.3.4: upgrade the server for durable kick/ban across restart and the schema migrator. Existing open
ban_historyrows withoutexpires_atload as permanent. - Packaging maintainers: run
scripts/post-release-v1.3.5.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.5
# or use latest tag
docker pull codecodesxyz/marchat:latestv1.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:latest