pyxclip: Cross-Platform Clipboard for Python, Backed by Rust
Most Python clipboard libraries function as thin wrappers for system-level command-line utilities. For instance, pyperclip relies on external binaries—invoking xclip on Linux and pbcopy on macOS—while using ctypes for Windows. Similarly, xerox (last updated in 2018) follows this pattern. Because these libraries depend on external processes, they are limited to text-only transfers and fail if the underlying system tool is missing.
The typical error looks like this:
PyperclipException: Pyperclip could not find a copy/paste mechanism for your system.
On Linux that means installing xclip or xsel manually. On modern desktops running Wayland, even with those tools installed, pyperclip silently fails to copy. A freelancer gig was posted specifically to fix this error. A Python Forum thread from April 2025 documents someone who gave up on pyperclip entirely on Ubuntu 24.04 and wrote their own xclip wrapper in Python.
What pyxclip does differently
pyxclip compiles a Rust extension module using PyO3 and the arboard crate. The compiled binary talks to platform APIs directly: X11 or Wayland on Linux, NSPasteboard on macOS, Win32 on Windows. No subprocess calls, no xclip, no xsel, no pbcopy.
It supports text, images, and file paths in a single package.
import pyxclip
# Text
pyxclip.copy("Hello, world!")
print(pyxclip.paste())
# Clear
pyxclip.clear()
The copy() function dispatches based on argument type. A str copies as text. A (width, height, bytes) tuple copies as an RGBA image. A Path or list of Path objects copies file references. The paste() function returns whatever the clipboard contains.
from pathlib import Path
from PIL import Image
# Images (RGBA pixel data)
img = Image.open("photo.png").convert("RGBA")
pyxclip.copy((img.width, img.height, img.tobytes()))
# File paths
pyxclip.copy(Path("/tmp/report.pdf"))
files = [Path("/tmp/a.pdf"), Path("/tmp/b.pdf")]
pyxclip.copy(files)
# Paste returns the appropriate type
result = pyxclip.paste() # str, dict, or list[str]
A str is always treated as text, never as a file path. If you need to copy a file reference, wrap it in Path. All paths are canonicalized to absolute before copying.
Known limitation
File path copying works for programmatic access (copy and paste back in Python or terminal). Pasting into desktop file managers is a separate problem. GNOME's Nautilus expects x-special/gnome-copied-files alongside text/uri-list, which the arboard crate doesn't set. This is tracked in issue #2.
Install
pip install pyxclip
Python 3.8 through 3.14. Prebuilt wheels for Linux (x86_64, aarch64), macOS (x86_64, arm64), and Windows (x86_64). No C compiler or system packages needed. MIT licensed.
Source: github.com/abbazs/pyxclip
If you find this useful, consider giving it a star on GitHub. Issues and PRs are welcome.
United States
NORTH AMERICA
Related News

Open Harness: The Multi-Panel AI Powerhouse Revolutionizing Developer Workflows
10h ago
Firefox Announces Built-In VPN and Other New Features - and Introduces Its New Mascot
9h ago
50% of Consumers Prefer Brands That Avoid GenAI Content
9h ago
Officer Leaks Location of French Aircraft Carrier With Strava Run
9h ago
CBS News Shutters Radio Service After Nearly a Century
9h ago