KamoCRM

Live Change Log

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

17,393
Total Changes
5,908
Features
5,260
Fixes
30
Projects
Filter by project
All Projects17,393AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,829TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,327kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,637kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,908Fix5,260Other993Performance165Refactor278Revert23Style42Test159Upgrade1
April 30, 2026
FixSecurityService

Mint owner OTK with grant-all rights without DB round-trip

After **************** assigns the Administrator role and writes member_rights_applied, the OTK-minting block was re-reading those rows via **************** ins...

Kamo·5mo ago
Fixkamo-internal

Show Plans & Billing tab regardless of root-org status

The !isRootOrg gate hid the tab on root orgs and blocked org owners and self-viewers from reaching their billing page from "My Account". The PlansBillingTab its...

kamo·5mo ago
Fixkamo-internal

Drop in place — jump every member, no softPush on release

The drift on release was softPushCluster firing on the user-drop path. A mega-cluster's bounds extend in all directions from the anchor, so the PADDING-margin /...

kamo·5mo ago
Fixkamo-internal

Drop firmly in place — tail-only throw + jump() to clear velocity

The previous fix still let heads drift on release because: 1. Throw detection averaged velocity across the full 110ms window. A user who flicked then decele...

kamo·5mo ago
Fixkamo-internal

Drop in place after a paused drag instead of drifting

Two cooperating bugs caused dropped heads (single or post-gather) to fly off to seemingly random positions when the user dragged fast, slowed to a stop, then re...

kamo·5mo ago
April 29, 2026
Fixkamo-internal

Cancel inherited drag velocity on release

The drag handler updates the head's motion value with rapid mx.set(nx) calls, which framer-motion uses to compute velocity. When the release path triggered a so...

kamo·5mo ago
Fixkamo-internal

Crispen hexagon outline at all sizes/states

Four sources of softness eliminated: - **************** on the SVG - **************** on the visible outline so the stroke width does not stretch (and blur) u...

kamo·5mo ago
Fixkamo-login

Refuse when session orgID does not match host org

auto-login accepted any *** and minted an OTK pointing back at it, regardless of which org the destination internal.* host belongs to. A stale or cross-org *** ...

Kamo·5mo ago
Fixkamo-internal

Per-cluster spacing + same-size grouping rules

Cluster cell and hex adjacency are now derived from the cluster's largest member instead of the global scale, and follower MVs include a center-alignment offset...

kamo·5mo ago
Fixkamo-internal

Hide popover when Invite to Meeting opens the dialog

The popover used to stay open underneath the meeting dialog because the dialog was conditionally rendered inside the popover's target gate. Capture the invitee ...

kamo·5mo ago
Fixkamo-internal

Robust English fallback for missing and empty locale translations

- mergeWithFallback now treats empty-string locale values as untranslated, falling back to the English value instead of rendering nothing - Replace bare NextI...

kamo·5mo ago
Fixkamo-internal

Update orders page account uid type from number to string

AccountSummary.uid is now a string (Long precision fix). Also remove parseInt comparison and type="number" from the manual account ID field.

kamo·5mo ago
Fixkamo-shared-library

Use CommerceMarket.getId() instead of getUid() in provisionCompSubscription

CommerceMarket uses @Id UUID id (not uid), so Lombok generates getId().

Kamo·5mo ago
Fixkamo-internal

CustomerMemberId is member ID string, resolve accounts by primaryMemberId

- posApi: AccountSummary uid string, add primaryMemberId; **************** customerMemberId string; **************** customerId string - SubscriptionOrderWizard...

kamo·5mo ago
Fixkamo-shared-library

Serialize customerMemberId as string to preserve Long precision

- AccountSummaryDTO: annotate uid with **************** and add primaryMemberId string field populated from primary_member_id - CreateSubscriptionOrderRequest: ...

Kamo·5mo ago
Fixkamo-internal

Complete next-intl for System Diagnostics

Wire remaining MySQL, Redis, statistics, request, and accordion UI copy to components.settings.diagnostics keys; use locale-aware time and translated heap badge...

kamo·5mo ago
Fixkamo-internal

Legacy getCurrentSubscription stub must throw, not return null

Returning null made FeaturesManager treat every org as having no subscription (billingLoaded=true, hasSubscription=false), locking all feature toggles behind an...

kamo·5mo ago
Fixkamo-internal

Ambient json modules for gitignored messages/*.json imports

`tsc` and the IDE resolve `messages/` JSON after merge without requiring committed files under messages/. Extend include for types/**/*.d.ts.

kamo·5mo ago
Fixkamo-internal

Move account settings help panels to message keys

Replace all hardcoded help copy on the organization account page with scoped useTranslations keys. Extend i18n-audit to report files missing translation hooks f...

kamo·5mo ago
Fixkamo-internal

Wire organization account hero and tabs to i18n keys

Use **************** strings for SettingsView title, subtitle, and tab labels so the UI shows translated copy instead of raw placeholders left in dictionary ove...

kamo·5mo ago
Fixkamo-internal

Esign signer and toolbox modifier tooltips

kamo·5mo ago
Fixkamo-internal

Add navtop availability labels and softphone voicemail strings

Add components.navtop status* keys across locales so the header presence dropdown shows translated labels. Add **************** in English. Remove an unused tra...

kamo·5mo ago
Fixkamo-internal

Resolve STATUS_CONFIG scope errors on POS detail pages

