Skip to content

Releases: Cod-e-Codes/marchat

v0.4.0-beta.3

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 27 Aug 14:05

v0.4.0-beta.3
Released: 27 Aug 2025
Commit: 2c93867

Major Changes:

  • FIX: Correct Recent Message Retrieval Order:

    • Updated GetRecentMessages and related functions to fetch the newest 50 messages instead of the oldest
    • Changed SQL queries from ORDER BY created_at ASCORDER BY created_at DESC
    • Ensures recent message history displays correctly in chronological order
    • Combined with existing Go-side sorting to maintain consistent chat ordering

Technical Improvements:

  • Database Query Enhancements:

    • All recent message fetching functions (GetRecentMessages, GetRecentMessagesForUser, GetMessagesAfter) now correctly handle limits and ordering
    • Preserves fallback behavior for new users and partial history
    • Maintains compatibility with existing user last-seen tracking
  • Release Workflow:

    • Builds Linux, Windows, Darwin, and Android ARM64 targets
    • Docker builds continue to receive dynamic VERSION, BUILD_TIME, and GIT_COMMIT args
    • Optional --debug flag remains for troubleshooting Docker builds

Usage Notes:

  • Users now see the most recent messages first in chat history
  • Legacy sortMessagesByTimestamp logic preserved for display consistency
  • Docker images updated to reflect new release version

Docker Notes:
Image: codecodesxyz/marchat:v0.4.0-beta.3
Also tagged as latest for convenience.
Fully compatible with previous volumes; no migrations required.

Assets:

  • marchat-v0.4.0-beta.3-linux-amd64.zip
  • marchat-v0.4.0-beta.3-darwin-amd64.zip
  • marchat-v0.4.0-beta.3-windows-amd64.zip
  • marchat-v0.4.0-beta.3-android-arm64.zip

Full Changelog: v0.4.0-beta.2...v0.4.0-beta.3

Verification Checklist:

  • Confirm recent message retrieval now returns newest messages first
  • Test combined history and last-seen message logic for returning users
  • Build and push Docker images using updated release process
  • Verify marchat-server --version and marchat-client --version show correct version, commit, and build time
  • Run server and client builds for all platforms to confirm successful build completion

v0.4.0-beta.2

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 26 Aug 20:46

v0.4.0-beta.2
Released: 26 Aug 2025
Commit: c4826ef

Major Changes:

  • GLOBAL ENCRYPTION VARIABLE SUPPORT: Centralized configuration for encryption behavior

    • Introduced a single global encryption toggle accessible throughout the codebase
    • Eliminates redundant encryption state checks in individual modules
    • Ensures consistent encryption status across server and client components
    • Simplifies code maintenance and reduces risk of inconsistent encryption handling
  • DOCKER BUILD INTEGRATION IN RELEASE PROCESS:

    • Release process now includes building and pushing Docker images alongside binaries
    • Docker builds receive dynamic VERSION, BUILD_TIME, and GIT_COMMIT args
    • Tags each image with both the release version and latest
    • Ensures Docker Hub images display correct version metadata

Technical Improvements:

  • Release Workflow:

    • Builds Linux, Windows, Darwin, and Android ARM64 targets
    • Automates Docker build and push at release time
    • Reuses same version variables for both Go binaries and Docker images
    • Optional --debug flag available for troubleshooting Docker builds
  • Encryption Handling:

    • Added centralized global variable for encryption state
    • Updated client and server init logic to read from global state
    • Reduced duplicate encryption flag passing between modules

Usage Notes:

  • Enable/disable encryption via the global variable in configuration
  • Docker images are now versioned dynamically and pushed at release time
  • All server and client builds now embed build time and commit hash

Docker Notes:
Image: codecodesxyz/marchat:v0.4.0-beta.2
Also tagged as latest for convenience.
Fully compatible with previous volumes; no migrations required.

Assets:

  • marchat-v0.4.0-beta.2-linux-amd64.zip
  • marchat-v0.4.0-beta.2-darwin-amd64.zip
  • marchat-v0.4.0-beta.2-windows-amd64.zip
  • marchat-v0.4.0-beta.2-android-arm64.zip

Full Changelog: v0.4.0-beta.1...v0.4.0-beta.2

Verification Checklist:

  • Test encryption toggle globally affects all modules
  • Build and push Docker images using updated release process
  • Verify marchat-server --version and marchat-client --version show correct version, commit, and build time
  • Confirm Docker Hub image metadata matches release version
  • Run server and client builds for all platforms to confirm successful build completion

