KamoCRM

Live Change Log

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

17,662
Total Changes
6,080
Features
5,341
Fixes
30
Projects
Filter by project
All Projects17,662AIService261APIService174BillingService158ConversionService110DaemonService138DocsService223ESigService91EmailService587InitializerService329KBService151KlusterServices744MCPGatewayService261MediaService604RAGService79SecurityService1,874TranslateService62VOIPService250VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,413kamo-login340kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,682kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild16CI523Chore776Docs3,257Feature6,080Fix5,341Other998Performance165Refactor278Revert23Style42Test162Upgrade1
August 26, 2026
Featurekamo-internal

The record's Communications tab shows communications

It rendered the record's media stream alone — the internal notes people write about a job. Useful, and not what anybody means by "the communications about this ...

kamo·2mo ago
FeatureSecurityService

Commerce records as owners, and one place for the matching rules

The third owner the spine was widened for, and the one that was still defined and unused. A record's documents already hang off it through the document manager'...

Kamo·2mo ago
FeatureSecurityService

The TEFCA responder — discovery, document query, document retrieve

The three operations a partner actually calls, expressed over FHIR rather than SOAP: IHE's XCPD and XCA shapes, on the QHIN Technical Framework's FHIR path, bec...

Kamo·2mo ago
Featurekamo-shared-library

A real credential for exchange partners, and retrieved documents

The responder endpoints have no user session — the caller is another organization's server — so a bearer credential this practice issues at onboarding is the ON...

Kamo·2mo ago
FeatureSecurityService

Five real quality measures, and the engine that runs them

Measures are Java rather than CQL, and the trade is worth stating. The eCQM specifications are published in Clinical Quality Language, and an engine would let a...

Kamo·2mo ago
Featurekamo-shared-library

The quality measure model, and the row that makes it useful

MeasurePatientResult is the point of this commit. A practice shown "67% controlled" can do nothing with it; a practice shown the 41 NAMED patients in the denomi...

Kamo·2mo ago
Featurekamo-internal

Mirror the Service Work rights into TypeScript

VIEW_SERVICE_WORK, VIEW_OWN_SERVICE_WORK, MANAGE_SERVICE_WORK, ASSIGN_SERVICE_WORK and COMPLETE_SERVICE_WORK land at ids 268-272, not the 265-269 the plan assum...

kamo·2mo ago
FeatureSecurityService

Bulk export, C-CDA, and one accounting that covers every channel

BULK EXPORT. Kickoff answers 202 with a Content-Location and no body; polling answers 202 while running and 200 with the manifest when done. Returning a friendl...

Kamo·2mo ago
Featurekamo-shared-library

Give Service Work its first five rights

ServiceType.SERVICE(28) shipped with zero rights, so its nine endpoints were gated only by whether the caller had a session. Ids start at 268 rather than the p...

Kamo·2mo ago
Featurekamo-shared-library

Bulk FHIR export and C-CDA, and the rights that gate them

Two things a practice cannot operate without, and neither is a bigger version of reading a chart. BULK EXPORT (clinical/bulk). The FHIR Bulk Data model: a job,...

Kamo·2mo ago
Featurekamo-shared-library

Count DISTINCT events across a rollup's owners

A phone number can be a contact point on more than one owner at once, and two leads on one account sharing one is the ORDINARY case — they are commonly the same...

Kamo·2mo ago
Featurekamo-internal

Gate the line window per member, and show which mode you are in

The rollout control. Default off, opt-in per member from Phone Settings, nested under the VOIP switch because it means nothing for a member with no line. One h...

kamo·2mo ago
FeatureVOIPService

Read and write the line-window gate

GET surfaces lineWindowEnabled; PUT accepts it as a nullable Boolean so that absent means "not mentioned" and preserves the stored value. Every existing caller ...

Kamo·2mo ago
Featurekamo-shared-library

Map LINE_WINDOW_ENABLED on MemberVoipConfig

The per-member gate for the dedicated softphone line window. Version pin stays at 1.6.0 — adding a field needs no bump, and a split pin would break CI for every...

