Sueta

KOKOTO WebChat

5.3.3

Multi-platform Minecraft web chat with map/standalone UI, DM & groups, secure server relay, moderation/content filters, rich media, notifications, and optional ImageEmojis-Bero/SimpleNicks-Bero integr

·Plugin
  1. 5.3.3latestKOKOTO WebChat 5.3.33 weeks ago

    5.3.3

    5.3.3 is compared directly with the finalized 5.3.2 maintenance baseline. It keeps configuration schema 5.3.0 and Relay Protocol 2.2. The release focuses on notification correctness, local/offline Help, upload-retention semantics, private-window presentation fixes, version/reporting consistency, and Forge 26.3 activation.
    Added
    - Offline/local Help with custom translation packs: the Web account Help button opens documentation served by the same KWC HTTP server. English, Korean, Japanese, and Simplified Chinese docs are bundled, unsupported UI locales fall back to English, and administrators may install plugins/KOKOTO-WebChat/docs/<locale>/ Markdown translations without having them overwritten. Local Help renders Markdown as safe styled HTML with headings, lists, tables, code blocks, local navigation, and explicit online Docs/Wiki links. - Local Help image support for real manual screenshots: bundled Markdown may reference KWC-owned PNG/SVG/WebP images under docs/assets/ui/; offline Help serves the synchronized copy through same-origin /help/assets/. Remote Markdown images and path traversal remain blocked. The source tree includes an authoring guide so the Korean manual, translated Docs, Wiki mirror, and offline Help can share stable real-UI screenshots.
    Changed
    - Animated GIF profile images: custom profile avatars now accept GIF in addition to PNG/JPEG/WebP. The existing 2 MiB profile-image limit is unchanged; GIF bytes are preserved so animation remains intact in browser profile/avatar rendering. - Release version and config schema version are separate: generated/current config shows release-version: "5.3.3" for the running KWC product release while config-version: "5.3.0" remains the configuration-schema/migration marker. release-version is informational and automatically synchronized by KWC; it is excluded from operator-value migration comparisons. - Pin/unpin confirmation: pinning or unpinning a public-chat or Group message asks for confirmation before the server mutation is sent. Canceling leaves the pinned state unchanged; pin-order controls remain immediate. - Filter settings Save placement: the Filter panel uses the shared admin-modal header Save action, matching the Settings panel. Word-list and custom-rule editor Save buttons remain local to their editors. - Original upload filenames: upload.filename-mode: original continues to preserve sanitized Unicode names, while whitespace runs are normalized to - so stored URLs/path components do not contain literal spaces. Existing - and _ separators are retained. - Forge 26.3 exact target: Forge 26.3 is now an active release target pinned to Forge 66.0.3 with Java 25 and the existing compat26 source layer. The deployable release matrix is now 48 artifacts.
    Fixed
    - Mobile JPEG photo orientation after metadata stripping: normal image uploads and custom profile images now preserve only the non-sensitive EXIF Orientation value (2–8), rewritten into a minimal sanitized EXIF block when required. GPS, camera/device, author, IPTC, comment, and other EXIF metadata remain removed, while the JPEG pixel payload is left byte-for-byte compressed rather than re-encoded. Portrait photos taken on phones therefore no longer turn sideways after upload. - Localization/changelog consistency: the root changelog is now English-only, and a duplicated web.receipt.read entry was removed from all four bundled language files so each locale has one unambiguous value for that key. - UUID-wide personal blocking and long-list scrolling: personal blocks that were previously stored separately as remote~server~UUID are now canonicalized to the underlying Minecraft UUID. Existing server-scoped block data is collapsed and de-duplicated when read, so one block applies to the same account across Relay servers. The blocked-user manager shows one row per account and scrolls internally instead of growing beyond the viewport. - Game-side personal blocking: account-based personal blocks now also apply to Public chat delivered by KWC to game clients. On Bukkit/Paper, blocked senders are removed from native player-chat recipient sets as well, aligning Web and in-game results. Relay routing still keeps server-scoped remote identities where routing requires them, while personal-block comparisons use the canonical Minecraft UUID. - Saved-conversation viewer/PDF responsiveness: saved conversation viewers no longer build the entire archive synchronously on the UI thread. Reply targets are indexed once, viewer messages render in small batches so Close remains responsive on large snapshots, viewer images use lazy loading, and PDF export renders from the complete saved snapshot instead of cloning only the currently rendered viewer DOM. - Forge build-cache recovery: Windows Forge builds now validate ForgeGradle/Mavenizer cached JARs after a failed target build. Truncated/corrupt cache JARs are removed and the same target is retried once, covering interrupted downloads/reboots such as zip END header not found without clearing the entire Gradle cache. - YouTube virtual-scroll autoplay: preview.youtube-autoplay-on-open now applies only when the user explicitly opens a YouTube preview. If an already-open/remembered preview is destroyed by virtual scrolling and later recreated, the iframe is restored with autoplay disabled so a paused video does not start again merely because it re-entered the viewport. - Visible-target notification acknowledgement: Public, DM, and Group exact-message notifications are acknowledged as soon as the target message is actually visible. Canonical inbox synchronization, post-render retries, foreground/focus changes, mobile visualViewport resize/scroll, window resize, and orientation changes all re-run the same guarded visibility sweep. With remove-after-view enabled the matching row is removed; otherwise it becomes Read. - Public reply/keyword/reaction attention targeting: public-chat notifications now explicitly identify Public chat as their target, preventing an already-viewed public message from lingering unread because of an ambiguous target. - Deleted-message notification inbox lifecycle: globally deleting a public, DM, or Group message removes notification-inbox rows that target that exact message, whether unread or already Read. Cross-server DM deletion and /kchat dm delete apply the same cleanup using the receiver-local DM message ID. Persisted stale rows are pruned and delayed writes are revalidated so deleted targets cannot be resurrected by a race. - Notification settings wording: signed-in notification categories and keyword lists are correctly described as account-wide. Browser Notification permission/enablement and Web Push subscription are browser/device specific and must be enabled on each PC browser or mobile device that should receive alerts. - Desktop private-window presentation: touch-capable Windows/ChromeOS/Linux desktops are no longer mistaken for mobile solely because maxTouchPoints > 1. Desktop Standalone DM/Group multi-window, dragging, and desktop typography remain on the desktop presentation path. DM/Group sender names and message bodies use the same base chat font-size token as public chat, while timestamp/status metadata sizing is unchanged. - Game/Web online user count: the signed-in user counter uses the UUID-deduplicated union of Game and Web presence. A user connected from both counts once; Game-only and Web-only users are both included, while the existing Offline privacy rule still excludes hidden accounts. - Upload retention lifecycle: upload.retention-days is now an actual age limit rather than being extended indefinitely by ordinary Public/DM/Group message references. With pinned.preserve-uploads: true, attachments referenced by public or Group pinned-message snapshots remain protected. Upload and external-media cache rete
    43 downloads
  2. 5.3.2KOKOTO WebChat 5.3.2Sep 16, 2026

    5.3.2

    5.3.2 is compared directly with the 5.3.1 release baseline. It keeps the 5.3.0 configuration schema and Relay Protocol 2.2 while refining Poll/Recruitment Events, mobile file handling, minimized/mobile window behavior, personal blocking, and emoji-favorites stability.
    Added
    - Feature-first multilingual documentation and in-product help: the English Wiki and docs/en, docs/ko, docs/ja, and docs/zh-CN now share a feature-first navigation model. Each feature guide starts with normal use, then configuration/operation, then implementation notes. The Web account panel adds a localized Help button beside Profile that opens the current UI language documentation. Game commands /kchat docs [en|ko|ja|zh] and /kchat wiki [en|ko|ja|zh] expose the same entry points; /kchat wiki defaults to the English Wiki while explicit non-English languages use the localized docs mirror. - Poll multi-select mode: Poll creation can choose single-select or multi-select voting. Multi-select Polls may optionally limit the number of choices per voter; 0 means unlimited. Choices are de-duplicated per voter, response-count automatic end continues to count unique voters, persisted selections survive restart, and existing 5.3.1 single-choice Poll data remains readable. - Participant/vote cancellation: Lottery participants may withdraw while registration is still open/ready, First-come participants may withdraw only while the event is still open before capacity auto-completes it, and Poll creation now has a default-ON Allow vote cancellation policy. An allowed Poll voter may fully withdraw the current single/multi selection before close and vote again later; counts and unique-voter auto-end state are updated immediately. Web, Minecraft (/kchat game leave / /kchat game unvote), API, persistence, and Relay action handling use the same lifecycle rules.
    Changed
    - Recruitment application and confirmation policies: multiple-role application is disabled by default, preserving the 5.3.1 one-active-role behavior; applying to another role changes the existing application. Operators may allow applications to several different roles while duplicate application to the same role remains blocked. When multi-role application is enabled, Recruitment can use either single confirmation (one confirmed role per user) or multiple confirmation (several confirmed roles per user). Role-specific withdrawal and waiting-queue rebalance preserve the user's other applications. - Private-chat cleanup preview removed: the unreliable DM/Group cleanup-preview counters and preview workflow are removed. Retention periods, locks, actual cleanup, and automatic-delete exclusion remain available.
    Fixed
    - Mobile multi-file upload omissions: on Android/iOS, public-chat, DM, Group, and administrator-emoji multi-file selections are materialized into stable browser File snapshots immediately after the picker returns and before sequential upload begins. Later provider/content-URI-backed files no longer silently disappear while an earlier file is uploading; per-file read/upload failures remain visible. - Minimized-window movement, restore position, and scroll stability: minimized public chat keeps resize hit targets disabled so the + restore control remains clickable, while the minimized window itself is draggable. Minimized drag coordinates are transient and never overwrite the normal saved window position; restoring returns to the pre-minimize normal coordinates. Public-chat scroll state is anchored across minimize/restore so repeated collapsing no longer walks visible history upward. - Mobile virtual-keyboard viewport and scroll-anchor handling: public chat keeps its cross-browser visible-viewport guard across VisualViewport, innerHeight/innerWidth, and the document viewport, including exact embedded-frame restoration after editing. On smartphones/tablets, single-pane DM and Group overlays share the public .kwc-panel, and keyboard focus now captures the active public/DM/Group conversation anchor as one keyboard session. If that conversation was already at the newest messages, every keyboard viewport step keeps the message box/composer following the bottom and restores the bottom state when the keyboard closes; if the reader was browsing older history, the existing message anchor and on-screen offset are preserved instead of forcing a jump to latest. Temporary keyboard-driven scroll changes are not persisted as the normal conversation position. Mobile devices never enter desktop private multi-window solely because of a large screen. - Mobile Jump-to-latest keyboard follow state: public, DM, and Group chat now rebase the active keyboard-session anchor when the user manually scrolls while the composer remains focused. Using Jump to latest may intentionally adopt the bottom as the new keyboard baseline, but scrolling upward afterward immediately cancels that sticky follow state, so later focus/viewport synchronization cannot drag the reader back to the newest message. Jump-to-latest buttons are also re-evaluated after the settled mobile layout so they disappear once the actual latest position is reached. - Event creation option alignment: Poll multi-select/cancellation controls keep a compact left-aligned option layout. In Automatic end, each condition label stays on the left while its associated value control uses the remaining row space: the response-count field keeps its compact existing width at the right edge, and the date/time field is shortened to fit its native value instead of leaving an oversized control. Labels are vertically centered with their inputs, and the rows still wrap naturally at genuinely narrow mobile/PiP widths. - DM/Group history navigation parity: private conversations now expose the same localized Jump to latest affordance used by public chat when the reader moves away from the newest messages. A search jump that opens an older retained-history slice records that newer messages are outside the current slice, so Jump to latest reloads the current latest page before returning to the bottom. DM/Group top and bottom history limits continue to use the shared localized history.end feedback in both single-pane and desktop Standalone child-window presentations. - Blocked-user names, Relay identity, typing, and history layout: personal-block management strips Minecraft legacy/hex formatting from displayed names, and relayed users now use the same server-scoped remote~server~UUID identity for profile block state, live public-chat delivery, retained history filtering, and Web Push suppression. Blocked users no longer appear in public, DM, or Group typing indicators, already-visible typing state is purged immediately, and blocked public messages contribute zero virtual-scroll height. Block/unblock transitions preserve a visible non-blocked anchor and keep hidden rows out of height/viewport measurement so unblocking no longer corrupts the visible history layout. - Account-wide notification inbox and notification throttling: signed-in users share notification-inbox contents, unread/read state, clear operations, badge count, and inbox lifecycle preference across PC and mobile browsers for the same KWC account. Opening the inbox or merely opening a DM/Group room does not consume that room's stored alerts. Public, DM, and Group notifications are acknowledged only when the exact target message is actually visible; unread and read rows are visually distinguished. By default, Remove inbox notification after viewing its message is enabled, so viewing the target removes only that notification from the inbox. Its checkbox is placed at the bottom of the notification inbox itself, immediately above the bulk actions, rather than in general Chat settings; users may disable it there to retain the row as Read instead. Mark all read remains an explicit non-destructive bulk action,
    38 downloads
  3. 5.3.1KOKOTO WebChat 5.3.1Sep 12, 2026

    5.3.1

    Added
    - Poll Chat Events: added Poll as a first-class Chat Event type. One account may vote for one option and change its choice while the Poll remains open. Web and Minecraft /kchat game can both submit votes and inspect current counts, and relayed Poll responses are routed back to the event-origin server. - Role-based Recruitment Chat Events: added Recruitment with named roles, per-role accepted capacity, per-role waiting queues, role changes, withdrawal, and automatic promotion of the oldest waiter when an accepted slot opens. Web and Minecraft views expose accepted/capacity/waiting counts, the current user's state, and waiting position; relayed actions are routed to the origin server. - Persisted Event automatic-end policies: every event type may use an absolute end date/time. First come still always completes when its winner capacity fills; Lottery may optionally draw/finalize when participant capacity fills; Poll may finish after a configured number of unique voters respond; Recruitment may finish when every role's accepted capacity is filled, excluding waiting applicants. If multiple conditions are enabled, the first condition reached finalizes the event once. Policy, target time, completion time, and completion reason survive restart, and a server lifecycle check evaluates timed completion without requiring an open Web browser. - Font Awesome Free Web UI icons: replaced primary platform-dependent emoji/text control glyphs with a shared, locally bundled Font Awesome Free 6.7.2 SVG registry. Desktop/mobile add-ons, Standalone, and PiP use the same artwork without a CDN dependency. Required attribution and license notices are bundled with the source and JAR distribution.
    Changed
    - Minecraft command completion is shared across platforms: Bukkit/Paper/Spigot, Fabric, NeoForge, and Forge use the same Core completion service for /kchat game and other supported KWC command surfaces. Completion now covers Event actions and IDs, Poll option numbers, Recruitment roles, automatic-end controls, supported live-setting keys, filter actions/rule IDs, administrator/guest actions, and basic DM/group navigation where applicable. - Event announcement scope is topology-aware: when at least one enabled configured Relay peer permits send.event, new Event announcements default to Relay and may be changed to local-only. When no Event-capable peer is configured, the scope control/help/completion is hidden and the server normalizes the Event to local-only. Visibility follows configured topology rather than transient peer connectivity. - Presentation parity is explicit: desktop map add-ons + PiP, desktop Standalone + PiP, mobile map add-ons, and mobile Standalone consume the same canonical server config, account preferences, permissions, notification preferences, and Event state. Mode-specific branches are limited to presentation capabilities such as minimize availability, PiP transport ownership, and Standalone multi-window layout. Build validation now rejects generated JavaScript/CSS drift between wrappers.
    Fixed
    - Event create-form type visibility: fixed shared form CSS overriding HTML hidden, which could expose Recruitment role input in First come/Lottery and other type-specific controls in the wrong Event type. Poll options, Recruitment roles, participant/winner numeric fields, and Poll response-count automatic-end controls now appear only where they apply. - Mobile add-on Administrator control: fixed the Administrator/online-user header control not responding to taps in mobile map add-on mode. Interactive button, link, and role="button" controls are excluded from public-window drag capture so touch input reaches the control instead of starting a window drag. - Detached DM/Group/Admin-audit icon sizing: fixed Font Awesome normalization not reaching private/audit windows attached outside #kwc-root. Audit shields now use a compact badge size, search/delete icons remain inside their buttons, DM attachment artwork is restored, DM/Group emoji and attachment icons match public-chat sizing, and Group pin artwork is visible at the intended size. - Standalone private-list re-open behavior: pressing the DM or Group header button again now restores and raises the existing list window when it is minimized or hidden behind another KWC window instead of leaving it covered or creating a duplicate. Stale remembered-open state is cleared when it no longer matches the live DOM so the window can be recreated normally. - Group-room creation window ownership: in Standalone multi-window mode, creating a new group room now opens the creation form from the Group chats list/hub instead of attaching it to whichever group conversation child window is currently active. Room-local settings and management dialogs continue to stay with their owning conversation window. - Bukkit command dispatch parity: restored the documented /kchat filter and /kchat settings top-level dispatch paths and added the missing game surface to Bukkit command usage metadata.
    12 downloads
  4. 5.3.0KOKOTO WebChat 5.3.0Sep 11, 2026

    5.3.0

    KOKOTO WebChat 5.3.0 expands 5.2.1 with improved DM/group management, Chat Events, user profiles and presence, blocking and moderation, Relay features, and desktop multi-window UI.
    Added
    #### Chat Events - Multiple First come and Lottery events can run at the same time. - Events can be created, joined, completed, deleted, and inspected from both the Web UI and /kchat game. - For First come events, the number of winners is also the participant capacity. Registration closes automatically and the event completes as soon as all slots are filled. - Lottery events allow the participant capacity and number of winners to be configured separately. - Event announcements can be limited to the current server or sent across Relay-connected servers. - Relay event links are routed back to the exact server where the event was created. - Participant and winner names follow the global Display Name / Real Name setting. - Event result announcements display winners as Display Name (Real Name) when the two names differ. #### Full DM and Group History Search - DM and group conversations can be searched across stored history, including messages that are not currently loaded on screen. - Search results can jump directly to the corresponding message position. - Searching does not mark conversations as read. #### Actual Message Deletion - The previous DM Hide for me behavior has been removed for newly deleted messages. - Users can delete only the DM messages they sent themselves, and deletion removes the message from both sides of the conversation. - Messages sent by other users cannot be deleted by ordinary users. - Cross-server DM deletion is handled through Relay and verifies deletion authority against the original sender. - A policy for ordinary users deleting their own public-chat messages has been added. - Group rooms can optionally allow ordinary members to delete their own messages. - Reply metadata referencing a deleted message is cleaned up as part of deletion. - Ordinary-user self-deletion is disabled by default with moderation.allow-user-self-message-delete=false. - moderation.self-message-delete-window-minutes can optionally restrict how long after sending a message ordinary users may delete it. 0 means no time limit. #### Group Roles and Pinned Messages - Added per-group owner / admin / member roles. - Group admin privileges apply only inside that group and do not grant global KWC administrator privileges. - The owner can assign or remove group admins. - Group-specific pinned messages are supported. - All members can view pinned messages, while owners and admins can pin, unpin, and reorder them. - Pinning, message deletion, and ordinary-member self-deletion can be controlled independently for each group. - Deleting the original message does not remove its stored pin snapshot. The snapshot remains until it is explicitly unpinned or the room is deleted. #### User Profiles and Presence - User profiles can be opened by clicking a user name. - Minecraft Heads are used as the default profile image with a local fallback image. - Custom PNG, JPEG, and WebP profile images are supported. - Profiles support an About/status message of up to 280 characters. - Game and Web presence are tracked separately. - Compact user lists show one representative state using the priority Game → Web → Offline. - Users can set their visible status to Online / Busy / Offline. - When a user selects Offline, their underlying Game/Web connection state is not exposed to other users. - Administrators can optionally include offline accounts in the user list. #### User Blocking - Any logged-in user can personally block another user. - Messages and related notifications from blocked users are hidden from that user's public chat, DM, and group views. - Blocking is tied to the actual account identity and cannot be bypassed by changing the display name. - Blocking and unblocking take effect immediately from profiles and the blocked-user management screen. #### Administrator and Moderator Permissions - Per-user chat and file-upload restrictions are supported. - Administrators can remove custom user profile images. - Administrators can change users between USER, MODERATOR, and ADMIN roles. - Individual MODERATOR accounts can be granted specific administrative capabilities. - Permissions such as online-user management, message deletion, mute, public pin management, user restrictions, and profile-image management can be enabled independently. #### CAPTCHA - CAPTCHA now supports off, math, text, and mixed modes. - Math CAPTCHA supports easy, normal, and hard difficulty levels. - No external CAPTCHA service is required. #### @Mention Autocomplete - @ mention autocomplete is available in public chat, DM, and group message inputs. - Users can be searched by both display name and real account name. - Keyboard, mouse, touch, and IME composition input are supported. - When possible, the selected user is inserted using the real Minecraft account name to provide a stable mention token. #### Image Privacy - Image metadata is stripped before normal uploads and custom profile images are stored. - JPEG EXIF/IPTC/comments, PNG text/EXIF metadata, and WebP EXIF/XMP metadata are removed.
    Relay Protocol 2.2
    - Relay Protocol revision has been extended to 2.2 while retaining protocol major version 2 compatibility. - Added the delete capability for cross-server DM deletion. - Added the game capability for remote Chat Event routing. - Added the profile capability for remote public-profile lookup. - Each Relay peer can independently configure send / receive policies for: - public-chat - event - dm - profile - Event Relay traffic uses the dedicated server-relay.sources.event policy instead of the general system-event policy. - Public-chat reactions and typing indicators follow the public-chat policy. - DM reactions, typing indicators, read state, and deletion follow the dm policy.
    Desktop UI and Multi-window
    - In Standalone desktop mode, multiple DM and group conversations can be opened simultaneously as independent windows. - Movement, resizing, maximization, and restoration behavior has been unified across public chat, DM/group lists, and individual DM/group windows. - Double-clicking a window title toggles maximize/restore. - The resize-lock feature has been removed in favor of normal freeform resizing. - Files can be dragged and dropped directly onto an individual DM or group window. - The exact DM/group conversation under the drop target is confirmed before the file is uploaded. - Stacking behavior prevents the public-chat window from being accidentally dragged or resized through a foreground DM/group window. - Resize hit areas extend slightly both inside and outside the visible window edge for easier grabbing without covering the normal scrollbar area. - Resizing is available immediately after page refresh instead of waiting for configuration/bootstrap recovery to finish.
    UI and Usability
    - Public-chat header controls shrink progressively as available space decreases and wrap to a second row only when necessary. - The controls immediately return to one row when enough space becomes available again. - Minimized public chat keeps its title visible together with the + restore button in a compact 124×48 layout. - Minimization is available in supported embedded adapter environments as well as Standalone, including narrow/mobile layouts. - Refreshing or reconnecting restores the conversation position the user was previously viewing. - Automatic scrolling to the newest message occurs only when the current view is less than approximately two rendered text lines from the bottom. If the user is reading further up, new messages do not forcibly pull the view downward. - The online-user button correctly displays the number of logged-in Web users, including 0. - The Display Name / R
    11 downloads
  5. 5.2.1KOKOTO WebChat 5.2.1Sep 6, 2026

    5.2.1

    5.2.1 is a focused web-frontend hotfix release over 5.2.0. It does not change the configuration schema or Relay protocol revision.
    Fixed
    - Fixed an intermittent BlueMap refresh race where chat.js could initialize before the generated config.js, freeze the fallback site-root /api URL, and keep retrying incorrect endpoints instead of recovering. The BlueMap wrapper now defers startup until its generated API base is available and can reload the addon config before re-bootstrapping the chat. - Kept the notification preference label explicitly formatted as @Mention / @멘션 / @メンション / @提及, including upgrades with older or customized language files whose mention label omitted the leading @. - Matched the custom-emoji horizontal category scrollbar to the themed vertical scrollbar colors and thumb treatment while retaining a 12px horizontal scrollbar height.
    14 downloads
  6. 5.2.0KOKOTO WebChat 5.2.0Sep 6, 2026

    5.2.0

    5.2.0 adds message reactions, personal conversation archives/PDF export, public/DM/group typing indicators, custom-emoji picker enhancements, and Relay Protocol 2.1 capability negotiation. It also includes security and account-linking corrections carried forward from the 5.1.0 release baseline.
    Added
    #### Public, DM, and group message reactions - Added persistent reactions for logged-in users on public-chat, DM, and normal group-chat messages using Unicode emoji and KWC custom emoji (:pack/name:). Group membership join/leave events are excluded. - Added multi-server reaction support. Public reactions use the message origin server as the authority, cross-server DM reactions are exchanged only between the two participant servers, and group-room reactions remain local to that server. - Added Admin > Emojis > Reaction icons management with a master reaction switch, a separate KWC custom-emoji allowance, Unicode reaction ordering/catalog control, and administrator-managed search aliases. - Added a per-account Reactions notification preference shared by live browser notifications and background/mobile Web Push. Each browser/device uses only the delivery path it supports. The server-side allow/default key is notifications.notify-reactions. - Suppress duplicate DM/group attention account-wide when that exact conversation is actively being viewed in any signed-in KWC browser for the account: the page must be visible and focused, the chat window must not be minimized, the DM/group modal must be open, and the current thread/room ID must match. This short-lived view heartbeat is independent of whether the viewing browser itself subscribes to Web Push. While one active client is reading the exact private conversation, all browser notification/in-chat notification-inbox paths and all Web Push subscriptions for that account are suppressed for that conversation; when no active client is viewing it, normal notification delivery resumes. #### Custom-emoji picker - Added a browser-local Recent pseudo-folder for recently inserted custom emoji. - Added an optional Favorites pseudo-folder with hover ☆/★ controls. Administrators can disable Favorites, store favorite IDs with the signed-in KWC account by default, or select browser storage; emoji.favorites.max-per-account uses 0 for unlimited or a positive retained-item limit. Account storage uses KWC user-preferences and is independent of public/DM history storage backends. Favorites keep the original catalog IDs and message insertion continues to use the original :pack/name: token. - Added floating custom-emoji search across ID, name, display label, pack name, and every public alias with NFKC/case normalization. Recent and Favorites are shared by public chat, DM, and group-chat pickers. #### Relay Protocol 2.1 - Added independent relay protocol revision/capability negotiation instead of using the KWC product version as the compatibility key. - Relay Protocol 2.1 advertises public, dm, read, reaction, reaction-authority, and typing capabilities. KWC 5.1.0 peers remain compatible with 5.2.0 for the common Relay v2 public-chat/DM/read feature set; reactions and typing require participating 5.2.0 / Relay 2.1 peers. - Retained verification compatibility with the legacy Relay 2.0 handshake canonical used before revision negotiation. #### Saved conversations and PDF export - Added per-account Saved conversations for public chat, DMs, and group rooms. Users select a message range, and the server re-reads and validates that range before creating the private snapshot. - Added static archive/PDF views that preserve KWC chat presentation, reply/reaction/server context, display name and real account name. Attachments remain references to their original KWC sources rather than being duplicated into the archive. - Added PDF export using the user's currently applied KWC appearance. - Added chat.conversation-archive.enabled (default true). When disabled, archive API routes are not registered, conversation-archives.db is not opened/created, and saved-conversation controls are not created in the web DOM. Existing archive data is preserved for later re-enable. - Added configurable archive quotas: max-archives-per-user (default 100), max-messages-per-archive (default 1000), and max-messages-per-user (default 10000). Lowering a quota does not delete existing snapshots; it blocks new saves that would exceed the active limit. #### Public/DM/group typing and private-chat controls - Added event-driven public/DM/group typing indicators without polling or persistent typing state. Server administrators control Open chat, DM, and Group chat independently in Web Admin Settings or chat.typing-indicator.* in config.yml; defaults are Open chat OFF, DM ON, and Group chat ON. chat.typing-indicator.user-display-control defaults OFF; when an administrator enables it, signed-in users can use one account-stored Typing indicators preference that hides incoming hints on their own screen without suppressing their outgoing typing activity. The rounded high-opacity indicator floats above the active composer, follows each viewer's existing display-name/original-name toggle, strips formatting tags from shown names, and scales to about 80% of the user chat font without dropping below the configured base UI font. Public and remote-DM typing can use Relay 2.1; group typing remains scoped to room participants. - Consolidated private-room invite, saved-conversation, hide, and room-management actions under the room Settings menu according to the existing permissions.
    Fixed from 5.1.0
    - Corrected mention notification matching inherited from 5.1.0. Ordinary occurrences of a user's name no longer count as mentions: a mention must start with @, matches registered real/display names using the longest name at each @, and notifies all accounts that share the same exact display name. - Corrected existing bundled/account-linking language values that still showed the obsolete /kwc auth command. KWC now migrates those built-in login hint/waiting texts to the supported /kchat auth <code> command without overwriting unrelated customized translations. - Enforced the guest-disabled public-chat visibility policy on server-side history, search, around-history, and SSE endpoints instead of relying on frontend hiding alone. - Hardened trusted-proxy / X-Forwarded-For client-IP resolution against leftmost-header spoofing. - Enforced exact paths for leaf HTTP API contexts while retaining prefix routing only for intentional file/subtree endpoints. - Reduced the unauthenticated client-config response to fields actually consumed by the frontend.
    2 downloads
  7. 5.1.0KOKOTO WebChat 5.1.0Sep 1, 2026

    5.1.0

    5.1.0 is a feature, reliability, compatibility, and security update over the 5.0.0 release baseline. Changes are grouped by function below. Server Relay Version Compatibility Server-to-server relay in KWC 5.1.0 is not backward-compatible with older KWC versions. All servers connected through relay must be updated to the same KWC version before they are connected. Mixed-version relay configurations are not supported and may cause duplicate messages, incorrect server metadata, or malfunction of features such as DMs, replies, and emojis. ⚠️ Important: Server relay does not support connections between different KWC versions. Update all participating servers to the same version.
    Security — Relay Protocol v2
    #### Why the relay protocol changed Relay Protocol v1 used by KWC 5.0.0 and compatible BMWC relay peers had two important security limitations: - Relay v1 over `http://` sent the relay payload in plaintext at the application/transport path. A network observer between peers could therefore read relayed content when TLS was not providing protection. - Relay v1 used one flat trust set with a top-level shared secret and flat peer list. Even when the peer URL used HTTPS, exposure of that shared secret or an unintended peer/forwarding configuration affected the whole relay trust set instead of a smaller explicit trust group. The relay-specific exposure applies to servers that actually enabled/configured Relay v1. Servers that did not use server relay are not affected by this relay transport/trust issue. The highest-priority upgrades are Relay v1 deployments with one or more http:// peers. This changelog describes the protocol design exposure; it does not claim a known in-the-wild exploit or assign a CVE. #### What 5.1.0 changes - Replaced the flat v1 trust model with explicit `groups -> peers` trust groups. Each group is a separate trust boundary with one shared secret, and both servers must configure each other reciprocally in the same group. - Added safe first-setup secret provisioning: one server may start with an empty group shared-secret, KWC generates and persists a cryptographically secure value, and the operator copies that exact value to the other members of the group. Manually configured secrets shorter than 32 characters fail closed. - Public relay, cross-server 1:1 DM, and DM read receipts now use request-by-request authenticated/encrypted Relay v2 transport. Directional keys are derived with HKDF-SHA256 and relay payloads are protected with AES-256-GCM; timestamps, nonces, relay IDs, hop counts, and authenticated responses provide replay/loop and forged-response protection. - Relay v2 protection is hop-by-hop, not end-to-end encryption. A forwarding KWC server is a trusted participant that decrypts and re-encrypts the message for the next hop. - Direct one-hop http:// peers remain possible because the v2 payload itself is encrypted/authenticated, but KWC emits a security warning because HTTP still lacks TLS server identity and transport-metadata confidentiality. - Forwarding is restricted to the same trust group and only through HTTPS peers. An HTTP peer can be used only as a direct hop and is excluded from incoming/outgoing forwarding. - Legacy Relay v1/BMWC endpoints return HTTP 426 and do not interoperate with Relay v2. - The first 5.0.0 -> 5.1.0 relay migration retires the old global secret/flat peers/forwarding settings and resets server-relay.enabled: false instead of guessing new trust groups. Operators must explicitly rebuild reciprocal v2 groups before re-enabling relay. - /kchat reload rechecks exposed built-in HTTP listeners and direct HTTP relay peers and reports localized warnings to the server log and command sender.
    Cross-server relay and private messaging
    - Public relay, cross-server DM delivery, DM read receipts, origin identity, duplicate protection, and forwarding now share the same Relay v2 group boundary and authenticated transport. - Preserved stable cross-server DM reply references so a reply continues to target the original remote message identity after relay delivery or restart. - Fixed structured relay configuration reconstruction so multiple groups/peers remain intact without duplicate empty groups: [] values or collapsed list entries.
    Replies, direct messages, and group rooms
    - Added complete persistent Reply metadata and interaction for Web/game DM and group chat, including original-message preview/jump, restart persistence, and server-side conversation validation. - Unified Minecraft DM/group Reply rendering with the public-chat Reply presentation while preserving private delivery scope. - Fixed game-side group commands so room names containing spaces, quoted names, and repeated whitespace resolve correctly. - Added a per-room member join/leave notice option. Actual join/invite-accept and leave/kick/ban membership changes are stored as informational events and shown in Web/history and live game chat; closing, hiding, or switching a room is not treated as leaving. - Improved DM/group message metadata flow so full-date timestamps, Reply actions, and read state no longer reserve one oversized fixed metadata column on narrow/mobile layouts.
    Emoji, notifications, pinned messages, and browser UI
    - Canonicalized custom emoji pack/file/token names, preserved full Reply source text, improved URL/emoji rendering inside Reply previews, and changed the picker to insert only the exact emoji token at the caret. - Custom emoji tokens now render as compact inline emoji in the notification center and pinned-message UI. Notification emoji are capped at 18px, collapsed pin emoji at 16px, and expanded pin emoji at 22px without changing normal chat emoji sizing. - Fixed custom emoji images that could remain blank in the initially visible history after a browser refresh. Transient image-load failures are retried in place so scrolling away and back is no longer required. - Improved emoji catalog recovery across temporary fetch failures, SSE reconnects, and administrator catalog changes while keeping emoji.message-token-limit: 0 as unlimited. - Fixed account chat-profile persistence so explicit font size/opacity values and intentionally unset theme, font, and text-shadow fields round-trip exactly. Loaded font settings are also applied to already-open DM/group windows. - Changed public/DM/group message composers to one-line textareas to avoid Android Chrome Autofill accessory UI on normal chat inputs without changing login/password fields. - Changed Android administrator emoji upload selection to use the generic system file/DocumentsUI picker path while retaining server-side image validation.
    HTTP, SSE, logging, and operator behavior
    - Raised the default SSE limits to 10 connections per resolved client IP / 500 total and improved HTTP 429 diagnostics and reverse-proxy client-IP guidance. - Repeated operational HTTP/network failures now use a state-aware logging policy: the first failure and changed failure states are logged immediately, identical repeats are suppressed/summarized, and recovery is reported once. - When commands.broadcast-result-to-web-chat: true, the localized Web-command execution notice is also delivered to online Minecraft players without adding a duplicate console/audit broadcast. - During the project-address transition, the update checker tries canonical Modrinth kokoto-webchat first and falls back to the existing bluemapwebchat publication; a warning is emitted only when both sources fail.
    Configuration and migration
    - Added EN/KO/JA/ZH config.yml comment templates. ui.language selects the presentation language used for rebuilt config/reference/migration output while preserving parsed operator values. - Added a complete 394-setting administrator input guide with setting type/default, accepted values, ranges, units, and special zero/negative meanings. - Configuration migration/difference output now
    11 downloads
  8. 5.0.0KOKOTO WebChat 5.0.0Aug 27, 2026

    5.0.0

    5.0.0 is a major release that expands the former BlueMap-focused project into KOKOTO WebChat, a multi-platform and multi-map Minecraft web chat system.
    Platform and map expansion
    - Renamed the project to KOKOTO WebChat (KWC). /kchat and /kc are the canonical commands, /chat is the default public web path, first-run migration from BlueMapWebChat 4.x is supported without modifying the original BMWC data, and update checks support the BMWC → KWC distribution transition. - Added server builds for Bukkit/Paper/Spigot, Fabric (16 exact targets), NeoForge (12 exact targets), and Forge (16 exact targets), covering supported Minecraft versions up to 26.2. - Expanded frontend integration beyond BlueMap with squaremap, Dynmap, Pl3xMap, LiveAtlas, uNmINeD, Minecraft Overviewer, and a standalone WebChat mode. - Improved multi-server operation for public relay, cross-server DM/group chat, remote-user handling, delivery/read status, relay failure backoff, and mixed KWC/BMWC transition deployments.
    Chat, moderation and user features
    - Added a shared Unicode-aware content filter for game and web chat with Block, Mask and Replace actions, bulk UTF-8 word lists, custom rules, anti-evasion matching, matched-word reporting, and Web Admin editing/testing. Hangul matching now avoids false positives such as 시발 matching 신발, while jamo shorthand such as ㅅㅂ remains supported. - Added account-synced chat preferences and multiple visual profiles, including validated JSON import/export, improved settings synchronization, and removal of stray native file-picker controls. Device-specific window state and Web Push endpoints remain local to each device. - Expanded notifications with account-level keyword preferences, duplicate-notification suppression, desktop Notification/Web Push separation, mobile Web Push retry handling, and administrator Discord keyword alerts through DiscordSRV. - Improved guest operation with Unicode guest names, stronger impersonation protection, corrected CAPTCHA/session behavior, and cleaner login/logout transitions. - Added upload.filename-mode: original with safe Unicode filename preservation, collision handling, and Windows clipboard filename fixes, while retaining randomized filenames as the default alternative. - Improved registered-emoji handling across game, web, relay and Discord paths, and added deployment-focused integration guides for ImageEmojis-Bero and SimpleNicks-Bero.
    Reliability, security and UI
    - Reworked long-history virtual scrolling so message order remains deterministic with images, GIFs, video, audio, YouTube/iframe embeds and link previews; mid-history focus/reconnect no longer replaces the viewed message slice. - Added SQLite history integrity/recovery checks and hardened authenticated APIs, SSE stream authentication, administrator IP restrictions, Web Push endpoints, Discord/iframe boundaries, and request limits.
    Configuration and upgrade behavior
    - Reworked configuration migration around the bundled 5.0.0 config.yml: existing operator values are preserved while current settings, comments and layout are rebuilt consistently. 5.0.0_auto_migration keeps same-version reconciliation enabled; exact 5.0.0 disables it. - Unified configuration/reference behavior and bundled language coverage across supported platforms. The four bundled web languages remain aligned, while administrator-customized translations are preserved when unchanged bundled strings are refreshed.
    Compatibility
    - Bukkit/Paper/Spigot: Minecraft 1.18–26.2 - Fabric: 16 exact targets, Minecraft 1.18.2–26.2 - NeoForge: 12 exact targets, Minecraft 1.20.2–26.2 - Forge: 16 exact targets, Minecraft 1.18.2–26.2 - Target Java is selected by Minecraft generation: Java 17 / 21 / 25 as applicable.
    21 downloads
  9. 4.7.0BlueMapWebChat (BMWC) 4.7.0Aug 15, 2026

    4.7.0

    - Added administrator custom-emoji multi-file upload using the same browser picker flow as the existing normal chat file upload. The upload control now opens a hidden multiple file input; when the picker closes, BlueMapWebChat immediately copies the selected FileList, clears the native input, and begins sequential upload without a separate selection/confirmation stage. Upload progress and active-transfer cancel behavior remain available, while per-file extension/size checks, total-storage accounting, unique-name handling, audit logging, and PNG-sidecar generation continue through the existing server endpoint. - Expanded the declared Bukkit/Spigot API compatibility baseline from Minecraft 1.21 to 1.18. The plugin remains compiled for Java 17 and builds against Spigot API 1.18.2, keeping the conservative supported range at Minecraft 1.18 through 26.2. Paper AsyncChatEvent remains reflection-detected with Bukkit AsyncPlayerChatEvent as the hard-linked fallback. - Added configurable colon-delimited message tokens. The English defaults provide newline (:enter:, :newline:, :nextline:, :linebreak:, :br:), blank-line (:blankline:, :emptyline:, :paragraphbreak:), and indentation (:tab:, :indent:) actions. Administrators can replace or add aliases in any language. Optional printable custom substitutions are also supported, while unknown tokens remain untouched for compatibility with custom/image emoji plugins. Minecraft output keeps the existing single-line sanitizers for ordinary CR/LF input, but configured newline/blank-line tokens are carried separately and emitted as explicit Minecraft chat lines at final delivery. Cross-server game rendering of these intentional line breaks requires the receiving BlueMapWebChat server to run the same 4.7.0 token-line delivery support. - Fixed bundled config comment refresh so repeated startup/reload passes are idempotent. The public-relay delivery comment is no longer re-added on every refresh, and exact duplicate copies of that bundled comment left by earlier refreshes are collapsed to one without changing setting values or custom comments. - Added safe top-level config layout normalization on startup/reload. Known config.yml blocks are reordered to the bundled 4.7.0 order without changing their current values or block comments; unknown top-level blocks are retained after known blocks in their original order.
    Configuration
    4.7.0 adds the message-tokens section. Existing chat, DM, group-chat, relay, emoji, and upload defaults are otherwise unchanged. The configuration review marker changes to:
    config-version: "4.7.0"
    Existing setting values are not overwritten. On startup/reload, known top-level config.yml blocks are reordered to the bundled 4.7.0 layout while each block's current text, values, and custom comments are preserved; unknown top-level blocks remain last in their original order. BlueMapWebChat now writes config-reference-4.7.0.yml as a complete byte-for-byte copy of the bundled 4.7.0 default configuration, including comments, whenever an existing config is checked. This gives older or unversioned installations a full current reference independent of the detected baseline. When migration review is required, config-migration-4.7.0.yml still contains the concise missing/changed settings and review marker; empty maps such as message-tokens.custom: {} are now retained as real missing settings instead of disappearing from the fragment. The bottom of the migration file also contains a comment-only textual diff against config-reference-4.7.0.yml. Unchanged lines are omitted; each side prints the file name, a separate Line or Lines field, and then only the differing text. Reference-only blocks separately show where to insert them in the current config. Default token configuration:
    message-tokens:
      enabled: true
      max-replacements-per-message: 24
      newline:
        aliases: [enter, newline, nextline, linebreak, br]
      blank-line:
        aliases: [blankline, emptyline, paragraphbreak]
      tab:
        aliases: [tab, indent]
        spaces: 4
      custom: {}
    Aliases are written without the surrounding colons in config; users type them as :alias:. Administrators may localize aliases freely. Literal custom replacements are restricted to printable text; newline/blank-line/tab behavior uses the dedicated actions instead of escape strings.
    29 downloads
  10. 4.6.3BlueMapWebChat (BMWC) 4.6.3Aug 13, 2026

    4.6.3

    - Added optional read-only administrator group-chat content audit. Explicit accounts listed in private-chat-super-admins can open group-chat message bodies from the administrator metadata view only when group-chat.admin-audit.enabled: true. - Group-chat audit access does not require room membership and does not join the room, mark messages read, change unread counts, send messages, upload files, hide messages, or modify membership. Ordinary ADMIN/MODERATOR roles do not gain content access automatically. - Every group-chat audit page read is recorded as admin.group-audit-read with the actor, room ID, pagination position, limit, and returned count. Message bodies are not copied into the audit log. - Refreshed the bundled 4.6.3 configuration comments to describe the current update-check, cross-server DM, relay, read-status, and administrator-audit behavior. Existing config.yml setting values are not rewritten; only unchanged older bundled comment blocks are refreshed, while custom comments are preserved. - Fixed DM/group native video and audio playback during live message/status refreshes. Private-chat message lists now reconcile by stable message key like public chat: existing message/media DOM stays mounted, new messages are inserted without rebuilding the conversation, and delivery/read metadata updates in place. Active playback therefore continues from its current position. Leaving or switching a private conversation now hard-discards that conversation's message/media DOM and private media-open state; re-entering starts from the unopened click-to-load state (or a newly created non-playing media element when click-to-load is disabled), so no previous player is reused or auto-resumed. - Fixed pinned-message source metadata in the detached pinned-message window. Clickable Web/Game DM targets and relay server badges now use the same transparent/buttonless metadata styling as normal chat instead of falling back to browser default button chrome.
    Configuration added in 4.6.3
    Compared with the bundled 4.6.2 defaults, 4.6.3 adds only:
    group-chat:
      admin-audit:
        enabled: false
    The configuration review marker also changes to:
    config-version: "4.6.3"
    Both gates are required to open group-chat bodies:
    private-chat-super-admins:
      - "ExactMinecraftNameOrUUID"
    
    group-chat:
      admin-audit:
        enabled: true
    The existing direct-message.admin-audit.enabled switch remains independent and continues to control only DM body auditing.
    3 downloads
  11. 4.6.2BlueMapWebChat 4.6.2Aug 13, 2026

    4.6.2

    - Fixed same-name direct-message routing. A DM target without a server qualifier resolves only on the current server; cross-server targets require explicit server-scoped identity from name@server-id or the web UI. - Added end-to-end acknowledgement for cross-server DMs. A remote DM remains pending until the destination server confirms that it was stored; routing, HTTP, timeout, and destination failures become retryable failures instead of appearing successfully delivered. - Added idempotent DM retry using persistent relay IDs and web client message IDs. Retrying after an uncertain or failed request does not create duplicate sender or receiver messages, and interrupted pending deliveries recover as retryable failures after restart. - Added the same browser-side pending/failure/retry and client-message-id duplicate protection to group-chat sends. Normal successful delivery is intentionally not labeled; only the compact localized Sending state or Failed · Retry action is shown beside the message timestamp. - Added read status to every DM and group-chat message, displayed beside the message timestamp. A 1:1 DM shows a short localized unread label (Unread in English) until its recipient reads it, then changes to ✓. Group chat keeps the unread-recipient count and changes to ✓ when that count reaches zero. - Added authenticated cross-server DM read acknowledgements so read state for remote DMs is reflected on the message origin server. Read acknowledgements are idempotent and are re-sent when the conversation is viewed, so a temporary relay/HTTP failure does not permanently suppress the read mark. - Changed multi-hop private relay acknowledgement so an intermediate hub reports success only after the final destination confirms storage. - Fixed update notifications so an eligible administrator login refreshes stale Modrinth release state, OPs are explicitly recognized in addition to the update-notify permission, failed checks are visible in the server log, and reloads do not retain obsolete update-check listeners.
    Cross-server DM compatibility
    All servers that exchange cross-server DMs should run BlueMapWebChat 4.6.2 or later to use end-to-end delivery confirmation, retry, and remote read-status acknowledgement.
    Configuration
    4.6.2 adds no administrator-facing configuration keys and changes no existing setting defaults. The configuration review marker changes to:
    config-version: "4.6.2"
    6 downloads
  12. 4.6.1BlueMapWebChat 4.6.1Aug 7, 2026

    4.6.1

    - Fixed cross-server direct messaging from the web interface. This includes exact server-id + player UUID targeting, shared game/web sessions, destination-server delivery, remote DM search, message-metadata shortcuts, game /bmchat dm and name@server-id whisper routing, and server identification in the DM window before the first message is sent. - Added an optional read-only administrator DM audit view for responding to misconduct or other exceptional incidents. Access is limited to explicitly listed private-chat super administrators, and every audit read is recorded without copying message bodies into the audit log. - Added a compact update checker. It uses Modrinth as the release source, logs a newer stable version to the console, and shows administrators a one-line join notice with clickable Modrinth and CurseForge pages. Only update-check.enabled is configurable; timing, channel, permission behavior, and links use built-in defaults. - Reorganized the bundled config.yml into clearly labeled functional groups without renaming existing keys or changing their defaults. The only newly exposed update-check setting is the single update-check.enabled switch directly below the plugin master switch.
    Important cross-server DM compatibility requirement
    All servers that exchange cross-server DMs must run the same corrected 4.6.1 build. Matching the displayed version number alone is not sufficient because earlier 4.6.1 builds do not include the complete private DM relay and exact target handoff changes. Replace the plugin on every connected server and restart all of them; otherwise the sender may create a session while the destination server does not receive or store it.
    Configuration added in 4.6.1
    The functional settings added compared with the bundled 4.6.0 defaults are:
    update-check:
      enabled: true
    
    direct-message:
      admin-audit:
        enabled: false
    The configuration review marker also changes to:
    config-version: "4.6.1"
    To enable DM body auditing, both the allowlist and the audit switch are required:
    private-chat-super-admins:
      - "ExactMinecraftNameOrUUID"
    
    direct-message:
      admin-audit:
        enabled: true
    Ordinary ADMIN or MODERATOR roles do not gain DM body access automatically. The audit view is read-only.
    15 downloads
  13. 4.6.0BlueMapWebChat 4.6.0Aug 3, 2026

    4.6.0

    - Added secure multi-server game/web chat relay with HTTPS and HMAC authentication. - Added server-aware message labels and per-server web badge colors. - Added in-game message replies using /bmchat reply. - Added BMChat DM suggestions for web and remote-server senders. - Added game whisper capture into BMChat DM history. - Added ImageEmojis-Bero 1.9.0 compatibility for chat, replies, DMs, and relayed messages. - Preserved URLs, emoji tokens, message IDs, reply references, and origin metadata across relays. - Prevented duplicate Discord delivery and repeated server/source prefixes in shared channels. - Restored the normal asynchronous logging path for local Minecraft chat. - Added automatic SQLite relay metadata migration. - Added a non-destructive configuration migration fragment for missing and changed settings. - Updated the changelog, configuration manuals, upgrade guides, and four-language documentation.
    7 downloads
  14. 4.5.5BlueMapWebChat 4.5.5Jul 21, 2026

    4.5.5

    - Expanded config.yml inline documentation for supported option values and placeholders beyond the game-name hover text, including Google Drive preview mode, X/Twitter embed theme, clipboard upload behavior, command role values, web font item fields, Web Push TTL range, UI scroll/opacity ranges, and upload/cache retention semantics. - Fixed duplicate external link openings on mobile browsers by debouncing same-link tap handling and preventing the native anchor fallback before the custom window.open path runs. - Added an optional Spigot-compatible in-game sender-name hover for web-to-Minecraft chat relays. When player-display.mode is display-name or custom-name and the displayed sender name differs from the real Minecraft account name, hovering the displayed name can show the real account name without requiring Paper-only APIs. - Added chat.game-name-hover.enabled and chat.game-name-hover.text settings. The default hover text is now just {real}; the template still supports legacy color codes and {display}, {real}, {uuid}, and {source} placeholders for servers that want more detail.
    chat:
      game-name-hover:
        enabled: false
        text: "&f{real}"
    19 downloads
  15. 4.5.4BlueMapWebChat 4.5.4Jul 6, 2026

    4.5.4

    - Fixed Web Push notification filter drift when the same account has multiple saved browser/mobile subscriptions. Updating notification options now also synchronizes the same account's existing Web Push subscriptions, so older endpoints do not keep sending notifications with stale settings such as notifySystemMode=all after the user changes the current device to join-leave or off. - Reduced duplicate startup refresh work after stored-token verification. The client now verifies a saved token once, then loads pins, commands, DM rooms, group rooms, history, and SSE through the normal startup path only, avoiding duplicate initial API requests that could cause slower loading, brief UI flicker after SSE reconnect, or repeated DM/group/pinned-message re-rendering on mobile and lower-powered browsers. - Added notification and mobile/background Web Push handling for Discord-to-web relay messages. Discord relays now use the same public-chat notification path as web/game chat, so the existing normal chat, mention, keyword, own-message, preview, and notification enable settings apply consistently. - Restored the PIP unsupported/failure popup in mobile/standalone flows by showing a parent-page modal instead of relying only on native alert(), and added a child-frame fallback if the parent bridge does not answer. - Fixed notification i18n regressions: removed the duplicated English keyword-help suffix and translated the Japanese Web Push error/failure strings. - Updated JA/ZH README Web Push notes so the recent addon/standalone push behavior is documented in the target language instead of mixed English.
    1 download
  16. 4.5.3BlueMapWebChat 4.5.3Jul 5, 2026

    4.5.3

    Fixed
    * When chat is hidden from logged-out users, expired or revoked sessions now immediately clear visible chat history, pinned messages, DM/group state, and chat-related modals. * Connected browsers now receive an auth-expired SSE event when a session expires, is logged out from another tab, or is revoked from web/admin or /bmchat revoke. * Notification text now strips Minecraft color codes and formatting codes before being sent to browser notifications, mobile/background Web Push, and the local notification inbox. * Fixed duplicated Discord-to-web messages by de-duplicating Discord events by message ID before publishing them to the web chat.
    Changed
    * Added a dedicated server notification mode in user notification settings: * all — receive all server notifications * join-leave — receive only join/leave server notifications * off — disable server notifications * Consolidated browser notification defaults and mobile/background Web Push notification defaults into a single notifications: configuration section.
    Migration notes
    In 4.5.3, notification category preferences now use notifications.* as the default configuration source. Previously, browser notification options and mobile/background Web Push options were configured separately under browser-notifications: and web-push.notify-*. These legacy keys are still read for migration and backward compatibility when the new notifications.* values are missing. Use the following block as the new default notification configuration:
    # Browser notifications and mobile/background Web Push notification defaults.
    # These server-side allow limits apply to both notification delivery paths.
    # Users can still narrow these options in Chat settings.
    #
    # Legacy browser-notifications.* and web-push.notify-* keys are still read
    # when notifications.* is missing, but new configs should use this block.
    notifications:
      enabled: true
    
      # true = notify only when the tab/window is hidden, minimized, or not focused.
      only-when-hidden: true
    
      notify-normal-chat: true
      notify-dm: true
      notify-group-chat: true
      notify-mentions: true
      notify-replies: true
    
      # true = allow users to receive server notifications.
      # Users can still choose all, join/leave only, or off in Chat settings.
      notify-system: true
    
      notify-keywords: true
      notify-own-messages: true
      show-message-preview: true
    The following legacy keys are still read only for migration and backward compatibility:
    browser-notifications.*
    web-push.enabled
    web-push.notify-*
    web-push.show-message-preview
    For new installations and updated configs, move notification category preferences into notifications:. The web-push: section should now be used only for Web Push transport settings, such as VAPID keys, subject, notification title, subscription file, and TTL. Existing configs do not have to be rewritten immediately. However, if both notifications.* values and old legacy values are present, the notifications.* values should be treated as the intended configuration. Server owners who want a clean config can replace the old browser notification and Web Push notification preference blocks with the new notifications: block above, then keep only Web Push transport settings under web-push:.
    2 downloads
  17. 4.5.2BlueMapWebChat 4.5.2Jul 4, 2026

    4.5.2

    - Fixed BlueMap web-addon mobile Web Push registration by moving Service Worker registration/subscription work to the parent BlueMap page when the embedded chat runs inside the script-written addon iframe. Standalone chat pages still register directly. - Removed the unnecessary standalone-page requirement for Web Push on supported browsers. iOS/iPadOS still requires launching the site from the Home Screen PWA before Web Push can be enabled. - Fixed Web Push notification click URLs so subscriptions keep the exact page URL where push was enabled, including BlueMap web-addon pages and standalone chat pages. - Added upload.max-total-size-mb to cap total files stored directly in upload.directory; 0 keeps the previous unlimited behavior. - When the upload quota is enabled and a new upload would exceed it, the server deletes the oldest unreferenced uploads first. Files still referenced by chat history, SQLite history, DM/group messages, or preserved pinned messages are not removed. - If quota cleanup cannot free enough space, the upload is rejected with upload_storage_quota_exceeded instead of writing beyond the configured limit. Upgrade notes: - Existing Web Push subscriptions should be turned off and on again from the intended page so the corrected openUrl is saved. - Set upload.max-total-size-mb manually to enable upload-folder quota enforcement; the default is 0 for compatibility.
    2 downloads
  18. 4.5.1BlueMapWebChat 4.5.1Jul 3, 2026
    4.5.1 Fixed Web Push notification click navigation so subscriptions remember the actual page URL where push was enabled, including BlueMap web-addon pages and standalone chat pages. Fixed notification click handling so public chat, reply, keyword, DM, and group notifications can reopen/focus an existing chat page and jump to the target message, thread, or room when available. Fixed mobile Web Push support in BlueMap web-addon mode by registering the Service Worker from the parent BlueMap page instead of the embedded addon iframe. Removed the unnecessary standalone-page requirement for Web Push on supported browsers. iOS/iPadOS still requires the site to be added to the Home Screen as a PWA before Web Push can be enabled. Added parent-page forwarding for Service Worker notification navigation so notification clicks can reach the embedded chat iframe on BlueMap web-addon pages. Fixed minimized chat pill controls so the minimized area only shows the title and restore button. DM, group, notification inbox, login, PIP, and other controls remain available only in the expanded chat window. Added emoji folder moving in the admin emoji manager, including single/multi-select moves, conflict checks, PNG sidecar movement, path validation, and audit logging. Added reply notifications for public replies to the current user's messages. Added a browser-local notification inbox so recent notification-worthy events can be reviewed from the same browser. Improved notification language handling so Web Push subscriptions remember browser language and notification text uses language resources more consistently. Improved chat settings layout so saved-setting controls and notification-related labels are not clipped in the settings modal. Upgrade notes: Existing Web Push subscriptions should be turned off and on again so the corrected open URL and language values are saved. BlueMap web-addon mobile push requires HTTPS and a browser that supports Service Workers, Push API, and Notifications. iOS/iPadOS Web Push requires launching the site from the Home Screen PWA.
    2 downloads
  19. 4.5.0BlueMapWebChat 4.5.0Jul 2, 2026

    4.5.0

    4.5.0 jumps directly from the 4.3.x line because the accumulated changes are larger than a normal patch release. The summary below focuses on the major changes from 4.3.0 to 4.5.0.
    Group chat
    - Added optional web group-chat rooms on top of the 4.3.0 direct-message system. - Supports public/private rooms, optional room passwords, invitations, unread badges, hidden-room restore, member management, and room management actions. - Group chat uses its own SQLite-backed storage and retention settings, and remains disabled by default because it stores multi-user private messages.
    Metadata-only private chat administration
    - Added private-chat-super-admins for metadata-only DM/group review. - Super admins can review room/thread titles, participants, message counts, approximate storage size, retention status, locks, exclusion flags, cleanup previews, and deletion controls without viewing message bodies. - Added session locks, auto-delete exclusions, retention-remaining displays, cleanup previews, and full-session deletion for DM/group sessions.
    Notifications and mobile Web Push
    - Added browser/system notifications for open web chat pages, with per-browser user preferences and server-side allow limits. - Added background/mobile Web Push using Service Worker subscriptions, VAPID keys, stored subscriptions, notification type filters, and a Web Push test action. - Documented HTTPS/PWA requirements, iOS/iPadOS limitations, VAPID subject guidance, and the fact that browser/OS spam warnings cannot be disabled by the plugin.
    Theme, layout, and chat settings
    - Reworked public chat, DM, group chat, pinned-message, and admin metadata rows for more consistent wrapping, clipping, and · separator behavior. - Scoped chat font, text color, UI-meta color, shadow, message background, and input background settings to real chat-content areas only, instead of applying them to settings and management UI. - Grouped chat settings into language/theme, window, font, and notification areas; optional sections are collapsed by default and the collapsed/open state is saved locally. - The saved-chat-settings action area stays visible instead of becoming another collapsible section. - Improved light/dark/system/high-contrast control visibility, color swatch borders, settings scrollbar placement/style, detached modal styling, standalone viewport sizing, toasts, minimized mode, and DM/group hide button alignment. - Added browser-local setting presets for visual chat settings, window size/position, resize lock, minimized state, language, notification toggles, and related browser-local preferences.
    Standalone, HTTPS, and resource loading
    - Fixed standalone chat.js bootstrap so the embedded inner application is available and does not fail with BMWC_EMBEDDED_INNER_TEXT is not defined. - Fixed standalone manifest URL generation so /bmwc/chat serves its manifest from the standalone route. - Improved API base handling for direct HTTP, same-domain HTTPS reverse proxy, standalone pages, uploads, and emoji URLs. - Refreshed Caddy/Nginx and configuration documentation around same-domain /bmwc/api and /bmwc/chat deployments.
    Retention, cleanup, upload safety, and audit logs
    - Improved DM/group retention cleanup so decisions are based on surviving message timestamps and respect locked or auto-delete-excluded sessions. - Improved upload cleanup so files still referenced by public chat history, pinned messages, DM threads, or group rooms are protected before deletion. - Added optional append-only daily audit logs under audit/YYYY-MM-DD.log for management-impacting actions such as command execution, administrative /bmchat commands, session flag changes, forced DM/group deletion, message deletion, pin management, emoji management, and history clearing.
    Configuration, language files, and upgrade notes
    - Added the group-chat, private-chat-super-admins, audit, browser-notifications, and web-push configuration blocks. - Changed the default discordsrv.game-to-discord-format to {sender}: {message}. - Browser notification and Web Push notify-* values are server-side allow limits; users can still choose their own browser-local notification preferences within those limits. - Added or refreshed UI language strings for group chat, metadata-only administration, retention status, hidden-room actions, admin confirmations, notification controls, and Web Push status/test messages in en-US, ko-KR, ja-JP, and zh-CN. - Existing config.yml files are not rewritten automatically. Merge the new blocks from the default config or regenerate the config after backing up your current settings. - If group chat is enabled, include group-messages.db, group-messages.db-wal, and group-messages.db-shm in backup plans. - Message bodies remain unavailable from the super-admin metadata view by design.
    4.5.0 - documentation and upgrade guidance
    - Added an upgrade recommendation for 4.5.0: because many options changed between 4.3.x and 4.5.0, it is usually safer to back up the old config.yml, regenerate a fresh one, and then copy custom settings back manually. - Clarified that newly generated configs start with enabled: false, so regenerating config.yml does not start web/chat services, cleanup tasks, or private-message/group-chat storage until the administrator reviews settings and sets enabled: true. Existing history databases, uploads, emojis, audit logs, language files, and VAPID key files are not deleted by config regeneration. Example migration flow:
    # Stop the Minecraft server first.
    cd plugins/BlueMapWebChat
    cp config.yml config.yml.4.3-backup
    # Optional: keep a full plugin-data backup too.
    # cp -a . ../BlueMapWebChat-backup-4.3
    rm config.yml
    # Start the server once. The new config.yml is generated with enabled: false.
    # Review and merge your custom values, then set enabled: true and restart or /bmchat reload.
    Key 4.5.0 config blocks to review or merge:
    enabled: false
    
    private-chat-super-admins: []
    
    audit:
      enabled: true
      directory: "audit"
    
    standalone-web:
      enabled: false
      path: "/chat"
      app-name: "Web Chat"
      app-short-name: "Web Chat"
      api-base-url: ""
    
    direct-message:
      enabled: false
      storage: "auto"
      retention-days: 0
      max-messages-per-thread: 0
      max-message-length: 500
      allow-web-send: true
      allow-game-send: true
      notify-on-login: true
      notify-on-message: true
      web-unread-badge: true
      confirm-hide: true
      jsonl-file: "direct-messages.jsonl"
      sqlite-file: "direct-messages.db"
    
    group-chat:
      enabled: false
      allow-web-send: true
      allow-public-rooms: true
      allow-room-passwords: true
      confirm-leave: true
      confirm-hide: true
      retention-days: 30
      max-messages-per-room: 1000
      max-message-length: 500
      max-rooms-per-user: 20
      max-members-per-room: 50
      max-room-name-length: 32
      invite-expire-hours: 72
      sqlite-file: "group-messages.db"
    
    browser-notifications:
      enabled: true
      only-when-hidden: true
      notify-normal-chat: true
      notify-dm: true
      notify-group-chat: true
      notify-mentions: true
      notify-system: true
      notify-keywords: true
      notify-own-messages: true
      show-message-preview: true
    
    web-push:
      enabled: true
      vapid-public-key: ""
      vapid-private-key: ""
      subject: "mailto:[email protected]"
      notification-title: ""
      subscriptions-file: "web-push-subscriptions.jsonl"
      ttl-seconds: 300
      notify-normal-chat: true
      notify-dm: true
      notify-group-chat: true
      notify-mentions: true
      notify-system: true
      notify-keywords: true
      notify-own-messages: true
      show-message-preview: true
    
    discordsrv:
      append-web-emoji-links: true
      append-game-emoji-links: true
  20. 4.3.0BlueMapWebChat 4.3.0Jun 29, 2026

    4.3.0

    Startup safety
    - Added a top-level master switch for newly generated configs. New config.yml files start disabled so BlueMapWebChat only creates configuration files until the administrator reviews settings and opts in. - Existing configs without the enabled key are treated as enabled for upgrade compatibility.
    # Master switch for BlueMapWebChat.
    # New generated configs default to false so the plugin creates config.yml first
    # without starting web/chat services or cleanup tasks. /bmchat reload remains available.
    # Existing configs that do not have this key are treated as enabled for upgrade compatibility.
    enabled: false
    When enabled: false, the plugin does not start the HTTP server, web addon installer, chat listeners, Discord bridge, upload/emoji directory initialization, direct-message store, or cleanup tasks. Set enabled: true after reviewing retention/storage/exposure settings.
    Thread-style direct messages
    - Changed the in-game DM sent confirmation to use the new command.dmSentEcho key so existing language files still show the sent body (to: {player} {message}). - Added optional 1:1 direct message threads for linked/known Minecraft players. - Direct message targets are limited to players with a stored UUID/name, usually from joining the server at least once or linking a web account. - Messages are stored by UUID and displayed as display name (real account name) where both values are available. - A->B and B->A messages always use the same thread by using a deterministic pair of UUIDs. - Added a web message-box button with unread badge, player search, thread list, conversation view, and reply-style message sending inside each 1:1 thread. - Added /bmchat dm <player> <message> and /bmchat dm list for game-side direct message sending and unread/thread summary checks. - Added per-user unread tracking, web SSE direct-message refresh events, join-time unread notices, and online recipient notices. - Direct-message storage uses an independent private-message store from public chat history, so public chat retention and private-message retention can be managed independently. - Added direct-message.storage, direct-message.jsonl-file, and direct-message.sqlite-file. With storage: "auto", DM storage follows chat.history-storage: "jsonl"; otherwise it uses SQLite. - Added direct-message.confirm-hide to control whether the web message box asks for confirmation before hiding a DM message. - Shows direct-message.retention-days next to the DM message-box title. 0 is displayed as no time limit. - Added shared :emoji + Tab autocomplete for both public chat and direct-message input fields. - Direct-message sender/time meta now uses the same display-name/time toggle behavior as public chat and removes the extra dot separator. New direct message configuration:
    direct-message:
      # Thread-style 1:1 direct messages.
      # Only players that have joined or linked at least once and have a stored UUID/name can be selected.
      # Messages are stored by UUID, while the UI shows display name (real account name).
      # This feature uses its own private message store and is disabled by default because it stores private messages.
      enabled: false
    
      # auto = follow chat.history-storage when it is jsonl, otherwise use sqlite.
      # sqlite = recommended database storage.
      # jsonl = append-only JSONL file storage, useful when chat history also uses JSONL.
      storage: "auto"
    
      # 0 = no time limit. A positive value is shown next to the DM window title and
      # physically removes old DM messages after that many days.
      retention-days: 0
    
      # 0 = unlimited by count. When set, only the newest N messages are kept per 1:1 thread.
      max-messages-per-thread: 0
    
      # 0 = unlimited. Recommended: 300-1000.
      max-message-length: 500
    
      # Allow sending DMs from the web UI.
      allow-web-send: true
      # Allow sending DMs from /bmchat dm in game.
      allow-game-send: true
    
      # Notify players about unread DMs when they join.
      notify-on-login: true
      # Notify online players immediately when a new DM arrives.
      notify-on-message: true
      # Show unread DM count badge in the web UI.
      web-unread-badge: true
    
      # Ask before hiding a DM message from the web message box.
      confirm-hide: true
    
      # JSONL file for private 1:1 message threads when storage is jsonl. Relative paths are stored under the plugin data folder.
      jsonl-file: "direct-messages.jsonl"
      # SQLite file for private 1:1 message threads when storage is sqlite. Relative paths are stored under the plugin data folder.
      sqlite-file: "direct-messages.db"
    Upgrade note: - Existing config.yml files are not rewritten automatically. To use direct messages after upgrading, merge the direct-message block above into your existing config. - Because 4.2.0 and 4.3.0 include large configuration changes, if manual merging is difficult, stop the server, back up and delete plugins/BlueMapWebChat/config.yml, start the server once to regenerate it, and then reapply your custom settings manually. - New generated configs now start with top-level enabled: false. This prevents web/chat services and cleanup tasks from running until the administrator reviews the generated config and sets enabled: true. - If direct-message.storage: "auto" and chat.history-storage: "jsonl", DMs are stored in direct-messages.jsonl. Otherwise auto uses SQLite. - If direct messages are enabled with SQLite storage, include direct-messages.db, direct-messages.db-wal, and direct-messages.db-shm in backup plans. - If direct messages are enabled with JSONL storage, include direct-messages.jsonl in backup plans.
    1 download
  21. 4.2.0BlueMapWebChat 4.2.0Jun 28, 2026

    4.2.0

    SQLite history storage
    - Added SQLite chat history storage and made chat.history-storage: "sqlite" the recommended/default backend for new configurations. - Kept jsonl and memory history-storage modes for compatibility. - Unified history retention settings so chat.history-size and chat.history-retention-days are used by memory, jsonl, and sqlite. - Removed the old chat.history-persist and chat.history-persist-retention-days settings. Persistence is now selected only by chat.history-storage. - Added chat.history-sqlite-file to control the SQLite DB file path. The default is history.db in the plugin data folder. - Added chat.history-sqlite-migrate-jsonl; when enabled, an empty SQLite DB imports the existing legacy chat.history-file JSONL log once. - Moved history paging, newer/older history loading, reply-jump lookup, deletion, pinned-message target lookup, retention cleanup, and search lookup to SQLite-backed queries when SQLite storage is enabled. - Excluded SQLite messages marked as hidden from normal history, around-message lookup, and search results. - Made SQLite writes asynchronous so web messages are broadcast to connected web clients immediately without waiting for DB insert/prune work. - Reduced normal-send pruning overhead while keeping retention cleanup active in the background. Changed history configuration:
    chat:
      # History storage backend.
      # sqlite = recommended persistent storage for long-lived chat history and search.
      # jsonl = legacy single-file persistence using history-file.
      # memory = keep only in-memory history for the current server session.
      history-storage: "sqlite"
      # Shared by memory/jsonl/sqlite. 0 = unlimited by count.
      history-size: 0
      # Shared by memory/jsonl/sqlite. 0 = unlimited by age.
      history-retention-days: 5
      # JSONL history file. Relative paths are stored under the plugin data folder.
      history-file: "history.jsonl"
      # SQLite DB file. Relative paths are stored under the plugin data folder.
      history-sqlite-file: "history.db"
      # Import history-file into SQLite once when the DB is empty.
      history-sqlite-migrate-jsonl: true
    Removed history configuration:
    chat:
      history-persist: false
      history-persist-retention-days: 5
    Message search
    - Added the /history/search API for searching message text, sender names, and stored display names, with optional date/time, sender, source, and system/event filters. - Added the in-chat message search UI with an options section for date/time ranges, sender filtering, source filtering, and system/event inclusion, plus result-click jump using the existing history-around navigation. - Moved the search button out of the crowded message input row and into the floating chat-panel area. - Enlarged the search modal and added a scrollable results pane for easier review of long result sets. - Applied chat font and theme variables to the search modal, inputs, buttons, status text, and result items so light/dark chat themes remain readable. - Isolated search modal keyboard, wheel, touch, and pointer events from the BlueMap map while preserving search, close, and result-click handling. - Localized i18n-backed system/event messages in search results and included the requested web UI language in search matching, so translated system messages can be found by their displayed text. - Added search.enabled and search.result-limit settings for disabling search and controlling the search result count. - search.result-limit is the only search result count limit. There is no separate search-result maximum setting or internal hard-coded maximum. Very large values are accepted but may be expensive. New search configuration:
    search:
      # Enable the web message search button and /history/search API.
      enabled: true
      # Number of search results returned by the web UI and /history/search API.
      # This is the only search result count limit. There is no separate internal maximum.
      # Setting this to 2000 returns up to 2000 results; setting it to 10 returns up to 10.
      # Very large values such as 10000 or 100000 are accepted, but can make searches slow,
      # increase response size, and add significant CPU, memory, and database load.
      # Recommended: 50-200 for normal use. Raise only when you need large admin searches.
      result-limit: 50
    Upgrade notes
    - Existing config.yml files are not rewritten automatically. To use SQLite/search after upgrading from 4.1.1, add or merge the actual configuration blocks shown above. - Because 4.2.0 changes history and search configuration significantly, the safest upgrade path is to stop the server, back up the existing config.yml, delete config.yml, start the server once to regenerate it, and then reapply your custom settings manually. - Back up history.jsonl, history.db, history.db-wal, and history.db-shm before testing migration, changing storage backends, or editing the database manually.
    3 downloads
  22. 4.1.1BlueMapWebChat 4.1.1Jun 27, 2026

    4.1.1

    Pinned messages and player display
    - Fixed collapsed pinned-message summaries so raw Minecraft color codes such as &7, §7, and &#RRGGBB do not leak into the compact pinned bar or tooltip. - Ensured player-display.mode and player-display.strip-colors are applied consistently to Minecraft-origin chat, web-authenticated player names, stored display-name fallbacks, pinned messages, and web rendering. - Stripped raw Minecraft color codes from Discord output even when sender-name colors are preserved for the web UI.
    Discord relay
    - Improved game-side custom emoji URL appending for Discord, including augmentation of DiscordSRV native Minecraft-to-Discord relay messages when possible. - Removed the hard-coded reply arrow from Discord reply preview lines; the reply marker now applies only to the actual replied message line.
    Reply relay and game chat output
    - Added separate game-side reply preview and reply prefix settings. - Ensured reply.game-preview.format and reply.game-prefix.text translate Minecraft legacy & color codes before broadcasting to game chat. - Changed mixed token/URL game-chat fallback to keep a single plain Minecraft chat line instead of repeating URL reference lines. - Fixed image-only upload URLs in Minecraft chat so normal sender labels before https:// are no longer mistaken for custom emoji tokens, preserving clickable URL output.
    History loading and edge notices
    - Added scrollbar-drag and touch-scroll handling for the bottom-edge no-more-history notice.
    4 downloads
  23. 4.1.0BlueMapWebChat 4.1.0Jun 27, 2026

    4.1.0

    Pinned message ordering
    - Added manual pinned-message ordering with up/down controls in the pinned-message management UI. - Added the /admin/move-pin API and persistent sortOrder storage while keeping backward compatibility with existing pinned messages.
    Custom emoji relay compatibility
    - Preserved custom emoji token text by default for game-side emoji plugins such as ImageEmojis. - Kept link and label game-link modes for servers that do not use a game-side emoji plugin, and added an explicit preserve mode for token-preserving behavior. - Removed ImageEmojis-specific glyph/resource-pack conversion paths from BM Web Chat; token text is now the canonical relay format. - Improved game-to-web original-message capture with optional Paper/Purpur AsyncChatEvent support and Bukkit/Spigot fallback handling.
    Custom emoji sidecars and WebP support
    - Generalized PNG sidecar generation for GIF/JPG/JPEG/WEBP custom emoji files whenever custom emoji support is enabled. - Added WebP ImageIO support through TwelveMonkeys ImageIO so WebP custom emoji files can generate PNG sidecars reliably. - Kept the web UI rendering the original uploaded emoji file so animated GIFs remain animated in the browser.
    Discord relay
    - Kept optional web-to-Discord custom emoji image URL appending for BM Web Chat emoji tokens, disabled by default. - Added optional game-to-Discord relay with game-side custom emoji URL appending, disabled by default to avoid duplicate DiscordSRV Minecraft chat relay. - Fixed Discord reply relay so discordsrv.reply-relay.enabled, prefix-enabled, and preview-enabled are respected independently from game-side reply settings. - Kept Discord-to-web image attachment relay and Minecraft legacy color-code stripping for Discord output.
    History loading and edge notices
    - Improved top and bottom edge history loading retries when older or newer messages are still available. - Added a bottom-edge "No more messages to display" toast after repeated extra-scroll attempts at the latest loaded message while keeping newer-history retry requests immediate. - Kept the existing top-edge no-more-history notice for the oldest loaded history edge.

    4.0.1

    Discord relay fixes
    - Fixed Discord -> web image attachment relay by appending Discord image attachment URLs to the web message so the existing media preview system can render them. - Stripped Minecraft legacy formatting codes from BM Web Chat's web -> Discord output, including standard codes such as §a, §l, §r and RGB sequences such as §x§8§a§b§4§f§e. - Added optional Discord-side image preview links for BM Web Chat custom emoji tokens such as :pack/name:. - Added discordsrv.append-web-emoji-links and discordsrv.max-emoji-links-per-message.
    Reply relay fixes
    - Changed game-side reply labeling to render the normal web -> game relay line first and then replace the source label with the configured reply label. - Changed reply relay output from [Web] Player: message to [Reply] Player: message by default. - Applied the same reply preview and reply label behavior to web -> Discord relay output.
    Release cleanup
    - Bumped the project version to 4.0.1. - Refreshed default configuration comments, README files, configuration references, and i18n documentation for the 4.0.1 release. - Documented the Discord attachment, color-code cleanup, and custom emoji link behavior.
    4 downloads
  24. 4.0.0BlueMapWebChat 4.0.0Jun 25, 2026

    4.0.0

    Replies, history, and scrolling
    - Fixed Paper game-to-web chat capture so web relay uses the player's original typed message, preserving :pack/name: emoji tokens before any game-side emoji plugin renders them in game. - Added web chat replies with referenced-message previews. - Added jump-to-replied-message behavior, including loading older history around the target message when needed. - Improved virtual scrolling around media-heavy histories and reply jumps. - Added a safe media-preview wrapper so preview parser errors cannot break message rendering or virtual scrolling.
    Custom emoji and game-link cleanup
    - Changed emoji.game-link.plain-broadcast-with-urls to split mixed emoji/URL messages: the original line stays plain for game-side emoji rendering, and each URL is repeated on a separate clickable reference line. - Simplified web-to-game custom emoji relay to two modes: link and label. - Removed the misleading ImageEmojis-specific game-link subsection from the default config and documentation. - Moved plain-broadcast-with-urls, default-pack, and aliases directly under emoji.game-link. - Clarified that BM Web Chat sends token text only; game-side emoji rendering is handled independently by external plugins that know the same token names. - Fixed missing Java helper definitions after the resource-pack cleanup so game-link labels and game-side reply previews compile again. - Fixed URL-before-custom-emoji rendering so https://example.com :pack/name: is linkified and the emoji token still renders; the frontend now avoids treating URL scheme colons as emoji token starts. - Added the admin custom emoji manager for creating, uploading, renaming, and deleting emoji packs/files. - Added emoji storage usage/limit display and upload warnings when the total emoji size limit is exceeded. - Added same-folder PNG sidecars for GIF/JPG/JPEG/WEBP custom emoji files for compatibility with game-side emoji plugins that only read PNG files. - Kept the web UI on the original uploaded emoji file so animated GIFs remain animated in the browser. - Hid PNG sidecars from the web emoji catalog when a same-base non-PNG original exists. - Improved emoji picker resizing, scrollbar spacing, and wheel-row snapping.
    Media previews
    - Fixed YouTube embed Error 153 by using strict-origin-when-cross-origin referrer policy and an embed origin parameter. - Added YouTube Shorts handling through the normal YouTube preview path, with a vertical player and loop parameters. - Added optional TikTok and X/Twitter social embeds behind disabled-by-default provider switches. - TikTok now uses the official player/v1 iframe with description=0 and music_info=0 to avoid variable-height caption/music sections creating inner scrollbars. - Added an external "Open on TikTok" link for full TikTok post details. - Kept social embeds click-to-load by default so third-party content loads only after the user opens a preview.
    UI, settings, and localization
    - Added UI text color, input background, theme, and text-shadow options. - Applied font settings to collapsed pinned-message areas. - Added latest-message and no-more-history notices. - Added localized media/social preview labels for English, Korean, Japanese, and Simplified Chinese.
    Reliability and cleanup
    - Improved SSE reconnect and post-reconnect config/history resynchronization. - Guarded repeated Enter sends immediately after reconnect. - Reduced stale web-asset problems by keeping generated asset version tokens. - Removed project-specific examples from default configuration and documentation. - Aligned bundled config, README, docs, and proxy override examples so web-addon appears before standalone-web. - Removed game-to-web glyph reverse-conversion paths; game-to-web relay now depends on original chat text capture instead of glyph lookup. - Simplified PNG sidecar behavior so it is a general compatibility helper for game-side emoji plugins.
    Reply and history navigation
    * Added web chat reply support: hover a message to reply, send with a referenced-message preview, and click the preview to jump to the original message. * Added /history/around lookup so replies to older messages can load and render the target message neighborhood directly. * Fixed reply fallback compilation and hover-only reply button visibility after virtual-scroll action synchronization.
    Admin emoji manager improvements
    * Added admin custom emoji rename support for emoji folders and individual emoji files while preserving file extensions. * Added emoji storage usage/limit display options and localized warnings when uploads exceed the configured total emoji storage limit. * Improved admin emoji upload error handling so HTTP 413 JSON responses are shown as user-visible alerts. * Refined the admin emoji manager layout with clearer folder selection, emoji counts, selected-file display, select-all/delete-selected actions, and better button spacing. * Simplified emoji item cards by removing secondary path lines, centering display names, and preventing long names from squeezing action buttons.
    URL and reverse-proxy behavior
    * Reworked public URL resolution for direct HTTP, BlueMap addon mode, standalone mode, uploads, and custom emoji files. * Made web-addon.api-base-url the primary public API base for reverse-proxy deployments. * Made empty standalone-web.api-base-url, upload.public-base-url, and emoji.public-base-url consistently follow the active public API base. * Kept compatibility with explicit legacy values such as /bmwc/api, /bmwc/api/uploads, and /bmwc/api/emojis. * Documented absolute paths, full resource paths, relative shorthand values resolved through http.cors-origin, and full https://... URLs consistently. * Reordered the default config so web-addon appears before standalone-web, making the reverse-proxy API base setting easier to find.
    Theme and user settings
    * Improved light/system-light theme behavior so panel, modal, button, input, emoji/admin surfaces, and surrounding areasalone-web`, making the reverse-proxy API base setting easier to find. * Improved light use the same user-selected background and text-color variables as dark theme. * Changed light-theme panel, modal, button, and emoji resize-handle backgrounds from gradients to solid colors so custom colors render cleanly. * Allowed decimal pixel values for user settings where fractional CSS pixels are safe, including font size and custom text-shadow X/Y/blur controls.
    Documentation and localization
    * Updated config.yml comments, README files, HTTPS proxy guides, standalone notes, upload/security notes, and proxy example overrides to match the unified URL behavior. * Updated bundled language files and documentation variants for the new admin emoji, URL, reply, and settings behavior. * Verified bundled translation YAML files for syntax and key consistency.
    Custom emoji system
    * Added server-managed custom emoji support. * Added an admin emoji manager for creating emoji packs, uploading emoji files, renaming, deleting, and refreshing emoji lists from the web UI. * Added support for PNG, JPG, JPEG, GIF, and WebP custom emoji uploads. * Preserved Unicode emoji filenames where possible, allowing Korean, Unicode, and spaced emoji names to resolve correctly. * Added custom emoji pack support through subfolders under the emoji directory. * Added configurable emoji render size, picker size, per-file size limit, total storage limit, and per-message emoji token limit. * Increased custom emoji size clamps up to 1024px for servers that want oversized emoji previews. * Improved emoji sorting, empty-pack display, tooltips, and admin emoji list usability for large emoji collections.
    Emoji picker improvements
    * Added an emoji picker button next to the attachment button. * Added a draggable emoji picker resize handle between the message list and input area. * Remembered emoji picker height per browse
    4 downloads
  25. 3.1.0BlueMapWebChat 3.1.0Jun 20, 2026

    3.1.0

    UI and theme settings
    - Added a theme selector to Chat settings. - Improved contrast for buttons, surfaces, and input fields in the light theme. - Added a separate UI text color setting for labels such as role badges, source badges, timestamps, controls, and placeholders. - Added text-shadow presets: none, auto, dark, light, and custom. - Replaced raw custom text-shadow input with color picker and slider controls. - Applied font settings to collapsed and expanded pinned-message areas.
    Navigation and history UI
    - Added a jump-to-latest-message button when viewing older chat history. - Added a "No more messages to display" notice at the top of history when there are no older messages left. - Made the history-end notice and jump-to-latest button follow the active theme colors instead of user-overridden UI text colors.
    Message deletion and moderation actions
    - Prevented duplicate delete confirmation handling. - Refreshed deleted messages immediately after deletion. - Improved scroll anchoring so deleting a message is less likely to pull the view down to the latest messages.
    Reconnection and sending
    - Added automatic SSE reconnection after a server restart. - Resynchronized config and the latest history page after reconnection. - Prevented duplicate sends from repeated Enter presses immediately after reconnection.
    Media previews and link insertion
    - Changed the default media preview max height to 720px. - Documented that unlimited or excessively large media preview heights can cause visible scroll jumps with virtual scrolling. - Capped image, video, and YouTube previews so they do not exceed the current chat viewport even when the configured max height is very large or unlimited. - Added trailing spaces when inserting multiple media links so preview detection can parse each link separately.
    HTTPS proxy documentation
    - Expanded the Caddy HTTPS setup guide. - Expanded the nginx + Certbot HTTPS setup guide. - Added installation examples under examples/caddy and examples/nginx.
    5 downloads
  26. 3.0.0BlueMapWebChat 3.0.0Jun 19, 2026
    This version is based on the internal development build and includes the current stable feature set.
    8 downloads

Similar projects

Plugin →