v0.4.0-beta.1

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 21 Aug 15:11

v0.4.0-beta.1
Released: 21 Aug 2025
Commit: ff52fb7

Major Changes:

  • PLATFORM-AWARE PLUGIN REGISTRY: Support for multi-platform plugin distributions

    • Registry now supports goos/goarch fields for platform-specific builds
    • Automatic platform selection: :plugin install echo picks the matching variant
    • CLI overrides: :install echo --os linux --arch amd64 for specific platforms
    • Store UI shows platform badges [windows/amd64] in plugin descriptions
    • Clear error messages when incompatible binaries are detected
    • Backward compatible with single-platform registries
  • Plugin System Enhancements:

    • ResolvePlugin() selects best matching variant by name + platform
    • GetPluginsPreferredForPlatform() deduplicates by name, prefers current platform
    • Enhanced exec-format error detection with helpful override instructions
    • Store filtering and display improvements for multi-variant plugins

Technical Improvements:

  • Plugin Store (plugin/store/store.go):

    • Added GoOS, GoArch, MinVersion fields to StorePlugin struct
    • Platform-aware plugin resolution with fallback logic
    • Store UI defaults to preferred platform variants
    • Enhanced filtering and deduplication for multi-platform registries
  • Plugin Manager (plugin/manager/manager.go):

    • InstallPluginWithPlatform() for explicit platform selection
    • InstallPlugin() delegates to platform-aware installation
    • Improved error handling and user guidance
  • Server Commands (server/plugin_commands.go):

    • :install now accepts optional --os and --arch flags
    • Updated usage: :install <plugin-name> [--os <goos>] [--arch <goarch>]
    • Flag parsing for platform override support
  • Plugin Host (plugin/host/host.go):

    • Enhanced exec-format error detection
    • Clear error messages with platform mismatch hints
    • Suggests correct --os/--arch flags for resolution

Usage Notes:

  • :plugin install echo automatically selects the matching platform build
  • Use :install echo --os linux --arch amd64 to override platform selection
  • Store UI shows [platform/arch] badges for easy identification
  • Incompatible binaries show helpful error messages with resolution steps

Registry Compatibility:

  • Supports both old single-platform and new multi-platform registry formats
  • New registry format includes goos, goarch, min_version fields
  • Backward compatible with existing plugin registries

Docker Notes:
Image: codecodesxyz/marchat:v0.4.0-beta.1
Fully compatible with previous volumes; no migrations required.

Assets:

  • marchat-v0.4.0-beta.1-linux-amd64.zip
  • marchat-v0.4.0-beta.1-darwin-amd64.zip
  • marchat-v0.4.0-beta.1-windows-amd64.zip
  • marchat-v0.4.0-beta.1-android-arm64.zip

Full Changelog: v0.3.0-beta.6...v0.4.0-beta.1

Verification Checklist:

  • Test :plugin install echo with new multi-platform registry
  • Verify platform badges display correctly in store UI
  • Test :install echo --os linux --arch amd64 override functionality
  • Confirm exec-format errors show helpful resolution messages
  • Verify backward compatibility with single-platform registries
  • Test platform selection logic with various registry configurations

v0.3.0-beta.6

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 15 Aug 21:13

v0.3.0-beta.6
Released: 15 Aug 2025
Commit: c963150

Major Changes:

  • E2E ENCRYPTION: Fix for session key initialization and startup validation

    • Fixed "conversation: test" issue that blocked E2E startup
    • validateEncryptionRoundtrip() now properly creates and stores session key before attempting encryption
    • Non-blocking validation: client continues startup even if test encryption fails
    • Clear warning messages on validation failures
    • Session keys properly derived and stored for global conversation
    • Basic E2E and non-E2E client coexistence
  • Client Commands:

    • :showkey displays your public key ID
    • :addkey <username> <pubkey> stores new public keys for encrypted conversations

Technical Improvements:

  • Client (client/main.go):

    • Fixed session key creation for validation to prevent startup errors
    • Graceful fallback for encryption validation without crashing
    • Maintains proper nonce + ciphertext combination handling
    • Improved logging and error messages for decryption failures
  • Crypto (crypto/keystore.go):

    • Session key derivation now ensures keys exist for validation
    • Proper storage of session keys in KeyStore.sessionKeys and keystore.dat

