Skip to main content

bounceboard

Bounceboard is a full featured clipboard synchronization tool that allows you to share clipboard content between multiple devices over a network.

Currently supports:

  • MacOS & Linux
  • Plain text
  • Images (PNG)
  • HTML
  • Rich Text
  • File support

Installation

Install from PyPI:

pip install bounceboard

Usage

The tool can run in either server or client mode:

Server Mode

bb server [-p PORT] [-k KEY]

Options:

  • -p, --port: Port to listen on (default: 4444)
  • -k, --key: Custom access key (default: auto-generated)

The server will display connection URLs with the access key when started.

Client Mode

bb client ws://<server_ip>:<port>/?key=<access_key>

Replace <server_ip>, <port>, and <access_key> with the connection details provided by the server.

Multiple clients can be connected to a server, changes from any client will propogate to all.

Additional Options

  • -v, --version: Show version and exit
  • -x, --xclip-alt: Enable xclip alternative text support (see Linux below)

How It Works

  • The server monitors its local clipboard for changes and broadcasts the new content to all connected clients.
  • The client also monitors its local clipboard for changes and sends the new content to the server.
  • Both the server and client update their local clipboard when they receive new content from the other side.
  • Multiple clients are supported and all kept in sync (server relays).

Platform Specifics

Linux

You'll need [xclip](https://github.com/astrand/xclip) installed (available on all major platforms). The current version (0.13) only supports setting one target type, so for compatibility any incoming HTML or RTF is downconverted to just STRING.

If you want rich text sync support you can use this PR and the bb -x ... flag to enable it.

Protocol

The WebSocket protocol uses a simple and efficient two-part message exchange:

  1. Header (JSON text message):
{
    "type": "mime/type",    // Content MIME type (e.g., "text/plain", "image/png")
    "size": 1234,          // Content size in bytes
    "hash": "sha256...",   // SHA-256 hash of the content
    "text": "optional"     // Optional plain text representation
}
  1. Binary message:
    • Contains the raw content bytes immediately following the header
    • Must be processed together with the preceding header

Supported MIME types:

  • text/plain: Plain text content
  • text/html: HTML content
  • text/rtf: Rich Text Format
  • image/png: PNG images
  • application/x-file: File transfer (includes filename in header's text field)

Protocol flow:

  1. Client connects with ?key=<access_key> query parameter
  2. Connection maintained with WebSocket ping/pong (5s interval)
  3. Both sides send header+content pairs when clipboard changes
  4. Both sides process incoming header+content pairs to update local clipboard

ChangeLog

  • v0.1.0: Initial release

License

This project is licensed under the MIT License.

Metadata

Release files for bounceboard 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bounceboard 0.1.0
File Size Uploaded
bounceboard-0.1.0.tar.gz 7.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bounceboard 0.1.0
File Interpreter ABI Platform
bounceboard-0.1.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 16.0 kB

Release files / bounceboard-0.1.0.tar.gz

Download URL bounceboard-0.1.0.tar.gz
Size 7.4 kB
Tags Source
SHA-256 checksum
How to use checksums
23cfbecb8f303a2687b1b6692c113c3cd7de35e3b95034a838d58b4041b9c355
BLAKE2b-256 checksum
How to use checksums
3add2f1ce6aa85b2385204834bbe2eef4414b03ba89ddf18a0fd7a2a29e285b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.7

Release files / bounceboard-0.1.0-py2.py3-none-any.whl

Download URL bounceboard-0.1.0-py2.py3-none-any.whl
Size 8.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
0844acc4548d23032771317d4af8ed66b2790d7f6e1fe06a4d909653bd2fe861
BLAKE2b-256 checksum
How to use checksums
2179360435ee9ca3b48717f9ac49657dc8ddc5ef93db51071e0c0e3810f50c9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.7

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page