Kamo·2mo ago
FeatureInitializerService

DDL for the per-member line-window gate

Adds **************** defaulting to false. A column rather than a feature flag because there is no flag system here and MemberCapabilities is a closed, fail-cl...

Kamo·2mo ago
Featurekamo-internal

An AI sub-tab in the Interaction Center

AI sessions live in AIService and are not MediaSessions, so this bucket gets its own loader in front of the /api/media/sessions/chat fetch the other four share,...

kamo·2mo ago
Featurekamo-internal

The dedicated line window

The call now lives in a window a refresh of the workspace cannot touch. SoftphoneProvider becomes owner-or-follower. Only the owner REGISTERs and opens the STO...

kamo·2mo ago
Featurekamo-internal

A communications tab that rolls up the account's leads

The level most people mean when they say "this customer's calls". Several leads commonly hang off one account precisely because they are the same person enquiri...

kamo·2mo ago
FeatureKlusterServices

Bounce a bare visit to the Kamo login, and end the session on tab close

Closing the KamoDesktop tab left a live session sitting on the machine. Guacamole keeps its auth token in localStorage (GUAC_AUTH), which survives closing the t...

Kamo·2mo ago
Featurekamo-internal

Line ownership, the bridge, and the no-yank handover rule

Three pure modules with no consumers yet, so this ships inert. lineOwnership elects exactly one SIP registrar per browser via Web Locks. That is mandatory here...

kamo·2mo ago
Featurekamo-internal

The tab title counts everything waiting, not just chat

The tab strip has room for one number, and 'chat and support only' stopped being what a member is waiting on once SMS, AI, missed calls and unreviewed reports e...

kamo·2mo ago
Featurekamo-internal

Badge the AI option with unreviewed replies

kamo·2mo ago
Featurekamo-internal

A total on the phone icon, the breakdown in the menu

This icon carried no badge at all, so a missed call while the softphone was closed reached the member nowhere. Opening the phone clears the missed count.

kamo·2mo ago
Featurekamo-internal

A total on the icon, the breakdown in the menu

pendingCount was the whole badge, so unreviewed bug reports and webinars booked on somebody's behalf had no way to reach anyone. Opening the webinar row stamps ...

kamo·2mo ago
Featurekamo-internal

The chat badge counts chats

It was silently chat plus support, so a ticket lit the chat bell and nothing distinguished the two. Support has its own icon now; social joins chat, because a s...

kamo·2mo ago
Featurekamo-internal

Let a dropdown row carry its own count

The icon shows the sum and the rows show the breakdown — the point of splitting the indicators is seeing WHICH thing wants you without opening anything.

kamo·2mo ago
Featurekamo-internal

Thump on arrival, with the glow dissipating outward

Its own layer inside .hex-scale: that element already animates transform for the hover grow, and two animations on one element do not compose — the second repla...

kamo·2mo ago
FeatureSecurityService

An account-level communications timeline

The level most people mean when they say "this customer's calls". The spine is already keyed on an owner, so the account endpoint is the same merged, component ...

Kamo·2mo ago
Featurekamo-shared-library

Let an account roll up its leads' communications

Several leads commonly hang off one account precisely because they are the same person enquiring twice, and each of their calls was matched to whichever lead he...

Kamo·2mo ago
Featurekamo-internal

One context for the four indicators' counts

Composes what exists and owns the three that had no home: unreviewed bug reports, unreviewed webinars, and the phone's missed calls and voicemails. The 60s for...

kamo·2mo ago
Featurekamo-internal

The drop beacon reports which path ICE actually chose

The beacon shipped iceCandidateType as a permanently-null field. That is worse than omitting it: it makes the telemetry look more informative than it is, and th...

kamo·2mo ago
Featurekamo-internal

One day picker, shared by the calendar and the settings tab

The two surfaces had each grown their own answer to "which days?". The settings tab put Workweek Days, Weekend Days and Every Day behind a dropdown; the calenda...

kamo·2mo ago
Featurekamo-internal

Badge a minimized window with its server unread count

The one component that sees both the window list and the unread maps — the engine knows nothing about conversations and the unread context knows nothing about w...

