{"id":13565624,"url":"https://github.com/ipfs-shipyard/ipfs-share-files","last_synced_at":"2025-04-04T12:08:10.988Z","repository":{"id":48862118,"uuid":"142161410","full_name":"ipfs-shipyard/ipfs-share-files","owner":"ipfs-shipyard","description":"Share files directly from the browser using IPFS.","archived":false,"fork":false,"pushed_at":"2025-03-28T10:38:05.000Z","size":4547,"stargazers_count":157,"open_issues_count":36,"forks_count":32,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-03-28T11:08:55.810Z","etag":null,"topics":["files","ipfs","javascript","p2p","react"],"latest_commit_sha":null,"homepage":"https://share.ipfs.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipfs-shipyard.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-24T13:20:04.000Z","updated_at":"2025-03-14T11:44:11.000Z","dependencies_parsed_at":"2024-11-04T19:36:02.037Z","dependency_job_id":"9dbeaf75-a54e-4fa0-82b0-90f51a73577f","html_url":"https://github.com/ipfs-shipyard/ipfs-share-files","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-shipyard%2Fipfs-share-files","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-shipyard%2Fipfs-share-files/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-shipyard%2Fipfs-share-files/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-shipyard%2Fipfs-share-files/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipfs-shipyard","download_url":"https://codeload.github.com/ipfs-shipyard/ipfs-share-files/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247174419,"owners_count":20896078,"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":["files","ipfs","javascript","p2p","react"],"created_at":"2024-08-01T13:01:51.387Z","updated_at":"2025-04-04T12:08:10.965Z","avatar_url":"https://github.com/ipfs-shipyard.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Apps"],"sub_categories":[],"readme":"# IPFS Share\n\n| Sender view  | Recipient view |\n| ------------- | ------------- |\n| ![Screenshot of IPFS Share sender view](https://gateway.ipfs.io/ipfs/QmPFxiRfnxucPbW9bXVKRPTn6ZvaDATjy4c3aPtmBHuGeJ)  | ![Screenshot of IPFS Share recipient view](https://gateway.ipfs.io/ipfs/QmYcitvEc1xsJDMQr7UpKfcYWddR6ocboBbVesp6Gp8cBo)  |\n\n[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg)](https://protocol.ai/) [![](https://img.shields.io/badge/project-IPFS-blue.svg)](http://ipfs.io/) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg)](http://webchat.freenode.net/?channels=%23ipfs)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-blue.svg)](http://standardjs.com/)\n\n\u003e Share files directly from your device's browser using IPFS — no cloud needed. Fast, free, easy file sharing for IPFS novices and veterans alike, available at https://share.ipfs.io.\n\n## Maintainers\n\nMaintainers welcome! This repo is not currently under active development, but issues are monitored as part of overall IPFS project issue monitoring.\n\n## Table of Contents\n\n- [About IPFS Share](#about-ipfs-share)\n- [For Developers](#for-developers)\n- [Translations](#translations)\n- [Contribute](#contribute)\n- [License](#license)\n\n## About IPFS Share\n\n[IPFS Share](https://share.ipfs.io) is a simple, easy-to-use tool for sharing files directly from your device without having to rely on third-party intermediaries like big corporate cloud providers. It's simple enough for anyone to use, but it's also a great under-the-hood demonstration of a common IPFS use case.\n\n### Features\n\n- Share and receive files using IPFS without needing to install a local node\n- Upload or drag-and-drop individual files or entire directories\n- For multiple-file uploads, generate share/download links for individual files or a single all-in-one link (downloads as a .tar file)\n- Preview files in-browser (browser-supported formats only) before sharing or downloading\n- Generates a QR code for share links for easy distribution\n- Supports browser-specified language or manual choice of language via menu\n- 100% mobile-friendly\n- Supports installation as a mobile shortcut or desktop standalone app\n- Includes brief explainers on how IPFS Share works, with links to more details for the curious\n\n### How it works\nIPFS Share uses [ipfs-provider](https://github.com/ipfs-shipyard/ipfs-provider) to connect to IPFS via multiple providers. If local IPFS node is not available (for example, if you're using IPFS Share on your phone, or due to CORS), an instance of [`js-ipfs`](https://github.com/ipfs/js-ipfs/) is created.\n\nThe app itself is built using [`create-react-app`](https://github.com/facebook/create-react-app), so if you're comfortable building ordinary React web apps, you'll feel right at home in this codebase. Not familiar with React or `create-react-app`? There are extensive [docs](https://create-react-app.dev/docs/getting-started/) available. Visual styling is done using [Tachyons](http://tachyons.io/) with additional IPFS flavor via [`ipfs-css`](https://github.com/ipfs-shipyard/ipfs-css).\n\n## For developers\n\nIt's easy to get a local copy of IPFS Share up and running, even if you don't have a local IPFS node installed.\n\n### Installation\n\nWith `node@14` and `npm@6.4.1` or greater installed, run:\n\n```sh\n\u003e npm ci\n```\n\n### Usage\n\nTo run IPFS Share in development mode:\n\n```sh\n\u003e npm start\n# You can now view ipfs-share-files in the browser.\n# Local: http://localhost:3000\n```\n\n### Using with a local IPFS node\n\nIf you have a local IPFS node, you may also want to run it simultaneously. Use [IPFS Desktop](https://github.com/ipfs-shipyard/ipfs-desktop) or start a daemon in the terminal:\n\n```sh\n\u003e ipfs daemon\n# API server listening on /ip4/127.0.0.1/tcp/5001\n```\n\nIf you are running a local node, you must configure your IPFS API to allow [cross-origin (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) requests from you development server and the [share.ipfs.io](https://share.ipfs.io) domain.\n\nYou can either run the [cors-config.sh](./cors-config.sh) script:\n\n```sh\n\u003e ./cors-config.sh\n```\n\nOr do it manually:\n\n```sh\n\u003e ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '[\"http://localhost:3000\", \"https://share.ipfs.io\"]'\n\u003e ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '[\"PUT\", \"POST\"]'\n```\n\nTo reset the config to its default state, run:\n\n```sh\n\u003e ipfs config --json API.HTTPHeaders {}\n```\n\n### Linting\n\nTo validate the code using [StandardJS](https://standardjs.com/), run:\n\n```sh\n\u003e npm run lint\n```\n\nThis is highly recommended to avoid automated CI failures when submitting a pull request to this repo.\n\n### Building\n\nTo build IPFS Share for production to the `build` folder:\n\n```sh\n\u003e npm run build\n```\n\n### Deployment\n\nWe use CI for automatic deployments when merged to the following branches:\n- Branch `main` is automatically deployed to [dev.share.ipfs.io](https://dev.share.ipfs.io)\n- Branch `production` is automatically deployed to [share.ipfs.io](https://share.ipfs.io)\n\nIf you just want to PR `main` to `production` for go-live, there's a handy shortcut for that [here](https://github.com/ipfs-shipyard/ipfs-share-files/compare/production...main?expand=1).\n\nNote that it's always a good idea to clear one's caches when double-checking a successful deployment.\n\n## Translations\n\nThe entire IPFS project, including IPFS Share, uses [Transifex](https://www.transifex.com/) to help us source and manage translations. We very much welcome your contributions! Simply go to the [project page on Transifex](https://www.transifex.com/ipfs/ipfs-share-files/translate/), create an account, pick a language and start translating.\n\nOn the app side, translations are stored in [`public/locales`](./public/locales), and the English version is the source of truth. Transifex automatically syncs new translations into that directory, so if you want to add translations, do so in Transifex — **not** this repo.\n\n### To sync translations\n\n1. Install and set up the [command-line client (` tx `)](https://docs.transifex.com/client/installing-the-client)\n2. Download new translations from Transifex with `tx pull -a`\n    - This creates/updates the files in [`public/locales/*`](./public/locales) that need to be committed\n    - If a new language is created, remember to\n      - add it to [`src/i18n.js`](./src/i18n.js)\n      - run `npx -q @olizilla/lol public/locales \u003e src/lib/languages.json`\n\n### To add or update English source-of-truth translation keys\n\n1. Change **only** the source file ([`public/locales/en/translation.json`](./public/locales/en/translation.json))\n2. Commit your changes; changes from the `main` branch are fetched by Transifex automatically once a day\n\nTo learn more about internationalization on the IPFS project as a whole, or contribute translations to other IPFS repos, check out [ipfs/i18n](https://github.com/ipfs/i18n).\n\n## REFRESH - TODO\n\n### UI\n\n1. Update the \"progress bar\" circular progress bar to be a loading indicator for record publishing\n1. Disable share buttons when:\n    * no listening webrtc address\n    * CID is not published\n1. Remove protocol labs footer -\u003e replace with \"powered by Helia\"\n1. Show the users what is actually happening in the background:\n    * Finding closest peers\n    * asking them to publish our provider record\n\n### Functionality\n\n1. publish directory CID\n1. Make sure that when share.ipfs.io link with CID deeplink is shared, that browser retrieval client can get the file.\n1. On self:update, we need to check if the listening webrtc address has changed, and republish all \"files\" and \"directory\" if so.\n1. Ability to remove individual files from share list\n1. Fix downloading the files filename\n\n### debugging\n\n1. Add libp2p-devtools\n\n\n## Contribute\n\nContributions are more than welcome! Check out the [currently open issues](https://github.com/ipfs-shipyard/ipfs-share-files/issues) and start hacking on anything that sounds interesting. Issues are labeled with a variety of tags to help you find a good fit — you may wish to start with the [`help-wanted`](https://github.com/ipfs-shipyard/ipfs-share-files/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) tag.\n\nTo contribute to IPFS in general, check out the wide variety of opportunities [here](https://docs.ipfs.io/community/contribute/ways-to-contribute).\n\nThe IPFS community believes that our mission is best served in an environment that is friendly, safe, and accepting, and free from intimidation or harassment. To that end, we ask that everyone involved in IPFS read and respect our [code of conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs-shipyard%2Fipfs-share-files","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipfs-shipyard%2Fipfs-share-files","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs-shipyard%2Fipfs-share-files/lists"}