KamoCRM

Live Change Log

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

15,120
Total Changes
5,169
Features
4,935
Fixes
30
Projects
Filter by project
All Projects15,120AIService197APIService161BillingService143ConversionService107DaemonService129DocsService215ESigService88EmailService518InitializerService318KBService105KlusterServices697MCPGatewayService85MediaService546RAGService71SecurityService1,658TranslateService55VOIPService205VectorService11kamo-apps25kamo-asterisk-support24kamo-capcha17kamo-capcha-widget4kamo-internal6,937kamo-login330kamo-marketing625kamo-nowww20kamo-register213kamo-shared-library1,455kamo-signer-monorepo53kamolos108
Filter by type
All TypesBuild11CI523Chore738Docs2,167Feature5,169Fix4,935Other986Performance157Refactor274Revert23Style42Test94Upgrade1
August 24, 2026
Fixkamo-internal

Name rooms after the org id, not the hostname

getOrgToken() took the first label of the current host, and its own comment said why: "so identically-named rooms cannot collide across orgs". On the shared hos...

kamo·1mo ago
Fixkamo-login

Make the auto-login cross-tenant guard actually run

The guard read the host org's id with /"id"\s*:\s*(\d+)/ -- a bare digit straight after the colon. SecurityService's JsSafeLongSerializer writes any Long above ...

Kamo·1mo ago
FixESigService

Stop handing an alias row over as the org's domain

**************** walked org.getDomains() filtering only on isActive. That collection holds the org's root domain AND its alias rows -- api, login, theme and the...

Kamo·1mo ago
Fixkamo-internal

Take the chat-core that stops a sent message showing twice

@kamo/chat-core 0.1.6. The conversation reducer now adopts the pending optimistic row when the member's own message comes back over STOMP, instead of appending ...

kamo·1mo ago
FixSecurityService

Stop requiring DNS verification to sign in

OrgHostResolver.resolveByDomain filtered on od.is_dns_verified = TRUE, so a domain row that existed but had not finished verifying resolved to nothing and login...

Kamo·1mo ago
August 23, 2026
FixVOIPService

Stop RingCentral OAuth signing white-label tenants out

Two faults, both on the same hop, and each one hides the other. RingCentral rejects every scope value this app can ask for — "invalid_request / Parameter [scop...

Kamo·1mo ago
Fixkamo-marketing

Show cents on an add-on rate that has them

Additional Storage is $2.50 per 10 GB block, and the catalog stores that as a number — so 2.50 arrives as 2.5 and rendered straight into the card it read "+$2.5...

Kamo·1mo ago
FixInitializerService

Settle Additional Storage at $2.50 per 10 GB block

Confirms the block size and rate as $2.50 per 10 GB rather than the $4 per 25 GB the production row had drifted to. The seeder, the catalog row, the Stripe pric...

Kamo·1mo ago
FixInitializerService

Price Additional Storage as $4 per 25 GB unit, FLAT not metered

Additional Storage is bought by the unit, belongs to no plan on any tier, and is not seat-based. The seeder still described it as $2.50 per 10 GB block, which i...

Kamo·1mo ago
Fixkamo-internal

Stop offering Business the add-ons it already includes

Choosing Business still presented video conferencing, the AI assistant, the HR system and e-signatures as things to buy, even though the plan bundles all four. ...

kamo·1mo ago
FixInitializerService

Bind add-ons to the app they sell, and stop Business granting mail free

**************** is the column **************** matches on. KamoCRMPricingLoader never wrote it, so every KamoCRM add-on row has it NULL and that comparison can...

Kamo·1mo ago
FixBillingService

Stop selling add-ons the chosen plan already includes

The catalog has always recorded which add-ons a plan bundles, in **************** — Business and Enterprise carry video conferencing, the AI assistant, the HR s...

Kamo·1mo ago
Fixkamo-internal

Let the SSL check lower the flag, not only raise it

checkDns only ever latched sslConfirmed to true. A domain whose stored flag was set under the old any-one-host rule therefore kept a green SSL card and an unloc...

kamo·1mo ago
FixSecurityService

Verify-dns answers for the present, not for a stored flag

The endpoint skipped probing entirely when ssl_confirmed was already true, on the reasoning that under the all-hosts rule it could only have been set when every...

Kamo·1mo ago
FixSecurityService

