Skip to content

Releases: Cod-e-Codes/marchat

v1.3.8

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 01 Oct 17:48

v1.3.8

Released: 1 October 2026
Commit: 052a575

Server

  • Message size: Cap chat content at 32 KiB by default (MARCHAT_MAX_MESSAGE_BYTES, or MARCHAT_MAX_MESSAGE_MB). Oversized text, 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 -doctor show the message cap.

Client

  • Message size: Reject oversized composer, DM, code snippet, edit, and search bodies before send, including E2E wire content after 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, and scripts/build-linux.sh target 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 before choco 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 content longer 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 with MARCHAT_MAX_MESSAGE_BYTES or MARCHAT_MAX_MESSAGE_MB when you need longer messages.
  • Packaging maintainers: run packaging/ci/render-release-manifests.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.3.7

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 12 Sep 19:17

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 go directive).

Version and packaging

  • Install and build defaults: install.ps1, install.sh, build-release.ps1, scripts/build-windows.ps1, and scripts/build-linux.sh target 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 before choco pack / manifest validation).
  • Post-release helper: versioned scripts/post-release-v*.ps1 helpers were dropped; use packaging/ci/render-release-manifests.sh after assets upload (PACKAGING.md). Chocolatey remains choco pack in packaging/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.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.3.6

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 01 Sep 13:21

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 with CloseDB. 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, and scripts/build-linux.sh target 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 before choco pack / manifest validation).
  • Post-release helper: scripts/post-release-v1.3.6.ps1 for Chocolatey checksum sync and manifest render after assets upload.
  • Docker: the v1.3.6 image rebuild runs apk upgrade on 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.ps1 or packaging/ci/render-release-manifests.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.3.5

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 15 Aug 14:59

v1.3.5

Released: 15 August 2026
Commit: 89bf9ff

Server

  • Moderation: Fix :kick / :ban reject self-targets; kick is online-only (ErrKickNotConnected); ban remains offline-capable (#115, #116)
  • Messages: Fix empty or whitespace-only plaintext on text, dm, and edit is rejected when encrypted is false (#117)
  • SQLite: Fix InitDB applies busy_timeout / WAL via DSN on every connection and uses a single open connection so concurrent inserts no longer fail with SQLITE_BUSY (#118)
  • Persistence: active permanent bans and unexpired temp kicks reload from ban_history on hub start (expires_at NULL = permanent). Permanent bans are presence-only in memory. :ban / :kick close any open row before insert and persist to the DB before in-memory state
  • Schema: versioned MigrateSchema (schema_version) hard-fails when required tables or ban_history.expires_at are missing. SQLite/Postgres wrap each version in a transaction; MySQL DDL cannot, so schema_version is recorded after a successful apply
  • Lookups: connected-user lookups use an O(1) clientsByUsername map

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 with all minus ST*/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, and scripts/build-linux.sh target 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 before choco pack / manifest validation).
  • Post-release helper: scripts/post-release-v1.3.5.ps1 for 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_history rows without expires_at load as permanent.
  • Packaging maintainers: run scripts/post-release-v1.3.5.ps1 or packaging/ci/render-release-manifests.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.3.4

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 03 Aug 20:32

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; SetReadLimit sits above policy wire size so gorilla does not close with empty 1009 before the reply can flush. Residual over-ceiling reads log ErrReadLimit only (#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, and scripts/build-linux.sh target 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 before choco pack / manifest validation).
  • Post-release helper: scripts/post-release-v1.3.4.ps1 for 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.ps1 or packaging/ci/render-release-manifests.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.3.3

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 03 Aug 19:44

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 size and 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.OpenRoot scoped writes and filepath.IsLocal entry 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, and scripts/build-linux.sh target 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 before choco pack / manifest validation).
  • Post-release helper: scripts/post-release-v1.3.3.ps1 for 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.ps1 or packaging/ci/render-release-manifests.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.3.2

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 15 Jul 16:00

v1.3.2

Released: 15 July 2026
Commit: d1efa76

Server

  • Sender stamping: Security server overwrites client-supplied sender on text and file outbound paths (stampSenderTimedOutbound in server/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.EscapeText and shown via powershell -EncodedCommand; macOS osascript uses strconv.Quote string 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, and scripts/build-linux.sh download 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 before choco pack / manifest validation).
  • Post-release helper: scripts/post-release-v1.3.2.ps1 for 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.ps1 or packaging/ci/render-release-manifests.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.3.1

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 14 Jul 04:55

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-value omitempty) (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, and scripts/build-linux.sh download 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 before choco pack / manifest validation).
  • Post-release helper: scripts/post-release-v1.3.1.ps1 for 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 type fix).
  • Packaging maintainers: run scripts/post-release-v1.3.1.ps1 or packaging/ci/render-release-manifests.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.3.0

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 06 Jul 15:58

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.Hyperlink hrefs (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 / thumbsdown and commands :unreact, :thumbsup, :thumbsdown (client/commands.go)
  • E2E search: When encryption is on and server search returns no matches, a System line 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 System command 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=true when 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: Clears user_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, and scripts/build-linux.sh download 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 before choco pack / manifest validation).
  • Post-release helper: scripts/post-release-v1.3.0.ps1 for 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 parseTime fixes on upgrade; SQLite operators: note :backup remains SQLite-only.
  • Packaging maintainers: run scripts/post-release-v1.3.0.ps1 or packaging/ci/render-release-manifests.sh after zips publish to refresh SHA256 in packaging/ 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:latest

v1.2.0

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 05 Jun 12:37

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 (encrypted plus 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 channel text (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_ORIGINS comma-separated allowlist for extra WebSocket origins
  • Trusted proxies: getClientIP and web-admin login rate limiting honor X-Forwarded-For / X-Real-IP only when the immediate peer is listed in MARCHAT_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 via plugin/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 go directive
  • 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, and scripts/build-linux.sh download 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 before choco 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_PROXIES to the proxy peer IP or CIDR if you rely on X-Forwarded-For for client IP logging or web-admin login rate limits. Without it, only RemoteAddr is used.
  • WebSocket Origin: Stricter hostname matching may reject origins that previously passed substring checks. Add legitimate origins to MARCHAT_ALLOWED_ORIGINS if needed.
  • WebSocket JSON protocol: No other intentional breaking change; DM E2E uses the existing encrypted text wire 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