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
September 3, 2026
Featurekamo-shared-library

Record a dev-machine terminal in the access log

A member opening a shell on desktop-1 now has an event type of its own. That machine holds a cluster-admin kubeconfig and its accounts have passwordless package...

Kamo·3w ago
Fixkamo-internal

Name a company by its company, with the contact as the qualifier

A record that is both an organisation and a person is now labelled "Harmony Home Loans (Nickolas McGarry)" everywhere one string has to stand for it. Company on...

Kamo·3w ago
FeatureSecurityService

Send the company alongside the contact wherever a record is labelled

A record that is both an organisation and a person is named "Harmony Home Loans (Nickolas McGarry)" — the company leads, the contact qualifies. That rule lives ...

Kamo·3w ago
Featurekamo-shared-library

Send an account's company alongside its contact for customer pickers

Six customer pickers read AccountSummaryDTO — the order editor, the service-job form, the subscription detail and wizard, and the pipeline signups tab — and eve...

Kamo·3w ago
Fixkamo-internal

Drop the scope line above the Communication View timeline

"Every call, text, e-mail, note and chat message with the 9 leads matching these filters." — the filter bar sits directly above this timeline and already says w...

Kamo·3w ago
Featurekamo-internal

Communication View — the whole filtered book as one timeline

Three changes to /leads. Quick search moves into the hero, above the CRM Settings links. In the filter row it was the last control on a line of eleven dropdown...

Kamo·3w ago
Fixkamo-internal

Static CSS in the overlay — 19 interpolations were hanging every build

kamo-internal has been unable to produce an image since b08f3b34. `next build` did not fail, it HUNG: no output, no error, no timeout. `.next` frozen at 1.3 MB ...

Kamo·3w ago
Featurekamo-internal

Add JustCall as a phone server type

Adds JustCall to the picker at **************** with its API key and secret, a contacts-import toggle, credential status on the providers tab, and the logo. Th...

Kamo·3w ago
FeatureSecurityService

A communications timeline over the whole /leads filter, not one lead

GET **************** takes the SAME query string GET the lead detail page draws — across every lead the filter bar matches. "What has been said to the leads I a...

Kamo·3w ago
CIkamo-internal

Reap superseded builds unconditionally — the sha check protected the orphan

The reaper added in 199e367e compared each container's commit against github.sha and KEPT the matches, on the theory that a matching sha meant "this run". That ...

Kamo·3w ago
CIkamo-internal

Reap builds orphaned by cancel-in-progress — they were starving the real one

Builds had gone from 8 minutes to 30+. I blamed the heap and was wrong. Reading the runner instead of the numbers found it: THREE `next build` processes at 213%...

Kamo·3w ago
FixVOIPService

Encode JustCall query values exactly once

The client built its query with build(true), which declares the values already encoded — so nothing was escaped at all. The character that matters is "+": every...

Kamo·3w ago
RefactorVOIPService

Say plainly why every JustCall agent reads as ACTIVE

The user listing decided its status with "available is Yes or No -> ACTIVE, else UNKNOWN", which is a roundabout way of asking whether JustCall answered at all,...

Kamo·3w ago
Performancekamo-internal

Stop the inline image toolbar re-rendering on every scroll frame

measure() runs on each scroll and resize event and built a fresh state object every time, so the toolbar re-rendered whether or not anything about the image had...

Kamo·3w ago
FeatureVOIPService

Wire JustCall in through the phone provider abstraction

JustCall (api.justcall.io/v2.1) as a full PhoneProvider: call history, texts, voicemail, recordings, the agent directory and availability, plus signed account w...

Kamo·3w ago
FeatureEmailService

Internal endpoint for importing contacts from an external system

VOIPService's JustCall integration needs to land a customer's contacts in the right member's address book, and this is where contacts are written: a Contact map...

Kamo·3w ago
Fixkamo-internal

The Desktop size tooltip no longer covers its own options

The Tooltip wrapped the whole TextField, so it anchored to the same box the select's option list opens over — at the default bottom placement it landed directly...

Kamo·3w ago
Featurekamo-shared-library

