KamoCRM

Live Change Log

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

18,403
Total Changes
6,535
Features
5,539
Fixes
30
Projects
Filter by project
All Projects18,403AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService622InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,996TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,697kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,826kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,535Fix5,539Other1,001Performance174Refactor282Revert23Style45Test175Upgrade1
September 12, 2026
Featurekamo-internal

Email opt-out chip and panel on the lead page

Beside the lead's email address there is now a chip saying whether the person may be emailed: Emails allowed, Opted out of all email, Paused until a date, Some ...

kamo·2mo ago
FeatureSecurityService

See and change a lead's email opt-out from the lead

A member working a lead can now see whether that person may be emailed, and change it, without the org-wide opt-out settings list. GET **************** answers...

Kamo·2mo ago
FeatureEmailService

An org admin can see and change the whole opt-out list

Settings -> Email -> Opt Out now has its API under /api/email/opt-outs, behind MANAGE_EMAIL_OPT_OUTS (god bypasses): a summary with the last 30 days, the list f...

Kamo·2mo ago
Featurekamo-internal

Settings -> Email -> Opt Out, the organization's do-not-email list

Everyone who asked not to be emailed, in one place. A masthead says how many are off all email and why (unsubscribed, bounced, marked as spam, asked us to stop)...

kamo·2mo ago
Featurekamo-internal

Square, bevelled buttons and a 2px-cornered thumb on every scrollbar

The bar's four buttons (jump to start, step back, step forward, jump to end) are now 20px squares with hard corners, and the thumb keeps only a 2px radius. Both...

Kamo·2mo ago
FeatureEmailService

Every suppression check and bounce goes through the opt-out ledger

SuppressionService now asks EmailOptOutLedger, so a check sees the do-not-email list, pauses and topics alike, and a bounce lands in the same history as an unsu...

Kamo·2mo ago
Featurekamo-shared-library

One opt-out ledger, topics, pauses and a history of every change

The do-not-email list could be written to but not read, changed or explained. This adds the one place it is read and written from, for every service: email_o...

Kamo·2mo ago
Featurekamo-internal

Outbound e-mail hosts, send windows, per-host warm-up and the staged outbox

- Settings → Platform → Configuration gains an Outbound E-Mail Hosts tab, behind the platform right MANAGE_OUTBOUND_EMAIL_HOSTS: the hosts shared with every o...

Kamo·2mo ago
FeatureEmailService

Several outbound hosts per org, sent round-robin, each warmed on its own, inside a send window

An organization's campaign mail now leaves through any number of outbound hosts, one message at a time in rotation, instead of one bulk provider. - Hosts: an o...

Kamo·2mo ago
FeatureKlusterServices

Postfix-bulk accepts any sender from EmailService [skip ci]

The relay is now a platform outbound host that every organization's campaign mail may go through, as whatever From that organization sends as. Only the null sen...

Kamo·2mo ago
Featurekamo-shared-library

MANAGE_OUTBOUND_EMAIL_HOSTS, the platform console's outbound e-mail hosts

A platform right for the outbound e-mail hosts campaign mail leaves through: the hosts shared with every organization and the ones kept for the platform organiz...

Kamo·2mo ago
Featurekamo-internal

Delete, filter and switch off NoReply Outbound rows

The audit page gains a subsystem column and filter, checkbox selection with "select all" and "select all matching", and deletes for one row, the selected rows, ...

Kamo·2mo ago
FeatureEmailService

The NoReply ledger can be filtered by subsystem, pruned, and told what to record

Each row now names the subsystem that sent it and, for a template send, the template key. EmailTemplateService and the campaign sender open a NoReplyOutboundSou...

Kamo·2mo ago
FeatureInitializerService

The unique (campaign, address) index, for a fresh environment

