KamoCRM

Live Change Log

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

18,891
Total Changes
6,828
Features
5,701
Fixes
30
Projects
Filter by project
All Projects18,891AIService287APIService179BillingService166ConversionService121DaemonService152DocsService275ESigService103EmailService652InitializerService350KBService163KlusterServices778MCPGatewayService280MediaService629RAGService79SecurityService2,066TranslateService62VOIPService266VectorService11kamo-apps29kamo-asterisk-support29kamo-capcha17kamo-capcha-widget4kamo-internal8,885kamo-login346kamo-marketing642kamo-nowww20kamo-register216kamo-shared-library1,896kamo-signer-monorepo73kamolos115
Filter by type
All TypesBuild23CI528Chore798Docs3,295Feature6,828Fix5,701Other1,007Performance175Refactor286Revert23Style45Test181Upgrade1
July 9, 2026
Fixkamo-internal

Stop duplicating the memberId query in the GET proxy

The GET list proxy hand-appended ?memberId= to the apiPath, but forwardToApi already re-appends the browser's query string — producing ?memberId=X?memberId=X, w...

kamo·4mo ago
Fixkamo-internal

Center calendar watermark to container; move selector under logos

- BackgroundWatermark: make ThemeLogo a direct flex child of the container-filling box so sizePercent (e.g. /calendar 60%) is relative to the positioned con...

kamo·4mo ago
Fixkamo-internal

Keep manager open on upload/select; uploads join the slideshow

Members reported the background manager closing after every upload and every select, only one image appearing on the home slideshow, and the "use own" choice re...

kamo·4mo ago
Fixkamo-internal

Repair per-tab *** migration gaps in directory + timeout popup

The *** session moved from a shared cookie to a per-tab sessionStorage carrier (X-***-Token). A few consumers were never updated to match. - Interaction Center...

kamo·4mo ago
Fixkamo-internal

Show the "Manage Background Images" button so members can upload

The Background & Theme section used BackgroundManager under external open-control but nothing ever opened it, so the upload/select dialog was unreachable — you ...

kamo·4mo ago
FixEmailService

Stop serializing computed xoauth2 getter that broke MailCredentials Redis cache

MailCredentials is cached in Redis (GenericJackson2Json). The added `isXoauth2()` boolean getter was serialized as a "xoauth2" property but has no field to read...

Kamo·4mo ago
Fixkamo-internal

Scope by org server-side (empty assocObjectId) — folders/list no longer empty

Keying materials on the org-id string was fragile: the id loses precision through a JS number on the write path and resolves inconsistently across proxy→APIServ...

kamo·4mo ago
Fixkamo-internal

Folders/list empty (org-id precision) + default visibility Team-Members-Only + custom labels

Root cause: materials store assocObjectId as the org id, which round-trips through a JS number on the write path (precision loss >2^53), so reads with the preci...

kamo·4mo ago
Fixkamo-internal

Stop external-images banner flashing on already-allowed messages