Add JUST_CALL as a phone provider type

Appended at ordinal 5. **************** is EnumType.ORDINAL and carries no CHECK constraint, so appending is safe and inserting anywhere else would silently re-...

Kamo·3w ago
Buildkamo-internal

Give next build 8 GB, it has been thrashing against 4

Builds went from 7-9 minutes to 30+ a few commits ago and nobody had a reason why. Measured on the runner rather than guessed: `next build` sat at exactly 4.39 ...

Kamo·3w ago
ChoreSecurityService

Rebuild against kamo-shared-library 8dc3ea4c

Picks up entitlement-cache invalidation on comp provisioning. This service owns both halves: it approves the order and it serves the cached entitlements, so wit...

Kamo·3w ago
Fixkamo-internal

The upgrade offer no longer chases comped organizations

The pill suppressed itself for coverage.source === 'PAID' and nothing else, so a comped organization was shown "33% off your plan" — a discount on a price it do...

Kamo·3w ago
Fixkamo-shared-library

Comping an account now drops its cached entitlements

SecurityService answers /api/security/entitlements/me out of Redis with a 15-minute TTL, invalidated by messages on kamo.entitlements.invalidate. Every self-ser...

Kamo·3w ago
ChoreSecurityService

Rebuild against kamo-shared-library 31b72fe9

Picks up the draft-order reprice fix: changing a draft's seat count or billing cycle left every money field and line item describing the order's previous shape,...

Kamo·3w ago
Fixkamo-shared-library

Editing a draft order's seats or cycle now reprices it

updateDraftOrder set seatCount and billingCycle and saved. Both are price drivers, and neither the order's money fields nor its line items were touched, so the ...

Kamo·3w ago
Featurekamo-internal

A paper colour per block, and blocks that fit their text

BLOCKS NOW FIT THEIR CONTENT. The reader's blocks were all 200px tall whatever they held, because richTextExtension configures the editor with minHeight: 200px ...

Kamo·3w ago
Featurekamo-internal

Add the JustCall provider logo

The VOIP logo folder had FreePBX, Microsoft and RingCentral but no JustCall mark, so any surface listing JustCall as a provider had nothing to render.

kamo·3w ago
ChoreSecurityService

Rebuild against kamo-shared-library 63827887

Picks up the comp-provisioning fix. A comped order granted its plan and none of the add-ons it sold, because provisionCompSubscription never wrote active_addon_...

Kamo·3w ago
Featurekamo-shared-library

A paper colour per block

**************** holding a palette ID — "lemon", "glass" — and never a hex value. Stored the way notes and launchpad panes store theirs, for the reason that ma...

Kamo·3w ago
Fixkamo-internal

The order wizard must name the organization it entitles

The wizard collected a customer and never a target organization, so every order it wrote carried target_org_id NULL. On approval provisionCompSubscription falls...

Kamo·3w ago
Fixkamo-shared-library

A comped order now grants the add-ons it sold

Comping an account granted the plan and nothing else. provisionCompSubscription copied plan, seats, cycle, source and status onto the AccountSubscription and ne...

Kamo·3w ago
Fixkamo-internal

Never send a cid: the message is not carrying

Completes the inline-image work that landed inside b08f3b34, whose message describes only the KB and sales-scripts fix it was committed alongside. extractInlin...

Kamo·3w ago
Fixkamo-internal

ReadOnly now actually stops you typing

REPORTED: the script blocks in the Interaction Center are editable. They were, and so is every other "read-only" rich-text surface in the app. `readOnly` on Kb...

Kamo·3w ago
FeatureEmailService

Let a sent message carry images inside its body

The body had four possible shapes and send() could only build three. The multipart/related branch — the one that puts an image where the HTML's cid: points at i...

Kamo·3w ago
Stylekamo-internal

The org's colour, not indigo, and a real scrollbar