EmailService used to create **************** on every startup; DDL on this cluster belongs here instead. Idempotent, auto-committed (YugabyteDB builds indexes o...

Kamo·2mo ago
Featurekamo-internal

The campaign editor writes edge to edge, merge tokens in their own column

The subject sits under the campaign title and the audience beside the status chip, so the compose step is the email body alone, filling the middle of the page, ...

Kamo·2mo ago
FeatureEmailService

A warm-up day nothing was sent on does not count

A warm-up day used to be the N-th 24 hours from the start whether or not anything went, so turning the warm-up on days before the first campaign silently spent ...

Kamo·2mo ago
Featurekamo-internal

A campaign the backend cannot send says why and how to fix it

EmailService now pauses a campaign instead of failing its recipients one by one when it cannot send it: its From is off the platform relay's domain, or there is...

Kamo·2mo ago
Featurekamo-internal

Warm-up says idle days don't count and draws the dates that slid

A warm-up day in which nothing is sent no longer counts: the run slides forward and the day repeats when sending resumes, which makes switching warm-up on befor...

Kamo·2mo ago
FeatureEmailService

Campaign mail the platform relay would refuse fails at once instead of being retried

The relay sends only as its own domain and answers anything else with a 451, so a campaign whose From is on another domain used to retry every recipient three t...

Kamo·2mo ago
FeatureEmailService

New host warm-up holds an org's campaign mail and releases it at the warm-up's pace

While an org's warm-up is on, the dispatcher leaves its campaigns alone and a releaser sends them one message at a time, the earliest due first across the org's...

Kamo·2mo ago
Featurekamo-internal

Recipient rows carry contacted, and already-sent rows keep their mark beside the status

EmailService's recipient DTO now reports whether the campaign has already emailed each address. The mapper carries it through, together with lastError, and fill...

Kamo·2mo ago
Featurekamo-internal

The campaign From field says when the bulk relay would refuse it

The campaign's own From field, defaulted from the bulk provider, warns when the address is off the provider's domain, as mail that may land in spam. On the plat...

Kamo·2mo ago
FeatureEmailService

Every campaign message names its recipient row in X-Kamo-Ref

The bulk relay logs the header against its queue id and strips it before delivery, so delivery results can be matched to the exact recipient row. The composer'...

Kamo·2mo ago
FeatureEmailService

The relay's delivery reports bounce, block and count campaign mail after hand-off

POST **************** takes the platform relay's reports of what became of each message, matched to the recipient row by the X-Kamo-Ref header or, failing that,...

Kamo·2mo ago
FeatureEmailService

The warm-up's schedule, pacing and health rules

A new sending IP is ramped over fourteen warm-up days. Days 1-7 follow a fixed schedule per pace (conservative, balanced, aggressive); from day 8 each day grows...

Kamo·2mo ago
Featurekamo-internal

Warm-up pacing banner on /marketing/email

While the new host warm-up is pacing, campaigns go out far more slowly than their own settings say, and nothing on the campaign said why. The campaigns workspac...

Kamo·2mo ago
Featurekamo-internal

Typed bulk sender client with field errors and the warm-up endpoints

The client knew a provider status called PENDING that the backend never sends, so a sender that was saved but not yet tested fell through to "Not configured". I...

Kamo·2mo ago
Featurekamo-internal

Connection rule, presets and warm-up view model behind the bulk sender

The pure pieces the new screens are built on, each with tests: - the backend's port-first connection rule, mirrored so the form can say how KamoCRM will conn...

Kamo·2mo ago
Featurekamo-internal

Rebuilt bulk sender tab with a new host warm-up panel

The Bulk Email Sender tab is rebuilt from one long form into a set of cards over a draft of the saved state: - a masthead with the live status (a saved but unt...

Kamo·2mo ago
FeatureEmailService

A campaign cannot be sent or scheduled without a bulk email sender

The dispatcher used to accept such a campaign and then skip it on every tick, leaving it at SENDING with nothing but a log line. sendNow and schedule now refuse...

Kamo·2mo ago
FeatureEmailService

The provider settings api answers with the saved state and names the field it refuses

PUT now returns the full settings state instead of {success: true}, which blanked the form after every save. Fields are validated server-side and refused as 400...

Kamo·2mo ago
Featurekamo-internal

Preview the email as sent, a Custom / No Template audience, and a real From field

Preview: a dialog that renders the editor's own buildBodyHtml() output - the string Save stores and the dispatcher sends - so the audience's header, signature a...

Kamo·2mo ago
FeatureKlusterServices

Sign hello.kamocrm.com with its own customer key, by the From domain itself

Campaign mail leaves as hello.kamocrm.com through postfix-bulk. It gets its own DKIM key (selector customer, published as customer._domainkey.hello), and use_es...

Kamo·2mo ago
FeatureKlusterServices

Postfix-bulk, a second outbound relay for campaign mail, with delivery results fed back

Campaign mail now leaves through its own relay on k3m1 (egress 47.181.8.87) as hello.kamocrm.com, so complaints about bulk mail never touch the reputation of ma...

Kamo·2mo ago
FeatureEmailService

A campaign emails an address at most once, ever

Addresses are matched trimmed and case-insensitively, and a row the campaign has handed to the relay (sent, in flight, bounced, failed, or retried) is now its p...

Kamo·2mo ago
September 11, 2026
Featurekamo-internal

NoReply Outbound, a god-only audit of mail sent as the platform NoReply address

A third section under Mail, shown only to god-eligible members, opens /messages/outbound/noreply: every message EmailService handed to the relay as the platform...

Kamo·2mo ago
FeatureEmailService

A ledger of every message sent as the platform NoReply address, readable by god only

Recorded in EmailSmtpService at the one place mail reaches the relay, and decided by the From address, so transactional templates, campaigns and article shares ...

Kamo·2mo ago
Featurekamo-internal

A tracking link can land on the white-label CRM fees article

Adds **************** to the destinations the tracking-link picker offers on /marketing/tracking, with its own icon. The path is locale-free like its siblings: ...

Kamo·2mo ago
Featurekamo-marketing

Let a reader send the seat-fee article to someone they know

A "pass it on" form at the foot of **************** reached from a chip at the top and a line after the seven questions. The reader names up to three people and...

Kamo·2mo ago
FeatureEmailService

Email an article to someone, as the platform org, with a working opt-out

A visitor on the marketing site can send the seat-fee article to up to three people. POST /api/internal/article-share (X-Internal-Auth, like every other /api/in...

Kamo·2mo ago
Featurekamo-marketing

Put every page in /sitemap.xml itself, and list pages only in the languages they have

/sitemap.xml was an index, so opening it showed 79 file names rather than the site's pages. - /sitemap.xml is now one <urlset> with every page: 18,700 of them,...

Kamo·2mo ago
Featurekamo-internal

A department's Select checks the members it is showing

The Directory's per-department Select used to switch the whole list into select mode with nothing checked, and read "Done" until pressed again. It now checks ev...

Kamo·2mo ago
Featurekamo-marketing

Public service announcement on who keeps software seat fees

New page at **************** explaining, for non-technical owners, how resold white-label platforms work: a flat agency license, per-seat fees the agency keeps,...

Kamo·2mo ago
Featurekamo-marketing

List every page in every language it exists in, and make each page agree

/sitemap.xml listed each page once, as its English URL. The 17,843 changelog entries had no language alternates at all, and every page's own hreflang named all ...

Kamo·2mo ago
FeatureKBService

Say which locales each public article is really translated into

The marketing site's sitemap now lists every language version of every help-center, documentation and API-reference article, and each article page names the oth...

Kamo·2mo ago
FeatureSecurityService

Say which locales each entry is really translated into

The marketing site's sitemap now lists every language version of every entry, and each entry page names the others as its hreflang alternates. A translation row...

Kamo·2mo ago
Featurekamo-internal

Void an organization from Platform -> Configuration -> Organizations

The Organizations tab gains Active and Void sub-tabs, and each organization's drawer a way to void it — or, on the Void tab, to restore it. - Active / Void sub...

Kamo·2mo ago
FeatureMediaService

The roster no longer names a voided organization

An organization voided from Platform -> Configuration -> Organizations (orgs.is_active = FALSE) does not exist anywhere but the console's Void tab. findOwnedOrg...

Kamo·2mo ago
FeatureBillingService

Active and Void tabs in the platform org directory

The console's Organizations tab now splits into Active and Void sub-tabs. A voided organization is orgs.is_active = FALSE (set by SecurityService's void endpoin...

Kamo·2mo ago
FeatureSecurityService

Void an organization, and let no way in reach a voided one

Platform -> Configuration -> Organizations can now void an organization. The void is orgs.is_active = FALSE; this commit adds the action and makes every way INT...

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