KOKOTO WebChat
5.3.3Multi-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
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 installplugins/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 underdocs/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 showsrelease-version: "5.3.3"for the running KWC product release whileconfig-version: "5.3.0"remains the configuration-schema/migration marker.release-versionis 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: originalcontinues 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 Forge66.0.3with Java 25 and the existingcompat26source 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 duplicatedweb.receipt.readentry 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 asremote~server~UUIDare 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 aszip END header not foundwithout clearing the entire Gradle cache. - YouTube virtual-scroll autoplay:preview.youtube-autoplay-on-opennow 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, mobilevisualViewportresize/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 deleteapply 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 becausemaxTouchPoints > 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-daysis now an actual age limit rather than being extended indefinitely by ordinary Public/DM/Group message references. Withpinned.preserve-uploads: true, attachments referenced by public or Group pinned-message snapshots remain protected. Upload and external-media cache rete5.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 anddocs/en,docs/ko,docs/ja, anddocs/zh-CNnow 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 wikidefaults 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;0means 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 browserFilesnapshots 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 acrossVisualViewport,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 localizedhistory.endfeedback 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-scopedremote~server~UUIDidentity 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,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 gamecan 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 gameand 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 permitssend.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 HTMLhidden, 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. Interactivebutton, link, androle="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 filterand/kchat settingstop-level dispatch paths and added the missinggamesurface to Bukkit command usage metadata.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 withmoderation.allow-user-self-message-delete=false. -moderation.self-message-delete-window-minutescan optionally restrict how long after sending a message ordinary users may delete it.0means 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 supportsoff,math,text, andmixedmodes. - Math CAPTCHA supportseasy,normal, andharddifficulty 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 thedeletecapability for cross-server DM deletion. - Added thegamecapability for remote Chat Event routing. - Added theprofilecapability 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 dedicatedserver-relay.sources.eventpolicy 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, including0. - The Display Name / R5.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 wherechat.jscould initialize before the generatedconfig.js, freeze the fallback site-root/apiURL, 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.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 isnotifications.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-accountuses0for unlimited or a positive retained-item limit. Account storage uses KWCuser-preferencesand 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 advertisespublic,dm,read,reaction,reaction-authority, andtypingcapabilities. 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. - Addedchat.conversation-archive.enabled(defaulttrue). When disabled, archive API routes are not registered,conversation-archives.dbis 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), andmax-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 orchat.typing-indicator.*inconfig.yml; defaults are Open chat OFF, DM ON, and Group chat ON.chat.typing-indicator.user-display-controldefaults 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 authcommand. 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-Forclient-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.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 morehttp://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 groupshared-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-hophttp://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 resetsserver-relay.enabled: falseinstead of guessing new trust groups. Operators must explicitly rebuild reciprocal v2 groups before re-enabling relay. -/kchat reloadrechecks 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 emptygroups: []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 keepingemoji.message-token-limit: 0as 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. - Whencommands.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 Modrinthkokoto-webchatfirst and falls back to the existingbluemapwebchatpublication; a warning is emitted only when both sources fail.Configuration and migration
- Added EN/KO/JA/ZHconfig.ymlcomment templates.ui.languageselects 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 now5.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)./kchatand/kcare the canonical commands,/chatis 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. - Addedupload.filename-mode: originalwith 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.0config.yml: existing operator values are preserved while current settings, comments and layout are rebuilt consistently.5.0.0_auto_migrationkeeps same-version reconciliation enabled; exact5.0.0disables 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.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 hiddenmultiplefile input; when the picker closes, BlueMapWebChat immediately copies the selectedFileList, 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. PaperAsyncChatEventremains reflection-detected with BukkitAsyncPlayerChatEventas 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. Knownconfig.ymlblocks 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 themessage-tokenssection. Existing chat, DM, group-chat, relay, emoji, and upload defaults are otherwise unchanged. The configuration review marker changes to:
Existing setting values are not overwritten. On startup/reload, known top-levelconfig-version: "4.7.0"config.ymlblocks 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 writesconfig-reference-4.7.0.ymlas 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.ymlstill contains the concise missing/changed settings and review marker; empty maps such asmessage-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 againstconfig-reference-4.7.0.yml. Unchanged lines are omitted; each side prints the file name, a separateLineorLinesfield, and then only the differing text. Reference-only blocks separately show where to insert them in the current config. Default token configuration:
Aliases are written without the surrounding colons in config; users type them asmessage-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: {}: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.4.6.3BlueMapWebChat (BMWC) 4.6.3Aug 13, 2026 4.6.3
- Added optional read-only administrator group-chat content audit. Explicit accounts listed inprivate-chat-super-adminscan open group-chat message bodies from the administrator metadata view only whengroup-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 asadmin.group-audit-readwith 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. Existingconfig.ymlsetting 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:
The configuration review marker also changes to:group-chat: admin-audit: enabled: false
Both gates are required to open group-chat bodies:config-version: "4.6.3"
The existingprivate-chat-super-admins: - "ExactMinecraftNameOrUUID" group-chat: admin-audit: enabled: truedirect-message.admin-audit.enabledswitch remains independent and continues to control only DM body auditing.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 fromname@server-idor 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 localizedSendingstate orFailed · Retryaction 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 (Unreadin 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"4.6.1BlueMapWebChat 4.6.1Aug 7, 2026 4.6.1
- Fixed cross-server direct messaging from the web interface. This includes exactserver-id + player UUIDtargeting, shared game/web sessions, destination-server delivery, remote DM search, message-metadata shortcuts, game/bmchat dmandname@server-idwhisper 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. Onlyupdate-check.enabledis configurable; timing, channel, permission behavior, and links use built-in defaults. - Reorganized the bundledconfig.ymlinto clearly labeled functional groups without renaming existing keys or changing their defaults. The only newly exposed update-check setting is the singleupdate-check.enabledswitch 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:
The configuration review marker also changes to:update-check: enabled: true direct-message: admin-audit: enabled: false
To enable DM body auditing, both the allowlist and the audit switch are required:config-version: "4.6.1"
Ordinary ADMIN or MODERATOR roles do not gain DM body access automatically. The audit view is read-only.private-chat-super-admins: - "ExactMinecraftNameOrUUID" direct-message: admin-audit: enabled: true4.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.4.5.5BlueMapWebChat 4.5.5Jul 21, 2026 4.5.5
- Expandedconfig.ymlinline 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 customwindow.openpath runs. - Added an optional Spigot-compatible in-game sender-name hover for web-to-Minecraft chat relays. Whenplayer-display.modeisdisplay-nameorcustom-nameand 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. - Addedchat.game-name-hover.enabledandchat.game-name-hover.textsettings. 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}"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 asnotifySystemMode=allafter the user changes the current device tojoin-leaveoroff. - 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 nativealert(), 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.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 anauth-expiredSSE 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 singlenotifications:configuration section.Migration notes
In 4.5.3, notification category preferences now usenotifications.*as the default configuration source. Previously, browser notification options and mobile/background Web Push options were configured separately underbrowser-notifications:andweb-push.notify-*. These legacy keys are still read for migration and backward compatibility when the newnotifications.*values are missing. Use the following block as the new default notification configuration:
The following legacy keys are still read only for migration and backward compatibility:# 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
For new installations and updated configs, move notification category preferences intobrowser-notifications.* web-push.enabled web-push.notify-* web-push.show-message-previewnotifications:. Theweb-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 bothnotifications.*values and old legacy values are present, thenotifications.*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 newnotifications:block above, then keep only Web Push transport settings underweb-push:.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. - Addedupload.max-total-size-mbto cap total files stored directly inupload.directory;0keeps 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 withupload_storage_quota_exceededinstead 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 correctedopenUrlis saved. - Setupload.max-total-size-mbmanually to enable upload-folder quota enforcement; the default is0for compatibility.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.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
- Addedprivate-chat-super-adminsfor 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, VAPIDsubjectguidance, 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 standalonechat.jsbootstrap so the embedded inner application is available and does not fail withBMWC_EMBEDDED_INNER_TEXT is not defined. - Fixed standalone manifest URL generation so/bmwc/chatserves 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/apiand/bmwc/chatdeployments.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 underaudit/YYYY-MM-DD.logfor management-impacting actions such as command execution, administrative/bmchatcommands, session flag changes, forced DM/group deletion, message deletion, pin management, emoji management, and history clearing.Configuration, language files, and upgrade notes
- Added thegroup-chat,private-chat-super-admins,audit,browser-notifications, andweb-pushconfiguration blocks. - Changed the defaultdiscordsrv.game-to-discord-formatto{sender}: {message}. - Browser notification and Web Pushnotify-*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 inen-US,ko-KR,ja-JP, andzh-CN. - Existingconfig.ymlfiles 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, includegroup-messages.db,group-messages.db-wal, andgroup-messages.db-shmin 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 oldconfig.yml, regenerate a fresh one, and then copy custom settings back manually. - Clarified that newly generated configs start withenabled: false, so regeneratingconfig.ymldoes not start web/chat services, cleanup tasks, or private-message/group-chat storage until the administrator reviews settings and setsenabled: true. Existing history databases, uploads, emojis, audit logs, language files, and VAPID key files are not deleted by config regeneration. Example migration flow:
Key 4.5.0 config blocks to review or merge:# 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.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: true4.3.0BlueMapWebChat 4.3.0Jun 29, 2026 4.3.0
Startup safety
- Added a top-level master switch for newly generated configs. Newconfig.ymlfiles start disabled so BlueMapWebChat only creates configuration files until the administrator reviews settings and opts in. - Existing configs without theenabledkey are treated as enabled for upgrade compatibility.
When# 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: falseenabled: 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. Setenabled: trueafter reviewing retention/storage/exposure settings.Thread-style direct messages
- Changed the in-game DM sent confirmation to use the newcommand.dmSentEchokey 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 asdisplay 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 listfor 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. - Addeddirect-message.storage,direct-message.jsonl-file, anddirect-message.sqlite-file. Withstorage: "auto", DM storage followschat.history-storage: "jsonl"; otherwise it uses SQLite. - Addeddirect-message.confirm-hideto control whether the web message box asks for confirmation before hiding a DM message. - Showsdirect-message.retention-daysnext to the DM message-box title.0is 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:
Upgrade note: - Existingdirect-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"config.ymlfiles are not rewritten automatically. To use direct messages after upgrading, merge thedirect-messageblock 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 deleteplugins/BlueMapWebChat/config.yml, start the server once to regenerate it, and then reapply your custom settings manually. - New generated configs now start with top-levelenabled: false. This prevents web/chat services and cleanup tasks from running until the administrator reviews the generated config and setsenabled: true. - Ifdirect-message.storage: "auto"andchat.history-storage: "jsonl", DMs are stored indirect-messages.jsonl. Otherwiseautouses SQLite. - If direct messages are enabled with SQLite storage, includedirect-messages.db,direct-messages.db-wal, anddirect-messages.db-shmin backup plans. - If direct messages are enabled with JSONL storage, includedirect-messages.jsonlin backup plans.4.2.0BlueMapWebChat 4.2.0Jun 28, 2026 4.2.0
SQLite history storage
- Added SQLite chat history storage and madechat.history-storage: "sqlite"the recommended/default backend for new configurations. - Keptjsonlandmemoryhistory-storage modes for compatibility. - Unified history retention settings sochat.history-sizeandchat.history-retention-daysare used bymemory,jsonl, andsqlite. - Removed the oldchat.history-persistandchat.history-persist-retention-dayssettings. Persistence is now selected only bychat.history-storage. - Addedchat.history-sqlite-fileto control the SQLite DB file path. The default ishistory.dbin the plugin data folder. - Addedchat.history-sqlite-migrate-jsonl; when enabled, an empty SQLite DB imports the existing legacychat.history-fileJSONL 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:
Removed 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: truechat: history-persist: false history-persist-retention-days: 5Message search
- Added the/history/searchAPI 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. - Addedsearch.enabledandsearch.result-limitsettings for disabling search and controlling the search result count. -search.result-limitis 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: 50Upgrade notes
- Existingconfig.ymlfiles 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 existingconfig.yml, deleteconfig.yml, start the server once to regenerate it, and then reapply your custom settings manually. - Back uphistory.jsonl,history.db,history.db-wal, andhistory.db-shmbefore testing migration, changing storage backends, or editing the database manually.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&#RRGGBBdo not leak into the compact pinned bar or tooltip. - Ensuredplayer-display.modeandplayer-display.strip-colorsare 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. - Ensuredreply.game-preview.formatandreply.game-prefix.texttranslate 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 beforehttps://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.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-pinAPI and persistentsortOrderstorage 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. - Keptlinkandlabelgame-link modes for servers that do not use a game-side emoji plugin, and added an explicitpreservemode 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/PurpurAsyncChatEventsupport 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 sodiscordsrv.reply-relay.enabled,prefix-enabled, andpreview-enabledare 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,§rand 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:. - Addeddiscordsrv.append-web-emoji-linksanddiscordsrv.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: messageto[Reply] Player: messageby default. - Applied the same reply preview and reply label behavior to web -> Discord relay output.Release cleanup
- Bumped the project version to4.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.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
- Changedemoji.game-link.plain-broadcast-with-urlsto 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:linkandlabel. - Removed the misleading ImageEmojis-specific game-link subsection from the default config and documentation. - Movedplain-broadcast-with-urls,default-pack, andaliasesdirectly underemoji.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 sohttps://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 usingstrict-origin-when-cross-originreferrer policy and an embedoriginparameter. - 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 officialplayer/v1iframe withdescription=0andmusic_info=0to 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 soweb-addonappears beforestandalone-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/aroundlookup 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. * Madeweb-addon.api-base-urlthe primary public API base for reverse-proxy deployments. * Made emptystandalone-web.api-base-url,upload.public-base-url, andemoji.public-base-urlconsistently 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 throughhttp.cors-origin, and fullhttps://...URLs consistently. * Reordered the default config soweb-addonappears beforestandalone-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
* Updatedconfig.ymlcomments, 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 browse3.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, andcustom. - 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 to720px. - 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 underexamples/caddyandexamples/nginx.3.0.0BlueMapWebChat 3.0.0Jun 19, 2026 This version is based on the internal development build and includes the current stable feature set.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta