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 28, 2026
FixEmailService

The KamoMail domain check reads once a minute, and rows off an org's domains leave every list

SP99-T1-f, finished (SP98 Task 8). SP99's final review already refuses a KamoMail binding whose address is not on a domain the organization holds (95c58af); thi...

Kamo·6h ago
FixEmailService

An AI organiser's invitations carry the AI disclosure its email does

Event invitations wear no compose template, so an invitation, update or cancellation organised by an AI member carried none of the disclosure its email carries ...

Kamo·7h ago
FixEmailService

A late delivery still raises NEW_EMAIL and buzzes the phone; only IDLE is judged by age

NewMailAnnouncer's 30-minute Date-header gate, there for IMAP IDLE reconnect replays, also dropped Dovecot push arrivals, which report a delivery (MessageNew) a...

Kamo·7h ago
PerformanceEmailService

A template icon is drawn through Batik once, not on every send

InlineImageTransport memoised a drawing only within one message, so every send that wore the compose template decoded and transcoded the same handful of social ...

Kamo·7h ago
FixEmailService

A From's mailbox id picks a signature only when the caller may send as it

The compose identity took fromAddress.id at its word: E1's send and E4's render check the From's address and the sending mailbox, never the id, so a member coul...

Kamo·7h ago
TestEmailService

Stopping the repeat from an edited instance leaves that instance as it showed

SP98-F-2. The count-exhausted way into a split that leaves one event was pinned by fdd44fc; this pins the other way in, an explicit stop from an edited instance...

Kamo·8h ago
FixEmailService

The groupware provider finds a series by its UID as its master

SP98-F-3. CalendarService.findEventByUid read "the one row with this UID" in a calendar, and an edited instance of a series is a row of its own under the series...

Kamo·8h ago
FixEmailService

An inbound invitation answers with its summary, as the account that received it

SP98-F-5. **************** returned the CalendarEvent entity, whose attendees point back at their event, so writing it recursed until the stack overflowed; it n...

Kamo·8h ago
FixEmailService

Address books are found, and reached only by their owner with the web's rights

SP98-F-4. CardDAV wrote resourcetype as empty text for the home, every book and every card, so no client ever found an address book; a book is now *************...

Kamo·8h ago
FixEmailService

A calendar edit changes only what it sends; a new one without a zone takes the member's

The calendar create and edit bound the UserCalendar entity, whose defaults (zone UTC, visible, sort order 0) stood in for every field a body left out. KamoMobil...

Kamo·8h ago
FeatureEmailService

Personal-mailbox connects send the api.kamouniverse.com redirect

The owner has added **************** to the platform Google and Microsoft consoles, keeping the api.kamocrm.com one. Both hosts serve the path.

Kamo·8h ago
TestEmailService

The OAuth-default guard reads the platform API host from the shared constant

Follows 8f68912. The guard asserted that the YAML defaults use the paths the settings screen advertises, but it hard-coded the api.kamocrm.com host. The default...

Kamo·8h ago
FeatureEmailService

The platform's Gmail, Microsoft 365 and Zoho connects send api.kamouniverse.com redirects

The owner added **************** (Google) and **************** (Microsoft, Zoho) to the platform apps' consoles and kept the api.kamocrm.com ones, so both are v...

Kamo·8h ago
FeatureEmailService

The platform organization's letters are signed KamoUniverse, not its legal name

The platform org's title is the company's legal name, "KamoCRM Inc.", and it stays in legal text. Its letters now carry the brand, its short title "KamoUniverse...

Kamo·9h ago
FixEmailService

An alias goes only to a member of the caller's own organization

POST /api/email/aliases took any memberId: an administrator could create an alias in their organization that forwards to another tenant's member, and read that ...

Kamo·9h ago
FixEmailService

Only an open god-mode window bypasses a tenant right, never GD alone

Every EmailService rights check let a session with GD through ("GD passes everything"), but GD is god-mode ELIGIBILITY, permanently true for the operators who h...

Kamo·9h ago
FeatureEmailService

EmailService sends, links and names the platform as kamouniverse.com

The platform's primary apex is kamouniverse.com; kamocrm.com stays served in full. What EmailService writes today now names the primary apex, and what it recogn...

Kamo·10h ago
FixEmailService

KamoMail binds only an address on a domain the organization holds; the provider needs its right