Usage Notes:

  • Launch client with --e2e to enable end-to-end encryption
  • Use :addkey to add other users' public keys before sending encrypted messages
  • :showkey displays your public key for sharing
  • Validation failures no longer block client startup

Docker Notes:
Image: codecodesxyz/marchat:v0.3.0-beta.6
Fully compatible with previous volumes; no migrations required.

Assets:

  • marchat-v0.3.0-beta.6-linux-amd64.zip
  • marchat-v0.3.0-beta.6-darwin-amd64.zip
  • marchat-v0.3.0-beta.6-windows-amd64.zip
  • marchat-v0.3.0-beta.6-android-arm64.zip

Full Changelog: v0.3.0-beta.5...v0.3.0-beta.6

Verification Checklist:

  • Connect client with --e2e and verify correct encryption/decryption
  • Test global conversation for proper session key derivation
  • Verify :addkey and :showkey work as intended
  • Confirm fallback behavior works when encryption validation fails
  • Confirm server handles Encrypted flag correctly without breaking DB storage

v0.3.0-beta.5

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 15 Aug 20:09

v0.3.0-beta.5
Released: 15 Aug 2025
Commit: 359f927

Major Changes:

  • E2E ENCRYPTION: Complete overhaul and stabilization

    • Outgoing messages are now properly encrypted and sent as Message structs with Encrypted: true
    • Incoming messages correctly detect and decrypt using the Encrypted flag
    • Nonce is now combined with ciphertext and base64-encoded for safe JSON transport
    • Clear, informative error messages on decryption failure instead of blank messages
    • Session keys scoped per conversation and derived for each participant
    • Mixed mode fully supported: E2E and non-E2E clients can coexist
  • Client Commands:

    • :listkeys command lists all stored public keys with truncated Key IDs
    • :addkey <username> <pubkey> stores a new user’s public key for encrypted conversations
  • Fallbacks:

    • If encryption fails, messages are sent in plaintext with a warning in the log and banner

Technical Improvements:

  • Client (client/main.go):

    • Fixed sending of encrypted messages to match server expectations
    • Properly stores and uses nonce + ciphertext combination
    • Graceful fallback to plaintext on encryption errors
    • Improved logging for decryption failures
    • Removed unused isBinaryData function
  • Server (cmd/server/main.go):

    • InsertMessage, GetRecentMessages, and GetMessagesAfter now fully support Encrypted flag
    • Existing is_encrypted field in database leveraged; no schema changes needed
  • Crypto (crypto/keystore.go):

    • Enhanced session key derivation and management for global and direct conversations
    • Fixed self-session key derivation to ensure send/receive works for sender in global chats

Usage Notes:

  • Launch client with --e2e to enable end-to-end encryption
  • Use :addkey to add other users’ public keys before sending encrypted messages
  • :listkeys helps verify which public keys are stored locally
  • Fallback behavior ensures messages still go through even if E2E encryption fails

Docker Notes:
Image: codecodesxyz/marchat:v0.3.0-beta.5
Fully compatible with previous volumes; no migrations required.

Assets:

  • marchat-v0.3.0-beta.5-linux-amd64.zip
  • marchat-v0.3.0-beta.5-darwin-amd64.zip
  • marchat-v0.3.0-beta.5-windows-amd64.zip
  • marchat-v0.3.0-beta.5-android-arm64.zip

Full Changelog: v0.3.0-beta.4...v0.3.0-beta.5

Verification Checklist:

  • Connect client with --e2e and verify correct encryption/decryption with multiple users
  • Test global and direct conversations for proper session key derivation
  • Verify :addkey and :listkeys work as intended
  • Confirm fallback behavior works when encryption fails
  • Confirm server handles Encrypted flag correctly without breaking DB storage

v0.3.0-beta.4

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 15 Aug 12:50

v0.3.0-beta.4
Released: 15 Aug 2025
Commit: fdf3010

Major Changes:

  • PLUGINS: Fixed registry integration and enabled remote plugin loading
  • TLS: Added client-side verification bypass for development and self-signed certs
    • New flag: --skip-tls-verify to allow insecure connections during testing
    • Example: ./marchat-client --skip-tls-verify --server wss://localhost:8080/ws
  • E2E ENCRYPTION: Fully integrated into message flow
    • --e2e flag now encrypts outgoing messages and automatically decrypts incoming ones
    • Session keys are scoped per conversation for isolation
    • Graceful error handling when decryption fails
  • CONFIG: Environment variable fixes and enhancements
    • Corrected env var name from MARCHAT_BAN_GAPS_HISTORYMARCHAT_BAN_HISTORY_GAPS
    • Default ban history gaps behavior set to true
    • Added PluginRegistryURL to server config with env var support
    • Help text updated with new configuration options

