KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

18,391
Total Changes
6,526
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,391AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService619InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,995TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,691kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,824kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,526Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
September 27, 2026
FixMediaService

A conversation loads and a message sends on the first try

Chat has been failing in two ways a member notices at once: opening a conversation showed "Couldn't load messages" until Retry was pressed, and a sent message s...

Kamo·1mo ago
FixMediaService

The media.* host no longer reaches MediaService's server-to-server endpoints

The media-route IngressRoute sends every path on a media.* host straight to MediaService, past the API gateway, so the gateway's carve-outs (master spec section...

Kamo·1mo ago
September 25, 2026
FeatureMediaService

MediaService announces its own webinar writes

Kamo·1mo ago
FeatureMediaService

Relay notification frames to the phone; voicemail gets its own topic

Every pod relays core-NATS email.notify.<memberId> to /topic/notifications/<memberId> on its own broker, for KamoMobile's notification centre. voip.voicemail.* ...

Kamo·1mo ago
FeatureMediaService

Every chat sender goes through the one fan-out

Alerts, web-chat visitors, the AI Sales Agent, inbound social messages and the Exec2Exec desk now announce through ChatFanoutService: alerts reach the recipient...

Kamo·1mo ago
FeatureMediaService

One fan-out for every chat sender

Kamo·1mo ago
FeatureMediaService

Unread-chat and mention cards raised server-side

Kamo·1mo ago
FeatureMediaService

Never send a missed-chat email to an AI member

Kamo·1mo ago
September 24, 2026
FeatureMediaService

Image attachments are drawn from a 480px preview, not the original

A chat bubble draws an image at most 240x240 CSS px and every viewer downloaded the original to do it — 3-8 MB per phone photo. GET **************** now answers...

Kamo·1mo ago
FixMediaService

Stream the recording, and run the summary after commit — it ran inside the upload

Jibri's upload read the whole recording into heap (file.getBytes()) on the pod that also serves chat; a two-hour meeting is over a gigabyte. It is now streamed ...

Kamo·1mo ago
FixMediaService

Accept a short-lived otk on the WebSocket handshake, alongside ***

kamo-internal is moving the *** session id out of browser JavaScript: it currently sits in sessionStorage and rides every WebSocket URL as `?***=<128-hex id>`, ...

Kamo·1mo ago
September 23, 2026
FixMediaService

Pin kamo-shared-library 1.6.1, the only version that exists

The library moved to 1.6.1 and this service still asked for 1.6.0. There is no window in which both resolve: the library is never published to a remote, so the ...

Kamo·1mo ago
FixMediaService

Break a circular bean dependency the STOMP live-session guard introduced

d47b471's SessionAccessGuard field on WebSocketConfig crash-looped every pod: Spring must fully construct WebSocketConfig (a **************** every @Autowired f...

Kamo·1mo ago
FixMediaService

Guard STOMP SUBSCRIBE to a session's live messages and WebRTC signaling

/topic/chat/session/{guid} and /topic/webrtc/session/{guid} were not guarded at all: any authenticated socket could SUBSCRIBE to another session's live chat mes...

Kamo·1mo ago
FixMediaService

Chat attachment uploads authenticate before the body is spooled

POST /sessions/{guid}/attachments bound its parts as a @RequestParam MultipartFile[] method parameter. Spring resolves method parameters before a controller met...

Kamo·1mo ago
FixMediaService

Strip client-supplied identity headers at the media.* edge

media-route (HostRegexp ^media[.].+$) carried only media-websocket-upgrade, so a caller hitting media.<domain> directly could set X-Org-Id, X-Member-Id, X-Publi...

Kamo·1mo ago
FixMediaService

Presence bulk reads and the stale-presence sweep stop using Redis KEYS

getBulkPresence/getBulkLastSeen ran KEYS PRESENCE:*/PRESENCE_LAST_SEEN:* on every call - hit on every presence-socket mount and tab focus - and the 30s sweep ra...