kamo·2mo ago
Featurekamo-internal

Set an absolute unread count from the server

Replaces hexhead:incoming, which nothing ever dispatched. Its +1 would have counted a re-delivered snapshot as a new message, and its spawn-if-missing branch wo...

kamo·2mo ago
Featurekamo-internal

Messages and calls, on the existing timeline component

CommunicationsTimeline and EmailEntry take an optional endpointBase and keep the lead path as the default, so every existing call site is byte-for- does not car...

kamo·2mo ago
FeatureSecurityService

A patient's calls, texts and email — on the platform's own spine

Not a second timeline. LeadCommunicationsService now takes a CommsSubject and the lead overload delegates to it, so /leads keeps its exact behaviour drift. A pa...

Kamo·2mo ago
Featurekamo-internal

Stop losing calls to session expiry, teardown and stale devices

Four guardrails that share two files, so they share a commit. A live call now counts as session activity. ClientActivityTracker equated presence with input eve...

kamo·2mo ago
FeatureInitializerService

Widen the comms spine to an owner, in the order that keeps it safe

LEAD_CONTACT_POINTS and LEAD_COMMUNICATIONS gain the document manager's (assoc_type, assoc_object_id) pair so an account, a patient or a commerce record can own...

Kamo·2mo ago
Featurekamo-shared-library

Key the communications spine on an owner, not a lead

The spine was built lead-shaped — LEAD_CONTACT_POINTS.LEAD_UID, LEAD_COMMUNICATIONS.LEAD_UID — and the association it actually needs is broader. An account owns...

Kamo·2mo ago
Featurekamo-internal

SMS and AI counts, and a per-surface split

One MediaService snapshot covers three surfaces that belong on two different nav indicators, so the totals are separated from the server's declared sessionType ...

kamo·2mo ago
Featurekamo-internal

Confirm before a refresh takes a live call

The SIP session lives in the document and nothing on the server holds a handle to it, so a reload ends the call outright — with no BYE, leaving the far end on s...

kamo·2mo ago
Featurekamo-internal

Rebuild the availability editor around the day it describes

The editor was a stack of form rows that never showed what it was making. It now opens with the thing itself: a 24-hour rail with the block painted on it, in th...

kamo·2mo ago
Featurekamo-internal

One address for a conversation on any of five surfaces

chat/support/social share the chat: namespace because they share one unread snapshot; SMS and AI get their own, because a VoipConversation UUID and a media sess...

kamo·2mo ago
Featurekamo-internal

Routes for the notification spine's counts and mark-reads

The PUT routes answer 204 and must not call .json() on it — that turns a successful mark-read into a 500.

kamo·2mo ago
Featurekamo-login

The workspace picker shows each org's logo

Two letters standing in for a logo was a workaround for the response not carrying one. It does now, resolved server-side from the folder the org's theme was pro...

Kamo·2mo ago
FeatureSecurityService

The sign-in response carries each workspace's logo

The picker drew two letters per row because the response held a name and an alias and no image. A list of workspaces is read by mark long before it is read by n...

Kamo·2mo ago
Featurekamo-internal

Set up RingCentral with a JWT, and assign members their own number

Three screens, one change. The phone server's overview tab replaces "Connect with RingCentral" with the credential form the JWT flow actually needs — client id...

kamo·2mo ago
FeatureVOIPService

Authenticate RingCentral with a JWT, per phone server

RingCentral was the last provider whose credentials came from a Kamo-wide registration plus two browser consent hops — one for the org, one per member. Both are...

Kamo·2mo ago
FeatureInitializerService

Add the RingCentral JWT and direct-number columns

Order 0, because the shared-library entities map both columns from the moment this build starts: every runner that loads a PhoneExtension or a MemberVoipOAuthTo...

Kamo·2mo ago
Featurekamo-shared-library

Give a member a RingCentral JWT and an extension its own number

Two columns, both nullable so nothing is backfilled and no existing row changes meaning. **************** holds a member's own RingCentral JWT. RingCentral onl...

Kamo·2mo 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