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 3, 2026
Featurekamo-internal

A real Linux terminal in a tool window, and a submenu to reach it

The Linux Desktop nav option becomes a menu instead of a launch — Remote Desktop with its sizes, Remote Terminal — exactly as the softphone owns call, voicemail...

Kamo·1mo ago
Featurekamo-internal

A fourth window state — float, drag to detach, drag to reorder

A popup tool window has had three states: docked in the row along the bottom, maximized over the viewport, or minimized to a chat head. This adds FLOATING — det...

Kamo·1mo ago
FeatureSecurityService

Serve Remote Terminal — a real shell over a WebSocket

Bridges a browser to a PTY on the member's own dev machine. Binary frames are the terminal, text frames are control; on the far hop an HTTP 101 onto a length-pr...

Kamo·1mo ago
FeatureKlusterServices

Give the agent a PTY endpoint for Remote Terminal

GET /pty upgrades the connection to `kamo-pty` and becomes a shell: one PTY per browser tool window, `su - <user>` into `tmux new-session -A`, frames pumped bot...

Kamo·1mo ago
Featurekamo-shared-library

Record a dev-machine terminal in the access log

A member opening a shell on desktop-1 now has an event type of its own. That machine holds a cluster-admin kubeconfig and its accounts have passwordless package...

Kamo·1mo ago
FeatureSecurityService

Send the company alongside the contact wherever a record is labelled

A record that is both an organisation and a person is named "Harmony Home Loans (Nickolas McGarry)" — the company leads, the contact qualifies. That rule lives ...

Kamo·1mo ago
Featurekamo-shared-library

Send an account's company alongside its contact for customer pickers

Six customer pickers read AccountSummaryDTO — the order editor, the service-job form, the subscription detail and wizard, and the pipeline signups tab — and eve...

Kamo·1mo ago
Featurekamo-internal

Communication View — the whole filtered book as one timeline

Three changes to /leads. Quick search moves into the hero, above the CRM Settings links. In the filter row it was the last control on a line of eleven dropdown...

Kamo·1mo ago
Featurekamo-internal

Add JustCall as a phone server type

Adds JustCall to the picker at **************** with its API key and secret, a contacts-import toggle, credential status on the providers tab, and the logo. Th...

Kamo·1mo ago
FeatureSecurityService

A communications timeline over the whole /leads filter, not one lead

GET **************** takes the SAME query string GET the lead detail page draws — across every lead the filter bar matches. "What has been said to the leads I a...

Kamo·1mo ago
FeatureVOIPService

Wire JustCall in through the phone provider abstraction

JustCall (api.justcall.io/v2.1) as a full PhoneProvider: call history, texts, voicemail, recordings, the agent directory and availability, plus signed account w...

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
Featurekamo-shared-library

Add JUST_CALL as a phone provider type

Appended at ordinal 5. **************** is EnumType.ORDINAL and carries no CHECK constraint, so appending is safe and inserting anywhere else would silently re-...

Kamo·1mo ago
Featurekamo-internal

A paper colour per block, and blocks that fit their text

BLOCKS NOW FIT THEIR CONTENT. The reader's blocks were all 200px tall whatever they held, because richTextExtension configures the editor with minHeight: 200px ...

Kamo·1mo ago
Featurekamo-internal

Add the JustCall provider logo

The VOIP logo folder had FreePBX, Microsoft and RingCentral but no JustCall mark, so any surface listing JustCall as a provider had nothing to render.

kamo·1mo ago
Featurekamo-shared-library

A paper colour per block

**************** holding a palette ID — "lemon", "glass" — and never a hex value. Stored the way notes and launchpad panes store theirs, for the reason that ma...

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
Featurekamo-asterisk-support

Reconcile per-extension WebRTC blocks instead of hand-editing a roster

An extension created through FreePBX's API gets no WebRTC block, so it registers over WSS and then has no DTLS or ICE — the browser softphone shows a connected ...

Kamo·1mo ago
Featurekamo-internal

Impersonate, so an operator can open an org as one of its members

Shown beside Enter on every /network view for a platform administrator holding the new IMPERSONATE right. A different right from SYSTEM_USER and deliberately no...

Kamo·1mo ago
FeatureSecurityService

Enter a tenant organization as one of its members, from /network

A second door beside the same-org god-mode one. Gated on the new IMPERSONATE platform right via @RequirePlatformRight, where the existing door is gated on the s...

Kamo·1mo ago
Featurekamo-shared-library

IMPERSONATE, so an operator can enter a tenant as one of its members

Appended to PlatformRightType rather than inserted: getSortOrder() returns ordinal(), so a right added in the middle renumbers every right below it in the conso...

Kamo·1mo ago
Featurekamo-internal

Author scripts in CRM settings, read them on a call

Two CRM settings tabs behind MANAGE_SALES_SCRIPTS — the live scripts and the archive — plus a Sales Scripts tab in the Interaction Center behind VIEW_SALES_SCRI...

Kamo·1mo ago
FeatureKBService

Serve the scripts an agent reads on a call

/api/kb/sales-scripts, gated on the two new rights. Reads take VIEW_SALES_SCRIPTS or MANAGE_SALES_SCRIPTS, writes take MANAGE. SessionHelper.hasRight fails clos...

Kamo·1mo ago
Featurekamo-shared-library

The script a member reads on a call, as ordered blocks

Two tables and two rights. SALES_SCRIPTS hangs off a lead market the way a LeadVendor does; SALES_SCRIPT_BLOCKS holds the parts, each one a Lexical document plu...

Kamo·1mo ago
FeatureDocsService

Fill a rectangle, honour a highlight's opacity, and redact

Three things about the way a prepared document renders the designer's marks. A rectangle was drawn as an outline, so the fill a member now picks to cover somet...

