# Mango Grove Developer Documentation — API 1 Mango 3.1+ · preview Canonical versioned Markdown for Grove extension developers. ## Start - [Grove overview](https://mangoirc.chat/docs/grove/v1/overview.md) — The extension model, runtime, and compatibility contract. - [Choose an extension type](https://mangoirc.chat/docs/grove/v1/choose-an-extension.md) — Decide between a visible Sprig, composer utility, or headless Root. - [Build your first Sprig](https://mangoirc.chat/docs/grove/v1/getting-started.md) — Build and load a small channel Sprig. - [Starter recipes](https://mangoirc.chat/docs/grove/v1/starter-recipes.md) — Copyable minimal examples for panes, composer utilities, and Roots. ## Fundamentals - [Package and manifest](https://mangoirc.chat/docs/grove/v1/package-manifest.md) — Package layout, manifest fields, validation, and network allow-lists. - [Surfaces and scopes](https://mangoirc.chat/docs/grove/v1/surfaces-and-scopes.md) — Choose a visible Sprig, composer utility, or headless Root. - [Capabilities](https://mangoirc.chat/docs/grove/v1/capabilities.md) — Requested permissions and the API each permission unlocks. - [Security model](https://mangoirc.chat/docs/grove/v1/security.md) — Native capability gates, origin isolation, and egress controls. ## Build - [JavaScript bridge](https://mangoirc.chat/docs/grove/v1/bridge.md) — Events and methods exposed through window.grove. - [Styling and host appearance](https://mangoirc.chat/docs/grove/v1/styling.md) — Theme tokens, live palette updates, host scaling, and responsive extension CSS. - [OAuth integrations](https://mangoirc.chat/docs/grove/v1/oauth.md) — Direct and brokered OAuth flows, PKCE material, and broker trust requirements. - [Storage and settings](https://mangoirc.chat/docs/grove/v1/storage-and-settings.md) — Persistent web data, Keychain secrets, and configuration pages. - [Upload providers](https://mangoirc.chat/docs/grove/v1/upload-providers.md) — Contribute a native upload destination from a headless Root. ## Verify and ship - [Testing and distribution](https://mangoirc.chat/docs/grove/v1/testing-and-distribution.md) — Test locally, build a .grove archive, and publish it. - [Troubleshooting](https://mangoirc.chat/docs/grove/v1/troubleshooting.md) — Diagnose manifest, permission, bridge, network, and runtime failures. ## API Reference - [JavaScript objects](https://mangoirc.chat/docs/grove/v1/javascript-objects.md) — Globals, namespaces, runtime context, and calling conventions. - [Event reference](https://mangoirc.chat/docs/grove/v1/events.md) — Event payloads, permissions, retention, and callback behavior. - [grove.on()](https://mangoirc.chat/docs/grove/v1/grove-on.md) — Subscribe to a host event. - [grove.off()](https://mangoirc.chat/docs/grove/v1/grove-off.md) — Remove one previously registered event listener. - [grove.send()](https://mangoirc.chat/docs/grove/v1/grove-send.md) — Send an ordinary IRC message to an authorized conversation. - [grove.reply()](https://mangoirc.chat/docs/grove/v1/grove-reply.md) — Reply using a message's peer, channel, and optional IRC message ID. - [grove.notice()](https://mangoirc.chat/docs/grove/v1/grove-notice.md) — Send a one-way IRC NOTICE. - [grove.typing()](https://mangoirc.chat/docs/grove/v1/grove-typing.md) — Publish an IRC typing state. - [grove.away()](https://mangoirc.chat/docs/grove/v1/grove-away.md) — Set or clear the connection-wide away message. - [grove.log()](https://mangoirc.chat/docs/grove/v1/grove-log.md) — Write a diagnostic to Mango's Grove Console. - [grove.composer.complete()](https://mangoirc.chat/docs/grove/v1/grove-composer-complete.md) — Insert a utility result into Mango's draft and close the utility. - [grove.composer.requestFocus()](https://mangoirc.chat/docs/grove/v1/grove-composer-request-focus.md) — Hand an already-focused message composer to a utility text field. - [grove.composer.close()](https://mangoirc.chat/docs/grove/v1/grove-composer-close.md) — Dismiss a composer utility without contributing a result. - [grove.composer.upload()](https://mangoirc.chat/docs/grove/v1/grove-composer-upload.md) — Hand one in-memory file to Mango's configured uploader. - [grove.composer.audio](https://mangoirc.chat/docs/grove/v1/grove-composer-audio.md) — Record a bounded voice clip through Mango's native microphone bridge. - [grove.commands.register()](https://mangoirc.chat/docs/grove/v1/grove-commands-register.md) — Replace the running instance's slash-command definitions. - [grove.card()](https://mangoirc.chat/docs/grove/v1/grove-card.md) — Show or replace a native command-output card. - [grove.dismissCard()](https://mangoirc.chat/docs/grove/v1/grove-dismiss-card.md) — Remove a native card owned by this instance. - [grove.webPane.open()](https://mangoirc.chat/docs/grove/v1/grove-web-pane-open.md) — Open or reuse an isolated packaged HTML page beside a joined channel. - [grove.memberActions.register()](https://mangoirc.chat/docs/grove/v1/grove-member-actions-register.md) — Replace native member-menu actions and their selected state. - [grove.channelActions.register()](https://mangoirc.chat/docs/grove/v1/grove-channel-actions-register.md) — Replace native joined-channel menu actions. - [grove.memberBadges.set()](https://mangoirc.chat/docs/grove/v1/grove-member-badges-set.md) — Replace native badges beside channel members. - [grove.channelBadges.set()](https://mangoirc.chat/docs/grove/v1/grove-channel-badges-set.md) — Replace native badges beside joined channels. - [grove.badges.set()](https://mangoirc.chat/docs/grove/v1/grove-badges-set.md) — Replace status-bar indicators published by the instance. - [grove.secrets.get()](https://mangoirc.chat/docs/grove/v1/grove-secrets-get.md) — Read an extension/network Keychain value. - [grove.secrets.set()](https://mangoirc.chat/docs/grove/v1/grove-secrets-set.md) — Store or replace an extension/network Keychain value. - [grove.secrets.delete()](https://mangoirc.chat/docs/grove/v1/grove-secrets-delete.md) — Delete an extension/network Keychain value. - [grove.secrets.application.get()](https://mangoirc.chat/docs/grove/v1/grove-secrets-application-get.md) — Read an application Keychain value. - [grove.secrets.application.set()](https://mangoirc.chat/docs/grove/v1/grove-secrets-application-set.md) — Store or replace an application Keychain value. - [grove.secrets.application.delete()](https://mangoirc.chat/docs/grove/v1/grove-secrets-application-delete.md) — Delete an application Keychain value. - [grove.oauth.prepare()](https://mangoirc.chat/docs/grove/v1/grove-oauth-prepare.md) — Prepare host-owned state and PKCE for a brokered authorization flow. - [grove.oauth.authorize()](https://mangoirc.chat/docs/grove/v1/grove-oauth-authorize.md) — Run an OAuth session with host-generated state and PKCE material. - [grove.network.request()](https://mangoirc.chat/docs/grove/v1/grove-network-request.md) — Make a bounded native HTTPS request outside browser CORS. - [response.text()](https://mangoirc.chat/docs/grove/v1/network-response-text.md) — Decode a native network response body as UTF-8. - [response.json()](https://mangoirc.chat/docs/grove/v1/network-response-json.md) — Parse a native network response body as JSON. - [grove.crypto.blowfish.encrypt()](https://mangoirc.chat/docs/grove/v1/grove-crypto-blowfish-encrypt.md) — Encrypt raw Blowfish blocks for legacy interoperability. - [grove.crypto.blowfish.decrypt()](https://mangoirc.chat/docs/grove/v1/grove-crypto-blowfish-decrypt.md) — Decrypt raw Blowfish blocks for legacy interoperability. - [grove.uploads.register()](https://mangoirc.chat/docs/grove/v1/grove-uploads-register.md) — Register an upload-provider implementation declared by the package. - [grove.uploads.unregister()](https://mangoirc.chat/docs/grove/v1/grove-uploads-unregister.md) — Make an upload provider unavailable for new native requests. - [file.read()](https://mangoirc.chat/docs/grove/v1/upload-file-read.md) — Read one bounded byte range of the file selected for an active upload. - [context.progress()](https://mangoirc.chat/docs/grove/v1/upload-context-progress.md) — Update native upload progress for the active handler. - [grove.filters.set()](https://mangoirc.chat/docs/grove/v1/grove-filters-set.md) — Replace inbound and outbound message-filter callbacks. - [grove.protection.set()](https://mangoirc.chat/docs/grove/v1/grove-protection-set.md) — Replace persistent host policy requiring a security extension for selected conversations.