Re-verify domains already marked SSL-confirmed, and heal them

findAwaitingVerification filters confirmed domains out by design, so once ssl_confirmed was set nothing ever looked at that domain again. That was fine while th...

Kamo·1mo ago
Fixkamo-internal

Open the swatch's own colour window, not the first on the page

The swatch reached its hidden <input type="color"> through document.getElementById on an id built from the picker's translated label. A label is only unique ins...

kamo·1mo ago
Fixkamo-internal

Stop the colour group fighting the colour you are choosing

ModernColorGroup was controlled and uncontrolled at the same time. It kept local state for every slot, mirrored the `value` prop into that state in one effect, ...

kamo·1mo ago
Fixkamo-internal

Read the new org's id when it arrives quoted

The last step of the wizard appeared to do nothing, and clicking Create a second time answered that the organization already exists — because the first click ha...

kamo·1mo ago
FixSecurityService

Make post-commit org setup actually write, and heal the orgs it missed

A @Transactional method called from **************** does not open a transaction of its own. Spring fires those callbacks from processCommit BEFORE cleanupAfter...

Kamo·1mo ago
FixSecurityService

Confirm SSL only when every org host has its own certificate

Certificates are minted one per FQDN -- a single dnsName each, so the leaf CN matches the hostname the browser connected to -- and auto-cert works through an or...

Kamo·1mo ago
Fixkamo-internal

Show per-host certificate progress, not a single spinner

Certificates are issued one per subdomain, and they do not all land at once, so the SSL step now reports how many of the org's hosts are live and names the ones...

kamo·1mo ago
Fixkamo-internal

Point frame media at an endpoint that actually serves it

Every photo and video in a picture frame rendered as a broken image. The URL pointed at **************** I took that for a general imaging proxy — it speaks HT...

kamo·1mo ago
FixSecurityService

Serve frame media ourselves, with Range

Every photo rendered as a broken image. The URL pointed at MediaService's **************** which I took for a general imaging proxy because it spoke HTTP Range....

Kamo·1mo ago
Fixkamo-internal

Make the Spirit Animal visible, and stop the palette vanishing

Two reports, two different mistakes of mine. THE PATTERN WAS INVISIBLE. It painted behind the pane, and every pane surface — FeatureCard, LauncherParentCard, W...

kamo·1mo ago
August 22, 2026
FixInitializerService

Drop the frozen ordinal CHECKs that were failing every new enum value

