Skip to content
mango·agentby Mangosteen Studio
Feature · Built

Embeddable widget

mango.js is vanilla TypeScript in a shadow DOM, so it works on any site stack without style clashes. Every project starts from the same default widget and customizes it from settings or per-page script attributes.

One script tag, five layouts, 17.5 KB gzipped. Walkthrough: Customize the widget

Five layouts#

LayoutWhat the visitor sees
Input bar (default)A full input at the bottom of the page with Point, the message box, ⌘K and send.
Chat buttonA round button in a corner that opens the chat as a popover. This site uses it.
Full screenAn expand button in the chat header, or the chat always opens full screen.
InlineThe chat renders inside an element of your page, always open.
Host-controlledNo widget button at all. Your own UI calls mango.open().

Small by design#

The initial bundle has a 40 KB gzipped budget, enforced by a size check in CI. The current build measures 17.5 KB gzipped. The screenshot module (about 9.5 KB gzipped) loads only when a visitor starts a selection.

Live, and resumable#

Replies arrive live over WebSocket, with an SSE fallback for networks that block WebSockets. The visitor's anonymous ID is stored first-party, so the conversation resumes when they return, and replies sent while the tab was closed show as an unread badge.