Copy on one device. Use it on another.
Share text, links, photos and files between Windows, Android, iPhone and iPad. For example, send a photo from your phone to your PC, or copy a link on Windows and receive it on your phone. Mac can use the same workflow through Apple Shortcuts.
Use an always-on home server for the full experience, or let the Windows app be the server if you do not have one. Your devices connect through your local network or a private VPN. A Clipboard Bridge account is optional.
No mandatory cloud service, online account, subscription or telemetry.
On iPhone, sharing is within easy reach: add Send and Receive to Control Center, or run the Send Shortcut from another app's Share Sheet. Once set up, you do not need to reopen the Shortcuts editor for each transfer.
See the illustrated iPhone setup and quick-access tips.
English | Italiano
Website | Downloads | Desktop demo | Start here | Full guide | Developers | Request a feature
New here? Follow the step-by-step setup tutorial.
Device-specific guides: Windows to iPhone clipboard sharing and sharing a clipboard between Apple and Android devices.
Find a previous clipboard, preview an image or PDF, and copy it again. The Windows app keeps search, file groups and Send/Receive together in one window.
Real application screen with public sample data, not private clipboard contents.
Quick actions next to the clock. Right-click the tray icon for Send, Receive and History; left-click opens History directly.
Real Windows recording in English, cropped for privacy. It demonstrates the tray controls, not a phone-to-PC transfer. Replay GIF or watch video.
Prefer automatic sharing? Enable Automatic synchronization in Settings > Automation and keep the app running. Leave automatic file downloads enabled to receive files too. Manual Send/Receive buttons remain available. Auto-sync can also share sensitive text you copy, so enable it deliberately.
Every device connects to one place that stores the shared clipboard. Choose where it runs:
| Standalone server: full experience | Windows Server mode: no extra hardware | |
|---|---|---|
| Runs on | A NAS, home server, Raspberry Pi or Docker/Python host | The Windows app itself |
| Why choose it? | Available while your Windows PC is off | The quickest phone-to-PC setup |
| Shared text, photos, files and history | Yes | Yes |
| Web page and separate user accounts | Yes | No |
| Must stay running | Your server | Your Windows PC and the app |
| Windows setting | Client mode | Server mode |
The standalone server improves everyday use with an always-on clipboard, browser access and isolated accounts. It is not required: Windows Server mode handles the same shared content without Docker or a separate computer.
Current releases: Windows 2.0.21 | Android 1.0.0-beta.12 | Server 1.0.12
| Your device | Ready-to-use downloads |
|---|---|
| Windows 10/11, Intel or AMD (x64) | Installer or portable EXE |
| Windows 11 ARM, such as Snapdragon PCs | Native ARM64 installer or native ARM64 portable EXE |
| Android 10 or newer | Android APK, currently a public beta |
| iPhone and iPad | Send Shortcut and Receive Shortcut |
| Mac | Apple Shortcuts setup guide; no native Mac app |
| NAS or home server | App-store installation or Docker setup |
The installer is the easiest Windows option. The portable EXE needs no installation. Both save settings and history in your user folder and preserve them across updates. From Windows 2.0.18, open Settings > Updates to check GitHub and install a new stable version. Automatic checks are on; automatic download/install is off until you enable it and Save. It keeps your current x64/ARM64 and installed/portable type, waits for active client transfers and restarts the app. Downloads are checked against GitHub's SHA-256, not a publisher certificate. Windows may still ask for approval. Older clients need one manual installation of 2.0.18 first.
To check your processor, open Settings > System > About > System type. Quit the app before switching between x64 and ARM64; both architectures share your settings.
Windows security: installer and portable downloads are not digitally signed yet. Defender or Smart App Control may block them. Read CODE_SIGNING.md; do not disable Windows protection to bypass a warning.
All assets, checksums and release notes are in the 2.0.21 release. Image/PDF previews and native ARM64 packages are included. See CHANGELOG.md for the full changes; Android and the standalone server have independent version numbers.
First, check the network: your devices must reach the clipboard host through the same trusted Wi-Fi/LAN or a private VPN. Mobile data alone cannot reach a home LAN address. See Network and security for remote use.
- Install or open the Windows app.
- Open Settings > General and select Server mode.
- Keep port
5088, unless it is already in use, and allow the app through the Windows firewall on your private network. - Enter the address shown by Windows in Android and both iPhone Shortcuts.
- Keep the PC and app running. Send from one device and receive on the other.
- Install the standalone server and open
http://SERVER_IP:5088/. - Choose Client mode in Windows Settings and enter that server address.
- Use the same address on Android and in both Apple Shortcuts.
- Leave token/account fields empty for the shared clipboard, or use the same configured account on every device. Run Check connection or Test connection.
In Windows and Android settings, enter the base address, not an API endpoint. Apple Shortcuts use the complete send/receive URLs described below.
Unicode text, multiline notes, links, photos and files of any type: PDFs, Office
documents, archives, audio, video and custom extensions such as .shortcut.
Copied text arrives as plain Unicode text, even if the source app uses RTF.
Emoji, accents, tabs and line breaks are retained; fonts, colours and bold styling
are not transferred. Actual .rtf documents sent as files remain unchanged.
This works with server 1.0.9 or later, or Windows Server mode 2.0.18 or later, for every connected client.
The latest upload always wins. Text, images and files have equal priority. Several files sent together stay in one history item; restoring or deleting it affects the whole group. Generic clients receive groups as a transport ZIP.
History supports search, type filters and previous/next pages. Search matches text previews and filenames, including group members, not the complete document contents.
The tray app supports manual sharing, configurable hotkeys, optional auto-sync, image/PDF previews, shared history and automatic receiving. Left-click its icon to open History; sending is a separate action. Only one instance runs at a time.
Quick actions, next to the clock: right-click the tray icon to send your clipboard, receive the latest item or open History. Left-click opens History directly.
Windows can sync automatically: enable Automatic synchronization in Settings > Automation to send copied content and receive new shared items without pressing Send or Receive each time. Keep the app running and leave Automatically download new files enabled to receive files automatically too. Only enable auto-sync if you want copied content to be shared, including sensitive text.
See the desktop screenshots and animated tray demo.
Windows settings, notifications and history
- General: choose Client/Server mode, light/dark appearance and language.
- Connection: set the server address and optional token/account; use Check connection now to verify the connection.
- Automation: configure synchronization, automatic incoming file downloads and separate text/image/file notifications.
- Shortcuts: configure global hotkeys for Send, Receive and opening History. History defaults to Ctrl+Alt+H; change it in Settings > Shortcuts. Click Set keys..., press and release your chosen combination, then Save. Escape cancels recording. Shortcuts pause while recording to prevent accidental transfers. Windows reports combinations already used by another app before settings are saved. Press the History hotkey once to open it and again to close it; the next press reopens it. Tray clicks still open or focus History. Neither action sends your clipboard. Invalid or duplicate shortcuts are rejected before saving; existing settings are preserved during upgrades.
- Received files are saved in
Downloads/Clipboard Bridgeand placed in the Windows clipboard. Clicking a file notification opens the received-files folder. - Select a file/image in History for Open file and Open folder, also in its right-click menu. Choose a member for a file group. Downloads run in the background and are reused; opening does not change your clipboard. Common executable/script types require confirmation. Only open files you trust.
- Enable Preview in History to see the selected image or first PDF page, including the first previewable member of a file group. Text previews show the complete content in a read-only scrollable pane, including long texts and emoji, rather than only the short history extract. Use the visible vertical scrollbar, ordinary wheel, or middle-click and move up/down to autoscroll; click again or press a key to stop. Middle-drag stops on release. Thumbnails load in the background without changing your clipboard or saving downloads.
- History automatically follows the host selected in Settings: your external server in Client mode, or this PC's embedded host in Server mode. There is no separate Local/Server selector. Use the compact type filters and search to find shared items.
- The lightweight desktop uses matte graphite or light surfaces, blue accents, clearly separated file icons and a responsive image/PDF preview pane. It does not capture the desktop or require a heavier graphics engine.
- Clipboard changes made by an administrator-level application may not be detected by an ordinary Windows process. This affects all Windows packages; Clipboard Bridge may also need administrator privileges in that situation.
- The interface is available in English and Italian. Settings and data belong in your writable user folders, not Program Files.
Send from the clipboard, file picker or another app's Share menu. Receive the latest item, browse live server history, restore an older item or delete it after confirmation. Text and file notifications can be configured separately.
Android installation, account setup and Quick Settings
- Open the downloaded APK, authorize installation from that browser/file manager if Android asks, then select Install or Update.
- Open the gear button and enter the server base address.
- Choose Shared space for the general clipboard; enter a token only if configured.
- Choose Account for an existing standalone-server user and enter its credentials.
- Run Test connection, save and allow notifications for incoming monitoring.
Account status must show Connected - @USERNAME. If histories differ between Android and the browser, verify the selected account. Android reads the server's history directly; it does not maintain a separate local history. The visible list refreshes every five seconds.
Send clipboard uploads the current clipboard. Receive latest restores the
newest item. Send file and the Share menu accept one or several files, keeping
a multiple selection together. Share uploads close without leaving the main app open.
Received files are saved in Downloads/Clipboard Bridge; Android uses content URIs
for file clipboard entries, so pasting depends on the destination app's support.
Add Send clipboard and Receive clipboard through Quick Settings > Edit. The tiles use a brief transparent helper for clipboard access and return to your previous screen instead of opening the main interface.
Background limits: Android 10+ restricts continuous background clipboard reads. Outgoing auto-send works while Clipboard Bridge is visible; Share and the Send tile are the alternatives in other apps. Optional incoming monitoring uses a foreground service and notification; use Receive for reliable clipboard placement. Manufacturer battery restrictions may require allowing background activity and excluding the app from battery optimization. Notifications for received text, files and sent items are separately configurable. The interface is English/Italian.
Updates signed with the same project key preserve the configuration. Android documentation and build instructions.
Use two Shortcuts for every content type: Load Clipboard sends and Download Clipboard receives. Add both to the iPhone Control Center for quick access.
Shortcut URLs, accounts, photos and multiple files
Replace SERVER_IP with your host's address; use its configured port if not 5088.
| Shortcut | Request | Shared-space URL |
|---|---|---|
| Load Clipboard | POST |
http://SERVER_IP:5088/clipboard |
| Download Clipboard | GET |
http://SERVER_IP:5088/clipboard/latest/raw |
For an isolated account, append the URL-encoded credentials to both URLs:
http://SERVER_IP:5088/clipboard?user=alice&password=YOUR_ENCODED_PASSWORD
http://SERVER_IP:5088/clipboard/latest/raw?user=alice&password=YOUR_ENCODED_PASSWORD
For a protected shared space, use ?token=YOUR_TOKEN instead. With no protection
configured, use the plain URLs. Token and account are optional; URL credentials
are in plain text. The web login uses the same account; an empty username selects
the general clipboard.
Enable Show in Share Sheet to send from Photos, Files and other apps. For the Control Center, add a Shortcut control, select Load Clipboard, and add a second one for Download Clipboard.
For grouped files and uncommon extensions, apply the actions in the complete Shortcut guide after importing the signed downloads. They cannot be rewritten/re-signed on Windows:
- A single non-text file includes its URL-encoded
filename, preserving.shortcutand other extensions even with a generic MIME type. Text does not use this parameter. - Several files are packed into a temporary ZIP and posted to
/clipboard/bundle; the server stores the members together, not as an ordinary ZIP attachment. - Receiving checks
/clipboard/latest/meta, extracts a group when required and copies its members together. The content-type choice is automatic. - A ZIP deliberately sent to the normal
/clipboardendpoint remains a ZIP file. - If the URL already has credentials, append parameters with
&, not another?.
Use the manual send/receive workflow in Apple Shortcuts, optionally with a keyboard shortcut. There is no native Mac client or continuous background sync. The distributed iPhone files have not been device-tested on a Mac; build the same actions if importing fails. See Mac compatibility.
Download the Ubuntu .deb | Installation and shortcuts
The Python desktop app connects to the Docker server or to Windows in Server mode. It supports optional automatic text sync, desktop shortcuts, manual file transfers, grouped files, searchable server history and previews. It is an early beta: no tray, notifications, automatic file sync or embedded server. Global shortcuts are assigned in your Linux desktop settings.
For a source installation instead, install Python 3.10+ with Tkinter and the clipboard utility for your session.
For Debian/Ubuntu (substitute xclip for wl-clipboard on X11):
sudo apt install python3-tk wl-clipboard
python3 scripts/linux/install.pyRun the installer from the repository folder as your normal user. It adds
Clipboard Bridge to the application menu, or run
python3 clipboard_bridge_linux.py without installing it. On Fedora, Tkinter is
provided by python3-tkinter; on Arch, install tk alongside Python.
For source installs, image/PDF previews use Pillow and Poppler.
Use Connection settings for optional credentials; they are kept in memory.
Stable Docker image: ghcr.io/mattboxx/clipboard-bridge-server:1.0.12
Supports Linux amd64 and arm64. The service listens on 5088, stores persistent
data in /data, and needs no separate database. The web page supports text/file
uploads, searchable history, downloads, refresh, deletion and optional login.
The web interface and login support English, Italian, Spanish, French, German, Portuguese and simplified Chinese. Choose a language in Settings; the browser remembers it. English is the default. Open Connect your devices for Windows, Android and Apple Shortcuts setup, the server address, and safe container update steps. The footer links to the project website and full guide; the heart button opens optional Ko-fi support. These languages apply to the standalone web interface, not the native client apps.
Open Settings (the top-right button), then choose Theme: Light, Dark or System.
Your browser remembers your choice. Text and file uploads have separate tabs.
Use Connect your devices for short setup steps for Apple, Windows, Android
and Docker, or open http://SERVER_IP:5088/setup directly. The QR opens the
public downloads page; it does not pair a device or contain credentials.
Save text or upload files from any browser, without installing another client. This interface belongs to the optional standalone server, not Windows Server mode.
Search the shared history, download an item or delete it. Files sent together remain in one entry; images have a thumbnail.
Real screens from the published Docker server, using public sample data only.
App stores: follow Clipboard Bridge App Store for ZimaOS, Portainer, Umbrel, Runtipi and Dockge. For ZimaOS, add this permanent JSON v2 source, not a repository ZIP:
https://mattboxx.github.io/Clipboard-Bridge-AppStore/store.json
Basic Docker Compose commands
Docker Engine/Desktop and Compose must already be running. New installation, Linux/Mac terminal (no Git or source build required):
mkdir clipboard-bridge
cd clipboard-bridge
curl -fL https://raw.githubusercontent.com/Mattboxx/Clipboard-Bridge/main/compose.yaml -o compose.yaml
curl -fL https://raw.githubusercontent.com/Mattboxx/Clipboard-Bridge/main/.env.example -o .env
nano .env
docker compose pull
docker compose up -d
docker compose psSave .env before starting. Open http://SERVER_IP:5088/, using your host's IP.
On Linux, prefix Docker commands with sudo if required. Do not overwrite an
existing installation's .env or data.
First time, Windows/PowerShell, accounts, updates or an error? Follow DOCKER.md: complete command-by-command installation for Docker installation, a full configuration example, phone connections, backups and troubleshooting.
- Devices need the same trusted local network or a private VPN, for either server mode.
- Away from home or on untrusted Wi-Fi, we recommend Tailscale. Install it on the clipboard host and your devices, join the same private Tailscale network and use the host's Tailscale address in every client and Apple Shortcut. It works with Docker/Python hosting and Windows Server mode. Tailscale is optional; another private VPN can work too, and a trusted LAN needs no VPN.
- To keep the same LAN IP and port at home and away, configure an always-on home server/NAS as a subnet router. Advertise and approve the LAN route, allow access and reserve the host's IP. Clipboard Bridge does not configure routing automatically.
- Accounts and tokens are optional. The general clipboard stays available when users are added. Use protection when untrusted people can reach the network.
user,passwordandtokenparameters are visible in URLs. Plain HTTP does not encrypt them; a VPN does not encrypt every possible LAN hop either.- Do not expose port
5088directly to the internet. Use a trusted LAN, private VPN or an HTTPS reverse proxy. A web password is not a substitute for API protection.
Network, VPN and subnet-routing guide | Security policy
The repository contains the complete sources, dependencies, tests and packaging. Browse the server source and Windows client source in the repository. Release downloads contain ready-to-use apps and iPhone Shortcuts, not standalone Python scripts. Clone the repository for development or running from source.
Use Python 3.12 for the server and x64 Windows client; native Windows ARM64 builds use ARM64 Python 3.13. Prefer an isolated virtual environment.
python -m venv .venv
# Activate .venv for your shell, then:
python -m pip install -r requirements-server.txt
python clipboard_bridge-Server.pyOn Windows, install requirements-client.txt and run python clipboard_bridge_windows.py.
The client uses Tkinter/pystray; clipboard images and files use Windows APIs through
ctypes. Image/PDF previews use Pillow and pypdfium2/PDFium. See third-party notices.
The standalone server uses Flask. Its Docker image uses one Gunicorn worker with
threads: do not add independent workers against the same JSON data store.
| Python environment variable | Default | Purpose |
|---|---|---|
CLIPBOARD_PORT |
5088 |
Listening port |
CLIPBOARD_TOKEN |
empty | Optional shared API token |
CLIPBOARD_PASSWORD |
empty | Optional shared web-login password |
CLIPBOARD_ACCOUNTS |
empty | Comma-separated user:password accounts |
CLIPBOARD_ACCOUNTS_FILE |
empty | One user:password per line in a file |
CLIPBOARD_SESSION_DAYS |
3650 |
Remembered web login, 1..3650 days; use 90/365 for a shorter session |
CLIPBOARD_MAX_HISTORY |
200 |
Retained entries per clipboard space |
CLIPBOARD_MAX_UPLOAD_MB |
64 |
Maximum request/upload size in MB |
CLIPBOARD_DATA_DIR |
./clipboard_data |
Persistent data directory |
In Compose, edit the shorter variables in .env: APP_PORT, DATA_ROOT,
APP_IMAGE, API_TOKEN, WEB_PASSWORD, ACCOUNTS, ACCOUNTS_FILE, MAX_HISTORY
and MAX_UPLOAD_MB. They map to the container settings; /data is the container's
storage path. Mount account files and use their container path.
Accounts have isolated files and histories with no fixed account-count limit;
practical limits depend on host resources. Prefer CLIPBOARD_ACCOUNTS_FILE for many
users. The shared space remains available. Web login remembers the selected account
in a long-lived session; logout or cleared browser cookies ends that device session.
Endpoints, authentication, payloads and history pagination
The table describes the standalone server. Windows Server mode implements the shared clipboard workflow, without the standalone web login or isolated accounts.
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/clipboard |
Universal text, image, file or multipart group upload |
POST |
/clipboard/bundle |
A ZIP used specifically as a grouped-file transport |
GET |
/clipboard/latest |
Latest item, including text or Base64 binary content |
GET |
/clipboard/latest/meta |
Latest metadata without downloading the content |
GET |
/clipboard/latest/raw |
Latest raw text/file, or transport ZIP for a group |
GET |
/clipboard/history |
Metadata list, search, filtering and pagination |
DELETE |
/clipboard/history |
Clear the selected space's history and stored files |
GET, DELETE |
/clipboard/item/<id> |
Read or delete one item/group in the selected space |
GET |
/clipboard/item/<id>/raw |
Download an exact item/group |
GET |
/clipboard/item/<id>/file/<index>/raw |
Download one group member by zero-based index |
GET |
/health |
Public service status and version |
GET, POST |
/login |
Standalone web login |
GET |
/logout |
End the browser session |
Legacy endpoints remain supported: /1 for upload, /clipboard/raw for raw receiving,
plus /clipboard/text, /clipboard/text/raw, /clipboard/image,
/clipboard/image/latest, /clipboard/image/latest/raw, /clipboard/file and
/clipboard/file/latest. New integrations should use the universal endpoints.
Authentication: optional ?token=... or X-Auth-Token for the shared API;
?user=...&password=... or X-Clipboard-User/X-Clipboard-Password for an account.
Apply credentials to uploads, metadata, history, member downloads and deletion,
not just receiving. URL-encode parameter values; append further parameters with &.
CLIPBOARD_PASSWORD protects the shared web page; it does not enable API-token
protection by itself. Browser sessions can authenticate browser requests.
Native clients and Apple Shortcuts retain compatible account URLs. Header authentication remains an optional API alternative, not a new requirement. No extra login, pairing or refresh token is introduced. Neither headers nor URL encoding encrypt credentials over plain HTTP.
Payloads: raw text/binary, multipart files and JSON/Base64 are accepted. Set
the original filename via multipart or filename/supported filename headers when
MIME alone is ambiguous. Raw replies expose X-Clipboard-Id, X-Clipboard-Type
and, for files, filename metadata. A normal uploaded ZIP stays a file;
/clipboard/bundle explicitly requests group extraction.
curl -X POST http://localhost:5088/clipboard \
-H 'Content-Type: text/plain; charset=utf-8' --data-binary 'Hello from another device'
curl -X POST http://localhost:5088/clipboard \
-F 'files=@report.pdf' -F 'files=@photo.jpg'
curl http://localhost:5088/clipboard/latest/rawThese Bash examples use an open shared space. Add authentication if configured.
History search: GET /clipboard/history?q=report&type=file&limit=30&offset=0.
Types are text, image, file, bundle; omit type for all. Search examines
previews and filenames, not full documents. limit is 1-1000, offset is nonnegative,
and q is at most 200 characters. The response includes items, count, total,
offset, has_more; count is the returned page size, total the matching count.
Errors: invalid input 400, failed authentication 401, missing item 404,
oversized request 413. Latest metadata returns {"type":"empty"} for an empty
space; latest raw content is an empty response. Retention limits remove old entries.
| Task | Command or documentation |
|---|---|
| Server/metadata tests | Install requirements-server.txt and pytest, then python -m pytest -q tests/test_server.py tests/test_clipboard_text.py tests/test_clipboard_storage.py tests/test_release_metadata.py |
| Windows tests | Install requirements-client.txt and pytest, then python -m pytest -q tests/test_windows_client.py tests/test_clipboard_text.py tests/test_clipboard_storage.py on Windows |
| Version consistency | python scripts/release_metadata.py --check |
| Windows x64 packaging | Build Windows x64 Actions workflow, or scripts\windows\build_release.bat 2.0.21; requires x64 Python and Inno Setup |
| Windows ARM64 packaging | Build Windows ARM64 Actions workflow; native runner, tests, payload and installer verification |
| Android build | Java 17, Android SDK 35; Gradle and private signing instructions |
| Docker source build | docker build -t clipboard-bridge-server:dev . |
VERSION drives Windows release metadata. Keep sources, downloads and docs in sync.
Never commit credentials, clipboard data, Android signing keys or local build output.
CONTRIBUTING.md covers setup, validation and ARM64 artifact publication;
CODE_SIGNING.md explains Windows signing and release checksums.
| Path | Purpose |
|---|---|
clipboard_bridge_windows.py |
Windows client and built-in server |
clipboard_bridge-Server.py |
Standalone Flask server and web interface |
clipboard_text.py |
Shared Unicode/RTF conversion; keep alongside either Python script |
clipboard_storage.py |
Shared fail-safe history reads and atomic index writes; keep alongside either Python script |
android/ |
Android source and build files |
Iphone Shortcuts/ |
Signed Shortcut exports and update instructions |
Dockerfile, compose.yaml, docker-compose.yml, .env.example |
Container deployment |
requirements-*.txt |
Python dependencies |
scripts/ |
Development, validation and Windows build commands |
packaging/windows/ |
Inno Setup installer and generated Windows version metadata |
tests/ |
Regression tests |
.github/workflows/ |
Validation, native ARM64 build, images and website deployment |
docs/ |
GitHub Pages source and public sample screenshots |
docs/development/ |
Architecture, component boundaries and developer documentation |
maintainer/ |
Release checklists, manual validation and media provenance |
distribution/ |
Store adapters; the separate AppStore repository publishes the catalogs |
Architecture and repository layout | Script commands | Windows packaging
Quality audit and remaining verification gates | Backup and recovery
Full user guide | Docker guide | Android documentation | Changelog | Security
Current project source is licensed under the GNU GPL version 3 only. Earlier MIT releases retain their original terms. Dependency licenses are described in THIRD_PARTY_NOTICES.md.
If Clipboard Bridge makes sharing between your devices easier, a donation helps keep the project maintained and updated. Using it is free; support is entirely optional. Thank you for choosing to contribute!





