{
  "markdown": "# NotesQR Share\n\n**Send files directly device-to-device over WebRTC — files never touch NotesQR's servers.**\n\nCLI + MCP for [NotesQR](https://notesqr.com). Same rooms as the browser app. Both peers stay online; bytes never land on NotesQR disks.\n\n<p align=\"center\">\n  <a href=\"https://github.com/NotesQR/notesqr-share/stargazers\"><img src=\"https://img.shields.io/github/stars/NotesQR/notesqr-share?style=flat-square\" alt=\"GitHub stars\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-yellow?style=flat-square\" alt=\"MIT license\"></a>\n  <img src=\"https://img.shields.io/badge/transfer-WebRTC%20P2P-2563eb?style=flat-square\" alt=\"WebRTC P2P\">\n  <img src=\"https://img.shields.io/badge/account-not%20required-14b8a6?style=flat-square\" alt=\"No signup\">\n  <img src=\"https://img.shields.io/badge/node-%3E%3D18-339933?style=flat-square\" alt=\"Node.js 18+\">\n  <a href=\"https://github.com/NotesQR/notesqr-share/commits/main\"><img src=\"https://img.shields.io/github/last-commit/NotesQR/notesqr-share?style=flat-square\" alt=\"Last commit\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://notesqr.com\"><strong>Web app</strong></a>\n  ·\n  <a href=\"https://notesqr.com/donate\"><strong>Donate</strong></a>\n  ·\n  <a href=\"CONTRIBUTING.md\"><strong>Contribute</strong></a>\n  ·\n  <a href=\"https://notesqr.com/docs\">Docs</a>\n  ·\n  <a href=\"https://github.com/NotesQR/NotesQR\">Product README</a>\n</p>\n\n<p align=\"center\"><em>Donation-funded. If this CLI saved you a WeTransfer upload, <a href=\"https://notesqr.com/donate\">support the project</a>.</em></p>\n\n<p align=\"center\">\n  <img src=\"media/demo-web-20260818.gif\" alt=\"NotesQR: drop a file, get a QR or link, recipient downloads over WebRTC P2P\" width=\"800\">\n</p>\n\n**Current release: 2.1.0** — same transfer engine as the NotesQR web app (adaptive chunks up to 1 MiB, `zip_batch` DataChannel reuse, outbound concurrency 5→32).\n\n---\n\n## CLI\n\nNeeds [Node.js 18+](https://nodejs.org/). If `npx github:…` fails with `EALLOWGIT`, run `npm config set allow-git all` once, or clone this repo.\n\nPrefer a **fresh** `npx` pull after upgrades so you are not stuck on an old cached checkout:\n\n```bash\n# Terminal A — sender (exits after successful delivery with --once)\nnpx -y github:NotesQR/notesqr-share send ./file.pdf --once\n\n# Terminal B — or open the printed URL in a browser\nnpx -y github:NotesQR/notesqr-share recv https://notesqr.com/xxx-xxxx-xxx -o ./out\n```\n\nFrom a clone:\n\n```bash\nnpm install\nnode cli/notesqr.mjs send ./file.pdf --once\nnode cli/notesqr.mjs recv <url> -o ./out\n```\n\n### Folders\n\n`send` accepts directories (recursive). Peers only see **share-relative** paths (never absolute disk paths). `recv` recreates the tree under `-o`. Same folder flow exists on the web app, desktop installers, and browser extensions.\n\n```bash\nnpx -y github:NotesQR/notesqr-share send ./project/ README.md --once\nnpx -y github:NotesQR/notesqr-share recv <room|url> -o ./out\n```\n\n<p align=\"center\">\n  <img src=\"media/cli-demo-20260818.gif\" alt=\"NotesQR CLI: send, share URL or QR, receive\" width=\"800\">\n</p>\n\n---\n\n## MCP\n\nAgent tools `notesqr_p2p_send` / `notesqr_p2p_recv` — same P2P rooms, no store-and-forward API.\n\n```json\n{\n  \"mcpServers\": {\n    \"notesqr\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"-p\", \"github:NotesQR/notesqr-share\", \"notesqr-mcp\"]\n    }\n  }\n}\n```\n\nDocs: [notesqr.com/docs](https://notesqr.com/docs) · Agent hints: [notesqr.com/llms.txt](https://notesqr.com/llms.txt)\n\n---\n\n## Why not WeTransfer, Dropbox, or Google Drive?\n\n- **WeTransfer** — uploads to their servers; free tiers cap size and expiry. This CLI never parks a copy on NotesQR disks.\n- **Dropbox** — account + cloud folder/quota. NotesQR needs no account; sender stays online instead.\n- **Google Drive** — share a hosted copy. NotesQR is a live WebRTC handoff, not a drive.\n\nFull write-up: [notesqr.com/cloud-alternatives](https://notesqr.com/cloud-alternatives)\n\n---\n\n## How it works\n\n```mermaid\nflowchart LR\n  S[Sender CLI / browser]\n  N[NotesQR<br/>signaling]\n  R[Receiver CLI / browser]\n  S -->|create room| N\n  R -->|join room| N\n  S <-->|WebRTC DataChannel<br/>file bytes — never stored| R\n```\n\nTURN is a **fallback only** when a direct path is blocked.\n\n1. Sender hosts a room and stays online\n2. Prints `https://notesqr.com/{room}` (and a terminal QR)\n3. Receiver joins while the sender is still running\n4. Bytes go peer-to-peer (signaling + optional TURN only)\n\nThis is **not** an HTTP store-and-forward upload API. If the sender process exits before the download finishes, the transfer stops.\n\n---\n\n## What’s new in 2.1.0\n\n- **Adaptive chunks** — probe SCTP `maxMessageSize`, send up to 1 MiB, step down if the peer rejects\n- **`zip_batch`** — folder / multi-file transfers reuse one DataChannel (critical when a web guest downloads a folder from a CLI host)\n- **Outbound concurrency** — base 5, grow toward 32 while in-flight bytes stay under ~10 MiB\n- **Large rooms** — file list sent in ~180 KiB JSON batches\n- **Recv** — multi-file downloads largest-first; stall watchdog instead of a hard wall-clock timeout from t=0\n\n---\n\n## Agent plugins\n\n| Surface | Path |\n| --- | --- |\n| **Grok** | [`grok-plugin/`](grok-plugin/) — also listed on the [xAI Plugin Marketplace](https://github.com/xai-org/plugin-marketplace) as **notesqr** |\n| **Cursor** | [`cursor-plugin/`](cursor-plugin/) |\n| **Gemini CLI** | [`gemini-extension.json`](gemini-extension.json) · `gemini extensions install https://github.com/NotesQR/notesqr-share` |\n| **Claude / Codex** | [`claude-plugin/`](claude-plugin/) · [`codex-plugin/`](codex-plugin/) |\n\n---\n\n## License\n\n[MIT](LICENSE). Product: [notesqr.com](https://notesqr.com) · [Donate](https://notesqr.com/donate) · [Changelog](https://notesqr.com/changelog)\n",
  "bytes": 5730,
  "sha": "4b0e593eb24deb08eac58310269d90eb68aef9d1100bd41be0dc69b4367c9026",
  "repo_slug": "notesqr/notesqr-share",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_notesqr_notesqr_share_baf8e0fd/readme"
}