{"id":13491625,"url":"https://github.com/binwiederhier/pcopy","last_synced_at":"2025-04-05T23:07:48.808Z","repository":{"id":48601932,"uuid":"317568396","full_name":"binwiederhier/pcopy","owner":"binwiederhier","description":"pcopy is a temporary file host, nopaste and clipboard across machines. It can be used from the Web UI, via a CLI or without a client by using curl.","archived":false,"fork":false,"pushed_at":"2024-04-04T22:59:01.000Z","size":12966,"stargazers_count":358,"open_issues_count":14,"forks_count":27,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-29T21:09:34.574Z","etag":null,"topics":["clipboard","copy-paste","curl","golang","netcat","nopaste","pastebin","self-hosted"],"latest_commit_sha":null,"homepage":"https://nopaste.net","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/binwiederhier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-01T14:32:40.000Z","updated_at":"2025-03-25T04:06:28.000Z","dependencies_parsed_at":"2024-01-07T21:02:22.376Z","dependency_job_id":"0b9de2bb-ac05-4220-8e2c-e5488f3371de","html_url":"https://github.com/binwiederhier/pcopy","commit_stats":null,"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binwiederhier%2Fpcopy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binwiederhier%2Fpcopy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binwiederhier%2Fpcopy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binwiederhier%2Fpcopy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/binwiederhier","download_url":"https://codeload.github.com/binwiederhier/pcopy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411234,"owners_count":20934653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clipboard","copy-paste","curl","golang","netcat","nopaste","pastebin","self-hosted"],"created_at":"2024-07-31T19:00:58.753Z","updated_at":"2025-04-05T23:07:48.775Z","avatar_url":"https://github.com/binwiederhier.png","language":"Go","readme":"# pcopy\n[![Release](https://img.shields.io/github/release/binwiederhier/pcopy.svg?color=success\u0026style=flat-square)](https://github.com/binwiederhier/pcopy/releases/latest)\n[![Go Reference](https://pkg.go.dev/badge/heckel.io/pcopy.svg)](https://pkg.go.dev/heckel.io/pcopy)\n[![Tests](https://github.com/binwiederhier/pcopy/workflows/test/badge.svg)](https://github.com/binwiederhier/pcopy/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/binwiederhier/pcopy)](https://goreportcard.com/report/github.com/binwiederhier/pcopy)\n[![codecov](https://codecov.io/gh/binwiederhier/pcopy/branch/master/graph/badge.svg?token=bdrFZttMsk)](https://codecov.io/gh/binwiederhier/pcopy)\n[![Slack channel](https://img.shields.io/badge/slack-@gophers/pcopy-success.svg?logo=slack)](https://gophers.slack.com/archives/C01JMTPGF2Q)\n\npcopy is a tool to copy/paste across machines. It can be used from the [web UI](#web-ui-for-uploading-text-snippets-or-large-files),\nvia a CLI or without a client by using curl. It can also be used as a self-hosted NoPaste or as a temporary file hosting service.\n\nAfter installing the pcopy server, you can use the `pcopy` command line tool to copy from STDIN (`pcp \u003c file.txt`) and \npaste on any connected machine to STDOUT (`ppaste \u003e file.txt`). If you don't have pcopy installed, you can also use its\nsuper simple REST API to copy/paste, e.g. via `curl`.\n\nThe web UI allows you to paste text or upload files (even if they are gigabytes in size), and generates \ntemporary links you can share with others. \n\nTo see what else pcopy can do, check out the **[live demo](#demo)** (aka [nopaste.net](https://nopaste.net)) or the **[videos](#videos)**.\n\n**Features:**\n* 📋 Copy/paste across computers (via STDIN/STDOUT)\n* 🔒 HTTPS secure server (via cert-pinning)\n* 🔑 Clipboards can be [password-protected](#password-protected-clipboard), or they can be open for everyone\n* 📚 Support for [multiple clipboards](#support-for-multiple-clipboards) (e.g. personal, work, ...)\n* 🌎 Simple [Web UI](#web-ui-for-uploading-text-snippets-or-large-files) for uploading text snippets or large files\n* 🔗 Direct [temporary links](#direct-temporary-links-to-clipboard-content-with-ttlexpiration) to clipboard content (with TTL/expiration) \n* 💻 No-install usage via [curl](#curl-compatible-usage) (`curl nopaste.net`) and [netcat](#nc-compatible-usage) (`echo help | nc -N nopaste.net 9999`)\n* 👁️ [Browser-only links](#browser-only-links-that-store-your-data-in-the-url-fragment) that store your data in the URL fragment \n\n![pcopy demo](assets/demo-simple.gif)\n\n## Installation\nBinaries can be found on the [releases page](https://github.com/binwiederhier/pcopy/releases). \n\n**Debian/Ubuntu** (*from a repository*)**:**   \n```bash\ncurl -sSL https://archive.heckel.io/apt/pubkey.txt | sudo apt-key add -\nsudo apt install apt-transport-https\nsudo sh -c \"echo 'deb [arch=amd64] https://archive.heckel.io/apt debian main' \u003e /etc/apt/sources.list.d/archive.heckel.io.list\"  \nsudo apt update\nsudo apt install pcopy\n```\n\n**Debian/Ubuntu** (*manual install*)**:**\n```bash\nwget https://github.com/binwiederhier/pcopy/releases/download/v0.6.1/pcopy_0.6.1_amd64.deb\ndpkg -i pcopy_0.6.1_amd64.deb\n```\n\n**Fedora/RHEL/CentOS:**\n```bash\nrpm -ivh https://github.com/binwiederhier/pcopy/releases/download/v0.6.1/pcopy_0.6.1_amd64.rpm\n```\n\n**Homebrew for MacOS:**\nBrew package is managed semi-automatically by [nwithan8](https://github.com/nwithan8/homebrew-tap)\n```bash\nbrew tap nwithan8/tap\nbrew install pcopy\n```\n\n**Docker** (*see [detailed instructions](#docker-usage)*)**:**\n```bash\ndocker run --rm -it binwiederhier/pcopy\n```\n\n**Go:**\n```bash\n# requires Go 1.16\ngo get -u heckel.io/pcopy\n```\n\n**Manual install** (*any x86_64-based Linux*)**:**\n```bash\nwget https://github.com/binwiederhier/pcopy/releases/download/v0.6.1/pcopy_0.6.1_linux_x86_64.tar.gz\nsudo tar -C /usr/bin -zxf pcopy_0.6.1_linux_x86_64.tar.gz pcopy\n```\n\nAfter installation, you may want to check out the [Bash/ZSH autocomplete instructions](#bashzsh-autocompletion).\n\n## Usage\n\n### Set up a pcopy server\nTo setup a new pcopy server, simply run `sudo pcopy setup` (see [server setup demo](#videos)): \n```bash\nsudo pcopy setup\nsudo systemctl enable pcopy\nsudo systemctl start pcopy\n```\nThis will walk you through an interactive setup wizard and place a config file at `/etc/pcopy/server.conf` (see \n[sample config](configs/pcopy.conf)). The wizard will set up a pcopy user and a systemd service. Once the service \nis started, it listens on port 2586 by default.\n\nIf you've enabled the Web UI, you can browse to it an paste text snippets or upload files to it (see [live demo](#demo)).    \n\n### Join an existing clipboard\nTo join an existing clipboard, you may use `pcopy join`:\n```bash\npcopy join private.example.com\npcopy join work.mycorp.com work\npcopy list\n```\nYou can join multiple clipboards and give each of them an optional alias (see `work` clipboard above). Each \nclipboard has its own config file, either in `~/.config/pcopy` or in `/etc/pcopy` (for root). You can list connected\nclipboards with `pcopy list`.\n\n### Start copying \u0026 pasting\nNow you can start copying and pasting by using `pcp` (short for: `pcopy copy`) and `ppaste` (short for: `pcopy paste`). \nAny connected client, regardless of what computer it's on, can copy/paste like this (see [copy/pasting videos](#videos)):\n\n```bash\npcp \u003c foo.txt            # Copies foo.txt to the default clipboard\npcp bar \u003c bar.txt        # Copies bar.txt to the default clipboard as 'bar'\necho hi | pcp work:      # Copies 'hi' to the 'work' clipboard\necho ho | pcp work:bla   # Copies 'ho' to the 'work' clipboard as 'bla'\npcp : img1/ img2/        # Creates ZIP from two folders, copies it to the clipboard\n\nppaste                   # Reads from the default clipboard and prints its contents\nppaste bar \u003e bar.txt     # Reads 'bar' from the default clipboard to file 'bar.txt'\nppaste work:             # Reads from the 'work' clipboard and prints its contents\nppaste work:ho \u003e ho.txt  # Reads 'ho' from the 'work' clipboard to file 'ho.txt'\nppaste : images/         # Extracts ZIP from default clipboard to folder images/\n```\n\n## Advanced features\nThe server can be configured via the well-documented config file `/etc/pcopy/server.conf` (see [sample config](configs/pcopy.conf)).\nHere are a few highlights:\n\n### Password-protected clipboard \nWhen you set up a new clipboard via `pcopy setup`, you can enter a password. That derives a key, which is stored in the \nconfig file (see [Key section](https://github.com/binwiederhier/pcopy/blob/4dfeb5b8647c04cc54aa1538b8fb3f5d384c3700/configs/pcopy.conf#L23-L30)).\nTo add a password after initial setup, use the `pcopy keygen` command.\n\nWhen joining a clipboard with `pcopy join`, you'll be asked for a password. When using `curl`, you can provide the \npassword via `-u :\u003cpassword\u003e` (see [curl usage](#curl-compatible-usage)). \n\n### Support for multiple clipboards\nYou can provide an (optional) alias to a clipboard when you `pcopy join` it (see [join](#join-an-existing-clipboard)).\nYou may then later reference that alias in `pcp \u003calias\u003e:..` and `ppaste \u003calias\u003e:..` (see [copy/paste](#start-copying--pasting)).\n\nTo list all your connected clipboards, simple type:\n```bash\n$ pcopy list\nClipboard Server address   Config file\n--------- --------------- ----------------------------\nwork      10.0.160.67     ~/.config/pcopy/work.conf\ndefault   nopaste.net:443 ~/.config/pcopy/default.conf\n```\n### Web UI for uploading text snippets or large files\npcopy comes with a Web UI. You can check out the [demo](#demo).   \n*(Note: I am not a web guy. I could use some help here!)*\n\n![Web UI](assets/demo-webui.gif)\n\n### `curl`-compatible usage \nIf you don't want to install `pcopy` on a server, you can use simple HTTP GET/PUT/POSTs, e.g. via `curl`. There's an entire\n`curl` [help page](https://nopaste.net/curl) available too if you just type `curl \u003chostname\u003e`. You may use `-u :\u003cpassword\u003e` to provide the clipboard\n password (if any). Here's an example for the [demo clipboard](#demo):\n```bash\n# Show curl help page\ncurl nopaste.net\n\n# Copy/upload to clipboard (POST/PUT both work)\ncurl -d Howdy nopaste.net/hi-there\ncurl -T germany.jpg https://nopaste.net/germany\n\n# Paste/download from clipboard\ncurl https://nopaste.net/hi-there\n```\n\n### `nc`-compatible usage \nSimilar to the `curl` API, you can upload files via netcat (`nc`). There's a detailed [help page](https://nopaste.net/nc) available by typing `echo help | nc \u003chostname\u003e \u003cport\u003e`, e.g. `echo help | nc -N nopaste.net 9999`. Unlike the curl-API, the netcat usage is limited to uploading files only.\n\n```bash\n# Show nc help page\necho help | nc -N nopaste.net 9999\n\n# Upload to clipboard\necho check this out | nc -N nopaste.net 9999\ncat dog.jpg | nc -N nopaste.net 9999\n\n# Upload with  TTL\n(echo \"pcopy:?t=30m\"; cat dog.jpg) | nc -N nopaste.net 9999\n```\n\n### Streaming contents (without storing them on server)\nIf you have particularly large files to send across, and you know you only want to send them to exactly one server,\nyou can use ` pcp --stream`. It creates a FIFO device (`mkfifo`) on the server side, and will wait until a reading\nclient (`ppaste` or `curl ..`) is connected before sending.\n\n```bash\n# On machine 1\nyes | pcp --stream    # Will block until 'machine 2' is connected\n\n# On machine 2\nppaste | pv \u003e /dev/null\n``` \n\n### Direct temporary links to clipboard content (with TTL/expiration)\nYou can generate temporary links to clipboard entries with `pcopy link`. You can send this link to someone and they\ncan download the clipboard content without downloading the client or using any command line tools:\n\n```bash\n$ pcopy link hi-there\n# Direct link (valid for 2d, expires 2021-01-29 22:35:09 -0500 EST)\nhttps://nopaste.net/hi-there?a=SE1BQyA\n\n# Paste via pcopy (you may need a prefix)\nppaste hi-there \n\n# Paste via curl\ncurl -sSL 'https://nopaste.net/hi-there?a=SE1BQyAxNjA'\n```\n\n### Limiting clipboard usage\nYou can limit the clipboard usage in various ways in the config file (see [config file](https://github.com/binwiederhier/pcopy/blob/4dfeb5b8647c04cc54aa1538b8fb3f5d384c3700/configs/pcopy.conf#L66-L101)), \nto avoid abuse:\n\n* `ClipboardSizeLimit`: Limits the total size of the entire clipboard (size of all files)\n* `ClipboardCountLimit`: Limits the number of clipboard files\n* `FileSizeLimit`: Limits the per-file size\n* `FileExpireAfter`: Limits the age of a file (after which they will be deleted)\n\nThe [demo clipboard](#demo) uses these settings very restrictively to avoid abuse.\n\n### Browser-only links that store your data in the URL fragment\n\nInspired by [nopaste.ml](https://nopaste.ml) and [paste](https://github.com/topaz/paste), pcopy also supports links that \nstore all data in the URL fragment/anchor (the part in the URL after the `#`) and not on the server. \n\nWhen the \"Client-side\" checkbox is checked in the Web UI, pcopy compresses the text in the editor using LZMA and then \nencodes the result using Base64, e.g. `https://nopaste.net/#XQAAAQAKAA...`. As long as you have this link, this text can\nnever be deleted and never expires.\n\nHere's an [example](https://nopaste.net/#XQAAAQD/AAAAAAAAAAAkGkAHQ30IXZA3jeQkZZItfPikpd4KaJ5EwL+3jkWf1npuHdpK3Miq3nr2jWTqjzbcQcfEp1beN+JG4OrP2U1B05NIVqx4SK5oEeVjzYaQ7c+ZeI6M28viSMa1/EwPhNjrfvPpa8sNufdVJxUtZX1KphQKpZwAO5ShztZNvnpvpsf2KTtyHw6z4Ybm/nBAKzuJF3fCz1qTnAuGTHA91Kp0s7GbEBP5bGgGNSsqaWesKd9AE59x0Uf27+z+dRdxLev/9U/BQw==). \nWhen you open the link, pcopy reads, decodes, and decompresses whatever is after the `#`, and displays the result in the editor.\nThis process is done entirely in your browser, and the web server hosting pcopy never has access to the fragment.\n\nThe link is also compatible with the original implementations. Here's the same example for [nopaste.ml](https://nopaste.ml/#XQAAAQD/AAAAAAAAAAAkGkAHQ30IXZA3jeQkZZItfPikpd4KaJ5EwL+3jkWf1npuHdpK3Miq3nr2jWTqjzbcQcfEp1beN+JG4OrP2U1B05NIVqx4SK5oEeVjzYaQ7c+ZeI6M28viSMa1/EwPhNjrfvPpa8sNufdVJxUtZX1KphQKpZwAO5ShztZNvnpvpsf2KTtyHw6z4Ybm/nBAKzuJF3fCz1qTnAuGTHA91Kp0s7GbEBP5bGgGNSsqaWesKd9AE59x0Uf27+z+dRdxLev/9U/BQw==)\nand for [topaz's paste](https://topaz.github.io/paste/#XQAAAQD/AAAAAAAAAAAkGkAHQ30IXZA3jeQkZZItfPikpd4KaJ5EwL+3jkWf1npuHdpK3Miq3nr2jWTqjzbcQcfEp1beN+JG4OrP2U1B05NIVqx4SK5oEeVjzYaQ7c+ZeI6M28viSMa1/EwPhNjrfvPpa8sNufdVJxUtZX1KphQKpZwAO5ShztZNvnpvpsf2KTtyHw6z4Ybm/nBAKzuJF3fCz1qTnAuGTHA91Kp0s7GbEBP5bGgGNSsqaWesKd9AE59x0Uf27+z+dRdxLev/9U/BQw==).\n\nYou can also generate the links from the command line (thanks to nopaste.ml for this):\n```\n# Linux\necho -n 'Hello World' | lzma | base64 -w0 | xargs -0 printf \"https://nopaste.net/#%s\\n\"\n\n# Mac\necho -n 'Hello World' | lzma | base64 | xargs -0 printf \"https://nopaste.net/#%s\\n\"\n\n# Windows / WSL / Linux\necho -n 'Hello World' | xz --format=lzma | base64 -w0 | printf \"https://nopaste.net/#%s\\n\" \"$(cat -)\"\n```\n\n### Docker usage\nTo use the [pcopy image](https://hub.docker.com/r/binwiederhier/pcopy), simply pull it and set up a few \nshell aliases to simplify local usage: \n\n```bash\ndocker pull binwiederhier/pcopy\nalias pcopy=\"docker run --rm -v ~/.cache/pcopy:/var/cache/pcopy -v ~/.config/pcopy:/etc/pcopy -p 2586:2586/tcp -it binwiederhier/pcopy\"\nalias pcp=\"pcopy copy\"\nalias ppaste=\"pcopy paste\"\n```\n\nThis maps the following folders and ports (you may choose different host folders):\n* Config folder: `/etc/pcopy` (image) to `~/.config/pcopy` (host)\n* Clipboard folder (only for server usage): `/var/cache/pcopy` (image) to `~/.cache/pcopy` (host)\n* Service port (only for server usage): 2586 (both image and host) \n\nYou can then use pcopy just like it was installed on your host system. To use it as a client, run \n`pcopy join` (see [join instructions](#join-an-existing-clipboard)). To set up a server, run\n\n```bash\npcopy setup\npcopy serve\n```\n\n### Bash/ZSH autocompletion\nTab completion is available for Bash and ZSH. For Bash, when installed via rpm/deb, autocomplete is immediately\navailable. ZSH autocomplete installation is manual.\n\n**Bash** (*only if not installed via rpm/deb*):\n```\nsudo wget -O /etc/bash_completion.d/pcopy https://raw.githubusercontent.com/binwiederhier/pcopy/master/scripts/autocomplete_bash\nsudo ln -s /etc/bash_completion.d/pcopy /etc/bash_completion.d/pcp\nsudo ln -s /etc/bash_completion.d/pcopy /etc/bash_completion.d/ppaste\n```\n\n**ZSH**:\n```\nmkdir -p ~/.config/pcopy\nwget -O ~/.config/pcopy/autocomplete_zsh https://raw.githubusercontent.com/binwiederhier/pcopy/master/scripts/autocomplete_zsh\nfor p in pcopy pcp ppaste; do echo \"PROG=$p source ~/.config/pcopy/autocomplete_zsh\" \u003e\u003e ~/.zshrc; done\n```\n\n## Demo\nI run a small nopaste service on **[nopaste.net](https://nopaste.net)** that you can play with. It has quite a few \nlimits in place, but you'll be able to get a feel for it:\n\n- To join via the command line: `pcopy join nopaste.net` (see [join instructions](#join-an-existing-clipboard))\n- Or use the [web UI](https://nopaste.net) (this is *work in progress*, I'm not a web designer, please help!)\n- Or simply type `curl nopaste.net` (see [curl usage](#curl-compatible-usage)) \n- Or simply type `echo help | nc -N nopaste.net 9999` (see [netcat usage](#nc-compatible-usage)) \n\n**Limits:**   \nSince [nopaste.net](https://nopaste.net) is publicly available, I put quite strict limits in place. It is limited to \n2 GB total, 500 KB per file, 10,000 files. Files expire after 2 days. Also, overwriting files is disabled (which, if\nyou use it as a personal clipboard, is quite nonesensical, but it makes sense for a nopaste).\n\nI also made a couple [more videos](#videos) to show what else pcopy can do.\n\n## Videos\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"assets/demo-simple.gif\" width=\"300\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"assets/demo-setup.gif\" width=\"300\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"assets/demo-zip.gif\" width=\"300\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eSimple copy \u0026 paste\u003c/td\u003e\n    \u003ctd\u003eSetting up a new server\u003c/td\u003e\n    \u003ctd\u003eCopying entire folders\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"assets/demo-link.gif\" width=\"300\"\u003e\u003c/td\u003e    \n    \u003ctd\u003e\u003cimg src=\"assets/demo-webui.gif\" width=\"300\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"assets/demo-curl.gif\" width=\"300\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eCreating a link to a password-protected clipboard\u003c/td\u003e        \n    \u003ctd\u003eCopying/uploading through the Web UI\u003c/td\u003e\n    \u003ctd\u003eCopy/pasting with `curl`\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Command-line help\nEach command has a detailed help page. Simply type `pcopy -help`, `pcp -help`, etc. Here's the main help page:\n```bash \n$ pcopy --help\nNAME:\n   pcopy - copy/paste across machines\n\nUSAGE:\n   pcopy COMMAND [OPTION..] [ARG..]\n\nCOMMANDS:\n   Client-side commands:\n     copy, c    Read from STDIN/file(s) and copy to remote clipboard\n     paste, p   Write remote clipboard contents to STDOUT/file(s)\n     join, add  Join a remote clipboard\n     leave, rm  Leave a remote clipboard\n     list, l    Lists all of the clipboards that have been joined\n     link, n    Generate direct download link to clipboard content\n   Server-side commands:\n     serve   Start pcopy server\n     setup   Initial setup wizard for a new pcopy server\n     keygen  Generate key for the server config\n\nTry 'pcopy COMMAND --help' for more information.\n``` \n\n## Building\nBuilding pcopy is dead simple, however it does need Go \u003e=1.16, because it uses [embed](https://tip.golang.org/pkg/embed/). \nHere's how you build it:\n\n```\nmake build-simple\n# Builds to dist/pcopy_linux_amd64/pcopy\n``` \n\nTo build releases, I use [GoReleaser](https://goreleaser.com/). If you have that installed, you can run `make build` or \n`make build-snapshot`.\n\n## Contributing\nI welcome any and all contributions. Just create a PR or an issue, or talk to me [on Slack](https://gophers.slack.com/archives/C01JMTPGF2Q).\n\n## Inspired by\nThanks [nakabonne](https://github.com/nakabonne) for making [pbgopy](https://github.com/nakabonne/pbgopy), and for \n[posting it on Reddit](https://www.reddit.com/r/golang/comments/k2nzyn/pbgopy_copy_and_paste_between_devices/gdwpy8u/?context=3). \nIt inspired me to make pcopy. \n\nThe Web UI as well as the client-side mode are inspired by [nopaste.ml](https://nopaste.ml/).\n\nAs many may instantly notice, pcopy is similar to [pbcopy/pbpaste](https://osxdaily.com/2007/03/05/manipulating-the-clipboard-from-the-command-line/). \nHowever, pcopy can copy/paste across the network. You can copy on your laptop and paste on your servers.\n\npcopy may also replace [scp](https://linux.die.net/man/1/scp) or [rsync](https://linux.die.net/man/1/rsync) in simple cases,\nwhen you just want to copy a file or folder across to another computer. \n\n## License\nMade with ❤️ by [Philipp C. Heckel](https://heckel.io), distributed under the [Apache License 2.0](LICENSE).\n\nThird party libraries:\n* [github.com/urfave/cli/v2](https://github.com/urfave/cli/v2) (MIT) is used to drive the CLI\n* [CryptoJS](https://github.com/brix/crypto-js) (MIT) is used for key derivation and such in the Web UI\n* [LZMA-JS](https://github.com/LZMA-JS/LZMA-JS) (MIT) is used for client-side mode to compress text\n* [Lato Font](https://www.latofonts.com/) (OFL) is used as a font in the Web UI\n* [GoReleaser](https://goreleaser.com/) (MIT) is used to create releases \n\nCode and posts that helped:\n* [Drag \u0026 Drop](https://stackoverflow.com/a/33917000/1440785) (CC BY-SA 3.0)\n* [Progress indicator](https://github.com/machinebox/progress) (Apache 2.0)\n* [Rate limiting](https://www.alexedwards.net/blog/how-to-rate-limit-http-requests) (MIT)\n* [Find common directory](https://rosettacode.org/wiki/Find_common_directory_path#Go) (GFDLv1.2)\n* [Full page centering](https://medium.com/creative-technology-concepts-code/full-page-site-with-vertical-centering-using-css-only-7858ed6764c4)\n* [Human readable file sizes](https://yourbasic.org/golang/formatting-byte-size-to-human-readable-format/)\n* [Unzipping files](https://golangcode.com/unzip-files-in-go/)\n* [HTTP server routing](https://benhoyt.com/writings/go-routing/#regex-table)\n* [HTTP server error handling](https://thingsthatkeepmeupatnight.dev/posts/golang-http-handler-errors/)\n* [Google Webfonts Helper](https://google-webfonts-helper.herokuapp.com/)\n","funding_links":[],"categories":["Go","self-hosted","\u003ca name=\"copy-paste\"\u003e\u003c/a\u003eCopy/paste and clipboard"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbinwiederhier%2Fpcopy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbinwiederhier%2Fpcopy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbinwiederhier%2Fpcopy/lists"}