Extend the functionality of any cinny client!
Wingspan is a Chrome and Firefox extension designed to expand the functionality of the Matrix Client Cinny. As Cinny already provides a lot of functionality but is lacking some important features, such as presence dots. Wingspan adds these features in the form of a browser extension.
| Feature | Details |
|---|---|
| GIF Picker | Integrated button in the Cinny composer toolbar |
| Live Search | Debounced search-as-you-type via the Klipy API |
| Trending Feed | Opens to trending GIFs by default |
| Favorites | Save GIFs with ♥ |
| Masonry Grid | 3-column layout that respects each GIF's natural height |
| Animated Previews | Picker thumbnails play as animated GIFs, not static stills |
| Native Attachments | GIFs upload to your homeserver as m.image events |
| Presence Dots | Color-coded online status on every user avatar |
| Live Presence | Driven by real-time /sync events, not the stale presence endpoint |
| Chat GIF Pause | Timeline GIFs frozen on first frame until hovered |
| Settings Popup | Configure everything from the toolbar icon |
| Firefox + Chrome | Works as a native extension on both browsers |
The easiest way to install Wingspan is from the official browser stores:
- Chrome / Chromium / Edge / Brave → Chrome Web Store
- Firefox → Firefox Add-ons
Both listings are kept in sync with this repository and update automatically.
Prefer to load the extension from source — for example, to test a local change?
- Download or clone this repository
- Go to
chrome://extensions - Enable Developer mode (top right)
- Click Load unpacked and select the
wingspanfolder
- Download or clone this repository
- Go to
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on
- Select the
manifest.jsonfile inside thewingspanfolder
Note: Temporary add-ons in Firefox are removed on browser restart. For a persistent install on Firefox, use the signed AMO build.
- Click the Wingspan icon in your browser toolbar
- Paste your Klipy API key
- Toggle features on or off to your preference
- Click Save
Settings take effect immediately without reloading the page.
Wingspan works on any self-hosted or public Cinny deployment:
app.cinny.indev.cinny.inlocalhost/127.0.0.1(for local development)- Any custom domain (covered by the broad host permission)
| Permission | Why |
|---|---|
storage |
Saves your settings and GIF favorites |
host_permissions: *://*/* |
Required to fetch GIF blobs and upload them to your Matrix homeserver |
Wingspan injects two scripts into the Cinny page:
-
interceptor.jsruns in the page's main JavaScript context at document start. It wrapswindow.fetchto capture your Matrix credentials and homeserver URL from the first authenticated request, and to tap each/syncresponse for live presence events. -
content.jsruns in the isolated content script context. It uses the credentials forwarded by the interceptor to upload GIF blobs directly to your homeserver via the Matrix media API, then sends anm.imagemessage event — exactly the same as a native file upload.
No credentials or GIF data are sent anywhere other than your own homeserver and the Klipy API.
| Setting | Default | Description |
|---|---|---|
| Klipy API Key | (empty) | Required to load and search GIFs |
| Pause GIFs in chat | On | Freeze GIFs in the timeline until hovered |
| Show presence dots | On | Display online status on avatars |
- Chrome 109+ or Firefox 128+
- A Cinny instance (any version)
- A free Klipy API key for the GIF picker
MIT