Technical Improvements:

  • Server (cmd/server/main.go):
    • Removed hardcoded registry path in favor of config/env var
    • Extended CLI help to show new options
  • Client (client/main.go):
    • Added --skip-tls-verify flag support
    • Integrated E2E encryption directly into send/receive pipeline
    • Configured TLS options on WebSocket dialer
    • Improved error logging for failed decryption attempts
  • Config (config/config.go):
    • Added PluginRegistryURL field and env var support
    • Fixed ban history gaps env var handling
  • Plugin Registry:
    • Updated Echo plugin with correct GitHub release URLs
    • Fixed repository and homepage metadata

Usage Notes:

  • Plugins: Registry now works directly from GitHub by default; override with MARCHAT_PLUGIN_REGISTRY_URL if needed.
  • TLS: Use --skip-tls-verify only for testing. Production servers should use valid TLS certs.
  • E2E Encryption: Launch client with --e2e to secure conversations; fallbacks prevent total breakage on failures.

Docker Notes:
Image: codecodesxyz/marchat:v0.3.0-beta.4 (or :latest).
Compatible with previous volumes. No manual migration required.

Assets:

  • marchat-v0.3.0-beta.4-linux-amd64.zip
  • marchat-v0.3.0-beta.4-darwin-amd64.zip
  • marchat-v0.3.0-beta.4-windows-amd64.zip
  • marchat-v0.3.0-beta.4-android-arm64.zip

Full Changelog: v0.3.0-beta.3...v0.3.0-beta.4

Verification Checklist:

  • Set MARCHAT_PLUGIN_REGISTRY_URL (or use default GitHub registry)
  • Launch server; confirm plugins load via remote registry
  • Connect client with --skip-tls-verify against a self-signed TLS server
  • Send/receive encrypted messages with --e2e enabled; verify correct decryption
  • Restart server with MARCHAT_BAN_HISTORY_GAPS=true and confirm ban history filtering still works

v0.3.0-beta.3

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 15 Aug 00:30

v0.3.0-beta.3
Released: 14 Aug 2025
Commit: d925205

Major Changes:

  • FEATURE: Ban History Gaps — banned users can no longer see messages sent during their ban periods after being unbanned
    • Added ban_history table and server-side filtering in GetRecentMessagesForUser
    • Hub now records ban/unban events to compute per-user visibility gaps
    • ServeWs updated to pass config and enforce filtering at session start
  • CONFIG: New env var MARCHAT_BAN_HISTORY_GAPS (default: true) to enable/disable ban-gap filtering without rebuilding

Database Migration:

  • Automatic, non-breaking: server will create the ban_history table if it does not exist. No manual migration steps required. Existing data remains intact.

Technical Improvements:

  • Handlers: added helpers to record ban/unban events and query ban intervals
  • Deterministic history fetch: GetRecentMessagesForUser now accepts config and excludes messages within ban windows
  • README updated: new section documenting Ban History Gaps, environment variable, admin flow, and troubleshooting tips

Admin Notes:

  • Behavior when enabled:
    • During a ban: user cannot connect or send/receive live messages
    • After unban: user’s history view omits messages from the ban interval(s)
  • To hide all prior history before unbanning, admins may still optionally back up and run :cleardb (unchanged)

Docker Notes:
Image: codecodesxyz/marchat:v0.3.0-beta.3 (or :latest).
No manual migration needed; volume mounts still recommended for persistence.

Assets:

  • marchat-v0.3.0-beta.3-linux-amd64.zip
  • marchat-v0.3.0-beta.3-darwin-amd64.zip
  • marchat-v0.3.0-beta.3-windows-amd64.zip
  • marchat-v0.3.0-beta.3-android-arm64.zip

Full Changelog: v0.3.0-beta.2...v0.3.0-beta.3

Verification Checklist:

  • Set MARCHAT_BAN_HISTORY_GAPS=true (default) and restart server
  • Ban a test user, have others send messages, then unban the user
  • Confirm: unbanned user’s history excludes messages sent during the ban; new messages appear in correct order

v0.3.0-beta.2

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 14 Aug 21:07

v0.3.0-beta.2
Released: 14 Aug 2025
Commit: 4ab352b

