
pyxclip: Cross-Platform Clipboard for Python, Backed by Rust Most Python clipboard...
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.
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.
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.
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.
aiMost of us have seen a coding agent fail to complete a task we know it can do. We just don't...
googlecloudWhen building Generative AI applications, developers often encounter a massive bottleneck: sequential...
discussI’ve been thinking about sharing some electronic circuit posts on Dev.to — small circuits, DIY...
agentsWhat nobody tells you about exporting your multi-agent prototype to a local workspace. Every...
agenticarchitectAutonomous agents are genuinely good at answering messy business questions. Give one an LLM and a set...
aiPR volume went up, ticket quality didn't, and the gap got filled with LLMs on both sides of the review: bots reviewing, bots replying, bots occasionally arguing with bots about priorities that only existed in a teammate's head. Our CEO named the actual problem, and it's bigger than code review.
Workflows from the Neura Market marketplace related to this Stable Diffusion resource