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

The email a scheduled report arrives in

REPORT_SCHEDULED, registered in CANONICAL_KEYS — absent from that list a template is a permanent 404, whatever files exist beside it. The body states the data ...

Kamo·3w ago
Fixkamo-internal

Give the mail columns back their own scrollbars

The offline-banner fix stacked MessageBrowser's root into a flex-col and moved the three mail columns into a row of their own. That row was `flex flex-1 min-w-0...

Kamo·3w ago
FeatureSecurityService

The lists a share dialog picks from, and a share target that fits every id

GET **************** returns the organization's people, departments and roles as picker options, in one call and in one shape. Built on the reporting option pro...

Kamo·3w ago
Featurekamo-internal

Step through every search hit, not only the newest

The search at the top of a chat window marked every occurrence of the query and then scrolled to exactly one of them — the newest — with nothing to say how many...

Kamo·3w ago
Featurekamo-shared-library

A service-work report, and a share target that fits every id

ServiceWorkReport is the tenth seed report and the one that makes row-level scope real rather than merely present. Commerce carries the platform's own/all pair ...

Kamo·3w ago
Testkamo-internal

Guard the confirmation on a single-message delete

A member reported deleting the wrong email from /messages: the row's trash icon fired straight through to the API, so one stray click on the right edge of a row...

Kamo·3w ago
Refactorkamo-internal

Drop the container ref nothing reads

containerRef was declared and attached to MessageBrowser's root element, but containerRef.current is never read anywhere in the file — it has been dead since it...

Kamo·3w ago
Fixkamo-internal

Give the SEND TO AI switch an accessible name

The switch set its aria-label through `inputProps`, which MUI 7 drops on Switch without a warning — so the label never reached the DOM. The words SEND TO AI bes...

Kamo·3w ago
Fixkamo-marketing

The summary line double-counted sections

A section page is itself one of the articles, so "291 articles, 16 areas, 29 sections" invited the reader to add up three numbers that do not add up. One number...

Kamo·3w ago
PerformanceKBService

Stop repeating the ancestor chain on every node of a tree

A node inside a tree already knows where it is -- its position is the tree. Sending the ancestor chain on each one meant every article carried two ancestor refs...

Kamo·3w ago
Fixkamo-internal

Open Send To AI from the report window instead of dispatching

The SEND TO AI switch handed the report over the moment it was filed. It POSTed a bodyless dispatch, which left SecurityService to choose the instruction, the m...

Kamo·3w ago
Featurekamo-internal

Pin the well-known folders to the top of the sidebar

Inbox, Drafts, Sent, Junk, Trash and Archive stop moving. They hold that order at the top of the folder list, and everything the member made sits underneath und...

Kamo·3w ago
Featurekamo-marketing

Rebuild the index as a map of the product

It was one recursive list of all three hundred articles, indented by depth. Everything was on the page and nothing was findable, and the page weighed 3.9 MB. T...

Kamo·3w ago
Fixkamo-shared-library

ReportDefinition never shipped the narrower rights its resolver reads

ReportScopeResolver, its test and this class's own javadoc all name alsoGrantedBy, and ReportSecurityScope has had SELF/TEAM/ORGANIZATION since the framework la...

Kamo·3w ago
Fixkamo-internal

Reach the conversation on screen when it is pages down the list

Switching the navigator to the right tab was only half an answer. The list pages by last activity, 30 rows at a time, and the conversation a member has maximize...

Kamo·3w ago
Featurekamo-internal

The Report Studio — a library, and one renderer for every report

/reports is a shelf, not a card grid: two hundred identical rounded boxes is a wall to scan, and a row gives a report's name room to be read. Saved views nest u...

Kamo·3w ago
FixKBService

A list read shipped every article's body, and a category page listed nothing

Two defects on the public reads, both visible on kamocrm.com/help-center. The index served 3.9 MB of HTML. tree-by-parent-slug returns every node with its full...

Kamo·3w ago
Fixkamo-internal

Stop the offline banner standing as a column beside the mail

Same defect the search results bar had, in the same container. MessageBrowser's root was a horizontal flex row whose children are the columns of the mail client...

Kamo·3w ago
FeatureSecurityService

Run, export and schedule the Report Studio's reports

The service half of the framework: the catalogue, the run, the pickers, four exporters, saved views and schedules. Authorization is explicit on every path, bec...

Kamo·4w ago
Featurekamo-shared-library

The Report Studio framework, and nine reports built on it

A report is now a Java class here and nothing anywhere else. ReportDefinition describes what a report is, what it may be asked, which columns it has and how eac...

Kamo·4w ago
Docskamo-internal

Say that the status-label save is a whole set, not a patch

The endpoint's meaning changed underneath this client: a status left out of the list is now a deletion rather than a no-op, which is what lets a label be remove...

Kamo·4w ago
Featurekamo-internal

The importer, and three things it taught us

Publishes the corpus by driving the real KBService API rather than writing rows -- a direct INSERT skips the version row, the kb.article.published event that is...

Kamo·4w ago
Fixkamo-marketing

Keep made-up article paths out of the index

The canonical check already stops a wrong path rendering the article -- it serves the not-found page instead. What it cannot do is change the status code: this ...

Kamo·4w ago
TestSecurityService

Pin the status-label body an org sends to drop a label

The two shapes that used to fail: an empty list, which is what clearing the last remaining label sends and what the handler rejected as malformed, and an entry ...

Kamo·4w ago
Fixkamo-internal

Send a cleared status label as a removal, not as silence