The cross-tenant read path parked as SP99-T1-f. A self-registered organization could point its provider at its own IceWarp or Exchange (PUT /api/email/provider ...

Kamo·11h ago
FixEmailService

Indexing a listed page can no longer fail the listing

recordSyncedPage was @Transactional and caught every exception of its own. The index repositories join the caller's transaction, so a write that met a concurren...

Kamo·16h ago
FixEmailService

Basic sign-in asks SecurityService's real credential check

DavAuthFilter posted Basic credentials to **************** which never existed (405), so every username-and-password sign-in from iOS or DAVx5 was answered 401 ...

Kamo·19h ago
FixEmailService

A mail domain, and every account on it, belongs to the organization that proved it

The KamoMail server's virtual_domains and virtual_users are shared by every tenant, and nothing stopped one tenant from writing to another's part of them: - PO...

Kamo·22h ago
TestEmailService

OrgPrimaryDomain may read an organization's domains

It is the one rule the no-reply sending domain is chosen by, for the three files already allowed here; it builds no link. Completes e43179d.

Kamo·22h ago
FixEmailService

An organization's NoReply domain is chosen by name, not by row order

The campaign From, the transactional Reply-To and the provider default domain each took "the first root org_domains row". Organization.getDomains() is unordered...

Kamo·22h ago
September 27, 2026
FixEmailService

A meeting invite answers with a summary, not the entity graph

Sending or updating a meeting invite answered with the CalendarEvent entity. Its attendees point back at their event, so Jackson recursed until the stack overfl...

Kamo·1d ago
FixEmailService

A composer's meeting invite goes into the organizer's own calendar

MeetingInviteController handed MeetingInviteService.sendInvite the session's member id in the user-id slot, and sendInvite looked the calendar up with findByUse...

Kamo·1d ago
September 25, 2026
FixEmailService

A signature's icons do not put a paperclip on the message

"kamo Marketing teaser" listed with a paperclip and opened with nothing to download. It has no file: the two parts it carries are the 14px phone and email icons...

Kamo·3d ago
FixEmailService

A calendar message's plain-text part says what its HTML says

The text/plain alternative of every calendar message was "You've been invited to: " + subject, so an instance cancellation read "You've been invited to: Cancell...

Kamo·3d ago
FixEmailService

Let the WebDAV verbs through Spring Security's firewall

StrictHttpFirewall admits only GET, HEAD, POST, PUT, PATCH, DELETE and OPTIONS, and answered every PROPFIND, PROPPATCH, REPORT, MKCOL and MKCALENDAR to /dav/** ...

Kamo·3d ago
FixEmailService

A moved series keeps its days, its end and its exceptions; a lead callback never repeats

A whole-series move (ALL, or THIS_AND_FOLLOWING) now carries the rule with it (spec D-9): UNTIL moves by the same local step, so the last instance stays; a week...

Kamo·3d ago
FeatureEmailService

Dovecot push authoritative for KamoMail; NEW_EMAIL no longer self-raisable

POST /api/notifications/self is removed with SELF_RAISABLE: NEW_EMAIL is raised by NewMailAnnouncer and CHAT_MESSAGE by MediaService, so a browser has nothing l...

Kamo·3d ago
FixEmailService

CalDAV reads are authorised, bodies are generated, and a phone's PUT is parsed

Calendars are listed as calendar collections of events, resources are named by the UID their calendar-data states (encoded in hrefs), writes pass the read gate,...

Kamo·3d ago
FixEmailService

The email.* host no longer reaches EmailService's server-to-server endpoints

The email-route IngressRoute sends every path on an email.* host straight to EmailService, past the API gateway, so the gateway's carve-outs (master spec sectio...

Kamo·3d ago
DocsEmailService

SP08 disclosure columns name the real reason they are nullable

The field-config PUT writes NULL when a request does not carry the setting, and Hibernate inserts that NULL rather than the column default. The old comment blam...

Kamo·3d ago
FeatureEmailService

An emailed invitation keeps its recurrence, edited and cancelled instances

An invitation to one date of someone else's series stays the event it describes instead of being refused as an orphan instance, and a series whose organiser mov...

Kamo·3d ago
FeatureEmailService

Guests hear about one moved or cancelled instance; invitations state the repeat

The instance's ics names the whole guest list and goes to every guest already told; a cancelled instance outranks every notice sent about it; an all-day invitat...

Kamo·3d ago
FixEmailService

An organization with no domain still sends its letters

A domain is optional when an organization is created, but every transactional letter such an org sent threw "has no domains; cannot build NoReply from-address" ...

Kamo·3d ago
FixEmailService

Ics import and export work — rows in, rows out, series included

Import upserts each UID group (master, canonical rule, EXDATEs, edited and cancelled instances) with no reminders and no invitations; E11 reports {created, upda...

Kamo·3d ago
FeatureEmailService

Provision an AI member's mailbox for the SP02 MAILBOX hire step

POST **************** (spec E6, §4.12) behind KAMOAI_INTERNAL_SECRET: KamoMail creates <first.last>@<verified domain> (base, base2 … base99), other providers as...

Kamo·3d ago
PerformanceEmailService

Resolve each ics TZID once per file

Kamo·3d ago
TestEmailService

MailSearchWiringTest registers the outgoing composer EmailController takes

EmailController gained OutgoingMailComposer in 3908372; the wiring test's Docstor list did not, so it failed with UnsatisfiedDependencyException. OutgoingMailCo...

Kamo·3d ago
FeatureEmailService

Watch active AI members' mailboxes for arrivals

AiMailboxWatcher keeps a pod-local "ai" IDLE claim on every active AI member's IMAP-reachable mailbox (ARTIFICIAL, record active, membership ACTIVE), skips mail...

Kamo·3d ago
FeatureEmailService

Meeting emails wear the organizer's compose template; escape event fields

Invite, update, cancel and RSVP bodies are wrapped for the sending member and their data: images leave as cid: parts (InlineImageTransport). **************** su...

Kamo·3d 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