KamoCRM

Live Change Log

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

18,392
Total Changes
6,527
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,392AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService619InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,995TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,692kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,824kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,527Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
September 23, 2026
FeatureEmailService

A member can put a checklist on their calendar, once

Checklists live in KBService and the calendar owns only WHEN, so a scheduled checklist is an ordinary member event carrying sourceType CHECKLIST, the checklist ...

Kamo·1mo ago
September 18, 2026
FeatureEmailService

The deliverability history names the member behind each change

Settings → Email → Deliverability shows an address's opt-out history with who made each change, but HistoryView sent only the actor's name, so the page could no...

Kamo·1mo ago
FeatureEmailService

An opt-out row carries the member behind its last change

The opt-out list named who made each address's last change (lastActorName) but not who they are, so the settings page could not open their member card. Each row...

Kamo·1mo ago
September 17, 2026
FeatureEmailService

Drip campaigns

A drip is an automated sequence of emails a person enters when something happens: a lead arrives (by hand, imported, or from an integration), a lead's status or...

Kamo·1mo ago
September 16, 2026
FeatureEmailService

A campaign's replies go to NoReply, the member's e-mail, or a custom address — NoReply by default

The editor's Reply-To becomes three choices (CampaignReplyTo), kept in the existing reply_to column. No DDL. - NO_REPLY (empty column, the default): Reply-To: N...

Kamo·1mo ago
FeatureEmailService

Bounces to org sending domains come home, test sends are signed, and the relays' DNS is read

Async bounces. A campaign's envelope sender is its From at the organization's sending domain, whose MX (through the CNAME to contact.kamocrm.com) is the shared ...

Kamo·1mo ago
FeatureEmailService

Campaign mail is signed as, sent from, and routed by its verified sending domain

A campaign may name its own From on a verified domain; otherwise it goes as the org's bulk sender — which must itself be on a verified domain (saveSender refuse...

Kamo·1mo ago
FeatureEmailService

Domain Setup's API, the shared relay's sender map, and a sweep that confirms records live

**************** GET the tab (VIEW_BULK_EMAIL), GET lookup for the add form, POST add, POST {id}/check, DELETE (MANAGE_BULK_EMAIL); every write answers with the...

Kamo·1mo ago
FeatureEmailService

Sending domains — add one, read its DNS record by record, verify it, know what an address may do

A sending domain (news.acme.com) is kept in the org's encrypted bulk provider blob with its DKIM key. SendingDomainChecker reads what receivers will see — SPF e...

Kamo·1mo ago
FeatureEmailService

DKIM keys and a relaxed/relaxed rsa-sha256 signer for organizations' sending domains

DkimKeys generates a domain's RSA-2048 key (kept in the org's encrypted bulk provider blob) and the TXT value a member publishes at kamoXXXXXX._domainkey.<domai...

Kamo·1mo ago
FeatureEmailService

DNS for sending domains — each domain's own nameservers first, SPF evaluated, DNS provider named

LiveDnsResolver asks the zone's authoritative nameservers (found through 1.1.1.1/8.8.8.8), so a record a member just saved at their DNS provider is seen at once...

Kamo·1mo ago
FeatureEmailService

The shared org relay (47.181.8.86) is seeded for every organization; the platform relay stays KamoCRM's

PlatformRelayProperties now knows both in-cluster relays: postfix-bulk (47.181.8.87, hello.kamocrm.com) and postfix-orgs (47.181.8.86), with the egress address,...

Kamo·1mo ago
FeatureEmailService

The campaigns widget reads by stage, the stages the campaigns screen files by

The launchpad widget's read now groups and counts campaigns by the stages /marketing/email's tabs use: In-Progress (sending), Not Started (draft or scheduled), ...

Kamo·1mo ago
FeatureEmailService

Archive a campaign, and the widget leaves archived ones out

POST **************** and /unarchive (MANAGE_BULK_EMAIL) set and clear the campaign's archivedAt, and CampaignDTO carries it. The /marketing/email screen files ...

Kamo·1mo ago
FeatureEmailService

A live read and live frames for the Email Campaigns home widget

GET /api/email/widget/campaigns is the launchpad widget's one read, built for a pane that sits on every campaign viewer's home page all day: lean rows with no b...

Kamo·1mo ago
September 13, 2026
FeatureEmailService

Blind copies on the service-to-service template send

SendTransactionalRequest takes an optional bcc list, carried through sendToUser and deliver onto the SMTP envelope — including the platform-address retry — so a...

Kamo·1mo ago
FeatureEmailService

Name the recipient in a header that headers-only complaint reports keep

Microsoft's feedback-loop reports now carry only the original message's headers, with anything shaped like an address masked. Every campaign message carries X-K...

Kamo·1mo ago
FeatureEmailService

Open and click tracking, complaint reports by email, capped outbox counts

- Tracking: the composer wraps a campaign's web links in a signed redirect (<base>/c/<token>?u=&s=) and adds an open pixel (<base>/o/<token>), as each org c...

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
September 12, 2026
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
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
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
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
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
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
FeatureEmailService

A real preference page behind every unsubscribe link

The unsubscribe link opened a bare confirm-or-leave card. Someone who only wanted fewer emails had no way to say so, and nothing told them why they were being m...

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
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
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
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
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
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
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
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
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
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
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
September 7, 2026
FeatureEmailService

A guest a service put on an event is actually told about it

InternalCalendarService wrote the attendee rows and stopped. It never set sendInvites and never called EventInviteService, so a guest arriving through the servi...

Kamo·2mo ago
FeatureEmailService

Let a browser report the two conditions only it can see

Every notification so far is raised by the service that watched something happen. These two cannot be: whether a member looked at a conversation within five sec...

Kamo·2mo ago
September 6, 2026
FeatureEmailService

Preview variables for SYSTEM_BUG_COMMENT

Without them the template editor renders the new letter with holes where the report number, the sender and the button go, which reads as a broken template rathe...

Kamo·2mo ago
September 5, 2026
FeatureEmailService

Let a member connect their OWN calendars and contacts

The personal calendars panel asked for GET **************** which was never mapped -- so it failed on every open -- and for Google and Microsoft it had no way t...

Kamo·2mo ago
FeatureEmailService

Give every provider's folder tree the same shape before any client sees it

Reporting a folder's SPECIAL-USE attribute was not enough, because a server only sends one if it is configured to — and the KamoMail Dovecot in production sends...

Kamo·2mo ago
FeatureEmailService

Connect Google and Microsoft calendars over OAuth, on the app the mailbox already uses

The CalDAV/CardDAV tab's Connect via OAuth button raised an alert saying the flow was not implemented and to configure credentials through the API. It now runs ...

Kamo·2mo ago
FeatureEmailService

Send an organization's mail as its own domain when its SPF says we may

The From address was chosen by asking who hosts the organization's MAILBOXES. That is a different question from the one that matters, and it was wrong in both d...

Kamo·2mo ago
September 4, 2026
FeatureEmailService

Send an org's own hostname as the mailbox OAuth redirect

An organization that brought its own Google or Entra app registered that app in its own account, under its own brand, and is now told on its settings screen to ...

Kamo·2mo ago
FeatureEmailService

Lock the shared sweeps, and run two pods

Nine of EmailService's ten scheduled sweeps have a shared effect and now take a named lease before running. The most consequential is CampaignDispatcher: at two...

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