Emptying a custom label box and saving did nothing. The save built its payload from the labels that had text in them, so a box the org had just cleared was not ...

Kamo·4w ago
FixSecurityService

Accept a blank status label as the removal it is

The PUT is the org's complete set of custom labels, so it has to be able to carry an emptied box. Two things stopped it: an empty list was rejected as a malform...

Kamo·4w ago
Fixkamo-shared-library

Let an org put a custom status label back to blank

A status label had no way to be removed. The settings screen saved through an upsert-only bulk write, so the only thing a request could say was "this status is ...

Kamo·4w ago
Fixkamo-internal

Do not claim nothing matched when a filter hid the matches

The empty-list explanation added with the search results bar keyed off the query alone, so it also fired when the search had matched plenty and the Unread or St...

Kamo·4w ago
FixKBService

Article translation has never worked

deleteByArticleUidAndLocale is a @Modifying query and JPA refuses to run one outside a transaction. Nothing on this path ever opened one, so every locale of eve...

Kamo·4w ago
Fixkamo-internal

Stop mail search opening a strip down the side of the screen

MessageBrowser's root element is a horizontal flex row whose children are the columns of the mail UI. The search results bar was written as a bottom bar -- bord...

Kamo·4w ago
Fixkamo-internal

Follow the maximized chat window's tab in the navigator

Maximizing a chat popup left the conversation navigator on whatever tab it was already showing. `visibleRows` drops every row outside the active bucket, so the ...

Kamo·4w ago
ChoreSecurityService

Rebuild against the shared library that persists the quote contact

The market writer landed one commit after this service was last built, and CI clones kamo-shared-library at image-build time — so the deployed jar still has the...

Kamo·4w ago
Docskamo-internal

The Report Studio design — Java-defined reports, a generic renderer

Reports are defined as Java classes in kamo-shared-library and rendered by one capability-driven frontend, so adding a report is a new class and nothing else. ...

Kamo·4w ago
Featurekamo-shared-library

Persist a market's quote-contact rule, and refuse a half-stated one

The DTOs carried quoteContactMode and quoteContactMemberId but no writer read them, so the setting round-tripped through the form and was silently dropped. Both...

Kamo·4w ago
Featurekamo-internal

Choose who a quote names as the customer's contact

The market dialog gains "Quote's Future Contact" under Enable quotes: the lead's assigned agent, a choice made per quote, or one explicit person picked with the...

Kamo·4w ago
FixKBService

Saving an article blocked on 21 translation calls

@Async was inert. **************** called translateArticle on the same bean, so the call went straight to this and never reached the proxy that makes it asynchr...

Kamo·4w ago
Fixkamo-internal

Stop Send To AI resetting the boxes while they are being typed in

A member filed this against the Send To AI dialog: the description "often resets back to the original description while you are editing it". It reset the instru...

Kamo·4w ago
FeatureSecurityService

Honour a market's contact rule wherever a quote names somebody

The staff detail, the staff preview and the customer's own page now resolve the contact through one method, so they cannot disagree about who is printed on the ...

Kamo·4w ago
Featurekamo-internal

The article corpus, and the pipeline that builds it

307 articles across 16 categories and 29 sections, from the 248 draft articles under Documentation/ plus 59 written here: every category and section landing pag...

Kamo·4w ago
Featurekamo-shared-library

A market decides who a quote names as the customer's contact

QuoteContactMode gives a LeadMarket three answers: the lead's assigned agent (resolved per read, which is what every quote does today and what a null column mea...

Kamo·4w ago
FeatureInitializerService

Columns for a market's quote contact and the per-quote snapshot

A market names its answer in QUOTE_CONTACT_MODE (+ QUOTE_CONTACT_MEMBER_ID when that answer is one explicit person), and each quote keeps the contact it was rai...

Kamo·4w ago
Fixkamo-internal

A window that raised itself has not been read

The chat unread badge was invisible everywhere — the Chat button, the Interaction Center, the hexhead — and the reason was not the badge. All three read one cou...

Kamo·4w ago
Fixkamo-marketing

Point at the real org, keep the tree in the URL, show related articles

KB_ORG_ID was "1". The help center lives in org 1168485648209608710, so every KB read on this site missed -- /help-center rendered its empty state no matter wha...

Kamo·4w ago
FixMediaService

Announce a message only once it can be read

POST /sessions/{guid}/messages is @Transactional, and the NATS publish of the message has always waited for the commit — with a comment saying exactly why: publ...

Kamo·4w ago
Featurekamo-internal

Curate an article's related articles

KbRelatedPanel is one component in three places: it curates in the composer and the editor, and reads back on the article view. Adding an article here also adds...

Kamo·4w ago
FeatureKBService

Related articles, and a public path that keeps the tree

Three things, all reaching the same page. Related articles. KbArticleRelationService owns the symmetric "see also" links: list, set, suggest, and a clear that ...

Kamo·4w ago
FeatureInitializerService

Migration for KB_ARTICLE_RELATIONS

Mirrors KbArticleRelation in kamo-shared-library. Written explicitly rather than left to ddl-auto so the UID and DATE_CREATED defaults live in the database, whi...

Kamo·4w ago
Featurekamo-shared-library

Article-to-article relations

KB_ARTICLE_RELATIONS holds the curated "see also" links between articles in one knowledge base. Rows are per direction and the pair is kept symmetric by KbArtic...

Kamo·4w ago
Fixkamo-internal

Add the missing form-fillable route, and stop offering ungranted actions

Two defects behind one report: the PDF editor would not open, and delete was offered to a member who may not delete. **The editor.** DocManager posts to /api/d...

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