# mistweaverco/bananas

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/mistweaverco-bananas).**

6,238 stars · 271 forks · Svelte · MIT

## Links

- GitHub: https://github.com/mistweaverco/bananas
- Homepage: https://getbananas.net
- awesome-repositories: https://awesome-repositories.com/repository/mistweaverco-bananas.md

## Topics

`cross-platform` `multi-cursor` `p2p` `pair-programming` `pairing` `peer-to-peer` `screensharing`

## Description

Bananas is a peer-to-peer screen sharing application that uses WebRTC to establish direct browser-to-browser connections, enabling real-time screen sharing without routing data through a central server. The application assigns ephemeral identity tokens tied only to session IDs, eliminating the need for user accounts or persistent login systems, and generates unique alphanumeric session URLs for one-click joining.

The application distinguishes itself through collaborative multi-cursor overlays, where each participant's cursor is rendered as an HTML5 Canvas layer composited over the shared screen stream, and remote users can highlight areas with visible ping markers. It supports cross-platform screen sharing across Mac, Windows, and Linux, allows toggling participant cursor visibility during live sessions, and leverages the browser's getDisplayMedia API to enumerate multiple displays for the host to select which to broadcast.

The application manages session lifecycle through a lightweight WebSocket signaling server that exchanges session metadata and ICE candidates before peer-to-peer links form, and serialises mouse coordinates and ping events as JSON messages over the data channel for real-time remote rendering. It is available for installation on macOS via a single Homebrew cask command.

## Tags

### Networking & Communication

- [Screen Sharing Channels](https://awesome-repositories.com/f/networking-communication/peer-to-peer-tunneling/peer-to-peer-media-libraries/screen-sharing-channels/screen-sharing-channels.md) — Establishes direct device-to-device connections for screen sharing without central server routing.
- [Signaling Servers](https://awesome-repositories.com/f/networking-communication/peer-to-peer-networking/signaling-servers.md) — Uses a lightweight WebSocket server to exchange session metadata and ICE candidates before peer-to-peer links form.
- [Screen Sharing Channels](https://awesome-repositories.com/f/networking-communication/peer-to-peer-tunneling/peer-to-peer-media-libraries/screen-sharing-channels.md) — Shares a computer screen directly between devices without routing data through a central server.
- [Peer Connectivity](https://awesome-repositories.com/f/networking-communication/webrtc-media-orchestration/peer-connectivity.md) — Establishes direct browser-to-browser data channels for low-latency screen sharing without central server routing.
- [Visual Ping Markers](https://awesome-repositories.com/f/networking-communication/ping-sweepers/visual-ping-markers.md) — Lets remote participants highlight areas on the shared screen with visible ping markers. ([source](https://getbananas.net/))

### Development Tools & Productivity

- [Screen Sharing](https://awesome-repositories.com/f/development-tools-productivity/screen-capture-tools/screen-sharing.md) — Broadcasts a screen from one device to others running different operating systems with cursor visibility toggling.
- [Session Initiation](https://awesome-repositories.com/f/development-tools-productivity/screen-capture-tools/screen-sharing/session-initiation.md) — Begins a new screen sharing session and generates a unique link to share with participants. ([source](https://getbananas.net/tutorial))
- [Connection URL Generation](https://awesome-repositories.com/f/development-tools-productivity/screen-capture-tools/screen-sharing/connection-url-generation.md) — Generates a unique URL that grants instant access to a screen share without requiring an account. ([source](https://getbananas.net/))
- [Display Selection](https://awesome-repositories.com/f/development-tools-productivity/screen-capture-tools/screen-sharing/display-selection.md) — Lets the host choose which display to broadcast when multiple screens are available. ([source](https://getbananas.net/tutorial))
- [Session Joining](https://awesome-repositories.com/f/development-tools-productivity/screen-capture-tools/screen-sharing/session-joining.md) — Connects to an existing screen sharing session by clicking a link or entering a connection string. ([source](https://getbananas.net/tutorial))

### Security & Cryptography

- [Session URL Token Generators](https://awesome-repositories.com/f/security-cryptography/token-based-authentication/session-token-issuance/session-url-token-generators.md) — Generates unique alphanumeric tokens that encode connection parameters for one-click session joining via URL.
- [Session Identity Assignment](https://awesome-repositories.com/f/security-cryptography/user-identity-management/player-identity-services/session-identity-assignment.md) — Assigns ephemeral participant IDs tied only to the session token, avoiding any persistent user profile or login system.

### Software Engineering & Architecture

- [Canvas Overlays](https://awesome-repositories.com/f/software-engineering-architecture/overlay-rendering-architectures/canvas-overlays.md) — Renders remote cursors and ping markers as transparent HTML5 Canvas overlays composited over the shared screen stream.

### User Interface & Experience

- [Cursor Coordinate Broadcasts](https://awesome-repositories.com/f/user-interface-experience/cursor-position-mapping/cursor-coordinate-broadcasts.md) — Serialises mouse coordinates as JSON messages over a data channel for real-time remote cursor rendering.
- [Collaborative Cursor Tracking](https://awesome-repositories.com/f/user-interface-experience/stable-cursor-tracking/collaborative-cursor-tracking.md) — Displays each participant's cursor on a shared screen so multiple users can point to areas simultaneously during a live session.
- [Display Source Selectors](https://awesome-repositories.com/f/user-interface-experience/ui-component-prototypes/screen-to-screen-navigation-links/multi-screen-generation/display-source-selectors.md) — Leverages the browser's getDisplayMedia API to list available displays and let the host pick which to broadcast.