Kamo·1mo ago
FeatureESigService

Put the designer's annotations into the signed document

flatten() applied blank pages, rotations, modifiers, field values, page order and certificates. It never drew the annotations. A rectangle, a highlight or an ar...

Kamo·1mo ago
Featurekamo-signer-monorepo

Draw a rectangle's fill in the signer's view

The designer can now give a rectangle a fill and an opacity, which is how a member covers something up. This renderer drew fill="none", so the signer saw an emp...

Kamo·1mo ago
Featurekamo-internal

Make the rectangle tool something you can hide things with

The rectangle tool has been in the annotation toolbar all along, but it drew an outline: fill="none" in every renderer. There was nothing to hide anything with,...

Kamo·1mo ago
Featurekamo-shared-library

PdfRedactor, so a covered word is actually gone

A filled rectangle drawn over an account number hides it from the eye and from nothing else: the glyphs stay in the page's content stream, and a copy-paste or a...

Kamo·1mo ago
Featurekamo-internal

Link the articles a draft names

The authoring convention is to name a sibling article by putting its title in italics — "Read *Security Roles Explained* before building them". 181 spans across...

Kamo·1mo ago
Featurekamo-internal

A setup fee on a single-price quote, and the suite on its own line

The setup fee existed only on multi-option quotes, so 'One price' had no box for one — on the form or on the printed page. It now sits beside Shipping, appears ...

Kamo·1mo ago
FeatureInitializerService

Commerce_quotes.setup_fee

A one-off setup fee on a quote that presents a single price. The fee already existed on QuoteOption, where each alternative carries its own; a flat sheet had no...

Kamo·1mo ago
Featurekamo-shared-library

A setup fee on a single-price quote, and the suite on its own line

Two things a quote could not state. A one-off setup fee lived only on QuoteOption, where each alternative carries its own. A flat sheet has no option to hang o...

Kamo·1mo ago
Featurekamo-signer-monorepo

The suite on its own line, and a setup fee on a single-price quote

Two things the printed page could not say. An address arrived as one comma-joined string, so 'Suite 400' ran into the street and the city — not how an address ...

Kamo·1mo ago
FeatureInitializerService

Reprice stored quote totals through the pricing engine

Quote money columns are written, not computed on read, so the two corrections that landed on 2026-09-02 — a unit price is a per-month rate the term multiplies, ...

Kamo·1mo ago
Featurekamo-signer-monorepo

Print the full line on the customer's quote

Each line showed a name and an amount. That asks the customer to take the quantity, the unit, the rate and any reduction on trust, and leaves them nothing to ch...

Kamo·1mo ago
Featurekamo-internal

Print the full line on the quote, and stop losing work at the mode switch

Two things a quote could not do. The printed line items inside an option card showed a name and an amount, nothing else — no quantity, no unit label, no rate, ...

Kamo·1mo ago
Featurekamo-internal

Re-issue a share link from its row, and stop losing the one-time URL

The Share links list offered no way to view or copy a link, and nothing explained why. Nothing can reveal an existing one — only the token's SHA-256 is stored, ...

Kamo·1mo ago
FeatureRAGService

Resolve the articles a passage names into link targets

A hub article — "Setting Up Your Organization — A Checklist" is one — exists to send the reader to a dozen others, and names every one of them in plain text. Th...

Kamo·1mo ago
Featurekamo-internal

Ask whether the guests should be told, and how

Adding a guest to an event did not tell them, and the dialog never said so. The only thing that ever wrote to a guest was a reminder — which reaches a colleague...

Kamo·1mo ago
FeatureInitializerService

The columns that let an event invite its guests

Three on calendar_events, because whether a meeting invites people belongs to the meeting rather than to the moment it was saved — an edit six weeks later that ...

Kamo·1mo ago
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
Featurekamo-shared-library

Let an event invite its guests, and put it on their calendar

Saving an event told nobody. The guest list was materialized and the audience stored, and the people on it heard nothing until a reminder fired — which reaches ...

Kamo·1mo ago
FeatureSecurityService

A member address signs you into its own org, not every org

A member who signs in with the org mailbox flagged Primary on their member settings was being offered every workspace their user account belongs to. The address...

Kamo·1mo ago
FeatureSecurityService

Enforce the platform's visibility, and let it be edited

GET/PUT /api/security/reports/catalog, both gated on MANAGE_REPORTS on the platform spine. The list comes from the REGISTRY, not the override table: an operator...

Kamo·1mo ago
Featurekamo-internal

Decide who sees each report, from Platform Administration

A Reports tab on the Configuration console, gated by MANAGE_REPORTS on the platform spine — which is also, with no further work, a row in the Manage Rights dial...

Kamo·1mo ago
Featurekamo-internal

Give the quote billing choice a screen to live on

The org-wide setting deciding whether a quote is billed each period or in full up front has existed on OrgPOSConfig for some time, and the endpoint that writes ...

Kamo·1mo ago
Featurekamo-shared-library

Let the platform decide who may see each report

MANAGE_REPORTS, appended to PlatformRightType, and a REPORT_CATALOG override row per report holding one of ALL_ORGS, PLATFORM_ORG_ONLY or PLATFORM_ADMIN_ONLY. ...

Kamo·1mo ago
Featurekamo-signer-monorepo

Show the whole term when the seller bills up front

The card led with the recurring rate regardless, so a customer signing a three-year deal payable at signing saw a monthly figure and a separate total below it. ...

Kamo·1mo ago
Featurekamo-internal

Lead with the whole term when the bill is due up front

An org that charges the committed term at signing saw the monthly rate on its own three-year quotes. The quote now carries the basis it was raised under, and th...

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