app.waniwani.ai, so no backend proxy is required on your side.
Platform feature. The dashboard generates the embed snippet for your project. Open app.waniwani.ai to get yours, or read more about the Platform.
<div data-waniwani-embed></div> marker. You control the size by sizing that container with CSS. There is no floating bubble.
Quick start
- Open your project on app.waniwani.ai and copy the chat embed snippet from the project settings.
- Paste it into your site’s HTML, alongside a mount point where you want the chat to appear:
Sizing
The embed fills its container. Give the<div data-waniwani-embed> a definite size via CSS:
ResizeObserver mirrors the container’s max-height onto the embed so padding and borders are respected.
Overriding attributes
The snippet you paste is a starting point. After pasting, you can editdata-* attributes on the <script> tag to tweak behavior:
Leave the wiring attributes (
data-token, data-channel-id, data-api, the script src) as the dashboard generated them.
Full type definitions: EmbedConfig and ChatTheme.
Programmatic init
For runtime control (computing options dynamically, mounting on demand), drop thedata-token attribute from the script tag and call init() manually. You still need the wiring attributes from a dashboard-issued snippet:
init() returns an instance with destroy() and sendMessage(text). You can also call window.WaniWani.chat.destroy() and window.WaniWani.chat.sendMessage("...") directly on the global.
Self-hosting the JS bundle
If you’d rather not load from a CDN, pin a specific SDK version and serve the bundled file yourself. Thedata-* attributes still come from the dashboard snippet — you’re only swapping where embed.js is served from:
How it works
- The script reads its own
data-*attributes (token, channel ID, theming, content overrides). - On
DOMContentLoaded(or immediately, if the DOM is already ready), it locates[data-waniwani-embed]and mounts the chat inside it via Shadow DOM. - The chat calls
app.waniwani.ai/api/mcp/chatwith the project token and streams responses back through Server-Sent Events. - Conversation history lives only in memory by default; set
data-enable-thread-historyto persist threads in IndexedDB on the user’s device.