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 17, 2026
FeatureSecurityService

Lifestyle logo uploads, config.json keys, and the LIFESTYLE watermark

The lifestyle logo is a fourth logo per brand (company and white-label), the decorative rendition the background watermark now draws by default. Its fallback is...

Kamo·1mo ago
Featurekamo-shared-library

Lifestyle logo columns, and LIFESTYLE as the watermark default

The lifestyle logo is a fourth piece of branding artwork per brand, beside the full logo, the simple logo and the tab icon: the decorative rendition the backgro...

Kamo·1mo ago
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
FeatureSecurityService

An imported lead is recorded as imported

LeadImportController created every row with the two-argument createLead, so a lead's history said source API with nobody acting, exactly like one sent in throug...

Kamo·1mo ago
Fixkamo-shared-library

Chained drips hear when someone finishes a drip

A drip that starts when someone finishes another drip listens for the engine's own DRIP_COMPLETED events, but the recorder's trigger map left that kind out, so ...

Kamo·1mo ago
Featurekamo-internal

The campaign editor's Reply-To is a choice — NoReply, Member's E-mail or Custom, NoReply by default

The free-text Reply-To under the From becomes CampaignReplyToPicker, three choices that each say where replies land: - NoReply (default): NoReply@<the campaign'...

Kamo·1mo ago
Featurekamo-shared-library

Drip campaign triggers, recorded where leads and members change

Drip campaigns start when something happens in the CRM, so the places that change leads and members now hand those events to EmailService's drip engine: - Lead...

Kamo·1mo ago
September 16, 2026
Featurekamo-marketing

Open on monthly, and sell 1- and 3-year terms as locking in today's rate

Most buyers come to compare what they would pay with no commitment, so HOME_TERM is now monthly. /pricing, the homepage plan strip, /calculator and the product ...

Kamo·1mo ago
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
FixKlusterServices

A reply to a sending domain is refused as the recipient, in words that fit NoReply

Campaigns now send Reply-To: NoReply@<their From's domain> by default, and those replies reach postfix-k3m1-inbound. The refusal said "Sender address rejected: ...

Kamo·1mo ago
Fixkamo-marketing

An entry page rides out a service blip, and says so when it cannot

Entry pages failed in bursts while services rolled out: SecurityService answered 500 for a database schema-version bump or dropped the connection while restarti...

Kamo·1mo ago
FixSecurityService

Retry public reads the database aborted with 40001