imgs_assoc_id_check allowed assoc_id 0..13. ImageAssocType.PICTURE_FRAME is ordinal 14, so EVERY Picture Frame upload violated it. Hibernate writes CHECK (col ...

Kamo·1mo ago
FixSecurityService

Stamp last_login so "Last Login" stops reading Never

Nothing in SecurityService has ever written users.last_login. The write lived in the retired AuthenticationService and was not carried over when authentication ...

Kamo·1mo ago
Fixkamo-internal

Stop /validate and /logout from mounting the signed-in shell

A load of / showed a burst of 401/403 before the session settled — user-info, ui-preferences, by-department, chat/unread, timezone/effective and tickets/pending...

kamo·1mo ago
FixSecurityService

Restore the status endpoint the frontend has been polling

kamo-internal polls GET /api/security/session/god-mode once on mount and every 60s thereafter. That endpoint was removed in 9c70cb7 along with the rest of the t...

Kamo·1mo ago
Fixkamo-internal

Stop the drag preview from driving itself into a render loop

Dragging a pane sometimes threw React #185 and left the page scrolling to the bottom forever, undoing every attempt to scroll back up. One cause, two symptoms....

kamo·1mo ago
Fixkamo-internal

Bucket the history by the member's day, not the browser's

groupByDay built its day key from getFullYear/getMonth/getDate, which read the machine's calendar rather than the member's. With createdAt now parsed as the UTC...

kamo·1mo ago
Fixkamo-internal

Restore the timezone fix, and take chat-core 0.1.5 / net 0.1.1

5d1cc23e was committed through a stale private index and reverted ec881208 wholesale — serverTime.ts, the member-timezone provider, the guard and all 216 call-s...

kamo·1mo ago
Fixkamo-internal

Render every timestamp in the member's zone, read every one as UTC

A direct message sent at 3:33 AM Pacific displayed "10:33 AM" — the raw UTC clock, printed as though it were local. Two independent defects, present together on...

kamo·1mo ago
Fixkamo-internal

Stop the master-note ring sweeping a gradient across the launchpad

LIVE ON PRODUCTION since b9b1fe08. The org master note's ring was a conic gradient in a pseudo-element sized 150% by 150%, centred and rotating once every six s...

kamo·1mo ago
Fixkamo-internal

Make the pane logo visible, and stop the two seeding passes racing

Two bugs, either of which alone would have shown no logos. IT WAS PAINTED BEHIND FROSTED GLASS. The mark went in at z-index 0, under the pane's content — where...

kamo·1mo ago
Fixkamo-internal

Do not offer form fields on files that cannot carry them

Replacing the two buttons dropped the isConverted gate the old "Edit PDF" had, so Modify offered form-fillable editing on audio and video — where there is no re...

kamo·1mo ago
Fixkamo-internal

A form fillable row can still be opened in the editor

I had disabled "Edit In Form Fillable Mode" on a form-fillable row, which contradicts the rule: its fields stay editable in every tool the editor has — what a f...

kamo·1mo ago
Fixkamo-shared-library

Do not bill an org twice for a version that owns no bytes

The org storage total is SUM(fileSize) over Img rows, and a derived version points at its original's ImgDat while copying its fileSize — so every modified versi...

Kamo·1mo ago
Fixkamo-internal

Restore the pane fill fix reverted by 006fea03

006fea03 was a DocManager change built from a tree that predated 791b99a5, so it carried all eight of that commit's files back to their previous blobs. Its own ...

kamo·1mo ago
Fixkamo-internal

Let a pane's contents fill the size the member gave it

A resized widget grew its frame and left its contents the size they were. The cause was one missing declaration. Adding the colour control and the resize handl...

kamo·1mo ago
Fixkamo-internal

Send the event's instants, and keep the end after the start

The two datetime fields hold offsetless wall-clock text and the API binds them to a java.util.Date, so the server read them in ITS zone — UTC. A member setting ...

kamo·1mo ago
FixEmailService

Actually move an event when its calendar is changed

The dialog has always offered a calendar picker when editing and the PUT has always carried the chosen calendarId, but updateEvent had no parameter for it — so ...

Kamo·1mo ago
Fixkamo-internal

Widgets are configured by security rights, and nothing else

The timecard widget's rights mirror moves under MANAGE_TIMECARDS, so all five widgets have one shape. The availability-hook machinery is removed with it — useA...

kamo·1mo ago
FixSecurityService

Drop the universal seed; the timecard widget follows MANAGE_TIMECARDS

UNIVERSALLY_SEEDED_RIGHTS is removed entirely. It existed only because the timecard widget had no parent right to inherit from, and now it has one — so the widg...

Kamo·1mo ago
Fixkamo-shared-library

Put the timecard widget under the HR group, like every other widget

TIMECARD_TODAY_WIDGET now hangs off MANAGE_TIMECARDS instead of being a root, so all five widgets have the identical shape the calendar ones set: a parent data ...

Kamo·1mo ago
Fixkamo-shared-library

Restore the CRLF line endings in CalendarEventAttendeeRepository

A scripted edit rewrote the file through a text API, normalising all 62 CRLF line endings to LF and turning a 15-line addition into a 139-line diff. The content...

Kamo·1mo ago
Fixkamo-internal

Restore the CRLF line endings in calendar.ts

A scripted edit rewrote the file through a text API, which normalised every one of its 257 CRLF line endings to LF and turned a 45-line addition into a 559-line...

kamo·1mo ago
August 21, 2026
Fixkamo-internal

Removing from Selected Docs unchecks the row

The mirror ran one way. Removing a document deleted the binder item but left its checkbox ticked in the grid, so the next sync — on the very next visit to the t...

kamo·1mo ago
Fixkamo-internal

Stop rounding document ids into nothing

A document id is a 19-digit int64 — 1200096283020258886, some 133x past Number.MAX_SAFE_INTEGER. OrganizerTab joined the selection into a key so the effect woul...

kamo·1mo ago
Fixkamo-marketing

Quote the annual rate under the "billed annually" caption

The homepage cards read the month-to-month rate out of the catalog and printed it above a line saying "billed annually", so Starter advertised $34 and Business ...

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