← observatory

kind 35128 · don't trust, verify

fcfd8c57749ad2254f4d3e77d56d2f7e07e76d5b7ceec1153efaeb694bc262e2

{
  "id": "fcfd8c57749ad2254f4d3e77d56d2f7e07e76d5b7ceec1153efaeb694bc262e2",
  "pubkey": "c2f1ab4e6a577dd8980b57e15986ed92830b95a94f374192235563532b5cac20",
  "created_at": 1791883876,
  "kind": 35128,
  "tags": [
    [
      "path",
      "/index.html",
      "5fcf323a467f0397468265db73d9186764740a52dc42d318782b7b730a4f5ec0"
    ],
    [
      "path",
      "/__MACOSX/._index.html",
      "d2550ebf3832a5cc9e117e36e2ab413f72579703d3eb528cbbd13eb7b7684b48"
    ],
    [
      "path",
      "/404.html",
      "5fcf323a467f0397468265db73d9186764740a52dc42d318782b7b730a4f5ec0"
    ],
    [
      "server",
      "https://nsite.run"
    ],
    [
      "server",
      "https://nostr.download"
    ],
    [
      "server",
      "https://blssm.us"
    ],
    [
      "server",
      "https://blossom.yakihonne.com"
    ],
    [
      "server",
      "https://zencrown.relay2aeon.quest/"
    ],
    [
      "relay",
      "wss://nsite.run"
    ],
    [
      "relay",
      "wss://nostr.bitcoiner.social"
    ],
    [
      "relay",
      "wss://purplepag.es"
    ],
    [
      "relay",
      "wss://relay.primal.net"
    ],
    [
      "relay",
      "wss://zencrown.relay2aeon.quest"
    ],
    [
      "d",
      "peerless"
    ],
    [
      "title",
      "Peerless \u2014 a Nostr nsite you can read, fork, and republish"
    ],
    [
      "description",
      "Peerless is a browser-based download utility. It runs entirely in your browser, has no backend, no account, and no telemetry. You open the page, paste a link, and get a file. That is the whole idea.\n\nWhat it does\n\nIt downloads direct links. Anything on a server that sends the right headers \u2014 a static file, a GitHub release asset, a PDF, a video, a zip \u2014 you paste the URL and Peerless streams it into memory, shows you a progress bar, and hands you the file when it is done. Pause and resume are supported. Failed downloads retry automatically with exponential backoff. You can queue many URLs at once; only three run in parallel, and the rest wait their turn. High-priority items jump the queue.\n\nIt resolves IPFS. Paste an ipfs:// CID or any URL that contains /ipfs/ and Peerless rewrites it through a public gateway. It tries four gateways in order if one is slow or down.\n\nIt fetches GitHub release assets. Paste a direct release asset URL and it downloads. Paste a release tag URL and Peerless asks the GitHub API for the list of assets and lets you pick one. If the release has a single asset, it just downloads.\n\nIt reads Archive.org details pages. Paste an archive.org/details/... URL and Peerless pulls the file listing, sorts it by media-first then by size, and shows a picker. You can grab one file or queue them all. This one needs a CORS proxy \u2014 see below.\n\nIt shares files between your own devices over WebRTC. Click \"Share files\", pick a few files from your device, and Peerless generates a magnet link and copies it to your clipboard. Send that link to another device (message, email, whatever), paste it into the same field on that device, and the files stream directly over the internet. No server, no cloud, no account. Both devices must be online at the same time. This works because both ends speak WebRTC, which is the one peer-to-peer transport a browser is allowed to use.\n\nIt does not do torrents from the general swarm. This is not a bug. A browser cannot open raw TCP or UDP sockets, and the vast majority of BitTorrent peers use those protocols. A browser-based client can only talk to WebRTC peers, which almost no public torrent has. If you paste a magnet from a public tracker, it will not download. There is no code change that fixes this. If you need torrents, use a desktop client. Peerless is honest about that and does not pretend otherwise.\n\nWhy use it\n\nBecause sometimes you just want a file and you do not want to install anything. Because Archive.org downloads break in browsers due to CORS and Peerless has a one-click fix. Because moving a file from your laptop to your phone should not require uploading it to a third party. Because the thing is a single HTML file with no build step and no backend, and you can read every line of it.\n\nWhat it does not do\n\nNo accounts. No telemetry. No analytics. No cookies. No ads. No \"Pro\" tier. It does not phone home. The only network requests it makes are the ones you trigger: fetching a URL you pasted, resolving an IPFS CID through a gateway, calling the GitHub API, reading Archive.org metadata, and \u2014 if you use the share feature \u2014 connecting to public WebRTC trackers to find the other device. Nothing else.\n\nHow to use it\n\nPaste a URL into the box at the top of the sidebar and press Enter. It appears in the Downloads list with a live progress bar. When it finishes, click Save to write it to disk. If you have several URLs, paste them one per line and they all get added at once.\n\nTo download from IPFS, paste the CID with the ipfs:// prefix, or any ipfs.io-style URL. Peerless will rewrite it through a gateway automatically.\n\nTo download from GitHub, paste the URL of a release asset. It downloads directly. If you paste a release tag page instead, Peerless fetches the asset list and shows a picker.\n\nTo download from Archive.org, click the CORS Proxy button first and pick one of the presets. corsproxy.io is a reasonable default. Save it. Then paste an archive.org/details/... URL. Peerless reads the file list and lets you pick.\n\nTo send a file to another device, click the \"Share files\" box, pick your files, and copy the magnet link that appears. Send it to the other device. Paste it into the URL field on that device. The transfer starts automatically.\n\nCORS and why it matters\n\nMany servers, including Archive.org's metadata API, do not send the Access-Control-Allow-Origin header that browsers require for cross-origin requests. When a site blocks the request, the browser will not even show you the error, it just fails. That is why downloading from Archive.org does not work in a plain browser tab. A CORS proxy is a small server that fetches the file on your behalf and adds the missing header. Peerless ships with a list of public ones. They are shared and rate-limited, so for anything serious you should deploy your own. The dialog links to a Cloudflare Workers recipe that takes about two minutes and is free.\n\nWhen a direct fetch fails and a proxy is configured, Peerless retries through the proxy automatically. The card shows \"Via proxy\" so you can tell.\n\nThe interface\n\nThe sidebar has three parts. At the top is the main URL input. Below that is the CORS proxy button. Below that is the Peer-to-Peer share panel. In the footer there is a status line and a question-mark button that replays the guided tour.\n\nThe main column is the Downloads list. Each card shows the filename, the URL, a progress bar, current speed, size, and status. On each card you get Pause, Save, Copy link, Copy as curl, Rename, and a priority button that cycles High, Normal, Low. You can drag a card by its handle to reorder the queue. You can select multiple cards with checkboxes and act on them in bulk.\n\nThe filter bar above the list lets you search by name or URL and filter by status. Press the slash key to jump into it.\n\nThe header shows live download speed, active transfers, queue length, completed file count, the current proxy name, and a sixty-second speed sparkline.\n\nKeyboard shortcuts\n\nPress the question-mark key or click Keys in the sidebar to see the full list. The most useful ones: slash focuses the filter. Ctrl+K focuses the URL field. Ctrl+Enter adds the URL without leaving the field. Ctrl+E exports the pending session as JSON. Ctrl+I imports one. Ctrl+A selects all cards, Delete removes the selection, P pauses or resumes, R retries failures, S saves finished files. The number keys 1, 2, and 3 set High, Normal, and Low priority on the selection. Escape closes the player, dismisses the current modal, or clears focus.\n\nClipboard watcher\n\nIf you copy a URL from anywhere and then paste it into the page \u2014 not into a text field, just paste it anywhere \u2014 a toast appears with an Add button. Click it and the URL is queued. This is convenient when you are copying links out of a chat or an email and do not want to click back and forth.\n\nGuided tour\n\nThe first time you open Peerless, an animated tour walks through the interface with a spotlight on each area: the URL field, the filter, the proxy, the share panel, the header stats, and the status footer. You can skip it at any point, and it will not return. To see it again, click the question-mark button in the sidebar footer.\n\nSession statistics\n\nThe Stats panel shows all-time bytes downloaded, completed files, added URLs, your success rate, current active downloads, current queue length, session bytes since page load, and peak speed this session. You can reset all-time numbers if you want to start clean.\n\nExport and import\n\nExport saves your pending downloads and peer shares to a JSON file. Import restores them. Useful if you want to move your work between browsers, or keep a backup of a long queue before clearing cache.\n\nLimitations worth knowing\n\nA browser tab can only hold so much in memory. Files under a few hundred megabytes are fine. Files above a gigabyte will work but are wasteful; a desktop client is the right tool for those. The app warns you when a download crosses the threshold.\n\nFree public CORS proxies rate-limit. If Archive.org suddenly returns 403, it is almost always the shared proxy and not the app. Try a different preset, or deploy your own.\n\nWebRTC share requires both devices to be online at the same time. It is a live peer connection, not a mailbox. If one side closes the tab, the transfer stops.\n\nSome servers block unknown user agents or require a referer header. Peerless cannot get around that from inside a browser. If a specific download keeps failing with 403 or 401, the server is refusing you and there is nothing a browser-side tool can do.\n\nBrowsers do not expose raw sockets, so no browser-based app can join the general BitTorrent swarm. Peerless does not pretend otherwise. If a magnet link does not resolve, that is why.\n\nHow to run it locally\n\nThere is no build step. Clone or download the file and open index.html in a modern browser. Chrome, Firefox, Safari, and Edge all work. WebRTC requires a secure context, so if you serve it over a local HTTP server rather than opening the file directly, use https or localhost.\n\nHow to host your own copy\n\nAny static host will do. GitHub Pages, Netlify, Cloudflare Pages, S3 with static hosting, or a plain nginx directory. It is one HTML file with everything inlined, plus an optional stylesheet if you split it out. No server-side language, no database, no environment variables. Copy it, serve it, done.\n\nLicense\n\nMIT. Use it, fork it, change it, ship it. No attribution required, though a link back is nice.\n\nWhy it exists\n\nBecause the browser is already a file-transfer tool and it has been held back by missing primitives for too long. IPFS and WebRTC give it enough to do useful peer-to-peer work. Peerless is the smallest possible app that uses both, plus the standard HTTP fetch path, to move files around without a server in the middle. That is the whole idea. It is not a startup. It is not a product. It is a tool that does a small number of things well and says so."
    ],
    [
      "client",
      "nsite.run"
    ]
  ],
  "content": "",
  "sig": "f5518bf64d32009dd084dde56658165ce6bb5644939ba86d18c7b2df5bc4d0ed20556e4c9059466078d94be2caab9af89baa6479d030484739f370d363f64252"
}