KamoCRM

Live Change Log

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

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
September 12, 2026
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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo ago
FeatureEmailService

Buzz a member's phone when mail arrives

MessageIndexer is already a durable consumer of email.inbox.> and already resolves the mailbox OWNER, so it is where this belongs — one notification per genuine...

Kamo·1mo ago
FeatureEmailService

Preview variables for the two email-change letters

Both new canonical templates render in the console the moment this service is rebuilt onto the shared library that carries them; without a sampleVariables arm t...

Kamo·1mo ago
FeatureEmailService

Resolve mailbox OAuth credentials per organization

Google, Microsoft 365 and Zoho mailbox connects now read whichever app the org is on — its own registration if it brought one, otherwise Kamo's platform app. T...

Kamo·1mo ago
September 3, 2026
FeatureEmailService

A library of footer badges, and the row each scope prints

The signature footer went from one image to a row of them. The library is org-wide; the selection and its order are per scope, so an image uploaded while editin...

Kamo·1mo ago
FeatureEmailService

Internal endpoint for importing contacts from an external system

VOIPService's JustCall integration needs to land a customer's contacts in the right member's address book, and this is where contacts are written: a Contact map...

Kamo·1mo ago
FeatureEmailService

Let a sent message carry images inside its body

The body had four possible shapes and send() could only build three. The multipart/related branch — the one that puts an image where the HTML's cid: points at i...

Kamo·1mo ago
September 2, 2026
FeatureEmailService

Send the meeting invitation the guest list implied

Adding somebody to an event's guest list did not tell them. Only a reminder ever wrote to a guest, and a reminder reaches a member in-app and an outside address...

Kamo·1mo ago
FeatureEmailService

Let a transactional send carry one attachment

Added for scheduled reports, which are a rendered PDF or workbook that has to reach people who may have no account — a link would not be a delivery for them. T...

Kamo·1mo ago
August 28, 2026
FeatureEmailService

A member is only told about apps they have

A notification kind belongs to an app — a lead callback is Leads, a meeting reminder is Meetings — but raise() asked only whether the member had muted it. So a ...

Kamo·1mo ago
August 27, 2026
FeatureEmailService

Preview variables for the bug-status-changed template

The admin preview renders a template against a sample variable map, and this one has no arm — so an org administrator opening SYSTEM_BUG_STATUS_CHANGED would se...

Kamo·1mo ago
FeatureEmailService

Persist the two company phone toggles

Reads and writes userCompanyPhoneMain / userCompanyPhoneTollFree on the signature field config, so the Content tab's new switches survive a save. saveFieldConf...

Kamo·1mo ago
August 26, 2026
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·1mo ago
August 25, 2026
FeatureEmailService

Serve Google's OAuth callback on /api/email/oauth/callback

The platform console needs an address to show an operator setting up the Google Workspace registration, the way VOIP has /api/voip/oauth/callback. The only emai...

Kamo·1mo ago
August 22, 2026
FeatureEmailService

Serve the home-page unread digest from the index, never from IMAP

A widget on the home page is on screen for everyone all day, whether or not anybody is reading mail — and a member's IMAP connections are a shared budget of ten...

Kamo·2mo ago
FeatureEmailService

Publish and accept an event's guest audience

Kamo·2mo ago
FeatureEmailService

Resolve an event's guest audience into people

Kamo·2mo ago
FeatureEmailService

Serve and announce the home-page calendar widgets

CalendarWidgetService answers what a widget actually needs and the calendar page hasEarlier/hasLater so an arrow greys out instead of offering an empty page. Th...

Kamo·2mo ago
August 21, 2026
FeatureEmailService

Scan the org's mailboxes for a lead's past e-mail on request

Serves the "Associate Past E-Mails w/ Lead" tick-box. Given a lead and the address just recorded on it, read INBOX and Sent of every mailbox in that lead's orga...

Kamo·2mo ago
August 14, 2026
FeatureEmailService

Publish every change of state, not only arrivals

A member has this open in more than one tab about as often as not, and often on a phone as well. Each of those holds its own socket and draws its own bell, and ...

Kamo·2mo ago
FeatureEmailService

A paged, filterable history

The centre could answer one question: the most recent hundred, unread or not, with no way to ask for what had already been read. So anything a member had seen w...

Kamo·2mo ago
FeatureEmailService

Read one event by id

The lead page holds a callback's event id and wants to reopen it in the same dialog the calendar uses, so it needs to be able to fetch the event on its own. Sc...

Kamo·2mo ago
FeatureEmailService

One integer for the mail badge, and count what the index path is worth

Three things, all about knowing rather than assuming. The nav-top unread badge fetched the entire folder tree and picked INBOX out of the result — the most exp...

Kamo·2mo ago
FeatureEmailService

Prove a folder unchanged with HIGHESTMODSEQ, then serve it from the index

Turns the index-backed message list on, by fixing the thing that made it unsafe rather than by flipping the flag. The old check compared message counts and UID...

Kamo·2mo ago
FeatureEmailService

Serve a folder listing from the index when it can prove it is current

The rows behind a message list are already in Postgres — the metadata index holds sender, subject, date, size, attachment and flags for every message it has see...

Kamo·2mo ago
August 11, 2026
FeatureEmailService

Size each mailbox against the organization's storage

Dovecot now enforces a per-mailbox limit, and nothing was setting the column it reads. This writes it nightly, after the storage snapshot so the capacity being ...

Kamo·2mo ago
August 10, 2026
FeatureEmailService

Manage an event's guest list

The dialog could show who was already on an event but never add or remove anyone; the only guest operation was re-notifying people who were somehow already ther...

Kamo·2mo ago
FeatureEmailService

Let the conflicts endpoint exclude the event being edited

ConflictDetectionService has always taken an excludeEventId; this endpoint passed null. Without it an event overlaps itself, so the moment the event dialog star...

Kamo·2mo ago
FeatureEmailService

Sync the organisation calendar to phones, without opening a hole

The shared calendar has no owner, so the account-scoped DAV listing could never return it: company events were plainly there on the web and invisible on every p...

Kamo·2mo ago
FeatureEmailService

Point at YugabyteDB and use PostgreSQLDialect

CockroachDB has been replaced by YugabyteDB. Connection strings move from cockroachdb-public:26257 to yb-tserver-service:5433, and the Hibernate dialect from **...

Kamo·2mo ago
August 9, 2026
FeatureEmailService

Persist and serve the whole contact, not just its name

The REST layer serialised the JPA entities directly. A Contact has no mapping to its emails, phones, addresses, organisations, URLs, IMs or relationships — thos...

Kamo·2mo ago
FeatureEmailService

Measure each org's own KamoMail mailboxes

Walks every mailbox Kamo hosts and records, per arrival day, the RFC822 bytes it holds — headers, body and encoded attachments, across every folder including Tr...

Kamo·2mo ago
August 7, 2026
FeatureEmailService

Let /sendable drop the alias group for callers that open mailboxes

The /messages mailbox switcher offers the same set as the composer's From field, minus one thing: an alias cannot be opened. Mail addressed to it lands in the m...

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