Validate agreement status against STATUS_TRANSITIONS and derive commitment status keys from STATUS_TRANSITIONS so module-level helpers do not reference STATUS_C...

kamo·5mo ago
Fixkamo-internal

Load org logos from MinIO theme public path like dashboard

Use getThemePublicBaseForDomain so logo URLs match getThemePath()/img/logo.svg instead of legacy /domain/.../kamosite paths that 404 and fell back to initials.

kamo·5mo ago
Fixkamo-internal

Add missing nav-top strings and scope translations

English messages listed components.navtop.* keys for Mail/Docs/Voip buttons but never defined hi/welcome, branches, account, credits, calendar, chat, etc., so n...

kamo·5mo ago
Fixkamo-internal

Resolve nav-pri labels showing raw i18n keys

Use namespaced next-intl translators for nav and components.nav.navPri so lookups resolve against the merged message trees; add panel aria strings under navPri;...

kamo·5mo ago
Fixkamo-internal

Add MessageBrowser i18n strings and restore load error copy

next-intl threw MISSING_MESSAGE for components.messages.browser.* keys missing from en.json, breaking /messages render. Add English strings, use loadMessagesFai...

kamo·5mo ago
FixVOIPService

Build recording MinIO object key like imaging stream

Omit the extension when FILE_EXT is null/empty so the object name matches RecordingImagingService and ImagingController. Java string concat with null produced {...

Kamo·5mo ago
Fixkamo-internal

Cancel dial if hangup called before sdk.invite resolves

Race condition: hangup() during connecting had no session to terminate yet (sdk.invite is awaited before wireSession), so the call connected anyway. Added cance...

kamo·5mo ago
Fixkamo-internal

Auto-enter new org after creation so member lands with their own role and rights

After org creation the session remained in the parent context (no admin rights), leaving the new org owner unable to see settings. Now the create wizard fetches...

kamo·5mo ago
Fixkamo-internal

Allow end call during connecting, disable AI assistant, remove queue tab

- End call button is now active and red during the connecting state so calls can be cancelled before they connect - Disabled the AI Assistant nav button (greyed...

kamo·5mo ago
FixVOIPService

Resolve call history extension from member_voip_config, not phone_extension

**************** was NULL for some extensions even when member_voip_config correctly mapped the member to their extension. Using member_voip_config (same source...

Kamo·5mo ago
Fixkamo-internal

Full touch support for softphone popup on tablets

- Add touch-action: manipulation + WebkitTapHighlightColor to iconBtnStyle so window control buttons (minimize/maximize/close) respond instantly on touch - Ad...

kamo·5mo ago
Fixkamo-asterisk-support

Add go-sql-driver/mysql v1.7.1 checksum to go.sum

go mod tidy without source files is a no-op, so the mysql checksum was never added. Generated the correct h1 hashes via a throwaway golang:1.22-alpine container...

Kamo·5mo ago
Fixkamo-shared-library

Handle legacy ordinal strings for CountryType via AttributeConverter

DB rows had country stored as ordinal integers (e.g. "186" for UNITED_STATES) instead of enum names, causing IllegalArgumentException on findAll(). CountryTypeC...

Kamo·5mo ago
Fixkamo-internal

Cancel translate jobs instantly by running tsx in background

When Forgejo cancels a workflow, bash waits for any foreground child to finish before processing the signal — so a running tsx locale job would block cancellati...

kamo·5mo ago
Fixkamo-asterisk-support

Move ASTERISK_CDR_DSN to local config.json, not CI/CD secrets

CDR credentials are local to each FreePBX server and have no business in the CI/CD pipeline. Operators add ASTERISK_CDR_DSN directly to their config.json alongs...

Kamo·5mo ago
FixSecurityService

Allow elevated access on getDomainById and verify-dns endpoints

Top-level org owners and system members were getting 403 on getDomainById and verify-dns because those endpoints checked isUserMemberOfOrg directly. Adds hasEle...

Kamo·5mo ago
Fixkamo-internal

Show existing org domain instead of entry form when no custom domain

Fall back to the org's platform subdomain as the display domain so DnsProgressView renders rather than DomainEntryForm when no custom external domain exists. Al...

kamo·5mo ago
FixVOIPService

Surface imaging fallback when provider has no call history

KamoPBXProvider.getCallHistory now returns null instead of throwing **************** so the 501 response no longer bypasses the imaging fallback. The provider c...

Kamo·5mo ago
Fixkamo-internal

Restore NavPri panel labels and LeadHistory column headers

NavPri: salvage-keys grabbed href URLs as label values and swapped label/description pairs for Accounts, KB, and Notes nav panels. LeadHistoryPanel: MUI bgcolo...

kamo·5mo ago
Fixkamo-internal

Show platform domain context when no custom domain is set

Surface the active *.kamocrm.com hostname in the domain entry form so users can see their current platform domain instead of a blank entry screen. Also fixes ve...

kamo·5mo ago
Fixkamo-internal

Checkpoint translations per chunk and per locale on main

Persist locale JSON after each API chunk so cancellation loses at most one batch. CI translates one locale per process and commits/pushes after each so finished...

kamo·5mo ago
Fixkamo-internal

Checkpoint translations per chunk and per locale on main

Persist locale JSON after each API chunk so cancellation loses at most one batch. CI translates one locale per process and commits/pushes after each so finished...

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