KamoCRM

Live Change Log

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

17,500
Total Changes
5,986
Features
5,284
Fixes
30
Projects
Filter by project
All Projects17,500AIService251APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService576InitializerService329KBService151KlusterServices740MCPGatewayService251MediaService602RAGService79SecurityService1,847TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,349kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,657kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore774Docs3,254Feature5,986Fix5,284Other994Performance165Refactor278Revert23Style42Test160Upgrade1
August 26, 2026
FixKlusterServices

Allowlist Telnyx in both fail2ban jails

Adds the Telnyx US signaling addresses (192.76.120.10, 64.16.250.10 — sip.telnyx.com) to ignoreip now that the carrier trunk is provisioned. Also overrides ign...

Kamo·2mo ago
Fixkamo-asterisk-support

Predial hooks must Return(), not MacroExit() — Asterisk 21

Asterisk 21 removed the Macro() application family outright, and FreePBX reaches these hooks with Gosub() (extensions_additional.conf: **************** The stoc...

Kamo·2mo ago
FixKlusterServices

Make fail2ban actually run — enable Asterisk's security log

fail2ban has never started on this PBX. Its asterisk-security jail watches /var/log/asterisk/security, a file Asterisk never created: FreePBX generates logger_l...

Kamo·2mo ago
FixBillingService

Scan the shared-lib email.billing repository package

@EnableJpaRepositories lists packages explicitly, so MailboxBillingDayRepository was invisible and the service refused to start outright — caught by booting it,...

Kamo·2mo ago
Fixkamo-internal

Never lock the provider an org is already using

Two production orgs run 26 and 41 live mailboxes while holding no mail add-on code, so the picker would have told them KamoMail requires the KamoMail Hosting ad...

kamo·2mo ago
Featurekamo-internal

Review emergency access, and gate the last two surfaces

The break-glass review endpoint had a client function that nothing called: every emergency chart access was recorded and there was no screen to read them on. A ...

kamo·2mo ago
Featurekamo-internal

Raise and send a claim from the queue that found the work

The revenue cycle read seven queues and could not raise a claim. Each write now hangs off the queue that surfaced the need for it rather than living on a screen...

kamo·2mo ago
Featurekamo-internal

Correct a patient's details

Details could be entered once and never fixed. The panel sits under the summary rather than in a settings screen, because the moment somebody notices a misspelt...

kamo·2mo ago
ChoreBillingService

Rebuild against current kamo-shared-library

CI clones shared-lib at image build time. This service was last built before shared-lib gained GMAIL_PERSONAL and OUTLOOK_PERSONAL, so its deployed enum cannot ...

Kamo·2mo ago
Featurekamo-internal

Set up visit types and working hours

The first screen a new practice needs, and the one that did not exist. Booking offers visit types from one table and searches availability against another, so a...

kamo·2mo ago
Featurekamo-internal

Write a prescription, an order and a vaccination

The chart could show all three and create none. One panel rather than three, because they are one moment: a clinician finishing a visit writes the prescription,...

kamo·2mo ago
Featurekamo-internal

Choose who pays for mailboxes, and show the count per invoice

The cost-mode control appears only once a billing group exists — with none the setting changes nothing, and offering it invites the belief it is broken. Invoice...

kamo·2mo ago
FeatureInitializerService

Schema for member-connected inboxes

The old member-only unique on member_imap_configs is discovered by shape rather than by its Hibernate-generated name, and dropped only after the wider key exist...

Kamo·2mo ago
Featurekamo-shared-library

Count connected personal mailboxes

Kamo·2mo ago
Docskamo-internal

Close out SW4

Nine departures. The two that matter most: this plan's own Self-Review asserted a type was consistent across three places, and it was consistent and wrong; and ...

kamo·2mo ago
FeatureSecurityService

Edit demographics, set up the schedule, bill and post

The last four rights that named operations which did not exist. EDIT_PATIENT_DEMOGRAPHICS: a patient's details could be entered once and never corrected. A fie...

Kamo·2mo ago
ChoreSecurityService

Rebuild against kamo-shared-library for SW4 quote conversion

An empty commit. QuoteConversionService, QuoteConversionBilling and the five quote defect fixes all live in the shared library, and none of them reaches anyone ...

Kamo·2mo ago
FeatureSecurityService

POST /quotes/{uid}/convert

On QuoteController rather than POSController: this controller enforces a right on every handler, POSController enforces none on any order endpoint, and it resol...

Kamo·2mo ago
FeatureEmailService

Back the personal-mailbox API the console already calls

Eighteen client methods over twelve routes that had been shipping with no backend behind them. A member reaches only their own inbox and configures it only once...

Kamo·2mo ago
Featurekamo-shared-library

Personal mailbox entities and two consumer providers

GMAIL_PERSONAL and OUTLOOK_PERSONAL were offered by the picker and were not members of the enum, so selecting either produced an unusable org.

Kamo·2mo ago
Featurekamo-internal

A closed head spins away instead of blinking out

Right-clicking a head and choosing Close, or putting one in the goal — thrown in or carried in and dropped — now plays a 500ms exit: a counter-clockwise three-q...

kamo·2mo ago
FeatureSecurityService

Prescribe, order and immunise

The chart could display medications, orders and vaccinations and could produce none of them. The read paths, the FHIR renderers and the safety queues were all b...

Kamo·2mo ago
Featurekamo-internal

Explain the mailbox charge where mailboxes are made

Console rows price mail per mailbox with the live count; the mailboxes tab, department picker and provider help all state what counts, that a shared mailbox is ...

kamo·2mo ago
Featurekamo-internal

Gate provider choice on the add-on, show mailbox charges

Locked cards say which add-on unlocks them rather than being hidden or silently dead, and the gate fails open so a billing outage cannot strand an org mid-migra...

kamo·2mo ago
FixSecurityService

22 of the 26 clinical rights were never enforced

Only the four population-level rights — bulk export, quality measures, portal administration and EHR settings — were ever checked. Prescribe, sign, cosign, plac...

Kamo·2mo ago
FeatureInitializerService

Both mail add-ons are priced per mailbox

Prices unchanged at $5 and $2; only the unit changes. Copy now states what actually counts, and that aliases are unlimited and free.

Kamo·2mo ago
FeatureBillingService

Expose mailbox counts, entitlement and cost mode

Kamo·2mo ago
FeatureBillingService

Bill e-mail per mailbox, reconciled nightly

Quantity is server-computed under a reserved key a request body cannot reach, and pushed through the existing amend path — so Stripe's CREATE_PRORATIONS charges...

Kamo·2mo ago
Docskamo-internal

QuoteConversionResult.orderUid is a String, not a UUID

Order extends BaseEntity, whose id is a Long — only Quote, QuoteOption and QuoteLineItem extend BaseUuidEntity. The plan declared UUID and its own Self-Review a...

kamo·2mo ago
Featurekamo-shared-library

An accepted quote becomes an order

acceptPublic wrote four columns and appended an event. No Commitment, no Order, no Transaction — the Quote javadoc's claim that accepting mints a Commitment des...

Kamo·2mo ago
Docskamo-internal

SW4's dictionary keys land in the dictionary repo

Task 6a's file list named kamo-internal/messages/en.json, which is gitignored and cannot be committed. The step's prose was right; the list was not.

kamo·2mo ago
Featurekamo-shared-library

Count an org's billable mailboxes

Adds PER_MAILBOX pricing, the mail cost mode, and a stereotype-free aggregator: hosted bills every box on the server, third-party bills only what was mapped int...

Kamo·2mo ago
FeatureInitializerService

Schema for per-mailbox billing

Kamo·2mo ago
Featurekamo-internal

Each org chooses what an order takes from an accepted quote

A radio group, not a switch — both are legitimate ways to sell, and neither is 'off'. Shows which is the default and what each does to a real charge: for a thre...

kamo·2mo ago
FixEmailService

A contested primary is a 409, not a 500

The catch-all turned an expected refusal into a server error, which lost the message the member needed and made a routine conflict look like an outage in the lo...

Kamo·2mo ago
Fixkamo-internal

Ask a host that exists for the organization ?org= names

A new organization was created with its logo, colours and three backgrounds. All of it provisioned correctly into public/wienerschnitzel/ — 15 objects, the righ...

kamo·2mo ago
FixSecurityService

An organization can be looked up by the reference ?org= carries

GET /org/ref/{ref} — the same projected record as /org/domain/{host}, for an organization named by its id or its web alias. Nothing could answer for one. The s...

Kamo·2mo ago
FeatureSecurityService

The config body carries a scalar, and absence means unchanged

updatePOSConfig bound Map<String, List<String>>, a shape that cannot carry quoteConversionBilling at all. Widened to Map<String, Object>. A key that is absent ...

Kamo·2mo ago
Featurekamo-shared-library

Each org chooses what an order takes from an accepted quote

There is no platform-wide right answer. A maintenance contractor on a three-year plan bills each period; a capital-equipment installer bills the contract up fro...

Kamo·2mo ago
Featurekamo-internal

Say who holds a contested mailbox, and that aliases are free

The snackbar replaced the server's 409 message with a generic failure, so a manager could not tell which member held the mailbox. Adds the note that sharing a m...

kamo·2mo ago
FixEmailService

Refuse a primary mailbox another member holds

Primary is a login identifier, so a silent takeover changes which account an address authenticates from a screen that never mentions logins. Assign still works ...

Kamo·2mo ago
Fixkamo-internal

Every catalogued event fires where the event actually happens

Most of the sound catalogue was configurable and inaudible. Two causes, both silent by construction: a sound that never plays looks exactly like one the member ...

kamo·2mo ago
FixSecurityService

Actually measure the bulk-export bucket

StorageDomain.BULK_EXPORTS shipped declared, documented as "measured by scanning the object store", and referenced by nothing. It reported zero for every practi...

Kamo·2mo ago
Docskamo-internal

Plan SW5, the flat-rate task book

The spec's premise that no line carries a labour duration went stale hours ago — SW3 landed labourMinutes and taskCode on ServiceLineItem, and the javadoc on ta...

kamo·2mo ago
FeatureInitializerService

One primary member per mailbox

is_primary was unique per member only, so two members could both claim a mailbox — and PrimaryMailboxIdentityLookup returns null on an ambiguous address, so tha...

Kamo·2mo ago
Docskamo-login

Plan per-mailbox billing and the personal-mailbox backend

Plans B and C of 3. Self-review closed five gaps: nothing set mail_cost_mode, nothing server-side stopped a billing group buying mail add-ons, the invoice mailb...

Kamo·2mo ago
Fixkamo-internal

Dropping in the goal scores, and aiming at it no longer gathers

Two complaints about the same gesture — taking a head to the goal. **Dropping in the goal did nothing.** Scoring lived entirely inside the throw RAF loop, whic...

kamo·2mo ago
Docskamo-login

Correct the spec — StorageAutoExpandSweep already exists

The spec claimed no server-driven-quantity reconciler existed to reuse and listed the storage auto-expand columns as dead. Both false: the sweep reads them nigh...

Kamo·2mo ago
Docskamo-login

Design per-mailbox e-mail billing and add-on gating

Bills e-mail by the mailbox rather than the seat, gates provider choice on the add-on that covers it, and attributes each mailbox to the billing group that shou...

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