← All extensions

Messaging · Sprig

Giphy

by Mango

Search GIPHY and add an animated GIF to your message draft.

Install in Mango 3.110 KB · Mango 3.1
Version
0.1.12
Runs as
Composer pane
Grove API
1
Updated
2026-09-17

Requested access

3 permissions

  • Keep local dataStores extension data on this device in its own isolated space.
  • Keep secrets in KeychainStores private values in a Keychain namespace reserved for this extension.
  • Add slash commandsRegisters its own commands and can show native command-result cards.

Network access

Declared hosts

Grove blocks every network destination except these declared origins:

  • https://api.giphy.com
  • https://giphy-analytics.giphy.com
  • https://media.giphy.com
  • https://media0.giphy.com
  • https://media1.giphy.com
  • https://media2.giphy.com
  • https://media3.giphy.com
  • https://media4.giphy.com

From the extension

README

Giphy

Giphy is a Grove composer utility for Mango. Open it from the message field’s + menu, search or browse trending GIFs, and choose one to add its URL to the current draft. It uses GIPHY’s REST API directly; no third-party SDK is bundled. The /gif command in version 0.1.10 requires Mango 3.1 or newer. Older Mango versions can still install the extension and open its picker from the + menu.

Giphy also declares an on-demand /gif command. Mango can discover it without keeping the composer utility running in the background:

  • /gif opens trending GIFs.
  • /gif cats or /gif search cats opens the picker with cats filled in.
  • /gif first cats adds the first matching GIF URL directly to the draft.

Nothing is sent automatically. Both selecting a tile and using first return the URL to Mango’s ordinary composer for review.

Version 0.1.12 prevents iPhone search-field zoom and asks compatible Mango 3.1 builds to hand an already-open composer keyboard to search. Closing returns to the draft. Opening the picker with the keyboard hidden leaves it hidden until you tap search. Older hosts still support browsing and manual search focus.

The Sprig includes a shared, revocable beta API key. If its hourly quota is busy, open Grove Manager → Giphy → Settings and add a personal GIPHY API key. Personal keys are saved in Mango’s per-Sprig Keychain namespace and never written to the package or ordinary web storage. The bundled key is lightly obfuscated to avoid casual extraction, but—as with every browser-delivered API key—it is not a secret and GIPHY’s revocable quota remains the boundary.

The picker stores a stable pseudonymous customer id in Giphy’s isolated Grove web storage. Search requests and GIPHY’s documented visible/click analytics are sent directly to GIPHY so result ranking can improve. The picker only adds a URL to Mango’s draft, so it does not claim that the GIF was sent. No IRC identity, network id, channel, nickname, message history, or draft text is sent to GIPHY.

GIPHY and the GIPHY name are trademarks of Giphy, Inc. Use of the service is subject to the GIPHY API Terms and GIPHY Privacy Policy.

npm install
npm run build
npm run package
manifest.jsonchat.mangoirc.grove.giphy
{
  "grove": 1,
  "id": "chat.mangoirc.grove.giphy",
  "name": "Giphy",
  "version": "0.1.12",
  "description": "Search GIPHY and add an animated GIF to your message draft.",
  "author": {
    "name": "Mango",
    "url": "https://mangoirc.chat"
  },
  "readme": "README.md",
  "entry": "index.html",
  "settings": "settings.html",
  "presentation": {
    "surfaces": [
      "composer"
    ],
    "defaultSurface": "composer",
    "minSize": {
      "width": 320,
      "height": 220
    },
    "defaultSize": {
      "width": 520,
      "height": 500
    }
  },
  "contributions": {
    "uploadProviders": [],
    "commands": [
      {
        "name": "gif",
        "summary": "Find a GIF and add it to the draft",
        "usage": "[search|first] [keywords]",
        "subcommands": [
          {
            "name": "search",
            "summary": "Open the GIF picker with a search",
            "usage": "<keywords>"
          },
          {
            "name": "first",
            "summary": "Add the first search result to the draft",
            "usage": "<keywords>"
          }
        ]
      }
    ]
  },
  "capabilities": [
    "storage",
    "storage.secure",
    "commands.register"
  ],
  "hostPermissions": [
    "https://api.giphy.com",
    "https://giphy-analytics.giphy.com",
    "https://media.giphy.com",
    "https://media0.giphy.com",
    "https://media1.giphy.com",
    "https://media2.giphy.com",
    "https://media3.giphy.com",
    "https://media4.giphy.com"
  ]
}