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
September 13, 2026
FeatureKlusterServices

Route fbl@/abuse@hello.kamocrm.com complaint reports to EmailService

Spam-complaint feedback-loop reports (ARF, RFC 5965) and abuse reports sent to fbl@ and abuse@hello.kamocrm.com are rewritten to complaints-mail.invalid and han...

Kamo·1mo ago
FeatureEmailService

One eligibility engine decides who a campaign may mail

Every list add (a member's, an audience's, a copy) and the send itself ask one engine whether an address may receive the campaign, cheapest check first: syntax,...

Kamo·1mo ago
Featurekamo-internal

See who a campaign reaches, and why not everyone

- Campaign preflight card: "1,000 selected · 742 eligible · 258 skipped", with each reason (unsubscribed, bounced before, disposable, role address…) opening...

Kamo·1mo ago
Featurekamo-internal

An organizations-created icon beside every member and team member

The Members and Team Members tabs on /account get a column beside Name: a filled building in the brand colour with a count for somebody who has created organiza...

Kamo·1mo ago
FeatureSecurityService

The organizations each member created, on the member lists

GET **************** and /team-members-contractors now carry createdOrgs per person: the names of the organizations they own (orgs.user_id_owner, set once by PO...

Kamo·1mo ago
FeatureSecurityService

An organization's and a member's own page transition

The page transition is now chosen at three levels, resolved member, then organization, then platform — for the choice of transition and, one transition at a tim...

Kamo·1mo ago
Featurekamo-internal

An organization's and a member's own page transition

The page transition is now chosen at three levels. The platform's stays on Platform Administration → Transitions; an organization can choose its own on Behavior...

Kamo·1mo ago
FeatureInitializerService

Page_transition_overrides, an organization's and a member's own page transition

One row per owner (ORG with the org id, MEMBER with the member id): a catalogue token or NULL to follow the level above, and properties for only the transitions...

Kamo·1mo ago
Featurekamo-internal

Five more page transitions, each with its own properties

Aperture, Curtain Split, Venetian Blinds, Liquid Wipe and Shatter join Tile Dissolve. Every transition is now an effect in app/lib/transitions/effects, drawn by...

Kamo·1mo ago
September 12, 2026
Featurekamo-internal

Add recipients and Send to latest on a campaign that has gone out

- A campaign's progress page has Add recipients: the recipients step in a dialog (upload, IDs, the All boxes, addresses), saved in slices as the editor save...

Kamo·1mo ago
FeatureEmailService

Running campaign counts, and Send to latest

Counts: - Every status change moves a campaign's counts by exactly what it changed: a send +1 sent, a later bounce report -1 sent +1 bounced, an add +n, a r...

Kamo·1mo ago
Fixkamo-shared-library

Saving a campaign never writes back its counts

The five counters are running totals now, moved only by EmailService with relative updates ("sent_count = sent_count + 1"). Mapped updatable = false, so a campa...

Kamo·1mo ago
Featurekamo-internal

Tile Dissolve's tile size and tile colour, set per transition on the Transitions tab

Each transition now carries its own properties, stored per transition beside the active one, so switching transitions keeps each one's choices. Tile Dissolve ha...

Kamo·1mo ago
FeatureSecurityService

Tune each page transition, tile size and colour to start

GET and PUT /api/security/page-transition answer options for every catalogue id, normalised from PAGE_TRANSITION_OPTIONS: a missing, unreadable or out-of-range ...

Kamo·1mo ago
FeatureInitializerService

**************** beside the transition

A TEXT column holding each transition's properties as JSON keyed by transition id. No backfill: null means every transition's defaults, like page_transition bes...

Kamo·1mo ago
Featurekamo-shared-library

Each page transition's properties, kept per transition

**************** maps PAGE_TRANSITION_OPTIONS, a JSON object keyed by transition id, e.g. **************** Keyed by transition so tuning one survives switching ...

Kamo·1mo ago
Fixkamo-internal

A remounted shell no longer leaves the page cover standing on reload and sign-in

On every reload and every first document after sign-in the cover stayed up over the page, while in-app navigation revealed it fine. PresenceWrapper renders bare...

Kamo·1mo ago
Fixkamo-internal

The recipient list's last page is the last page, and addresses sit level with their rows

Last reads a full page back from the end, so when a list does not divide into whole pages it overlaps the page before — and was numbered from the start, as page...

Kamo·1mo ago
Featurekamo-internal

Shorten admin bar labels to Billing, Stats, Roles, Block, Log

The panel heading keeps each screen's full name via titleKey, as White Labeling and Apps already do.

kamo·1mo ago
Featurekamo-internal

The page cover and its Tile Dissolve reveal, in place of the loading screen

Between pages the main view area (never NavTop or NavPri) is now covered in the organization's primary colour with its full logo centred on it, painted with the...

Kamo·1mo ago
Featurekamo-internal

A Transitions tab to choose and preview the page transition

Platform Administration → Configuration → Transitions, gated by the new MANAGE_PLATFORM_TRANSITIONS platform right and registered everywhere a console tab is: t...

Kamo·1mo ago
Featurekamo-internal

The campaign recipient list is paginated, with totals

The recipients grid on a campaign now pages like a list of billions should: First, Previous, Next and Last, rows per page, "101–150 of 3,916" and "Page 3 of 79"...

Kamo·1mo ago
FeatureEmailService

A campaign's recipient list pages both ways, with totals, at any size

The list was already read a page at a time, but only forwards, as an endless scroll with no total — and a status filter found its rows by walking the list in ad...

Kamo·1mo ago
Featurekamo-shared-library

The page transition setting, and the right that chooses it

**************** holds a catalogue token, NULL meaning the shipped default. MANAGE_PLATFORM_TRANSITIONS gates Platform Administration → Configuration → Transiti...

Kamo·1mo ago
FeatureInitializerService

**************** ahead of every reader

A catalogue token, NULL meaning the shipped TILE_DISSOLVE, so nothing is backfilled. Order 0 because the entity maps the column from this build on, and an earli...

Kamo·1mo ago
FeatureSecurityService

Every tab reads the page transition, and an operator chooses it

GET /api/security/page-transition answers any signed-in session, since every tab needs it to uncover a page; an unset or unknown value reads as TILE_DISSOLVE. T...

Kamo·1mo ago
FixEmailService

Saving a campaign no longer fails with "Restart read required"

The bulk-provider row (hosts, send window, warm-ups, campaign audiences) was read inside callers' longer transactions. A campaign save writes the row's audience...

Kamo·1mo ago
Featurekamo-internal

"All leads / accounts / applications" on a campaign, at any size

Each id box on the campaign editor now has an "All …" box beside it. Ticked, the box folds into a live panel for everyone of that kind the signed-in member can ...

Kamo·1mo ago
FeatureEmailService

A campaign can go to every lead, account or application a member can see

"All leads / accounts / applications" is a rule, not a list. It is stored with the campaign (the bulk-provider blob, campaignAudiences — no DDL), runs on the ac...

Kamo·1mo ago
FixSecurityService

The id resolver never hands a campaign an address the member can't read

Resolving lead ids read each address through the lead masking DTO and skipped only blank ones. Masking now obfuscates instead of blanking ("s*****@gmail.com"), ...

Kamo·1mo ago
Fixkamo-internal

The Opt Out tab keeps its content off the card walls

SettingsView's white card and TabPanel carry no padding; every settings tab supplies its own, and this one did not, so its heading, buttons, figure cards and li...

kamo·1mo ago
FeatureEmailService

The preference page in every language the product speaks

The page behind every unsubscribe link only spoke English. It now speaks all 22 languages the product UI ships: English, Chinese, Hindi, Spanish, French, Arabic...

Kamo·1mo ago
Featurekamo-internal

Pages refetch on org change events instead of loading once

Every successful write through forwardToApi now publishes rt.org.{orgId}.{domain} on core NATS (the domain is the first backend path segment, skipping security/...

Kamo·1mo ago
FixAIService

An address opted out of marketing is not written to by the sales agent either

The agent's email check was topic-less, so an address that had stopped newsletters and campaigns - but was not on the whole do-not-email list - could still get ...

Kamo·1mo ago
FeatureEmailService

An unsubscribe by email is honoured, not dropped

Every bulk and shared-article message offered unsubscribe@<sender's domain> in its List-Unsubscribe header, but nothing read that mailbox - for a tenant it was ...

Kamo·1mo ago
Featurekamo-internal

The Opt Out tab and the lead chip update live

Both subscribe to **************** (EmailService and SecurityService publish after every committed change; MediaService relays), so a recipient unsubscribing, a...

kamo·1mo ago
FeatureEmailService

Opt-out screens refresh live when anyone changes the list

The ledger now tells OptOutChangePublisher after every committed change - a recipient on the preference page, a bounce, a member in Settings - and it publishes ...

Kamo·1mo ago
FeatureSecurityService

A lead's opt-out change refreshes open screens live

The ledger here tells OptOutChangePublisher after the change commits, which publishes rt.org.{orgId}.email-opt-outs on core NATS (this service's JetStream strea...

Kamo·1mo ago
Featurekamo-shared-library

The opt-out ledger says when an organization's list changed

An optional listener, told after the change commits, so the screens showing the list can refresh live instead of loading once. It carries only the organization:...

Kamo·1mo ago
FeatureKlusterServices

Mail to unsubscribe@hello.kamocrm.com reaches EmailService

Every bulk and shared-article message offers an unsubscribe by email (List-Unsubscribe mailto), but mail to that address went to postmaster and was never acted ...

Kamo·1mo ago
Fixkamo-marketing

Label every prerendered page site-hunt, so a deploy's refresh reaches it

getHuntOffer returned early when the hunt was not configured, and the build never is, so the build made no fetch and the pages it baked carried no site-hunt tag...

Kamo·1mo ago
FeatureAIService

The sales agent honours the organization's email opt-out list

Before any email touch the outbound gate now asks the organization's email opt-out ledger about the contact's address. The address is the one the contact key po...

Kamo·1mo ago
Fixkamo-marketing

Refresh the site hunt's footer line on every pod after a deploy

exec on deploy/ reaches one replica, and each keeps its own cache, so the other served pages without the line for up to ten minutes after every deploy.

Kamo·1mo ago
Fixkamo-marketing

Every hunt window wears the site's own pop-up, not a black box

The signal card, pill, exit panel, console and whisper were flat rgba(8,8,8) boxes in monospace with an off-brand green, and read as something dropped on top of...

Kamo·1mo ago
Fixkamo-internal

Pages and settings tabs fill their width instead of a centred column

Drop the max-width and auto-margin caps that held pages and settings tabs to a slim centred column. Where lifting a cap would leave one column of form fields st...

Kamo·1mo ago
Fixkamo-internal

The organization owner sees the Opt Out tab, its menu entry and its card

A brand-new right is held by nobody the day it deploys; gating only on MANAGE_EMAIL_OPT_OUTS would hide the tab from whoever could grant it. Matches Sales Scrip...

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