Kamo·1mo ago
FixMediaService

Stop logging STOMP frame headers/payloads and /ws request headers

Two leftover debug-logging spots on the WebSocket path: - WebSocketConfig's inbound channel interceptor logged every STOMP frame at INFO, including accessor....

Kamo·1mo ago
FixMediaService

Imaging proxy forces a download for anything that isn't a safe raster or a stream

GET/HEAD **************** always answered with the client-declared Content-Type from upload, no Content-Disposition, no X-Content-Type-Options and no CSP. ChatA...

Kamo·1mo ago
FixMediaService

The meet-provider OAuth result page can no longer break out of its own script tag

MeetProviderController's GET /oauth/callback is sessionless and reflects the provider's error_description into an inline <script> block. The old jsString() only...

Kamo·1mo ago
FeatureMediaService

The Hold'em invite and the meeting reminder say who they are from

MemberNotificationClient.raise gains an overload carrying actorMemberId/actorName (the id sent as text; the old signature is unchanged and sends neither). Holde...

Kamo·1mo ago
FixMediaService

A reply quoting a contact names the contact, not the connection owner

A social contact has no member row, so everything they send is stored under the connection owner's member. The history read already names such a row as the cont...

Kamo·1mo ago
FixMediaService

The SOCIAL read gate refused every social session, not just cross-org ones

Regression in f7b2bd5, live on kamowsmedia. canReadSession (MediaController, copied into SessionFacesController and ChatSessionMembersController) admitted a mem...

Kamo·1mo ago
FixMediaService

WebRTC signaling, webinar management and Canva schedules stop trusting the caller's say-so

Three more of the same shape. - WebRTCSignalingController relayed **************** straight to **************** using only the payload's own sessionGuid, w...

Kamo·1mo ago
FixMediaService

Session reads, ticket mutations and public keys stop trusting the caller's say-so

Four related holes, all the same shape: a request carried an authenticated member, and that was treated as enough. - **************** SessionFacesController.fa...

Kamo·1mo ago
September 18, 2026
FeatureMediaService

Quotes, hand histories, ticket events and bug threads send the id a member card needs

Four surfaces showed a member by name with no id beside it, so the console's member card had nothing to open. Each now sends the id as TEXT next to the name it ...

Kamo·1mo ago
FeatureMediaService

The Presenters table can see which presenters nobody can book

GET **************** — MANAGE_SUPPORT, the caller's own organization's type only (anything else is "not found") — answers each active presenter with hasBookable...

Kamo·1mo ago
September 17, 2026
FeatureMediaService

Tell a presenter, live, when nobody can book a time with them

A presenter whose declared hours have run out is the one state in this feature nothing reported: the booking page simply offers no times, the visitor leaves, an...

Kamo·1mo ago
FixMediaService

The public demo page shows no one's contact details, and a site's key books only its own org

Demo requests from the marketing site come from visitors with no account. That path already needed none: the attendee row is the name and email the form collect...

Kamo·1mo ago
FixMediaService

The scheduler lists the org's webinar types, and a booking badges its presenter

/support/schedule-webinar said "No webinar types are currently available." for every organization, however many types it had. The wizard loads its picker from G...

Kamo·1mo ago
FixMediaService

No secret has a literal fallback in code or config; the Janus API secret never goes to a browser

The Janus API, token and admin secrets and the TURN password were committed four times over: as @Value defaults in WebRTCController and JanusService, as default...

Kamo·1mo ago
FixMediaService

A Canva connect only returns the browser to the org's own console

POST /api/media/canva/connect-start stored whatever returnUrl the body named, and the OAuth callback on the API host redirects to it after Canva's consent scree...

Kamo·1mo ago
FixMediaService

Only an authorized member can connect a Facebook or Instagram page, and only back to their own console

The Meta connect flow trusted its URL. GET **************** took connectionId and returnUrl from the query string with no session, and state was unsigned base64...

Kamo·1mo ago

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing