Releases
Entergram Update — Week of June 25, 2026: Stability, Proxy Tools, and 25+ Fixes

This was a deep engineering week at Entergram. We shipped two new infrastructure features, significantly improved stability for high-volume workspaces, and closed 25+ bugs spanning messaging, connection management, onboarding, billing, and the CRM table. Here's everything that landed.
New: Proxy Tools for Admins
Proxy Usage Per Route and Static Proxy Pool
Admins can now attribute proxy traffic to specific routes and connected accounts, giving you visibility into which connections consume the most proxy bandwidth. Alongside this, you can now assign dedicated static proxies to individual routes — useful when you need a predictable, stable IP for specific Telegram accounts rather than letting the pool rotate.
Proxy Health Monitor in the Admin Panel
A background worker now periodically probes each proxy and updates its health status. This means the admin panel reflects real connectivity state — you can catch degraded proxies before they silently affect your users, rather than discovering problems through support tickets.
Performance: Faster and More Stable for Large Workspaces
ws-v2 Stabilization for High-Volume Workspaces
Large workspaces — those with hundreds of chats across many connected accounts — were experiencing significant main-thread blocking and browser lag. This week we overhauled the ws-v2 connection engine to throttle account.bind bursts and pace folder.chats.fetch calls. The result: a QA session that previously produced 692 long tasks and ~166 seconds of main-thread blocking now loads cleanly.
"Reconnect Required" Badges No Longer Fire Falsely
Accounts in busy workspaces were showing "Reconnect Required / Disconnected" badges even when the backend MTProto session was alive and serving traffic. Operators who clicked Reconnect triggered unnecessary re-logins — and in some cases hit Telegram FLOOD_WAIT limits on the phone number. The badge now only appears when there is a genuine connection problem.
Fixes: Messaging and Chat
Audio messages play again. Incoming voice messages were failing silently — the play button did nothing. Fixed across all chat types. (DEV-133)
"Socket closed" errors resolved. Several workspaces were experiencing hard disconnects with a chat.subscribe context error. The underlying socket reconnect logic is now stable. (DEV-120)
Supergroup and channel history loads correctly. Navigation in supergroups was triggering "Invalid realtime command payload" errors on the history.around path when the frontend sent peer hints (entity_class_name) the gateway didn't recognise. Fixed at the gateway layer. (DEV-168, PRODUCT-121)
Page no longer freezes while chatting or forwarding. A class of freeze-and-refresh issues affecting operators mid-conversation is resolved. (DEV-143)
Online status is consistent. The presence indicator in the chat table and the one in the chatter header were reading from different sources. They now share a single resolved presence state. (DEV-186)
Correct sender names in group chat. Message bubbles in group threads were sometimes showing the wrong Telegram username above the message content. Fixed in both the chat_list.window.snapshot and live_chat_list.delta paths. (DEV-192)
Unread counts stay accurate. Several scenarios caused the unread badge to overcount — for example, sending 2 messages and seeing 5 marked unread. The counter now reconciles correctly across reconnects. (DEV-135)
Duplicate message bubbles fixed. When two or more connected accounts shared the same chat, the same message could appear twice in the open thread. This was a rendering deduplication bug at the frontend layer, not a cross-account merge issue. Fixed. (DEV-183)
Sender fallback and reaction actors resolved. Chat history was sometimes showing other as the sender label for incoming messages, and reaction popovers were stuck on "Loading reactions." Both are fixed. (DEV-156)
Chats stay in folder view after you reply. Folders with the "Exclude read chats" flag were evicting chats the moment an operator sent a reply, making the conversation disappear mid-session. Folders now preserve replied chats until you navigate away. (DEV-178)
MCP sends to new contacts. The MCP integration was erroring when trying to send a message to a Telegram contact you had never previously chatted with. First-time sends now work correctly. (DEV-141)
Fixes: Connection and Session Management
Dead sessions recover automatically. A bug in the session-agent's route capacity logic (observeRoutes) caused some sessions to stop restarting after they died. Affected accounts would show nats: no responders on every history or folder request, and restarting the agent didn't help. The starvation bug is resolved — dead sessions now revive themselves. (DEV-139)
ws-v2 connect dialog no longer floods 400 errors. A timing issue caused the account-connect polling loop to keep querying a non-existent auth session ID, producing hundreds of API request failed: 400 toasts in a single session. Fixed at the polling lifecycle. (DEV-181)
Proxy connection status shows correctly in Settings. The proxy indicator was stuck on "loading" whenever you visited the Settings page, even for healthy connections. It now reflects the actual live state. (DEV-154)
Fixes: Workspace and Onboarding
Users can join workspaces reliably. A React maximum-update-depth crash (#185) was triggered whenever a new user landed on the CRM chat table after joining. The root cause was a constant re-instantiated array reference inside the CHAT_PAGE_SIZE_OPTIONS definition; it's now hoisted outside the render cycle. (DEV-165, DEV-167)
Onboarding invite acceptance fixed. Users who pasted a workspace invite link during onboarding could complete the flow without actually joining the target workspace — landing on an empty personal workspace instead, then crashing on Settings → Chat Table navigation. The invite acceptance and redirect logic is now correct. (DEV-170)
Removed users no longer re-appear. Workspace members who were removed or left were being pulled back in on every page refresh via a stale onboarding invite-link session. The /api/onboarding endpoint now checks membership status before re-joining. (DEV-175)
Fixes: Account Settings
Email change requests can be cancelled. The cancel button for a pending email change wasn't wired to an action — clicking it did nothing. It now correctly cancels the pending request. (DEV-137)
Light theme chat selection is visible. Selecting chat rows in the white/light theme was producing invisible or near-invisible highlights due to a missing contrast token. Fixed. (DEV-157)
Fixes: Billing and Subscriptions
Trial owners can buy seats without hitting a dead-end error. Calling purchaseSeat() before the owner has an active paid subscription returns 400 OWNER_SUBSCRIPTION_REQUIRED. Trial owners now see a clear prompt to subscribe first, with a direct path to the subscription page. (DEV-174)
Subscription purchases work reliably. A class of 401/403 auth conflicts at checkout — triggered by session invalidation during the Stripe redirect — is resolved. (DEV-172)
Fixes: CRM Table
Media and video play without rate-limit errors. The /api/realtime/media endpoint was subject to a generic 20-requests/minute rate limiter. Browser video streaming issues multiple byte-range requests for the same file, which tripped the limiter in under a second. Media requests now bypass the generic limiter. (DEV-152)
Search is complete and consistent. Some searches were returning partial results or erroring with "Telegram Search is unavailable" on the first query. Subsequent searches for the same term worked. Fixed — results are now returned correctly on the first request. (DEV-136)
"Time since first incoming message" counts from Telegram, not from app open. The special column was starting its clock from when you opened Entergram rather than from when the message was first received by Telegram. The timestamp source is now correct. (DEV-162)
Changelog
The complete changelog for v0.16.0 and all previous releases is available on the Entergram What's New page.
Ready to Upgrade Your Telegram Workflow?
Don't waste another lead. Don't lose another message.
Get Started