The reading pane renders a message from its IndexedDB cache before the network fetch returns, and the cached copy lacks the server remoteImagesAllowed flag (und...

kamo·4mo ago
FixDocsService

Folder create/rename 500 on root folders (Map.of null value)

createFolder/renameFolder built the response with Map.of(..."parentId", parentId), which throws NullPointerException when parentId is null (a root folder) — the...

Kamo·4mo ago
Fixkamo-internal

Masonry layout so mixed-height option cards pack without ragged gaps

Leaf cards are short and parent cards vary with their sub-item count (Calculator has 9 modes, VoIP 2), so a uniform grid left big gaps under the short cards in ...

kamo·4mo ago
Fixkamo-internal

Add missing account-assign proxy route

The lead-account assign/unassign UI called POST/DELETE **************** but the Next.js proxy route was never created — so requests 404'd and surfaced as "Unkno...

kamo·4mo ago
July 8, 2026
FixAIService

Robust vision provider/model selection across vendors

Two-pass selectVisionProvider: prefer any org provider that has an active vision-capable model adapter already emits image_url content and reports supportsVisio...

Kamo·4mo ago
Fixkamo-internal

Persist "display external images" server-side instead of localStorage

The choice now comes from the message's server-recorded remoteImagesAllowed flag and is saved via POST **************** so it's durable and consistent across de...

kamo·4mo ago
Fixkamo-internal

Parent options expose their sub-items instead of being single links

Mail, Docs, VoIP, Calculator and Support are nav options that open a sub-menu rather than navigating, so on the home launchpad they must not be a single link. E...

kamo·4mo ago
Fixkamo-internal

Persist OAuth provider selection immediately so the switch sticks

Selecting Microsoft 365 / Google Workspace / Zoho only navigated to the connect screen without saving, so leaving before completing OAuth reverted to the previo...

kamo·4mo ago
FixEmailService

Scope KamoMail mailbox/domain listing to the org's own domains (cross-tenant leak)

SECURITY: **************** ran 'SELECT email FROM virtual_users' (and **************** 'SELECT name FROM virtual_domains') with no org scoping, so mailbox/domai...

Kamo·4mo ago
Fixkamo-internal

Remember "display external images" per message

The unblock choice lived in the renderer's local state, but switching messages unmounts/remounts the iframe renderer (the reading pane shows a loader between me...

kamo·4mo ago
Fixkamo-internal

Treat ACTIVE status as connected in OAuth provider configs

The Microsoft 365 / Google Workspace / Zoho config views gated their connected state on providerStatus === 'CONNECTED', but the backend EmailProviderStatus enum...

kamo·4mo ago
FixEmailService

Persist selected OAuth provider on callback so it stops reverting to KamoMail

Switching an org to Microsoft 365 (or Google Workspace / Zoho) never stuck: the OAuth callback stored tokens and only flipped status on a pre-existing provider ...

Kamo·4mo ago
FixEmailService

Resolve welcome-email logo from the org theme host, not the apex

Header/footer logos in system emails (welcome/verification) were built as **************** — an apex path that only exists on the Kamo marketing site, so for cu...

Kamo·4mo ago
Fixkamo-internal

Source home from the nav registry, add nav cross-highlight, fix settings scroll

The home page was rendering a stale, separately-maintained feature list (Clubhouse, Feed, Reports, Tasks, Network) that isn't even in the nav registry, so it ex...

kamo·4mo ago
Fixkamo-shared-library

Point-in-time resolvers include SUPERSEDED windows (historical effective-resolution)

All three effective-version resolvers (rate-sheet, guideline, lock-policy) queried only status=ACTIVE, then window-filtered. But supersession flips the prior ve...

Kamo·4mo ago
FixDocsService

Bounds-check assoc-type ordinal lookups (fixes Materials list 500)

DocsService was running a shared-lib built before ImageAssocType.MATERIALS (ordinal 11) was added, so listDocuments' ImageAssocType.values()[11] threw ArrayInde...

Kamo·4mo ago
FixKlusterServices

Move data dir off MinIO FUSE mount to local disk

rspamd's /var/lib/rspamd was hostPath-backed by the rclone FUSE mount of the MinIO shared-files bucket. Every hyperscan recompile / map refresh rewrote files th...

Kamo·4mo ago
FixMediaService

Persist scheduled-material thumb flags via targeted update

Same detached-entity orphanRemoval issue as the conversion pipeline: the headless sweep held a detached ImgDat and save()/merge() cascaded into the images colle...

Kamo·4mo ago
FixConversionService

Persist thumb flags via targeted update, not detached save

The image/video/PDF thumbnail steps set thumb flags on a detached ImgDat and called save(), which merges and cascades into the orphanRemoval images collection —...

Kamo·4mo ago
Fixkamo-shared-library

Reject negative income / asset / liability amounts on section saves

Extends the requireNonNegative guard (already on loan amount + property values) to the core DTI/asset inputs in BorrowerSectionService: employment income ******...

Kamo·4mo ago
FixConversionService

Stop uploads hanging on 'Converting...' — route NATS progress + direct image thumbnails

The conversion-progress publish used NatsMessageService.publish(), which asserts expectedStream=<this service's stream>. The subject **************** resolves t...

Kamo·4mo ago
Fixkamo-internal

Add Marketing to the security-model app editor

The model editor's app list (SERVICE_TYPES) is a hand-maintained mirror of ServiceType.java and was missing MARKETING — so Marketing had no row in the apps tab,...

kamo·4mo ago
FixMCPGatewayService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·4mo ago
FixTranslateService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·4mo ago
FixVOIPService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·4mo ago
FixEmailService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

Kamo·4mo ago
FixKlusterServices

/dev/shm 2Gi (headless Chrome needs >=2GB) + 6Gi mem limit

Jibri's 10-config init aborts with '/dev/shm must be at least 2GB' when shm is 512Mi, crash-looping the recorder. Bump the tmpfs to 2Gi and the memory limit to ...

Kamo·4mo ago
FixSecurityService

Include both desktops in every SSO token, deep-link to the chosen one

Each token carried only its own connection, so the browser's reused json session lacked the other one -> opening Windows after Linux gave 'connection does not e...

Kamo·4mo ago
FixSecurityService

Route borrower submit through the pipeline so it fires **************** (audit #3)

patchLoanFile's borrower submit (DRAFT->APPLICATION_TAKEN) now calls **************** instead of a raw updateLoanFile status set, so the submit produces the has...

Kamo·4mo ago
FixMediaService

Wrap recording upload so MediaService compiles

MinIOStorageService.upload throws a checked Exception that ingest() neither caught nor declared — build break on top of the isGuest fix. Wrap it and rethrow as ...

Kamo·4mo ago
FixMediaService

MeetingParticipant.isGuest() (was getGuest, won't compile); repoint transcribe to generic endpoint

MeetingParticipant exposes isGuest() (primitive boolean getter), not getGuest(). Also point the summary transcribe call at the shared /api/conversion/transcribe...

Kamo·4mo ago
FixKlusterServices

Correct Guacamole branding manifest version field

Manifest used guacManifestVersion:1.0; the bundled extensions use guacamoleVersion. The wrong field made Guacamole reject the branding extension ('Unable to rea...

Kamo·4mo ago
Fixkamo-internal

Stop double-appending ?target in the SSO proxy route

forwardToApi already forwards the incoming query string, so passing the path with ?target= produced **************** -> target='linux?target=linux' -> 400 'Unkn...

kamo·4mo ago
July 7, 2026
FixSecurityService

Resolve session from X-***-Token header in CallerSessionResolver

The kamo-internal -> APIService BFF path forwards the session as the X-***-Token header, but the resolver only read the X-OTK attribute or the *** cookie — so B...

Kamo·4mo ago
FixSecurityService

PatchLoanFile is no longer a status backdoor; unblocking a condition needs the underwrite right; clear cascades

**************** status changes are the pipeline state machine's job (POST /transitions enforces legal arrows + per-arrow role gate + open-blocking-condition ga...

Kamo·4mo ago
Fixkamo-shared-library

Partial condition PATCH can't silently clear the blocking flag; template blocking default honored; publish after commit

**************** boolean -> Boolean so a PATCH that OMITS the field is distinguishable from an explicit false. LoanConditionService.update now null-guards *****...

Kamo·4mo ago
FixSecurityService

Inject KamoDesktop SSO env directly + wire guac-sso into tracked k8s deployment

- @Value reads KAMO_GUAC_SIGNING_KEY / DESKTOP_PASSWORD from env directly (runtime application.yml is configmap-mounted, so property indirection wouldn't bind...

Kamo·4mo ago
FixKlusterServices

Move guacd to pod network (MTU fix) + unicast WoL

guacd on hostNetwork (k1m1 eno49 MTU 1500) vs guacamole pod on cilium overlay (MTU 1420): RDP connected but large frames were dropped across the boundary -> 'Gu...

Kamo·4mo ago
Fixkamo-internal

Sign invited members into meetings via click-time OTK join links

Invite links (chat + email) previously embedded a bare meet-room URL, so recipients landed as anonymous guests instead of themselves. An OTK can't be pre-embedd...

kamo·4mo 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