THE PURPLE WAS A HARDCODED ACCENT. Every tinted surface in the panel and the Sales Scripts pane drew from --accent-comms (#6366f1), so a white-labelled org got ...

Kamo·3w ago
FixSecurityService

Do not mail a tenant its own domain until that domain is verified

A domain typed into the create form is a CLAIM, not a host. Ownership is proven by a DNS TXT record afterwards and a certificate is issued after that, so betwee...

Kamo·3w ago
FixSecurityService

Stop a failed welcome email from destroying the member

MemberCreationService documented steps 4-6 as best effort, and for the emails it was not true. sendVerificationEmail is @Transactional, so it joined the member-...

Kamo·3w ago
FixEmailService

Restore the transaction the attachment overload left behind

baf3c88 added an attachment parameter to sendToUser by moving the whole body into a new six-argument overload. The @Transactional stayed on the five-argument si...

Kamo·3w ago
Fixkamo-internal

The composer is a sub-page, and collapsing no longer eats your text

Four reported problems, one of them destructive. COLLAPSING A PART DESTROYED IT. Collapse UNMOUNTED the editor, and KbArticleEditor is seeded once from a value...

Kamo·3w ago
Fixkamo-shared-library

Bind content_json as JSON, or every insert fails

REPORTED: "Failed to create sales script". The server said exactly why: column "content_json" is of type jsonb but expression is of type character varying ...

Kamo·3w ago
Fixkamo-internal

Impersonate was disabled on every row

Gated on canEnterOrg, which is the VIEWER's own membership — and a platform operator has no membership in the organizations impersonation exists for. So the but...

Kamo·3w ago
Fixkamo-internal

Archived is a SUB-TAB of Sales Scripts, and pad the page

Two bugs, both mine. ARCHIVED WAS A PEER TAB. Active Scripts and Archived Scripts are two views of one screen, not two screens, and they belong as sub-tabs the...

Kamo·3w ago
Fixkamo-asterisk-support

Pin direct_media=no, and correct the "(+) cannot override" claim

FreePBX's PJSip driver defaults direct_media to YES (generateDefaultDeviceSettings, PJSip.class.php:210) and the GraphQL addExtension mutation has no field to o...

Kamo·3w ago
FixEmailService

Stop an attachment holding an IMAP connection open forever

getAttachment returned Jakarta Mail's lazy IMAPInputStream straight out of withStore, which puts the Store back in the pool the instant the lambda returns. Two ...

Kamo·3w ago
September 2, 2026
FixKlusterServices

Add 8777 to the WebRTC endpoint roster

Aiden Perry's extension was created from KamoCRM, which cannot write this file — so it registered over WSS with no DTLS or ICE and its calls would have carried ...

Kamo·3w ago
FixEmailService

Show a pasted screenshot instead of a broken image

Jakarta Mail hands back a MIME header exactly as it arrived, folds and all: RFC 5322 lets a mail header run over several lines by breaking it at a CRLF followed...

Kamo·3w ago
Featurekamo-asterisk-support

Reconcile per-extension WebRTC blocks instead of hand-editing a roster

An extension created through FreePBX's API gets no WebRTC block, so it registers over WSS and then has no DTLS or ICE — the browser softphone shows a connected ...

Kamo·3w ago
FixVOIPService

Apply FreePBX config after every write, or the extension never reaches Asterisk

Extension 8777 (Aiden Perry, kamocrm) was created from KamoCRM on 2026-09-02 and never rang. The FreePBX GraphQL `addExtension` mutation had written `users`, `d...

Kamo·3w ago
Featurekamo-internal

Impersonate, so an operator can open an org as one of its members

Shown beside Enter on every /network view for a platform administrator holding the new IMPERSONATE right. A different right from SYSTEM_USER and deliberately no...

Kamo·3w ago
FeatureSecurityService

Enter a tenant organization as one of its members, from /network

A second door beside the same-org god-mode one. Gated on the new IMPERSONATE platform right via @RequirePlatformRight, where the existing door is gated on the s...

Kamo·3w ago
Featurekamo-shared-library

IMPERSONATE, so an operator can enter a tenant as one of its members

Appended to PlatformRightType rather than inserted: getSortOrder() returns ordinal(), so a right added in the middle renumbers every right below it in the conso...

Kamo·3w 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