Major Changes:

  • BUGFIX: Fixed messages displaying out-of-order for clients after ban/unban cycles
  • Ensured consistent message ordering across server and client
  • Added sorting in GetRecentMessages and GetMessagesAfter on the server
  • Updated client renderMessages and Update to sort messages by timestamp on receive and render
  • Verified correct chronological message display across sessions without restarting the server

Database Migration:
No migration required; existing databases remain compatible.

Technical Improvements:

  • Server-side: deterministic message ordering to prevent out-of-order display
  • Client-side: added defensive sorting for received and rendered messages
  • Backward compatible: fixes only affect message ordering, no other functionality changed

Docker Notes:
Image: codecodesxyz/marchat:v0.3.0-beta.2 (or :latest).
No database migration needed; volume mounts still recommended for persistence.

Assets:

  • marchat-v0.3.0-beta.2-linux-amd64.zip
  • marchat-v0.3.0-beta.2-darwin-amd64.zip
  • marchat-v0.3.0-beta.2-windows-amd64.zip
  • marchat-v0.3.0-beta.2-android-arm64.zip

Full Changelog: v0.3.0-beta.1...v0.3.0-beta.2
Test message ordering after ban/unban cycles; verify chronological display on reconnect and client restart.

v0.3.0-beta.1

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 14 Aug 00:48

v0.3.0-beta.1
Released: 13 Aug 2025
Commit: b9407f6

Major Changes:

  • BREAKING: Fixed critical "frozen message history" bug where banned/unbanned users could only see messages from before their ban
  • Added per-user message state tracking with automatic database migration (new user_message_state table and message_id column)
  • Enhanced ban/unban system: users now get complete message history after being unbanned instead of frozen history at ban point
  • Improved user experience: personalized message delivery ensures returning users see messages since last connection
  • Database schema v2: Automatic migration on first startup with performance indexes for efficient queries

Database Migration:
Existing databases auto-migrate on first startup. Backup recommended before upgrading:

cp ./config/marchat.db ./config/marchat.db.backup

Migration typically completes in <30 seconds. Downgrade requires database restore.

Technical Improvements:

  • New functions: GetRecentMessagesForUser(), GetMessagesAfter(), clearUserMessageState()
  • Enhanced Hub struct with database integration for improved ban/unban state management
  • Backward compatible: existing functionality unchanged for normal users
  • Performance optimized: database indexes ensure efficient per-user message queries

Docker Notes:
Image: codecodesxyz/marchat:v0.3.0-beta.1 (or :latest).
Database migration runs automatically on container startup. Use volume mounts for persistence during development. For issues with migration in containers, ensure proper database file permissions.

Assets:

  • marchat-v0.3.0-beta.1-linux-amd64.zip
  • marchat-v0.3.0-beta.1-darwin-amd64.zip
  • marchat-v0.3.0-beta.1-windows-amd64.zip
  • marchat-v0.3.0-beta.1-android-arm64.zip

What's Changed

  • chore(deps): bump golang.org/x/crypto from 0.40.0 to 0.41.0 by @dependabot[bot] in #27

Full Changelog: v0.2.0-beta.5...v0.3.0-beta.1
Test ban/unban functionality with message history; backup database before upgrading; report migration issues with logs.

v0.2.0-beta.5

Choose a tag to compare

@Cod-e-Codes Cod-e-Codes released this 08 Aug 19:28

v0.2.0-beta.5
Released: 08 Aug 2025
Commit: c629cd6

Changes:

  • Added env vars: MARCHAT_CONFIG_DIR (config path) and MARCHAT_DB_PATH (DB file). Priority: env > CLI flag > default.
  • Docker: Updated compose example for volumes, TLS, health checks; added non-root user with UID/GID args; auto-creates DB dir with permissions.
  • Config: Supports XDG on Linux; improved path resolution and error messages.
  • Backward compatible with --config-dir flag.

Docker Notes:
Image: codecodesxyz/marchat:v0.2.0-beta.5 (or :latest).
For Unraid/Docker issues (e.g., OOM/permissions): Ensure write access to DB dir; container auto-handles ownership. Report persistent problems in Issues.

Assets:

  • marchat-v0.2.0-beta.5-linux-amd64.zip
  • marchat-v0.2.0-beta.5-darwin-amd64.zip
  • marchat-v0.2.0-beta.5-windows-amd64.zip
  • marchat-v0.2.0-beta.5-android-arm64.zip

Changelog: v0.2.0-beta.4...v0.2.0-beta.5
Test Docker setups and env vars; file issues with repro steps.