Every DDL bumps the YSQL catalog version, and a transaction that began on the old one fails with "catalog snapshot ... invalidated: MISMATCHED_SCHEMA" (SQLSTATE...

Kamo·1mo ago
OtherKlusterServices

universe backup: pull mc from quay.io, docker.io/minio/mc is gone [skip ci]

MinIO withdrew its Docker Hub images, so the backup's upload container sat in ImagePullBackOff from 2026-09-12. With concurrencyPolicy Forbid that one stuck job...

Kamo·1mo ago
FixEmailService

Stop refreshing a mailbox grant no app can refresh, and say it needs reconnecting

An org connected Microsoft 365 through Kamo's platform app; the platform app was later switched off and the org has no registration of its own. The resolver the...

Kamo·1mo ago
OtherKlusterServices

node-config: registry prune must not garbage-collect with --delete-untagged [skip ci]

The nightly prune on k1m1 lived only on the host. Its garbage-collect ran with --delete-untagged, which deletes the per-platform manifests an OCI image index re...

Kamo·1mo ago
FixDaemonService

Skip enabled connections that are not filled in yet

An enabled MERIDIAN_LINK connection with no instance URL, appCode or secret collapsed to a null|null poll-unit and failed token exchange every tick, logging ERR...

Kamo·1mo ago
FixDaemonService

Read the public-chat secret by its own key

This pod also mounts mlos-internal-auth, whose INTERNAL_AUTH_SECRET env var relaxed-binds onto internal.auth.secret and outranks the ConfigMap. Every caller rea...

Kamo·1mo ago
OtherKlusterServices

auto-cert: stop provisioning www.stack.loans

The ratestack estate has been scaled to 0 since 2026-08-04, so nothing answers HTTP-01 for stack.loans. Its Certificates expired on 2026-08-02 and their orders ...

Kamo·1mo ago
FixMediaService

Rebuild so queue consumers self-heal their stale durables

social-inbound-consumer and marketing-conversion-consumer predate their deliver groups and live on SOCIAL_MESSAGES / MARKETING_EVENTS, which the shared NATS rec...

Kamo·1mo ago
Fixkamo-shared-library

Reconcile durable consumers on the stream that owns the subject

The filter and deliver-group reconciles looked consumers up on the service's configured stream only. Subscriptions to subjects captured by another stream (socia...

Kamo·1mo ago
OtherKlusterServices

Disable node-exporter's xfs collector [skip ci]

It cannot parse this kernel's /proc/fs/xfs/stat ("xpc") and logged an error on every scrape, ~240/h per node. Filesystem usage is unaffected (filesystem collect...

Kamo·1mo ago
OtherKlusterServices

Kamo_app owns the ocr_* tables [skip ci]

OCRService (web and worker) alters its own ocr_* tables at startup and refuses to start without ownership; after the switch to kamo_app the worker crash-looped ...

Kamo·1mo ago
ChoreInitializerService

Leave unique keys to the entities instead of duplicating them

Eight migration statements created unique indexes on exactly the columns their entities already declare unique (BillingGroupMember, BillingGroup, MailboxBilling...

Kamo·1mo ago
ChoreInitializerService

Stop creating a plain index shadowed by the unique one

member_notification_preferences (member_id) got both a plain and a unique index from the same statement list; the unique index serves every lookup. The plain on...

Kamo·1mo ago
Chorekamo-shared-library

Drop @Index declarations duplicated by a unique key

Each of these indexes covered exactly the same columns as a unique constraint, a unique column or the primary key on the same table, so it added a tablet and wr...

Kamo·1mo ago
Chorekamo-internal

Rebuild for the Bulk Email settings page's hand-written translations

kamo-translation-dictionary de9ab66f writes Domain Setup, Sending, Opt Out and Deliverability, and the campaign screens' new From picker and sending-domain stri...

Kamo·1mo ago
OtherKlusterServices

Non-superuser kamo_app role for all application workloads [skip ci]

Services connected as the superuser kamo. Add an idempotent script that creates kamo_app (no superuser, not a member of kamo so it cannot SET ROLE back) with gr...

Kamo·1mo ago
OtherVOIPService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherTranslateService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherRAGService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherMediaService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherMCPGatewayService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
Otherkamolos

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherKBService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherEmailService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherESigService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherDocsService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherBillingService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherAPIService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
OtherAIService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1mo ago
Featurekamo-internal

Outbound E-Mail Hosts shows the bulk relays as receiving servers see them

A "Bulk relays" card above the platform hosts: the shared relay every organization's sending domains leave through (contact.kamocrm.com, 47.181.8.86) and the pl...

Kamo·1mo ago
FeatureKlusterServices

Bounces for organizations' sending domains reach EmailService through postfix-k3m1-inbound

A campaign sent through the shared relay has its From at the organization's sending domain as its envelope sender, and that domain is a CNAME to contact.kamocrm...

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
OtherKlusterServices

Scrape YugabyteDB tserver/YSQL and SecurityService pool metrics [skip ci]

Connection sizing had no data behind it: nothing scraped the database or the Hikari pools. Add a curated server-level tserver job (the full endpoint is ~3.25M l...

Kamo·1mo ago
OtherVOIPService

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

Kamo·1mo ago
OtherSecurityService

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

Kamo·1mo ago
OtherRAGService

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

Kamo·1mo ago
OtherMediaService

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

Kamo·1mo ago
OtherMCPGatewayService

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

Kamo·1mo ago
Otherkamolos

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

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