├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── open_an_issue.md │ └── suggestion.md ├── actions │ ├── latest-kubo-tag │ │ ├── Dockerfile │ │ ├── action.yml │ │ └── entrypoint.sh │ └── update-with-latest-versions │ │ ├── Dockerfile │ │ ├── action.yml │ │ └── entrypoint.sh ├── config.yml ├── dependabot.yml ├── pull_request_template.md ├── styles │ ├── Vocab │ │ └── ipfs-docs-vocab │ │ │ └── accept.txt │ ├── docs │ │ ├── OxfordComma.yml │ │ └── PLNSpelling.yml │ └── pln-ignore.txt └── workflows │ ├── action.yml │ ├── build.yml │ ├── close-empty-issue.yml │ ├── generated-pr.yml │ ├── markdownlint-action.yml │ ├── reveiwdog-languagetool.yml │ ├── stale.yml │ ├── update-on-new-ipfs-tag.yml │ └── vale.yml ├── .gitignore ├── .markdownlint.jsonc ├── .vale.ini ├── CONTRIBUTING.md ├── README.md ├── docs ├── .vuepress │ ├── config.js │ ├── head.js │ ├── nav │ │ └── en.js │ ├── plugins │ │ └── vuepress-plugin-speedcurve │ │ │ ├── enhanceAppFiles.js │ │ │ └── index.js │ ├── public │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-256x256.png │ │ ├── apple-touch-icon.png │ │ ├── browserconfig.xml │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── images │ │ │ ├── ipfs-logo-text-black.svg │ │ │ ├── ipfs-logo-text.svg │ │ │ ├── ipfs-logo.svg │ │ │ ├── social-card.png │ │ │ └── welcome-to-IPFS.jpg │ │ ├── manifest.json │ │ ├── mstile-150x150.png │ │ └── safari-pinned-tab.svg │ ├── redirects │ └── theme │ │ ├── assets │ │ └── pencil-rocket.svg │ │ ├── components │ │ ├── Analytics.vue │ │ ├── EditOrIssue.vue │ │ ├── Feedback.vue │ │ ├── LegacyCallout.vue │ │ └── Page.vue │ │ ├── global-components │ │ ├── ContentStatus.vue │ │ └── NumberBlock.vue │ │ ├── index.js │ │ ├── layouts │ │ └── 404.vue │ │ └── styles │ │ ├── alert-panels.styl │ │ ├── buttons.styl │ │ ├── header.styl │ │ ├── index.styl │ │ ├── ipfs.styl │ │ ├── layout-center.styl │ │ ├── palette.styl │ │ ├── sidebar.styl │ │ ├── util.styl │ │ └── video.styl ├── README.md ├── case-studies │ ├── arbol.md │ ├── audius.md │ ├── fleek.md │ ├── images │ │ ├── img-arbol-arch.svg │ │ ├── img-morpheus-digitalfootprint.png │ │ ├── img-openbazaar-nodes.png │ │ ├── img-snapshot-architecture.png │ │ ├── img-snapshot-decrypt-proposal.png │ │ ├── img-snapshot-ens-config.png │ │ ├── logo-arbol.svg │ │ ├── logo-audius.png │ │ ├── logo-fleek.png │ │ ├── logo-iotex.png │ │ ├── logo-likecoin.svg │ │ ├── logo-morpheus.png │ │ ├── logo-openbazaar.png │ │ └── logo-snapshot.png │ ├── likecoin.md │ ├── morpheus.md │ └── snapshot.md ├── community │ ├── README.md │ ├── chat.md │ ├── contribute │ │ ├── code-persona.md │ │ ├── contribution-tutorial.md │ │ ├── grammar-formatting-and-style.md │ │ ├── images │ │ │ └── grammar-formatting-and-style │ │ │ │ ├── markdown-error-summary.png │ │ │ │ └── no-empty-links-error.png │ │ ├── ways-to-contribute.md │ │ └── writing-guide.md │ └── social-media.md ├── concepts │ ├── README.md │ ├── bitswap.md │ ├── cod.md │ ├── comparisons.md │ ├── content-addressing.md │ ├── dht.md │ ├── dnslink.md │ ├── faq.md │ ├── file-systems.md │ ├── further-reading │ │ └── academic-papers.md │ ├── glossary.md │ ├── hashing.md │ ├── how-ipfs-works.md │ ├── images │ │ ├── bitswap │ │ │ └── diagram-of-the-want-have-want-block-process.png │ │ ├── content-encryption.png │ │ ├── dht │ │ │ ├── address-dht-method.png │ │ │ ├── bounce-dht-method.png │ │ │ └── suggestion-dht-method.png │ │ ├── indexer_ecosys.png │ │ ├── ipfs-gateways │ │ │ ├── public-authed-gateway.png │ │ │ └── public-gateway-checker.png │ │ ├── transport-encryption.png │ │ └── unixfs-dag-diagram.png │ ├── immutability.md │ ├── implementations.md │ ├── ipfs-gateway.md │ ├── ipfs-implementations.md │ ├── ipfs-solves.md │ ├── ipld.md │ ├── ipni.md │ ├── ipns.md │ ├── libp2p.md │ ├── lifecycle.md │ ├── measuring.md │ ├── merkle-dag.md │ ├── nodes.md │ ├── persistence.md │ ├── privacy-and-encryption.md │ ├── public-utilities.md │ └── what-is-ipfs.md ├── how-to │ ├── README.md │ ├── address-ipfs-on-web.md │ ├── best-practices-for-ipfs-builders.md │ ├── best-practices-for-nft-data.md │ ├── command-line-quick-start.md │ ├── companion-node-types.md │ ├── companion-window-ipfs.md │ ├── companion-x-ipfs-path-header.md │ ├── configure-node.md │ ├── create-simple-chat-app │ │ ├── app-diagram.png │ │ ├── discovery-diagram.png │ │ └── example-animation.gif │ ├── desktop-app.md │ ├── dnslink-companion.md │ ├── gateway-best-practices.md │ ├── gateway-troubleshooting.md │ ├── host-git-repo.md │ ├── host-single-page-site.md │ ├── images │ │ ├── command-line-quick-start │ │ │ ├── apple-icon.png │ │ │ ├── linux-icon.png │ │ │ ├── webui-connection.png │ │ │ └── windows-icon.png │ │ ├── companion-permissions-bulk.png │ │ ├── companion-permissions.png │ │ ├── ipfs-command-line.png │ │ ├── ipfs-companion-install-chrome-dev.gif │ │ ├── ipfs-companion-install-firefox-dev.gif │ │ ├── ipfs-desktop.png │ │ ├── ipfs-webui-config-connected.png │ │ ├── ipfs-webui-config-domain.png │ │ ├── ipfs-webui-config.png │ │ ├── node-type-switch.png │ │ ├── pinata-api-key-permissions.png │ │ └── work-with-pinning-services │ │ │ ├── add-service-custom.jpg │ │ │ ├── add-service-filebase-token.png │ │ │ ├── add-service-picker.jpg │ │ │ ├── add-service-pinata-token.jpg │ │ │ ├── add-service-pinata.jpg │ │ │ ├── add-service.jpg │ │ │ ├── added-service.jpg │ │ │ └── set-pinning.jpg │ ├── ipfs-in-web-apps.md │ ├── kubo-basic-cli.md │ ├── kubo-garbage-collection.md │ ├── kubo-rpc-tls-auth.md │ ├── make-service.md │ ├── modify-bootstrap-list.md │ ├── move-ipfs-installation │ │ ├── macos-advanced-options-menu.png │ │ ├── macos-ipfs-tray-icon.png │ │ ├── move-ipfs-installation.md │ │ ├── ubuntu-advanced-options-menu.png │ │ ├── ubuntu-ipfs-tray-icon.png │ │ ├── windows-advanced-options-menu.png │ │ └── windows-ipfs-tray-icon.png │ ├── nat-configuration.md │ ├── observe-peers.md │ ├── peering-with-content-providers.md │ ├── pin-files.md │ ├── privacy-best-practices.md │ ├── publish-ipns.md │ ├── store-play-videos.md │ ├── take-snapshot.md │ ├── troubleshooting.md │ ├── websites-on-ipfs │ │ ├── custom-domains.md │ │ ├── deploy-github-action.md │ │ ├── dnslink-gateway.md │ │ ├── images │ │ │ ├── github-action │ │ │ │ ├── commit-status.gif │ │ │ │ ├── commit-status.png │ │ │ │ └── pr-comment.png │ │ │ ├── introducing-fleek │ │ │ │ ├── add-or-buy-domain.png │ │ │ │ ├── deployment-information-window.png │ │ │ │ ├── fleek-homepage.png │ │ │ │ ├── fleek-showing-the-website-repo-options.png │ │ │ │ └── github-repo-showing-a-few-files.png │ │ │ ├── link-a-domain │ │ │ │ ├── dns-add-content-record.png │ │ │ │ ├── ens-add-content-record.png │ │ │ │ ├── ens-add-records-icon.png │ │ │ │ ├── ens-complete-registration.png │ │ │ │ ├── ens-content-record-pending.png │ │ │ │ ├── ens-domain-settings-page.png │ │ │ │ ├── ens-metamask-complete-registration-transaction.png │ │ │ │ ├── ens-metamask-confirm-request-to-register.png │ │ │ │ ├── ens-metamask-content-record-transaction.png │ │ │ │ ├── ens-metamask-log-into-key.png │ │ │ │ ├── ens-registration-transaction-pending.png │ │ │ │ ├── ens-request-to-register.png │ │ │ │ ├── ens-search-for-domain-name.png │ │ │ │ ├── ens-set-content-record-as-ipfs-cid.png │ │ │ │ └── ens-wait-a-minute.png │ │ │ ├── multipage-website │ │ │ │ ├── individual-files-within-multi-page-project.png │ │ │ │ ├── ipfs-desktop-with-multi-page-folder-showing.png │ │ │ │ ├── link-file.gif │ │ │ │ ├── link-folder.gif │ │ │ │ ├── moon-logo.png │ │ │ │ ├── upload-about.gif │ │ │ │ ├── upload-file.gif │ │ │ │ ├── upload-folder.gif │ │ │ │ └── website-open-in-firefox.png │ │ │ └── single-page-website │ │ │ │ ├── add-ipfs-desktop-open-file.png │ │ │ │ ├── add-ipfs-desktop-share-files.png │ │ │ │ ├── apple-icon.png │ │ │ │ ├── install-macos-dmg-file-link.png │ │ │ │ ├── install-macos-drag-ipfs-drag.png │ │ │ │ ├── install-macos-force-open.png │ │ │ │ ├── install-macos-ipfs-cannot-be-opened.png │ │ │ │ ├── install-macos-ipfs-desktop-status-bar.png │ │ │ │ ├── install-macos-open-confirmation.png │ │ │ │ ├── install-macos-save-dmg-file.png │ │ │ │ ├── install-ubuntu-install.png │ │ │ │ ├── install-ubuntu-ipfs-running-status-bar.png │ │ │ │ ├── install-ubuntu-search-window.png │ │ │ │ ├── install-ubuntu-software-install.png │ │ │ │ ├── install-windows-download-exe-page.png │ │ │ │ ├── install-windows-install-finish.png │ │ │ │ ├── install-windows-install-location.png │ │ │ │ ├── install-windows-install-options.png │ │ │ │ ├── install-windows-ipfs-desktop-status-bar.png │ │ │ │ ├── ipfs-desktop-showing-pinning.png │ │ │ │ ├── ipfs-desktop-status-page.png │ │ │ │ ├── linux-icon.png │ │ │ │ ├── namecheap-source-url-redirect.png │ │ │ │ ├── pinned-index-file-in-pinata.png │ │ │ │ ├── pinned-random-planet-fact-website.png │ │ │ │ └── windows-icon.png │ │ ├── introducing-fleek.md │ │ ├── multipage-website.md │ │ ├── redirects-and-custom-404s.md │ │ ├── single-page-website.md │ │ └── static-site-generators.md │ ├── webtransport.md │ ├── work-with-blocks.md │ └── work-with-pinning-services.md ├── images │ ├── awesome-ipfs.png │ ├── ipfs-companion.png │ ├── ipfs-desktop.png │ ├── ipld-explorer.png │ ├── jsipfs-add-gateway.png │ ├── jsipfs-add-webui.png │ ├── jsipfs-webui.png │ └── welcome-builders │ │ └── ipfs-builders-rocket.svg ├── install │ ├── README.md │ ├── command-line.md │ ├── images │ │ ├── command-line │ │ │ ├── apple-icon.png │ │ │ ├── linux-icon.png │ │ │ ├── webui-connection.png │ │ │ ├── windows-icon.png │ │ │ └── wsl-running-ipfs-in-linux.png │ │ └── ipfs-desktop │ │ │ ├── apple-icon.png │ │ │ ├── desktop-explore.png │ │ │ ├── desktop-files.png │ │ │ ├── desktop-menubar-taskbar.png │ │ │ ├── desktop-peers.png │ │ │ ├── desktop-settings.png │ │ │ ├── desktop-status.png │ │ │ ├── install-macos-dmg-file-link.png │ │ │ ├── install-macos-drag-ipfs-drag.png │ │ │ ├── install-macos-force-open.png │ │ │ ├── install-macos-ipfs-cannot-be-opened.png │ │ │ ├── install-macos-ipfs-desktop-status-bar.png │ │ │ ├── install-macos-open-confirmation.png │ │ │ ├── install-macos-save-dmg-file.png │ │ │ ├── install-ubuntu-install.png │ │ │ ├── install-ubuntu-ipfs-running-status-bar.png │ │ │ ├── install-ubuntu-search-window.png │ │ │ ├── install-ubuntu-software-install.png │ │ │ ├── install-windows-download-exe-page.png │ │ │ ├── install-windows-install-finish.png │ │ │ ├── install-windows-install-location.png │ │ │ ├── install-windows-install-options.png │ │ │ ├── install-windows-ipfs-desktop-status-bar.png │ │ │ ├── linux-icon.png │ │ │ ├── ubuntu-icon.png │ │ │ └── windows-icon.png │ ├── ipfs-companion.md │ ├── ipfs-desktop.md │ ├── run-ipfs-inside-docker.md │ └── server-infrastructure.md ├── project │ ├── README.md │ ├── history.md │ ├── related-projects.md │ └── repository-guide.md ├── quickstart │ ├── images │ │ ├── account-console.png │ │ ├── gateway.png │ │ ├── login-web3-storage.png │ │ ├── web3-file-after-upload.png │ │ ├── web3-file-uploaded.png │ │ ├── web3-upload-button.png │ │ ├── web3-upload-tab.png │ │ └── welcome-to-IPFS.jpg │ ├── publish.md │ ├── publish_cli.md │ └── retrieve.md └── reference │ ├── README.md │ ├── diagnostic-tools.md │ ├── go │ └── api.md │ ├── http │ ├── api.md │ └── gateway.md │ ├── js │ └── api.md │ ├── kubo-rpc-cli.md │ └── kubo │ ├── cli.md │ ├── generate-cli-docs.sh │ └── rpc.md ├── images ├── add-new-page.png ├── add-new-section.png ├── basics-and-concepts-sections.png ├── create-new-branch.png ├── ipfs-docs-header.png └── source-control.png ├── mlc_pull_req_config.json ├── package-lock.json ├── package.json └── tools └── http-api-docs ├── LICENSE ├── Makefile ├── README.md ├── endpoints.go ├── endpoints_test.go ├── formatter.go ├── go.mod ├── go.sum ├── http-api-docs ├── main.go └── main_test.go ├── markdown.go └── markdown_test.go /.gitattributes: -------------------------------------------------------------------------------- 1 | # Makes Git translate the line ending for the specified extensions while always keeping things with "unix endings" in repo. This means that scripts in this repo won't break if things are checked out and in on a Windows machine. 2 | 3 | *.bash eol=lf 4 | *.sh eol=lf 5 | 6 | # Keep this line in. 7 | * text=auto 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/open_an_issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Open an issue 3 | about: Only for actionable issues relevant to this repository. 4 | title: '' 5 | labels: need/triage 6 | assignees: '' 7 | --- 8 | 9 | 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/suggestion.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Suggestion 3 | about: Have an idea of something new you'd like to see in the docs? Suggest it using this template. 4 | title: '' 5 | labels: need/triage, kind/suggestion 6 | assignees: '' 7 | --- 8 | 9 | 12 | -------------------------------------------------------------------------------- /.github/actions/latest-kubo-tag/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.23 2 | 3 | ENV DEBIAN_FRONTEND=noninteractive 4 | RUN apt update && apt install -y jq && rm -rf /var/lib/apt/lists/* 5 | 6 | COPY entrypoint.sh /entrypoint.sh 7 | ENTRYPOINT ["/entrypoint.sh"] 8 | -------------------------------------------------------------------------------- /.github/actions/latest-kubo-tag/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Find latest Kubo tag' 2 | outputs: 3 | latest_tag: 4 | description: "latest Kubo tag name" 5 | runs: 6 | using: 'docker' 7 | image: 'Dockerfile' 8 | -------------------------------------------------------------------------------- /.github/actions/latest-kubo-tag/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | set -eu 3 | 4 | # extract tag name from latest stable release 5 | REPO="ipfs/kubo" 6 | LATEST_IPFS_TAG=$(curl -L -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${REPO}/releases/latest" | jq --raw-output ".tag_name") 7 | 8 | # extract IPFS release 9 | cd /tmp 10 | git clone "https://github.com/$REPO.git" 11 | cd kubo 12 | 13 | # confirm tag is valid 14 | git describe --tags "${LATEST_IPFS_TAG}" 15 | 16 | echo "The latest Kubo tag is ${LATEST_IPFS_TAG}" 17 | echo "::set-output name=latest_tag::${LATEST_IPFS_TAG}" 18 | -------------------------------------------------------------------------------- /.github/actions/update-with-latest-versions/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.24 2 | 3 | ENV DEBIAN_FRONTEND=noninteractive 4 | RUN apt update && apt install -y jq && rm -rf /var/lib/apt/lists/* 5 | 6 | COPY entrypoint.sh /entrypoint.sh 7 | ENTRYPOINT ["/entrypoint.sh"] 8 | -------------------------------------------------------------------------------- /.github/actions/update-with-latest-versions/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Update when a new tag or a new release is available' 2 | inputs: 3 | latest_ipfs_tag: 4 | description: "latest Kubo tag" 5 | required: true 6 | outputs: 7 | updated_branch: 8 | description: "name of pushed branch with updated doc" 9 | runs: 10 | using: 'docker' 11 | image: 'Dockerfile' 12 | -------------------------------------------------------------------------------- /.github/actions/update-with-latest-versions/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -eu 3 | 4 | BRANCH=bump-documentation-to-latest-versions 5 | LATEST_IPFS_TAG=$INPUT_LATEST_IPFS_TAG 6 | 7 | git config --global --add safe.directory "$PWD" 8 | 9 | echo "The latest Kubo tag is ${LATEST_IPFS_TAG}" 10 | 11 | ROOT=`pwd` 12 | git checkout -b ${BRANCH} 13 | API_FILE="$(pwd)/docs/reference/kubo/rpc.md" 14 | 15 | 16 | # Update http api docs and cli docs 17 | 18 | cd tools/http-api-docs 19 | 20 | # extract kubo release tag used in http-api-docs from go.mod in this repo 21 | CURRENT_IPFS_TAG=$(grep 'github.com/ipfs/kubo ' ./go.mod | awk '{print $2}') 22 | echo "The currently used Kubo tag in http-api-docs is ${CURRENT_IPFS_TAG}" 23 | 24 | # make the upgrade, if newer Kubo tags exist 25 | if [ "$CURRENT_IPFS_TAG" = "$LATEST_IPFS_TAG" ]; then 26 | echo "http-api-docs already uses the latest Kubo tag." 27 | else 28 | # update http-api-docs 29 | sed "s/^\s*github.com\/ipfs\/kubo\s\+$CURRENT_IPFS_TAG\s*$/ github.com\/ipfs\/kubo $LATEST_IPFS_TAG/" go.mod > go.mod2 30 | mv go.mod2 go.mod 31 | go mod tidy 32 | make 33 | http-api-docs > "$API_FILE" 34 | 35 | # update cli docs 36 | cd "$ROOT" # go back to root of ipfs-docs repo 37 | git clone https://github.com/ipfs/kubo.git 38 | cd kubo 39 | git fetch --all --tags 40 | git checkout "tags/$LATEST_IPFS_TAG" 41 | go install ./cmd/ipfs 42 | cd "$ROOT/docs/reference/kubo" 43 | ./generate-cli-docs.sh 44 | fi 45 | 46 | 47 | # Update external tools versions 48 | 49 | update_version() { 50 | INPUT_REPOSITORY=$1 51 | INPUT_VERSION_IDENTIFIER=$2 52 | 53 | LATEST_VERSION_TAG=`curl -L -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${INPUT_REPOSITORY}/releases/latest" | jq --raw-output ".tag_name"` 54 | LATEST_VERSION_NUMBER=${LATEST_VERSION_TAG:1} 55 | 56 | if [ "$LATEST_VERSION_TAG" = "null" ]; then 57 | echo "https://api.github.com returned null, please re-run this job, if the problem persists this script needs to be rewritten" 58 | exit 1 59 | fi 60 | 61 | echo "Updating documentation files that rely on ${INPUT_VERSION_IDENTIFIER} to ${LATEST_VERSION_TAG}" 62 | 63 | while read -r file; do 64 | echo "updating ${INPUT_REPOSITORY} version to ${LATEST_VERSION_NUMBER} in ${file}" 65 | CURRENT_VERSION_TAG=`awk "/${INPUT_VERSION_IDENTIFIER}/{print \\$2; exit;}" "${file}"` 66 | CURRENT_VERSION_NUMBER=${CURRENT_VERSION_TAG:1} 67 | sed -E -i "s/$CURRENT_VERSION_NUMBER/$LATEST_VERSION_NUMBER/g" "${file}" 68 | done <<< "$(grep "${INPUT_VERSION_IDENTIFIER}" ./docs -R --files-with-matches)" 69 | } 70 | 71 | cd "${ROOT}" 72 | update_version ipfs-cluster/ipfs-cluster current-ipfs-cluster-version 73 | update_version ipfs/kubo current-ipfs-version 74 | 75 | 76 | # Push on change 77 | 78 | if [[ ! `git status --porcelain` ]]; then 79 | echo "No changes to commit." 80 | exit 0; 81 | fi 82 | 83 | git config --global user.email "${GITHUB_ACTOR}" 84 | git config --global user.name "${GITHUB_ACTOR}@users.noreply.github.com" 85 | git add -u 86 | git commit -m "Bumped documentation & installation docs." 87 | git push -fu origin ${BRANCH} 88 | echo "::set-output name=updated_branch::${BRANCH}" 89 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | 3 | # Configuration for welcome - https://github.com/behaviorbot/welcome 4 | 5 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome 6 | # Comment to be posted to on first time issues 7 | newIssueWelcomeComment: > 8 | Thank you for submitting your first issue to this repository! A maintainer will be here shortly to triage and review. 9 | 10 | In the meantime, please double-check that you have provided all the necessary information to make this process easy! Any information that can help save additiona round trips is useful! We currently aim to give initial feedback within **two business days**. If this does not happen, feel free to leave a comment. 11 | 12 | Please keep an eye on how this issue will be labeled, as labels give an overview of priorities, assignments and additional actions requested by the maintainers: 13 | 14 | - "Priority" labels will show how urgent this is for the team. 15 | - "Status" labels will show if this is ready to be worked on, blocked, or in progress. 16 | - "Need" labels will indicate if additional input or analysis is required. 17 | 18 | Finally, remember to use https://discuss.ipfs.tech if you just need general support. 19 | 20 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome 21 | # Comment to be posted to on PRs from first time contributors in your repository 22 | newPRWelcomeComment: > 23 | Thank you for submitting this PR! 24 | 25 | A maintainer will be here shortly to review it. 26 | 27 | We are super grateful, but we are also overloaded! Help us by making sure that: 28 | 29 | - The context for this PR is clear, with relevant discussion, decisions and stakeholders linked/mentioned. 30 | - Your contribution itself is clear (grammar and spelling checked, any code blocks checked and commented) and in its best form. Follow the [docs contribution guidelines](https://github.com/ipfs/ipfs-docs/blob/master/CONTRIBUTING.md) if they apply. 31 | 32 | Getting other community members to do a review would be great help too on complex PRs (you can ask in the chats/forums). If you are unsure about something, just leave us a comment. 33 | 34 | Next steps: 35 | 36 | - A maintainer will triage and assign priority to this PR, commenting on any missing things and potentially assigning a reviewer for high priority items. 37 | - The PR gets reviews, discussed and approvals as needed. 38 | - The PR is merged by maintainers when it has been approved and comments addressed. 39 | 40 | We currently aim to provide initial feedback/triaging within **two business days**. Please keep an eye on any labelling actions, as these will indicate priorities and status of your contribution. 41 | 42 | We are very grateful for your contribution! 43 | 44 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge 45 | # Comment to be posted to on pull requests merged by a first time user 46 | # Currently disabled 47 | #firstPRMergeComment: "" 48 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Please see the documentation for all configuration options: 2 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 3 | 4 | version: 2 5 | updates: 6 | - package-ecosystem: 'npm' # See documentation for possible values 7 | directory: '/' # Location of package manifests 8 | schedule: 9 | interval: 'weekly' 10 | day: 'monday' 11 | commit-message: 12 | prefix: 'chore' 13 | include: 'scope' 14 | labels: 15 | - 'dependencies' 16 | - package-ecosystem: 'gomod' 17 | directory: 'tools/http-api-docs/' # Location of go package manifests 18 | schedule: 19 | interval: 'monthly' 20 | day: 'monday' 21 | open-pull-requests-limit: 0 # Disable dependabot for go deps, we want them rock solid 22 | ignore: 23 | - dependency-name: "go-ipfs" # explicit ignore just in case, because this is handled by .github/workflows/update-on-new-ipfs-tag.yml 24 | - package-ecosystem: "github-actions" 25 | directory: "/" 26 | schedule: 27 | interval: "weekly" 28 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Describe your changes 2 | 5 | 6 | 7 | # Files changed 8 | 11 | - 12 | - 13 | - 14 | 15 | # What issue(s) does this address? 16 | 17 | 20 | 21 | - 22 | - 23 | - 24 | 25 | # Does this update depend on any other PRs? 26 | 27 | 30 | 31 | - 32 | - 33 | 34 | ## Checklist before requesting a review 35 | - [ ] Passing the beta version of the **Check Markdown links for modified files** check. Action results can be viewed [here](https://github.com/ipfs/ipfs-docs/actions/workflows/action.yml). 36 | 37 | ## Checklist before merging 38 | - [ ] Passing all required checks (The beta **Check Markdown links for modified files** check is not required) 39 | -------------------------------------------------------------------------------- /.github/styles/Vocab/ipfs-docs-vocab/accept.txt: -------------------------------------------------------------------------------- 1 | atcute 2 | (?i)APIs? 3 | (?i)BitSwap 4 | (?i)CIDs? 5 | (?i)CLI 6 | (?i)DHTs? 7 | (?i)DNSLink 8 | (?i)FQDNs? 9 | (?i)IPFS 10 | (?i)JavaScript 11 | (?i)JS-IPFS 12 | (?i)json 13 | (?i)libp2p 14 | (?i)Merkle 15 | (?i)Netlify 16 | (?i)NFTs? 17 | (?i)Nginx 18 | (?i)NodeJS 19 | (?i)NPM 20 | (?i)PowerShell 21 | (?i)URIs? 22 | (?i)VPNs? 23 | (?i)VSCode 24 | [Bb]it[Ss]wap 25 | [Bb]lockchains? 26 | [Bb]ool(ean)? 27 | [Dd]atastore 28 | [Dd]Web 29 | [Ee]thereum 30 | [Ff]ilecoin 31 | [Ff]ilecorgi 32 | [Ff]lat[Ff][Ss] 33 | [Ff]leek 34 | [Gg]it(hub)? 35 | [Hh]ackathons? 36 | [Ii]roh 37 | [Kk]ademlia 38 | [Kk]eystores? 39 | [Kk]ubo 40 | [L]ibipld 41 | [Mm]arkdown(lint)? 42 | [Mm]ultiaddr(ess)? 43 | [Mm]ultiaddrs 44 | [Mm]ultibase 45 | [Mm]ulticodec 46 | [Mm]ultiformats 47 | [Mm]ultihash 48 | [Mm]ulticast 49 | [Nn]amespace 50 | [Pp]reload 51 | [Pp]ub[Ss]ub 52 | [Rr]abin 53 | [Rr]epos? 54 | [Ww]ebpack 55 | [Ww]ebpages? 56 | [Ww]ebsockets? 57 | [Y]ou[T]ube 58 | Aave 59 | accessor 60 | ACLs? 61 | ADLs? 62 | agregore 63 | Arbol('s)? 64 | auditable 65 | Audius 66 | auspinner 67 | blockchain 68 | blockstore 69 | Browserify 70 | callouts? 71 | CAs? 72 | CDNs? 73 | CIDs 74 | Certbot 75 | CNAMEs? 76 | codec 77 | Coinlist 78 | Composable 79 | config 80 | counterparty 81 | coworking 82 | CPUs? 83 | crowdsourcing 84 | crypto(currencies)? 85 | DAOs 86 | DAOs? 87 | dApps? 88 | data('s)? 89 | deduplicate 90 | deserialization 91 | devs? 92 | Dheeraj 93 | dialable 94 | DNS('s)? 95 | DNSAddr 96 | dotgraph 97 | embeddable 98 | Eternum 99 | explainers? 100 | Fabien 101 | failovers? 102 | Filebase 103 | filesizes? 104 | Filestore 105 | FQDNs? 106 | gasless 107 | geospatial 108 | Gnutella 109 | goroutines? 110 | Graphsync 111 | GUIs? 112 | Hareesh 113 | homebrew 114 | hostname 115 | HTML 116 | HTTPS 117 | identafiability 118 | Infura 119 | interop 120 | ipget 121 | Jakub 122 | Jeromy 123 | Jha 124 | JS 125 | JSDelivr 126 | jumpstarted 127 | Kazaa 128 | keepalive 129 | keypair 130 | Kubuxu 131 | Laika 132 | lastAlive 133 | lastBootstrap 134 | lastPeer 135 | lookups 136 | loopback 137 | mainnet 138 | Mainnet 139 | metadata('s)? 140 | Metamask 141 | Minty('s)? 142 | Mojitos 143 | multipage 144 | multihashes 145 | multihash 146 | Nagaraj 147 | Nakamoto('s)? 148 | Namebase 149 | Namecheap 150 | NATs? 151 | Neocities 152 | Next.js 153 | packfile 154 | passthrough 155 | Peergos 156 | permissionless 157 | Philz 158 | pinset 159 | pipeable 160 | plaintext 161 | pluggable 162 | Powergate 163 | prepended 164 | processAnnounce 165 | protobuf 166 | Protocol Labs 167 | Protoschool 168 | proxied 169 | Qm 170 | rasterio 171 | READMEs? 172 | referenceable 173 | reprovide 174 | reprovide(r) 175 | reproviding 176 | retrievability 177 | roadmaps 178 | sandboxed 179 | Satoshi 180 | Satoshi Nakamoto 181 | serverless 182 | sharding 183 | snapshotted 184 | stackparse 185 | stdout 186 | Storj 187 | substring 188 | Sztandera 189 | Testground 190 | testnet 191 | toolkits 192 | trustlessly 193 | uncensorable 194 | undialable 195 | Uniswap 196 | unreachability 197 | untrusted 198 | URLs? 199 | urlstore 200 | Urlstore 201 | userland 202 | userspace 203 | Vue 204 | wantlist 205 | ^webRequest$ 206 | webui 207 | Westeros 208 | /^wget$/ 209 | whitepaper 210 | ^(whypfs)$ 211 | ^(whyrusleeping)$ 212 | WiFi 213 | WS 214 | ^WSS$ 215 | youtube 216 | upgradeability 217 | wantlists 218 | requesters 219 | [Ss]neakernet 220 | Sneakernets 221 | upgradeability 222 | performant 223 | sneakernet 224 | Sneakernet 225 | Bitswap 226 | -------------------------------------------------------------------------------- /.github/styles/docs/OxfordComma.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use the Oxford comma in '%s'. Follow each list of three or more items with a comma." 3 | link: https://docs.ipfs.tech/community/contribute/grammar-formatting-and-style/#the-oxford-comma 4 | scope: sentence 5 | level: suggestion 6 | nonword: true 7 | tokens: 8 | - '(?:[^\s,]+,){1,} \w+ (?:and|or) \w+[.?!]' -------------------------------------------------------------------------------- /.github/styles/docs/PLNSpelling.yml: -------------------------------------------------------------------------------- 1 | extends: spelling 2 | message: "Did you really mean '%s'?" 3 | level: error 4 | ignore: 5 | - pln-ignore.txt -------------------------------------------------------------------------------- /.github/styles/pln-ignore.txt: -------------------------------------------------------------------------------- 1 | atcute 2 | aave 3 | accessor 4 | acls 5 | addrs 6 | adls 7 | agregore 8 | aioipfs 9 | apis 10 | arbol 11 | arbol's 12 | arbol('s) 13 | arg 14 | auditable 15 | audius 16 | astro 17 | auspinner 18 | bit[ss]wap 19 | bitswap 20 | blockchain 21 | blockchains 22 | blockstore 23 | bool 24 | bool(ean) 25 | boolean 26 | boxo 27 | browserify 28 | caddy 29 | Caddyfile 30 | callout 31 | callouts 32 | cas 33 | cdns 34 | certbot 35 | cid 36 | cids 37 | cli 38 | clis 39 | cmds 40 | cnames 41 | codec 42 | codecov 43 | coinlist 44 | composable 45 | config 46 | counterparty 47 | coworking 48 | cpus 49 | crowdsourcing 50 | crypto(currencies) 51 | daos 52 | dapps 53 | data('s) 54 | datastore 55 | deduplicate 56 | dep 57 | deps 58 | deserialization 59 | deserialized 60 | devs 61 | dheeraj 62 | dht 63 | dhts 64 | dialable 65 | dialback 66 | dns('s) 67 | dnsaddr 68 | dnscontrol 69 | dnslink 70 | dotgraph 71 | dups 72 | durin 73 | dweb 74 | embeddable 75 | eternum 76 | ethereum 77 | explainers 78 | fabien 79 | failovers 80 | filebase 81 | filecoin 82 | filecorgi 83 | filesizes 84 | filestore 85 | flatf[ss] 86 | flatfs 87 | fleek 88 | fqdns 89 | gasless 90 | geospatial 91 | git(hub) 92 | gnutella 93 | goroutines 94 | graphsync 95 | guis 96 | hackathons 97 | hareesh 98 | helia 99 | homebrew 100 | homestar 101 | hostname 102 | hostnames 103 | html 104 | https 105 | identafiability 106 | infura 107 | interop 108 | ipfs 109 | ipget 110 | iroh 111 | jakub 112 | javascript 113 | jeromy 114 | jha 115 | js 116 | js-ipfs 117 | jsdelivr 118 | json 119 | jumpstarted 120 | kademlia 121 | kazaa 122 | keepalive 123 | keypair 124 | keystores 125 | kubo 126 | Kubo's 127 | kubuxu 128 | laika 129 | lan 130 | lastalive 131 | lastbootstrap 132 | lastpeer 133 | leveldb 134 | libp2p 135 | libipld 136 | linux 137 | lookups 138 | loopback 139 | mainnet 140 | markdown(lint) 141 | markdownlint 142 | merkle 143 | merkleize 144 | merklizing 145 | merkleizing 146 | merkleizes 147 | merkleized 148 | merkleization 149 | metadata('s) 150 | metamask 151 | minimalistic 152 | minty('s) 153 | mojitos 154 | multiaddr 155 | multiaddr(ess) 156 | multiaddress 157 | multiaddrs 158 | multibase 159 | multicast 160 | multicodec 161 | multicodecs 162 | multicodec(s) 163 | multiformats 164 | multihash 165 | multihashes 166 | multipage 167 | mutex 168 | nabu 169 | nagaraj 170 | nakamoto 171 | nakamoto's 172 | namebase 173 | namecheap 174 | namespace 175 | nats 176 | neocities 177 | netlify 178 | next.js 179 | nfts 180 | nginx 181 | nodejs 182 | npm 183 | octodns 184 | packfile 185 | passthrough 186 | peergos 187 | performant 188 | permissionless 189 | philz 190 | pinset 191 | pipeable 192 | plaintext 193 | pluggable 194 | powergate 195 | powershell 196 | preload 197 | prepended 198 | processannounce 199 | protobuf 200 | protocol labs 201 | protoschool 202 | proxied 203 | pub[ss]ub 204 | pubsub 205 | qm 206 | rabin 207 | rasterio 208 | readmes 209 | referenceable 210 | repo 211 | repos 212 | reprovider 213 | reproviding 214 | requesters 215 | retrievability 216 | roadmaps 217 | runtime 218 | runtime's 219 | rsa 220 | sandboxed 221 | satoshi 222 | satoshi nakamoto 223 | serverless 224 | sharding 225 | snapshotted 226 | sneakernet 227 | sneakernets 228 | stackparse 229 | stdout 230 | storj 231 | storacha 232 | Someguy 233 | subcommand 234 | substring 235 | sys 236 | systemd 237 | sztandera 238 | testground 239 | testnet 240 | toolkits 241 | trustlessly 242 | trustlessness 243 | uncensorable 244 | undialable 245 | uniswap 246 | unixfs 247 | unreachability 248 | untrusted 249 | upgradeability 250 | uris 251 | urls 252 | urlstore 253 | userland 254 | userspace 255 | vpns 256 | vscode 257 | vue 258 | Vuepress 259 | wantlist 260 | wantlists 261 | web 262 | webpack 263 | webpages 264 | webrequest 265 | websockets 266 | webui 267 | westeros 268 | wget 269 | whitepaper 270 | whypfs 271 | whyrusleeping 272 | wifi 273 | ws 274 | wss 275 | youtube 276 | -------------------------------------------------------------------------------- /.github/workflows/action.yml: -------------------------------------------------------------------------------- 1 | name: Check Markdown links for modified files 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | markdown-link-check: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - id: checkout 10 | uses: actions/checkout@v4 11 | - id: link-check 12 | uses: gaurav-nelson/github-action-markdown-link-check@v1 13 | with: 14 | config-file: 'mlc_pull_req_config.json' 15 | check-modified-files-only: 'yes' 16 | use-verbose-mode: 'yes' 17 | base-branch: 'main' 18 | use-quiet-mode: 'yes' 19 | - id: summary 20 | run: | 21 | echo '# markdown-link-check summary' >> $GITHUB_STEP_SUMMARY 22 | echo >> $GITHUB_STEP_SUMMARY 23 | echo '## Results: ' >> $GITHUB_STEP_SUMMARY 24 | echo 'To view the results of this GitHub action, do the following:' >> $GITHUB_STEP_SUMMARY 25 | echo '1. Click to the _Job summary generated at run-time_ at the bottom of this page.' >> $GITHUB_STEP_SUMMARY 26 | echo '2. Click the `>` next to _Run gaurav-nelson/github-action-markdown-link-check@v1_ ' >> $GITHUB_STEP_SUMMARY 27 | echo '3. In the search field (upper right hand corner), type _MARKDOWN LINK CHECK_. The log jumps to the output of the markdown-link-check action.' >> $GITHUB_STEP_SUMMARY 28 | echo '4. Look through the log lines below the _=========================> MARKDOWN LINK CHECK <=========================_ line. ' >> $GITHUB_STEP_SUMMARY 29 | echo ' If a dead link was found, it, will be listed below the _ERROR_ line, along with the status code. Find the link in your markdown and fix it.' >> $GITHUB_STEP_SUMMARY 30 | echo ' **Example:**' >> $GITHUB_STEP_SUMMARY 31 | echo ' ``` ' >> $GITHUB_STEP_SUMMARY 32 | echo ' ERROR: 1 dead links found!' >> $GITHUB_STEP_SUMMARY 33 | echo ' [✖] https://givweueerervuvwbeiuv.com#nvruvwrveri → Status: 404' >> $GITHUB_STEP_SUMMARY 34 | echo ' ``` ' >> $GITHUB_STEP_SUMMARY 35 | echo '4. If the action incorrectly identified a link as broken, please help us improve this Github action by reporting any false negatives, false positives or any other issues by [opening a GH issue](https://github.com/ipfs/ipfs-docs/issues/new/choose). Please include the log output in the issue description. ' >> $GITHUB_STEP_SUMMARY 36 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy to IPFS 2 | 3 | permissions: 4 | contents: read 5 | pull-requests: write 6 | statuses: write 7 | on: 8 | push: 9 | branches: 10 | - main 11 | pull_request_target: 12 | branches: 13 | - main 14 | 15 | 16 | jobs: 17 | build-and-deploy: 18 | runs-on: ubuntu-latest 19 | outputs: # This exposes the CID output of the action to the rest of the workflow 20 | cid: ${{ steps.deploy.outputs.cid }} 21 | steps: 22 | - name: Checkout code 23 | uses: actions/checkout@v4 24 | with: 25 | ref: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.sha || github.sha }} 26 | 27 | - name: Setup Node.js 28 | uses: actions/setup-node@v4 29 | with: 30 | node-version: '20' 31 | cache: 'npm' 32 | 33 | - name: Install dependencies 34 | run: npm ci 35 | 36 | - name: Build project 37 | run: npm run docs:build 38 | 39 | - uses: ipfs/ipfs-deploy-action@v1 40 | name: Deploy to IPFS 41 | id: deploy 42 | with: 43 | path-to-deploy: docs/.vuepress/dist 44 | storacha-key: ${{ secrets.STORACHA_KEY }} 45 | storacha-proof: ${{ secrets.STORACHA_PROOF }} 46 | github-token: ${{ github.token }} 47 | -------------------------------------------------------------------------------- /.github/workflows/close-empty-issue.yml: -------------------------------------------------------------------------------- 1 | name: Close empty issues and templates 2 | on: 3 | issues: 4 | types: 5 | - reopened 6 | - opened 7 | - edited 8 | 9 | jobs: 10 | closeEmptyIssuesAndTemplates: 11 | name: Close empty issues and templates 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - name: Run empty issues closer action 16 | uses: rickstaa/empty-issues-closer-action@v1 17 | env: 18 | github_token: ${{ secrets.GITHUB_TOKEN }} 19 | with: 20 | close_comment: This issue has been automatically closed because no description was provided. Please provide us with more information to have this issue reopened. 21 | open_comment: This issue has been automatically reopened because the author provided more information. 22 | check_templates: true 23 | template_close_comment: This issue has been automatically closed because no description was provided. Please provide us with more information to have this issue reopened. 24 | template_open_comment: This issue has been automatically reopened because the author provided more information. 25 | -------------------------------------------------------------------------------- /.github/workflows/generated-pr.yml: -------------------------------------------------------------------------------- 1 | name: Close Generated PRs 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | workflow_dispatch: 7 | 8 | permissions: 9 | issues: write 10 | pull-requests: write 11 | 12 | jobs: 13 | stale: 14 | uses: ipdxco/unified-github-workflows/.github/workflows/reusable-generated-pr.yml@v1 15 | -------------------------------------------------------------------------------- /.github/workflows/markdownlint-action.yml: -------------------------------------------------------------------------------- 1 | name: markdownlint check 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | markdownlint: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: markdownlint-cli 10 | uses: nosborn/github-action-markdown-cli@v3.4.0 11 | with: 12 | files: . 13 | config_file: .markdownlint.jsonc 14 | -------------------------------------------------------------------------------- /.github/workflows/reveiwdog-languagetool.yml: -------------------------------------------------------------------------------- 1 | name: Check Spelling 2 | on: 3 | pull_request: 4 | paths: 5 | - 'docs/**/*.md' 6 | jobs: 7 | languagetool: 8 | name: languagetool 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | - name: Check Spelling 13 | uses: reviewdog/action-languagetool@v1 14 | with: 15 | github_token: ${{ secrets.github_token }} 16 | reporter: github-pr-review 17 | level: info 18 | patterns: 'docs/**/*.md' 19 | 20 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Close Stale Issues 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | workflow_dispatch: 7 | 8 | permissions: 9 | issues: write 10 | pull-requests: write 11 | 12 | jobs: 13 | stale: 14 | uses: ipdxco/unified-github-workflows/.github/workflows/reusable-stale-issue.yml@v1 15 | -------------------------------------------------------------------------------- /.github/workflows/update-on-new-ipfs-tag.yml: -------------------------------------------------------------------------------- 1 | name: Update docs on new version (ipfs, ipfs-cluster, etc.) 2 | on: 3 | workflow_dispatch: 4 | schedule: 5 | - cron: '30 5,17 * * *' # run every day at 5:30am and 5:30pm UTC 6 | workflow_call: 7 | 8 | jobs: 9 | update: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout ipfs-docs 13 | uses: actions/checkout@v4 14 | - name: Find latest kubo tag 15 | id: latest_ipfs 16 | uses: ./.github/actions/latest-kubo-tag 17 | - name: Update docs 18 | id: update 19 | uses: ./.github/actions/update-with-latest-versions 20 | with: 21 | latest_ipfs_tag: ${{ steps.latest_ipfs.outputs.latest_tag }} 22 | - name: pull-request 23 | uses: repo-sync/pull-request@7e79a9f5dc3ad0ce53138f01df2fad14a04831c5 #v2.12.1 24 | if: ${{ steps.update.outputs.updated_branch }} # don't create a pr if there was no branch pushed 25 | with: 26 | github_token: ${{ secrets.GITHUB_TOKEN }} 27 | source_branch: ${{ steps.update.outputs.updated_branch }} 28 | destination_branch: "main" 29 | pr_title: "Update release version numbers" 30 | pr_body: "This PR was opened from update-on-new-ipfs-tag.yml workflow." 31 | pr_label: "needs/triage,P0" 32 | 33 | -------------------------------------------------------------------------------- /.github/workflows/vale.yml: -------------------------------------------------------------------------------- 1 | name: vale-v0 2 | 3 | on: 4 | pull_request: 5 | # 'edited': check the PR title on changes 6 | types: [opened, edited, reopened, synchronize] 7 | 8 | jobs: 9 | pr-content-check: 10 | name: pr-content-check 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - id: files 15 | name: Get changed files 16 | env: 17 | ENDPOINT: repos/${{ github.repository }}/pulls/${{ github.event.number }}/files 18 | SELECTOR: map(select(.status != "removed")) | map(.filename) 19 | GITHUB_TOKEN: ${{ github.token }} 20 | run: echo "added_modified=$(gh api "$ENDPOINT" --jq "$SELECTOR")" >> $GITHUB_OUTPUT 21 | - name: vale check 22 | uses: errata-ai/vale-action@reviewdog 23 | env: 24 | GITHUB_TOKEN: ${{ github.token }} 25 | with: 26 | files: ${{ steps.files.outputs.added_modified }} 27 | fail_on_error: true 28 | vale_flags: "--minAlertLevel=error" 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # fs & dev 2 | .DS_Store 3 | node_modules 4 | dist 5 | .temp 6 | 7 | # logs 8 | logs 9 | *.log 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # editor 15 | .vscode -------------------------------------------------------------------------------- /.vale.ini: -------------------------------------------------------------------------------- 1 | StylesPath = .github/styles 2 | MinAlertLevel = suggestion 3 | 4 | IgnoredScopes = code, tt 5 | 6 | [*.md] 7 | BasedOnStyles = docs -------------------------------------------------------------------------------- /docs/.vuepress/head.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | [ 3 | 'meta', 4 | { name: 'viewport', content: 'width=device-width, initial-scale=1.0' }, 5 | ], 6 | [ 7 | 'link', 8 | { 9 | rel: 'apple-touch-icon', 10 | sizes: '180x180', 11 | href: '/apple-touch-icon.png' 12 | } 13 | ], 14 | [ 15 | 'link', 16 | { 17 | rel: 'icon', 18 | type: 'image/png', 19 | sizes: '32x32', 20 | href: '/favicon-32x32.png' 21 | } 22 | ], 23 | [ 24 | 'link', 25 | { 26 | rel: 'icon', 27 | type: 'image/png', 28 | sizes: '16x16', 29 | href: '/favicon-16x16.png' 30 | } 31 | ], 32 | ['link', { rel: 'manifest', href: '/manifest.json' }], 33 | [ 34 | 'link', 35 | { 36 | rel: 'mask-icon', 37 | href: '/safari-pinned-tab.svg', 38 | color: '#3a0839' 39 | } 40 | ], 41 | ['link', { rel: 'shortcut icon', href: '/favicon.ico' }], 42 | ['meta', { name: 'msapplication-TileColor', content: '#3a0839' }], 43 | [ 44 | 'meta', 45 | { 46 | name: 'msapplication-config', 47 | content: '/browserconfig.xml' 48 | } 49 | ], 50 | ['meta', { name: 'theme-color', content: '#5bbad5' }], 51 | ['script', { 52 | defer: true, 53 | 'data-domain': "docs.ipfs.tech", 54 | src: "https://plausible.io/js/plausible.js" 55 | }, ``], 56 | ] 57 | -------------------------------------------------------------------------------- /docs/.vuepress/nav/en.js: -------------------------------------------------------------------------------- 1 | module.exports = [] 2 | -------------------------------------------------------------------------------- /docs/.vuepress/plugins/vuepress-plugin-speedcurve/enhanceAppFiles.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | /* global SPEEDCURVE_ID */ 4 | 5 | module.exports = () => { 6 | if ( 7 | process.env.NODE_ENV === 'production' && 8 | SPEEDCURVE_ID && 9 | typeof window !== 'undefined' 10 | ) { 11 | ;(function () { 12 | const customScriptCode = `LUX=(function(){var a=("undefined"!==typeof(LUX)&&"undefined"!==typeof(LUX.gaMarks)?LUX.gaMarks:[]);var d=("undefined"!==typeof(LUX)&&"undefined"!==typeof(LUX.gaMeasures)?LUX.gaMeasures:[]);var j="LUX_start";var k=window.performance;var l=("undefined"!==typeof(LUX)&&LUX.ns?LUX.ns:(Date.now?Date.now():+(new Date())));if(k&&k.timing&&k.timing.navigationStart){l=k.timing.navigationStart}function f(){if(k&&k.now){return k.now()}var o=Date.now?Date.now():+(new Date());return o-l}function b(n){if(k){if(k.mark){return k.mark(n)}else{if(k.webkitMark){return k.webkitMark(n)}}}a.push({name:n,entryType:"mark",startTime:f(),duration:0});return}function m(p,t,n){if("undefined"===typeof(t)&&h(j)){t=j}if(k){if(k.measure){if(t){if(n){return k.measure(p,t,n)}else{return k.measure(p,t)}}else{return k.measure(p)}}else{if(k.webkitMeasure){return k.webkitMeasure(p,t,n)}}}var r=0,o=f();if(t){var s=h(t);if(s){r=s.startTime}else{if(k&&k.timing&&k.timing[t]){r=k.timing[t]-k.timing.navigationStart}else{return}}}if(n){var q=h(n);if(q){o=q.startTime}else{if(k&&k.timing&&k.timing[n]){o=k.timing[n]-k.timing.navigationStart}else{return}}}d.push({name:p,entryType:"measure",startTime:r,duration:(o-r)});return}function h(n){return c(n,g())}function c(p,o){for(i=o.length-1;i>=0;i--){var n=o[i];if(p===n.name){return n}}return undefined}function g(){if(k){if(k.getEntriesByType){return k.getEntriesByType("mark")}else{if(k.webkitGetEntriesByType){return k.webkitGetEntriesByType("mark")}}}return a}return{mark:b,measure:m,gaMarks:a,gaMeasures:d}})();LUX.ns=(Date.now?Date.now():+(new Date()));LUX.ac=[];LUX.cmd=function(a){LUX.ac.push(a)};LUX.init=function(){LUX.cmd(["init"])};LUX.send=function(){LUX.cmd(["send"])};LUX.addData=function(a,b){LUX.cmd(["addData",a,b])};LUX_ae=[];window.addEventListener("error",function(a){LUX_ae.push(a)});LUX_al=[];if("function"===typeof(PerformanceObserver)&&"function"===typeof(PerformanceLongTaskTiming)){var LongTaskObserver=new PerformanceObserver(function(c){var b=c.getEntries();for(var a=0;a ({ 4 | name: 'vuepress-plugin-speedcurve', 5 | define() { 6 | const id = params.id 7 | 8 | return { SPEEDCURVE_ID: id || false } 9 | }, 10 | enhanceAppFiles: path.resolve(__dirname, 'enhanceAppFiles.js') 11 | }) 12 | -------------------------------------------------------------------------------- /docs/.vuepress/public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /docs/.vuepress/public/android-chrome-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/android-chrome-256x256.png -------------------------------------------------------------------------------- /docs/.vuepress/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/apple-touch-icon.png -------------------------------------------------------------------------------- /docs/.vuepress/public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #00aba9 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/favicon-16x16.png -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/favicon-32x32.png -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /docs/.vuepress/public/images/ipfs-logo-text-black.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/public/images/ipfs-logo-text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/public/images/ipfs-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/public/images/social-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/images/social-card.png -------------------------------------------------------------------------------- /docs/.vuepress/public/images/welcome-to-IPFS.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/images/welcome-to-IPFS.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-256x256.png", 12 | "sizes": "256x256", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /docs/.vuepress/public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/.vuepress/public/mstile-150x150.png -------------------------------------------------------------------------------- /docs/.vuepress/public/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Analytics.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 66 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/EditOrIssue.vue: -------------------------------------------------------------------------------- 1 | 16 | 100 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Feedback.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 94 | 95 | 143 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/LegacyCallout.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 74 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Page.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 98 | 99 | 143 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/ContentStatus.vue: -------------------------------------------------------------------------------- 1 | 50 | 51 | 77 | 78 | 116 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/NumberBlock.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 21 | 22 | 52 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/index.js: -------------------------------------------------------------------------------- 1 | // IPFS Docs theme 2 | 3 | module.exports = { 4 | extend: '@vuepress/theme-default' 5 | } 6 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/layouts/404.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 55 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/alert-panels.styl: -------------------------------------------------------------------------------- 1 | .theme-default-content { 2 | .custom-block { 3 | .custom-block-title { 4 | letter-spacing: 0.5px; 5 | } 6 | } 7 | 8 | .tip { 9 | border-left: 4px solid #696d78; 10 | background-color: #f2f4f7; 11 | color: #34373f; 12 | } 13 | 14 | .info { 15 | border-left: 4px solid #0e74aa; 16 | background-color: #e6f6ff; 17 | color: #34373f; 18 | } 19 | 20 | .warning { 21 | border-left: 4px solid #e7c000; 22 | background-color: #fff7d2; 23 | color: #34373f; 24 | } 25 | 26 | .danger { 27 | border-left: 4px solid #a93e3e; 28 | background-color: #ffe6e6; 29 | color: #a93e3e; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/buttons.styl: -------------------------------------------------------------------------------- 1 | .btn { 2 | font-weight: bold; 3 | padding: 10px 15px; 4 | border: none; 5 | font-size: 1em; 6 | margin-right: 10px; 7 | border-radius: 2px; 8 | transition: all 0.3s; 9 | cursor: pointer; 10 | outline: none; 11 | } 12 | 13 | .btn-primary { 14 | background-color: darken($accentColor, 30%); 15 | color: white; 16 | 17 | &:hover { 18 | background-color: $accentColor; 19 | } 20 | } -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/header.styl: -------------------------------------------------------------------------------- 1 | @media (min-width: $MQNarrow) { 2 | header.navbar .links { 3 | display: flex; 4 | flex-direction: row-reverse; 5 | 6 | input, .suggestions { 7 | width: 10em; 8 | } 9 | 10 | input:focus, .suggestions { 11 | width: 20em; 12 | } 13 | } 14 | } 15 | 16 | @media (max-width: $MQMobile) { 17 | header.navbar .links { 18 | input { 19 | // prevent zooming on iOS 20 | box-sizing: border-box; 21 | font-size: 1rem; 22 | 23 | &:focus { 24 | width: 87.5vw; 25 | } 26 | } 27 | } 28 | } 29 | 30 | @media (max-width: $MQMobile) { 31 | .home-link { 32 | position: absolute; 33 | width: 45px; 34 | left: calc(50% - 45px / 2); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/index.styl: -------------------------------------------------------------------------------- 1 | @import 'util'; 2 | @import 'buttons'; 3 | @import 'layout-center'; 4 | @import 'header'; 5 | @import 'sidebar'; 6 | @import 'video'; 7 | @import 'alert-panels'; 8 | @import 'ipfs'; 9 | @require '~vuepress-plugin-tabs/dist/themes/default.styl' 10 | 11 | // apply scrolling by default excluding firefox due to trigger issues 12 | html.smooth-scroll { 13 | scroll-behavior: smooth; 14 | } 15 | 16 | @supports (-moz-appearance: none) { 17 | html.smooth-scroll { 18 | scroll-behavior: auto; 19 | } 20 | } 21 | 22 | img[loading] { 23 | height: auto; 24 | } 25 | 26 | #app { 27 | .navbar { 28 | position: sticky; 29 | } 30 | 31 | .navbar .logo { 32 | height: 2.5rem; 33 | margin: 0; 34 | padding: 1px 3px 0px 0; 35 | vertical-align: top; 36 | } 37 | 38 | .site-name { 39 | font-size: 1.5rem; 40 | letter-spacing: -0.05rem; 41 | background: url('/images/ipfs-logo-text-black.svg') no-repeat; 42 | background-position-y: -2px; 43 | text-indent: -99999px; 44 | min-width: 180px; 45 | min-height: 47px; 46 | background-size: contain; 47 | } 48 | } 49 | 50 | .custom-block.callout { 51 | background-color: lighten($accentColor, 80%); 52 | padding: 0.1rem 1.5rem; 53 | border-color: $accentColor; 54 | border-left-width: 0.5rem; 55 | border-left-style: solid; 56 | } 57 | 58 | .custom-block.right { 59 | float: right; 60 | padding: 1em 0 1em 1em; 61 | } 62 | 63 | .custom-block.left { 64 | float: left; 65 | padding: 1em 1em 1em 0em; 66 | } 67 | 68 | code { 69 | word-break: break-word; 70 | } 71 | 72 | :root { 73 | --accent-color: $accentColor; 74 | --text-color: $textColor; 75 | --border-color: $borderColor; 76 | --code-bg-color: $codeBgColor; 77 | --highlight-color: $highlightColor; 78 | } 79 | 80 | section.tabs-component-panel::before { 81 | content: ''; 82 | display: block; 83 | position: relative; 84 | width: 0; 85 | height: 10em; 86 | margin-top: -10em; 87 | } 88 | 89 | @media (min-width: 1060px) { 90 | .nav-links{ 91 | margin-right: 10%; 92 | margin-left: 10%; 93 | float: left; 94 | } 95 | } 96 | 97 | @media (min-width: 500px) and (max-width: 720px) { 98 | .sidebar{ 99 | width: 40%; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/layout-center.styl: -------------------------------------------------------------------------------- 1 | // draft center layout 2 | .theme-container, .navbar { 3 | @extend .max-w-screen-xl; 4 | @extend .mx-auto; 5 | @extend .relative; 6 | } 7 | 8 | .theme-default-content:not(.custom) { 9 | margin: inherit; 10 | 11 | & > h1 { 12 | padding-top: 1em; 13 | } 14 | } 15 | 16 | @media (min-width: $MQNarrow) { 17 | .sidebar { 18 | position: fixed; 19 | left: inherit; 20 | border-right: none; 21 | } 22 | 23 | footer.page-edit { 24 | margin: inherit; 25 | } 26 | } 27 | 28 | .theme-default-content:not(.custom) { 29 | margin: inherit; 30 | 31 | & > h1 { 32 | padding-top: 1em; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/palette.styl: -------------------------------------------------------------------------------- 1 | // color overrides 2 | $accentColor = #296161; 3 | $textColor = #000000cc; 4 | $sidebarTextColor = #4F555F; 5 | $borderColor = #eaecef; 6 | $codeBgColor = #0e2233; 7 | $arrowBgColor = #ccc; 8 | $badgeTipColor = $accentColor; 9 | $badgeWarningColor = darken(#ffe564, 35%); 10 | $badgeErrorColor = #A7252D; 11 | $highlightColor = #ffffa0; 12 | // https://github.com/vuejs/vuepress/blob/master/packages/@vuepress/core/lib/client/style/config.styl 13 | 14 | // ipfs colors 15 | $accentColorLight = #b8e0e5; 16 | $badgeInfoColorLight = #e6F6ff; 17 | $badgeInfoColorDark = #0e74aa; 18 | // layout 19 | $navbarHeight = 4rem; 20 | $sidebarWidth = 19rem; 21 | $contentWidth = 740px; 22 | // responsive breakpoints 23 | $MQNarrow = 959px; 24 | $MQMobile = 719px; 25 | $MQMobileNarrow = 419px; 26 | $maxWidth = 1280px; 27 | $contentWidth = 740px; 28 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/sidebar.styl: -------------------------------------------------------------------------------- 1 | ul > li > a.sidebar-link { 2 | color: $sidebarTextColor; 3 | font-weight: 500; 4 | } 5 | 6 | ul.sidebar-links > li > a { 7 | color: inherit; 8 | } 9 | 10 | .sidebar { 11 | .sidebar-heading { 12 | font-weight: 700 !important; 13 | } 14 | 15 | .sidebar-group .arrow { 16 | display: none; 17 | } 18 | 19 | .sidebar-group.is-sub-group a.sidebar-link { 20 | margin-bottom: 0.2rem; 21 | } 22 | 23 | .sidebar-group.is-sub-group { 24 | margin-bottom: 0.5rem; 25 | } 26 | 27 | .sidebar-links.sidebar-group-items li:last-child .sidebar-group.is-sub-group { 28 | margin-bottom: 0; 29 | } 30 | 31 | .sidebar-group.is-sub-group > .sidebar-heading:not(.clickable) { 32 | opacity: 1; 33 | font-weight: bold; 34 | text-transform: uppercase; 35 | font-size: 0.8rem; 36 | letter-spacing: 0.05em; 37 | line-height: 2em; 38 | } 39 | } 40 | 41 | .icon.outbound { 42 | padding-left: 0.15rem; 43 | } 44 | 45 | // sidebar scrollbar style 46 | .sidebar::-webkit-scrollbar { 47 | width: 5px; 48 | position: fixed; 49 | right: 0; 50 | } 51 | 52 | .sidebar::-webkit-scrollbar-thumb { 53 | background: transparent; 54 | transition: background-color 2s; 55 | } 56 | 57 | .sidebar::-webkit-scrollbar-thumb:hover, .sidebar:hover::-webkit-scrollbar-thumb { 58 | background: $borderColor; 59 | } 60 | 61 | @media (max-width: $MQMobile) { 62 | .sidebar { 63 | width: 80vw; 64 | } 65 | } -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/util.styl: -------------------------------------------------------------------------------- 1 | // width 2 | .max-w-screen-xl { 3 | max-width: $maxWidth !important; 4 | } 5 | 6 | // position 7 | .relative { 8 | position: relative; 9 | } 10 | 11 | .fixed { 12 | position: fixed; 13 | } 14 | 15 | .float-l { 16 | float: left; 17 | } 18 | 19 | .float-r { 20 | float: right; 21 | } 22 | 23 | // margins 24 | .mx-auto { 25 | margin-left: auto; 26 | margin-right: auto; 27 | } -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/video.styl: -------------------------------------------------------------------------------- 1 | .embed-responsive { 2 | padding-top: 56.25%; 3 | height: 0px; 4 | position: relative; 5 | } 6 | 7 | .embed-responsive-16by9 > .embed-responsive-item { 8 | width: 100%; 9 | height: 100%; 10 | position: absolute; 11 | top: 0; 12 | left: 0; 13 | } -------------------------------------------------------------------------------- /docs/case-studies/images/img-morpheus-digitalfootprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/img-morpheus-digitalfootprint.png -------------------------------------------------------------------------------- /docs/case-studies/images/img-openbazaar-nodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/img-openbazaar-nodes.png -------------------------------------------------------------------------------- /docs/case-studies/images/img-snapshot-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/img-snapshot-architecture.png -------------------------------------------------------------------------------- /docs/case-studies/images/img-snapshot-decrypt-proposal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/img-snapshot-decrypt-proposal.png -------------------------------------------------------------------------------- /docs/case-studies/images/img-snapshot-ens-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/img-snapshot-ens-config.png -------------------------------------------------------------------------------- /docs/case-studies/images/logo-audius.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/logo-audius.png -------------------------------------------------------------------------------- /docs/case-studies/images/logo-fleek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/logo-fleek.png -------------------------------------------------------------------------------- /docs/case-studies/images/logo-iotex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/logo-iotex.png -------------------------------------------------------------------------------- /docs/case-studies/images/logo-morpheus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/logo-morpheus.png -------------------------------------------------------------------------------- /docs/case-studies/images/logo-openbazaar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/logo-openbazaar.png -------------------------------------------------------------------------------- /docs/case-studies/images/logo-snapshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/case-studies/images/logo-snapshot.png -------------------------------------------------------------------------------- /docs/community/chat.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chat 3 | description: How to connect with the IPFS community using chat and forums 4 | --- 5 | 6 | # Chat 7 | 8 | In general, public IPFS Discord channels are bridged to Matrix and Slack. As a result, you can usually use your preferred chat application to engage with the community. IPFS channels/rooms are usually prefixed with "#ipfs-". 9 | 10 | ## Discord 11 | 12 | Join the [IPFS Discord server](https://discord.gg/ipfs) for synchronous chat! [Server documentation can be found on Notion](https://pl-strflt.notion.site/IPFS-Discord-Server-Documentation-85bbc451303a473bbf6846b01610e3c1). 13 | 14 | ## Matrix 15 | 16 | Join the [Matrix space](https://matrix.to/#/#ipfs-space:ipfs.io). [Home server documentation is available on Notion](https://pl-strflt.notion.site/IPFS-Matrix-Homeserver-Documentation-31481e76843547b7ab5160a87eed2b9f). 17 | 18 | ## Slack 19 | 20 | Join [Filecoin slack](https://filecoin.io/slack) and join the bridged #ipfs channels. The [Filecoin Slack workspace user guide is available on Notion](https://pl-strflt.notion.site/Filecoin-Slack-User-Guide-29072679986b4ccb8ad7b091097dd770). 21 | 22 | ## Forums 23 | 24 | For longer-lived discussions and for support, please use the discussion forums at [https://discuss.ipfs.tech](https://discuss.ipfs.tech) instead! It’s easy for complex discussions to get lost in a sea of new messages on chat, and posting longer discussions and support requests on the forums help future visitors, too. 25 | -------------------------------------------------------------------------------- /docs/community/contribute/code-persona.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Code persona 3 | description: Find out how to create interesting code examples and keep the IPFS documentation consistent. 4 | --- 5 | 6 | # Code persona 7 | 8 | Docs can be confusing, especially for increasingly complex topics like IPFS. There are lots of moving parts, and it's easy to get confused. Example use-cases and code-blocks often serve to make things easier to understand and allows for a more _hands-on_ experience. However, examples that come from different use-cases and projects make it harder for the reader to understand the topic. The solution is to create a _theme_ for all samples to be based off. 9 | 10 | Having a single theme keeps code examples self-contained and consistent. It doesn't make the problems any less complicated or less technical, but it makes the reader need to _think_ less. The reader doesn't have to spend time continually re-visualizing the larger project at hand if the main project is something they're already familiar with. 11 | 12 | ## The theme 13 | 14 | The _interplanetary_ part of _InterPlanetary File System_ comes with obvious space connotations, so it makes sense that example use-cases and code examples are based around the final frontier. With this in mind, when creating code-examples to illustrate your ideas, try to keep them within this space theme. 15 | 16 | We can expect the vast majority of IPFS users to be familiar with the planets within our solar system and some of the more famous telescopes, satellites, and space rocket names. However, it would help if you tried to stay away from more _exotic_ or niche planetary bodies. Not everybody is going to be familiar with the Andromeda Galaxy, and it may confuse some readers. Also, keep in mind that many language translators will be able to deal with common planet names like Jupiter or Mars but may struggle with less common names. 17 | -------------------------------------------------------------------------------- /docs/community/contribute/images/grammar-formatting-and-style/markdown-error-summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/community/contribute/images/grammar-formatting-and-style/markdown-error-summary.png -------------------------------------------------------------------------------- /docs/community/contribute/images/grammar-formatting-and-style/no-empty-links-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/community/contribute/images/grammar-formatting-and-style/no-empty-links-error.png -------------------------------------------------------------------------------- /docs/community/social-media.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Social media 3 | sidebarDepth: 0 4 | description: Learn where to find IPFS on your favorite social media platform. 5 | --- 6 | 7 | # Social media 8 | 9 | IPFS is everywhere on the internet — and that includes social media. Find your favorite flavor here. 10 | 11 | ## YouTube 12 | 13 | The [IPFS YouTube channel](https://www.youtube.com/channel/UCdjsUXJ3QawK4O5L1kqqsew) is home to a wealth of information about the IPFS project — everything from IPFS Camp course content to video tutorials to working group meeting archives — so you can explore playlists and subscribe to ones that interest and inform you. 14 | 15 | ## Blog 16 | 17 | Explore the latest news, events, and other happenings in the IPFS multiverse on the official [IPFS Blog](https://blog.ipfs.tech/). 18 | 19 | ## Twitter 20 | 21 | Get your IPFS news in tweet-sized bites. Follow these accounts for the latest: 22 | 23 | - [@IPFS](https://twitter.com/IPFS) for news and other updates 24 | - [@IPFSevents](https://twitter.com/ipfsevents) for info on IPFS-related events 25 | - [@ProtoSchool](https://twitter.com/protoschool) for updates on ProtoSchool tutorials and events 26 | -------------------------------------------------------------------------------- /docs/concepts/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Concepts 3 | description: Get started on understanding the key ingredients in the decentralized web and how IPFS works. 4 | --- 5 | 6 | # Concepts 7 | 8 | Welcome to the Concepts section of the InterPlanetary File System (IPFS) docs. Here, you can: 9 | 10 | - Learn what IPFS is and isn't, the problems it solves, the different subsystems that it is composed of and how each one works in [the 3-page Basic Concepts](#learn-the-basics). 11 | - Dive into ideas like hashing, immutability, persistence (and more) that underlie IPFS in [Ideas and theory](#ideas-and-theory) 12 | - Learn more about the subsystems that IPFS is composed of in [Subsystems and components](#subsystems-and-components) 13 | - Get an [overview of IPFS implementations](../concepts/ipfs-implementations.md). 14 | - [Compare IPFS to other similar systems](../concepts/comparisons.md). 15 | - Get answers to common questions about IPFS in [the FAQ](../concepts/faq.md). 16 | - Reference [the glossary of terms used in the IPFS ecosystem](../concepts/glossary.md). 17 | - Read [academic papers written about IPFS, including the original IPFS whitepaper](../concepts/further-reading/academic-papers.md). 18 | - Get inspired with [IPFS usage ideas and examples](#examples-and-case-studies). 19 | - Learn about IPFS in theater mode with [these helpful videos](#video-overviews). 20 | 21 | :::callout 22 | ### Don't see what you're looking for? 23 | 24 | We're adding more documentation all the time and making ongoing revisions to existing docs, but if you don't see what you need, please [file an issue](https://github.com/ipfs/ipfs-docs/issues/new?assignees=&labels=OKR+3%3A+Content+Improvement%2C+docs-ipfs&template=content-request.md&title=%5BCONTENT+REQUEST%5D+%28add+your+title+here%21%29) to let us know! We also recommend visiting the [IPFS forums](https://discuss.ipfs.tech/) for support and discussion with IPFS enthusiasts and experts worldwide. 25 | ::: 26 | 27 | ## Learn the basics 28 | 29 | 1. [What IPFS is and isn't](../concepts/what-is-ipfs.md) 30 | 1. [IPFS and the problems it solves](../concepts/ipfs-solves.md) 31 | 1. [How IPFS works](../concepts/how-ipfs-works.md) 32 | 33 | ## Ideas and theory 34 | 35 | - [Cryptographic hashing](hashing.md) 36 | - [Immutability](immutability.md) 37 | - [Persistence, permanence and pinning](persistence.md) 38 | - [Privacy and encryption](privacy-and-encryption.md) 39 | - [Nodes](nodes.md) 40 | 41 | ## Subsystems and components 42 | 43 | - [Content Identifiers (CIDs)](content-addressing.md) 44 | - [Bitswap](bitswap.md) 45 | - [Distributed Hash Tables (DHTs)](dht.md) 46 | - [DNSLink](dnslink.md) 47 | - [File systems](file-systems.md) 48 | - [IPFS Gateway](ipfs-gateway.md) 49 | - [IPLD](ipld.md) 50 | - [IPNS](ipns.md) 51 | - [libp2p](libp2p.md) 52 | - [Merkle Directed Acyclic Graphs (DAGs)](merkle-dag.md) 53 | 54 | ## Examples and case studies 55 | 56 | - [Case study: Arbol](../case-studies/arbol.md) 57 | - [Case study: Audius](../case-studies/audius.md) 58 | - [Case study: Fleek](../case-studies/fleek.md) 59 | - [Case study: LikeCoin](../case-studies/likecoin.md) 60 | - [Case study: Morpheus.Network](../case-studies/morpheus.md) 61 | - [Case study: Snapshot](../case-studies/snapshot.md) 62 | 63 | ## Video overviews 64 | 65 | 66 | @[youtube](Z5zNPwMDYGg) 67 | 68 | - [Understanding how IPFS deals with files (IPFS Camp 2019)](https://youtu.be/Z5zNPwMDYGg) 69 | 70 | @[youtube](fLUq0RkiTBA) 71 | 72 | - [The lifecycle of data in the DWeb (IPFS Camp 2019)](https://youtu.be/fLUq0RkiTBA) 73 | 74 | @[youtube](J-drqD2UebM) 75 | 76 | - [IPFS: A Whiteboard Overview](https://www.youtube.com/watch?v=J-drqD2UebM) 77 | 78 | Check out ResNetLab on Tour for complete tutorials on IPFS and the Web 3.0 stack: 79 | 80 | - [ResNetLab on Tour 2021](https://research.protocol.ai/tutorials/resnetlab-on-tour/) 81 | 82 | 83 | ## Further reading 84 | 85 | Want a more in-depth look into the decentralized web? Here are a few papers that are useful for understanding IPFS, whether it be understanding the IPFS spec itself or the background for the web, protocols, hashing, and so on. [Read the papers →](further-reading/academic-papers.md) 86 | -------------------------------------------------------------------------------- /docs/concepts/bitswap.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bitswap 3 | sidebarDepth: 0 4 | description: Learn about Bitswap and how it plays into the overall architecture of IPFS, the InterPlanetary File System. 5 | --- 6 | 7 | # Bitswap 8 | 9 | Bitswap is a core module of IPFS for exchanging blocks of data. It directs the requesting and sending of blocks to and from other peers in the network. Bitswap is a _message-based protocol_ where all messages contain [want-lists](#want-lists) or blocks. Bitswap has a [Go implementation](https://github.com/ipfs/boxo/tree/main/bitswap) and a [JavaScript implementation](https://github.com/ipfs/js-ipfs-bitswap). 10 | 11 | Bitswap has two main jobs: 12 | 13 | - Acquire blocks requested by the client from the network. 14 | - Send blocks in its possession to other peers who want them. 15 | 16 | ## How Bitswap works 17 | 18 | IPFS breaks up files into chunks of data called _blocks_. These blocks are identified by a [content identifier (CID)](../concepts/content-addressing.md). 19 | 20 | ### Want Lists 21 | 22 | When nodes running the Bitswap protocol want to fetch a file, they send out `want-lists` to other peers. A `want-list` is a list of CIDs for blocks a peer wants to receive. Each node remembers which blocks its peers want. Each time a node receives a block, it checks if any of its peers want the block and sends it to them if they do. 23 | 24 | Here is a simplified version of a `want-list`: 25 | 26 | ```javascript 27 | Want-list { 28 | QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy, WANT, 29 | QmTudJSaoKxtbEnTddJ9vh8hbN84ZLVvD5pNpUaSbxwGoa, WANT, 30 | ... 31 | } 32 | ``` 33 | 34 | ### Discovery 35 | 36 | To find peers that have a file, a node running the Bitswap protocol first sends a request called a _want-have_ to all the peers it is connected to. This _want-have_ request contains the CID of the root block of the file (the root block is at the top of the DAG of blocks that make up the file). Peers that have the root block send a _have_ response and are added to a session. Peers that don't have the block send a _dont-have_ response. Bitswap builds up a map of which nodes have and don't have each block. 37 | 38 | ![Diagram of the _want-have/want-block_ process.](./images/bitswap/diagram-of-the-want-have-want-block-process.png =740x537) 39 | 40 | ### Transfer 41 | 42 | Bitswap sends _want-block_ to peers that have the block, and they respond with the block itself. If none of the peers have the root block, Bitswap queries the Distributed Hash Table (DHT) to ask who can provide the root block. 43 | 44 | ### Technical specification 45 | 46 | - [Bitswap Protocol Specifications](https://specs.ipfs.tech/bitswap-protocol/) 47 | - [v1.0.0](https://specs.ipfs.tech/bitswap-protocol/#bitswap-1-0-0) 48 | - [v1.1.0](https://specs.ipfs.tech/bitswap-protocol/#bitswap-1-1-0) 49 | - [v1.2.0](https://specs.ipfs.tech/bitswap-protocol/#bitswap-1-2-0) 50 | 51 | ### Additional references 52 | 53 | - [February 2020: New improvements to IPFS Bitswap](https://blog.ipfs.tech/2020-02-14-improved-bitswap-for-container-distribution/) 54 | - [Technical overview of the Go implementation of Bitswap](https://docs.google.com/presentation/d/1mbFFGIIKNvboHyLn-k26egOSWkt9nXjlNbxpmCEQfqQ/edit#slide=id.p) 55 | - [Article: Swapping bits and distributing hashes on the decentralized web (Textile)](https://medium.com/textileio/swapping-bits-and-distributing-hashes-on-the-decentralized-web-5da98a3507) 56 | - ["About Bitswap" Go implementation poster from the IPFS developer summit in Berlin in July 2018](https://user-images.githubusercontent.com/74178/43230914-f818dab2-901e-11e8-876b-73ba6a084f76.jpg) 57 | -------------------------------------------------------------------------------- /docs/concepts/dnslink.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: DNSLink 3 | description: Learn how to map IPFS content to DNS names using DNSLink. 4 | --- 5 | 6 | # DNSLink 7 | 8 | DNSLink uses [DNS `TXT` records](https://en.wikipedia.org/wiki/TXT_record) to map a DNS name, such as [`en.wikipedia-on-ipfs.org`](https://en.wikipedia-on-ipfs.org), to either an IPFS address or an [IPNS](../concepts/ipns.md) name. Because you can edit your DNS records, you can use them to always point to the latest version of an object in IPFS. Since DNSLink uses DNS records, you can assign names, paths, and sub-domains that are easy to type, read, and remember. 9 | 10 | A DNSLink address looks like an [IPNS](ipns.md) address, but it uses a DNS name in place of a hashed public key: 11 | 12 | ``` 13 | /ipns/example.org 14 | ``` 15 | 16 | Just like normal IPFS addresses, they can include links to other files — or other types of resources that IPFS supports, like directories and symlinks: 17 | 18 | ``` 19 | /ipns/example.org/media/ 20 | ``` 21 | 22 | ## Publish content path 23 | 24 | Publish the mapping as DNS `TXT` record using your hostname prefixed with `_dnslink`. 25 | 26 | This not only makes DNSLink lookup more efficient by only returning relevant `TXT` records but enables you to improve the security of an automated setup or delegate control over your DNSLink records to a third party without giving away complete control over the original DNS zone. 27 | 28 | For example, [`docs.ipfs.tech`](https://docs.ipfs.tech) loads because a `TXT` record exists for `_dnslink.docs.ipfs.tech`. If you look up the DNS records for `_dnslink.docs.ipfs.tech`, you'll see the DNSLink entry: 29 | 30 | ```shell 31 | dig +noall +answer TXT _dnslink.docs.ipfs.tech 32 | > _dnslink.docs.ipfs.tech. 30 IN TXT "dnslink=/ipfs/bafybeifld3uybj6azujisdnxu6cm7mombldpbt3au4g33nwnqx7dsgjrta" 33 | 34 | ``` 35 | 36 | ## Resolve DNSLink name 37 | 38 | When an IPFS client or node attempts to resolve an address, it looks for a `TXT` record that is prefixed with `dnslink=`. The rest can be an `/ipfs/` link (as in the example below), or `/ipns/`, or even a link to another DNSLink. 39 | 40 | ``` 41 | 42 | dnslink=/ipfs/ 43 | 44 | ``` 45 | 46 | For example, let's go back to when we looked up the DNS records for `_dnslink.docs.ipfs.tech` and saw its DNSLink entry: 47 | 48 | ```sh 49 | $ dig +noall +answer TXT _dnslink.docs.ipfs.tech 50 | _dnslink.docs.ipfs.tech. 34 IN TXT "dnslink=/ipfs/bafybeifld3uybj6azujisdnxu6cm7mombldpbt3au4g33nwnqx7dsgjrta" 51 | ``` 52 | 53 | Based on that, this address: 54 | 55 | ``` 56 | /ipns/docs.ipfs.tech/introduction/ 57 | ``` 58 | 59 | Will get you this block: 60 | 61 | ``` 62 | /ipfs/bafybeifld3uybj6azujisdnxu6cm7mombldpbt3au4g33nwnqx7dsgjrta/introduction/ 63 | ``` 64 | 65 | ## Further Resources 66 | 67 | For more information on how to use DNSLink for your website or app, check out the [Custom domains and DNSLink](../how-to/websites-on-ipfs/custom-domains.md) guide. 68 | 69 | For a complete guide to DNSLink — including tutorials, usage examples, and FAQs — check out [dnslink.dev](https://dnslink.dev/). 70 | 71 | -------------------------------------------------------------------------------- /docs/concepts/hashing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hashing 3 | description: Learn about cryptographic hashes and why they're critical to how IPFS, the InterPlanetary File System, works. 4 | sidebarDepth: 0 5 | --- 6 | 7 | # Hashing 8 | 9 | Cryptographic hashes are functions that take some arbitrary input and return a fixed-length value. The particular value depends on the given hash algorithm in use, such as [SHA-1](https://en.wikipedia.org/wiki/SHA-1) (used by git), [SHA-256](https://en.wikipedia.org/wiki/SHA-2), or [BLAKE2](), but a given hash algorithm always returns the same value for a given input. Have a look at Wikipedia's [full list of hash functions](https://en.wikipedia.org/wiki/List_of_hash_functions) for more. 10 | 11 | As an example, the input: 12 | 13 | ``` 14 | Hello world 15 | ``` 16 | 17 | would be represented by **SHA-1** as: 18 | 19 | ``` 20 | 0x7B502C3A1F48C8609AE212CDFB639DEE39673F5E 21 | ``` 22 | 23 | However, the exact same input generates the following output using **SHA-256**: 24 | 25 | ``` 26 | 0x64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C 27 | ``` 28 | 29 | Notice that the second hash is longer than the first one. This is because SHA-1 creates a 160-bit hash, while SHA-256 creates a 256-bit hash. The prepended `0x` indicates that the following hash is represented as a hexadecimal number. 30 | 31 | Hashes can be represented in different bases (`base2`, `base16`, `base32`, etc.). In fact, IPFS uses that as part of its [content identifiers](content-addressing.md) and supports multiple base representations at the same time, using the [Multibase](https://github.com/multiformats/multibase) protocol. 32 | 33 | For example, the SHA-256 hash of "Hello world" from above can be represented as base 32 as: 34 | 35 | ``` 36 | mtwirsqawjuoloq2gvtyug2tc3jbf5htm2zeo4rsknfiv3fdp46a 37 | ``` 38 | ::: tip 39 | If you're interested in how cryptographic hashes fit into how IPFS works with files in general, check out this video from IPFS Camp 2019! [Core Course: How IPFS Deals With Files](https://www.youtube.com/watch?v=Z5zNPwMDYGg) 40 | ::: 41 | 42 | ## Important hash characteristics 43 | 44 | Cryptographic hashes come with several important characteristics: 45 | 46 | - **deterministic** - the same input message always returns exactly the same output hash 47 | - **uncorrelated** - a small change in the message should generate a completely different hash 48 | - **unique** - it's infeasible to generate the same hash from two different messages 49 | - **one-way** - it's infeasible to guess or calculate the input message from its hash 50 | 51 | These features also mean we can use a cryptographic hash to identify any piece of data: the hash is unique to the data we calculated it from and it's not too long so sending it around the network doesn't take up a lot of resource. A hash is a fixed length, so the SHA-256 hash of a one-gigabyte video file is still only 32 bytes. 52 | 53 | That's critical for a distributed system like IPFS, where we want to be able to store and retrieve data from many places. A computer running IPFS can ask all the peers it's connected to whether they have a file with a particular hash and, if one of them does, they send back the whole file. Without a short, unique identifier like a cryptographic hash, [content addressing](content-addressing.md) wouldn't be possible. 54 | -------------------------------------------------------------------------------- /docs/concepts/images/bitswap/diagram-of-the-want-have-want-block-process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/bitswap/diagram-of-the-want-have-want-block-process.png -------------------------------------------------------------------------------- /docs/concepts/images/content-encryption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/content-encryption.png -------------------------------------------------------------------------------- /docs/concepts/images/dht/address-dht-method.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/dht/address-dht-method.png -------------------------------------------------------------------------------- /docs/concepts/images/dht/bounce-dht-method.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/dht/bounce-dht-method.png -------------------------------------------------------------------------------- /docs/concepts/images/dht/suggestion-dht-method.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/dht/suggestion-dht-method.png -------------------------------------------------------------------------------- /docs/concepts/images/indexer_ecosys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/indexer_ecosys.png -------------------------------------------------------------------------------- /docs/concepts/images/ipfs-gateways/public-authed-gateway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/ipfs-gateways/public-authed-gateway.png -------------------------------------------------------------------------------- /docs/concepts/images/ipfs-gateways/public-gateway-checker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/ipfs-gateways/public-gateway-checker.png -------------------------------------------------------------------------------- /docs/concepts/images/transport-encryption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/transport-encryption.png -------------------------------------------------------------------------------- /docs/concepts/images/unixfs-dag-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/concepts/images/unixfs-dag-diagram.png -------------------------------------------------------------------------------- /docs/concepts/implementations.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IPFS implementations explained 3 | description: Learn about the principles that define what an IPFS implementation is. 4 | --- 5 | 6 | # IPFS implementations explained 7 | 8 | Software, written in any programming language, is considered to be an _IPFS implementation_ if it adheres to the core principles listed below. However, there are characteristics that an IPFS implementation _may_ have, but are not strictly _required_. IPFS principles are broad by design because, like HTTP, IPFS supports an open-ended set of use cases and is adaptable to a broad array of operating conditions. Some implementations are optimized for specific use cases or devices, or use different subsystems to handle content-addressed data. There are multiple specifications in IPFS for handling content-addressed data, and not all implementations implement them. 9 | 10 | You can see the list of implementations [here](./ipfs-implementations.md). 11 | 12 | ## Core principles 13 | 14 | IPFS implementations must: 15 | 16 | - Support addressability using Content IDentifiers (CIDs). 17 | - Expose operations such as retrieval, provisioning, and indexing, on resources using CIDs. The operations that an implementation may support are an open-ended, but this requirement covers any operation which the implementation exposes to other IPFS implementations. 18 | - Verify that the CIDs it resolves match the resources addressed, at least when the resources' bytes are accessible. Implementations may relax this requirement in controlled environments in which it is possible to ascertain that verification has happened elsewhere in a trusted part of the system. 19 | 20 | ## Recommended principles 21 | 22 | The following principles are not strictly required. However, it is recommended that all IPFS implementations should do the following, for the reasons described: 23 | 24 | - Name all the important resources exposed using CIDs. Consider anything that another agent might legitimately wish to access as being in scope, and err on the side of inclusion. 25 | - Expose the logical units of data that structure a resource (e.g. a CBOR document, a file or directory, a branch of a B-tree search index) using CIDs. 26 | - Support incremental verifiability, notably so that it may process content of arbitrary sizes. 27 | - Should not rely on any one transport layer. The transport layer cannot dictate or constrain the way in which CIDs map to content. 28 | 29 | ## Further resources 30 | 31 | - [List of IPFS implementations](./ipfs-implementations.md) 32 | - [IPFS Standards website: IPFS Principles spec](https://specs.ipfs.tech/architecture/principles/#ipfs-implementation-requirements) -------------------------------------------------------------------------------- /docs/concepts/ipld.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IPLD 3 | sidebarDepth: 0 4 | issueUrl: https://github.com/ipfs/ipfs-docs/issues/242 5 | description: Learn about the InterPlanetary Linked Data (IPLD) model and how it forms an important ingredient in IPFS. 6 | related: 7 | 'IPLD home page': https://ipld.io/ 8 | 'IPLD course at ProtoSchool': https://proto.school/course/ipld 9 | 'IPLD CID explorer': https://explore.ipld.io/#/explore/QmY7Yh4UquoXHLPFo2XbhXkhBvFoPwmQUSa92pxnxjQuPU 10 | 'IPLD specifications': https://github.com/ipld/specs 11 | --- 12 | 13 | # The InterPlanetary Linked Data (IPLD) model 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/concepts/merkle-dag.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Merkle Directed Acyclic Graphs (DAG) 3 | description: Learn about Merkle Directed Acyclic Graphs (DAGs) and why they're important to IPFS. 4 | --- 5 | 6 | # Merkle Directed Acyclic Graphs (DAGs) 7 | 8 | ::: callout 9 | Take a deep dive into this super-powered, content-addressed data structure in ProtoSchool's tutorial, [Merkle DAGs: Structuring Data for the Distributed Web](https://proto.school/merkle-dags). 10 | ::: 11 | 12 | A Merkle DAG is a DAG where each node has an identifier, and this is the result of hashing the node's contents — any opaque payload carried by the node and the list of identifiers of its children — using a cryptographic hash function like SHA256. This brings some important considerations: 13 | 14 | - Merkle DAGs can only be constructed from the leaves, that is, from nodes without children. Parents are added after children because the children's identifiers must be computed in advance to be able to link them. 15 | - Every node in a Merkle DAG is the root of a (sub)Merkle DAG itself, and this subgraph is _contained_ in the parent DAG. 16 | - Merkle DAG nodes are _immutable_. Any change in a node would alter its identifier and thus affect all the ascendants in the DAG, essentially creating a different DAG. 17 | 18 | Merkle DAGs are similar to Merkle trees, but there are no balance requirements, and every node can carry a payload. In DAGs, several branches can re-converge or, in other words, a node can have several parents. 19 | 20 | Identifying a data object (like a Merkle DAG node) by the value of its hash is referred to as _content addressing_. Thus, we name the node identifier as [_Content Identifier_](content-addressing.md), or CID. 21 | 22 | For example, the previous linked list, assuming that the payload of each node is just the CID of its descendant, would be: _A=Hash(B)→B=Hash(C)→C=Hash(∅)_. The properties of the hash function ensure that no cycles can exist when creating Merkle DAGs. (Note: Hash functions are one-way functions. Creating a cycle should then be impossibly difficult unless some weakness is discovered and exploited.) 23 | 24 | Merkle DAGs are _self-verified_ structures. The CID of a node is univocally linked to the contents of its payload and those of all its descendants. Thus two nodes with the same CID univocally represent exactly the same DAG. This will be a key property to efficiently sync Merkle-CRDTs (Conflict-free Replicated Data Types) without having to copy the full DAG, as exploited by systems like IPFS. Merkle DAGs are very widely used. Source control systems like git and others use them to efficiently store the repository history in a way that enables de-duplicating the objects and detecting conflicts between branches. 25 | 26 | Want to see a real-world example of Merkle DAGs in action? It's easy to see a Merkle DAG representation of a file of your choice using the [DAG Builder visualizer](https://dag.ipfs.io/). 27 | 28 | ## Further resources 29 | 30 | - Full [draft Merkle-CRDTs paper](https://hector.link/presentations/merkle-crdts/merkle-crdts.pdf) by [@hsanjuan](https://www.github.com/hsanjuan), [@haadcode](https://www.github.com/haadcode), and [@pgte](https://www.github.com/pgte) 31 | - [DAG Builder visualizer](https://dag.ipfs.io/) 32 | -------------------------------------------------------------------------------- /docs/concepts/what-is-ipfs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: What is IPFS? 3 | description: Learn what IPFS is and isn't. 4 | --- 5 | 6 | # What is IPFS 7 | 8 | IPFS is a set of building blocks for a better web. Open protocols to make your data smarter: content-addressed, verifiable, and unstoppable. 9 | 10 | On a more technical level, IPFS is a set of open protocols for addressing, routing, and transferring data on the web, built on the ideas of [content addressing](../concepts/glossary.md#content-addressing) and peer-to-peer networking. 11 | 12 | 13 | :::callout 14 | This guide is part 1 of a 3-part introduction to [the basic concepts of IPFS](../concepts/README.md#learn-the-basics). The second part, [**IPFS and the problems it solves**](../concepts/ipfs-solves.md), covers the problems with the internet and current protocols like HTTP that IPFS solves. 15 | ::: 16 | 17 | In this conceptual guide, you'll learn what IPFS is and isn't. 18 | 19 | ## Defining IPFS 20 | 21 | The term _IPFS_ can refer to multiple concepts: 22 | 23 | - An implementation of IPFS protocol [specifications](https://github.com/ipfs/specs), such as Kubo. Learn more about [the principles that define an IPFS implementation](./implementations.md). 24 | - A 25 | decentralized network composed of IPFS nodes that is open and participatory. 26 | - A modular suite of protocols and standards for organizing and transferring content-addressed data. 27 | 28 | ## What IPFS _isn't_ 29 | 30 | While IPFS shares similarities with, and is often used in architectures with the systems described below, IPFS is _not_: 31 | 32 | - A _storage provider_: While there are storage providers built with IPFS support (typically known as _pinning services_), IPFS itself is a protocol, not a provider. 33 | - _A cloud service provider_: IPFS can be deployed on and complement cloud infrastructure, but it in of itself is not a cloud service provider. 34 | 35 | ## Further reading 36 | - For an overview of the problems that IPFS solves, see part 2 of a 3-part introduction to [the basic concepts of IPFS](../concepts/README.md#learn-the-basics), [**IPFS and the problems it solves**](../concepts/ipfs-solves.md). 37 | - Looking for a deeper dive on IPFS compared to other similar technologies? See the [IPFS Comparisons page](../concepts/comparisons.md). 38 | -------------------------------------------------------------------------------- /docs/how-to/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Guides 3 | description: Hands-on guides to using and developing with IPFS to build decentralized web apps and services. 4 | --- 5 | 6 | # IPFS Guides and Tutorials 7 | 8 | ::: callout 9 | Check out the new [Ecosystem guides](#ecosystem-guides) section to learn more about the amazing tools, software and implementations created by IPFS ecosystem partners. 10 | ::: 11 | 12 | No matter what you're looking to do with IPFS, you can find how-tos and tutorials here. These items are a work in progress, so please check back periodically to check what we've added! 13 | 14 | See the site navigation menu for all our how-tos, organized by topic area, including favorites like these: 15 | 16 | - **Customize your install** by [configuring a node](configure-node.md), modifying the [bootstrap list](modify-bootstrap-list.md), and more 17 | - **Learn how to manage files** in IPFS with tutorials on concepts like [pinning](pin-files.md), how to [work with blocks](work-with-blocks.md), learning how to [troubleshoot file transfers](https://github.com/ipfs/kubo/blob/master/docs/file-transfer.md), and understanding [working with large datasets](https://github.com/ipfs/archives/tree/master/tutorials/replicating-large-datasets) 18 | - **See how to work with peers** using methods like [customizing libp2p bundles](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/custom-libp2p) and using circuit relay 19 | - **Understand website hosting** by starting with how to [host a simple single-page site](websites-on-ipfs/single-page-website.md) 20 | - **Learn how to build apps** on IPFS, starting with [exploring the IPFS API](https://github.com/ipfs/camp/tree/master/CORE_AND_ELECTIVE_COURSES/CORE_COURSE_C) and [making a basic libp2p app](https://github.com/ipfs/camp/tree/master/CORE_AND_ELECTIVE_COURSES/CORE_COURSE_B) 21 | - **Understand how IPFS works in the browser** by learning how to [address IPFS on the Web](address-ipfs-on-web.md) and [how IPFS can be used in your favorite browser tools and frameworks](browser-tools-frameworks.md) 22 | 23 | 24 | ## Don't see what you're looking for? 25 | 26 | We're adding more documentation all the time and making ongoing revisions to existing docs, but if you don't see what you need, please [file an issue](https://github.com/ipfs/ipfs-docs/issues/new?assignees=&labels=OKR+3%3A+Content+Improvement%2C+docs-ipfs&template=content-request.md&title=%5BCONTENT+REQUEST%5D+%28add+your+title+here%21%29) to let us know! We also recommend visiting the [IPFS forums](https://discuss.ipfs.tech/) for support and discussion with IPFS enthusiasts and experts worldwide. -------------------------------------------------------------------------------- /docs/how-to/companion-node-types.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Node types 3 | description: Learn about the available node types in IPFS Companion. 4 | --- 5 | 6 | # Understand node types in IPFS Companion 7 | 8 | IPFS Companion's preferences screen allows you to choose from different node types. The available types you'll see in your Companion preferences depends on the browser you're using (i.e. Firefox, Chrome), but the full list is as follows: 9 | 10 | [[toc]] 11 | 12 | **If you're already running a local IPFS node, choose _External_.** If not, do one of the following: 13 | 14 | - [Install](../install/README.md) and run IPFS as an [external node](#external) (recommended). 15 | 16 | ## External 17 | 18 | An _external_ node can be any instance of an IPFS daemon that: 19 | 20 | - Runs outside of your web browser. 21 | - Exposes a _gateway_ and writeable _API_ over HTTP at TCP ports. 22 | 23 | The [Kubo](https://github.com/ipfs/kubo) implementation of IPFS is the recommended choice for running an external IPFS node. It's less power-hungry than other implementations and can use the `autoclient` mode to decrease ambient DHT traffic and reduce battery drain. 24 | 25 | A good practice is to run your Kubo daemon on localhost (`127.0.0.1`), as it provides: 26 | 27 | - Increased security: native IPFS used as end-to-end transport. 28 | - Better UX in the browser: no mixed-content warnings. 29 | - Improved performance: local loopback is used, so no network overhead. 30 | 31 | You can get started with running a Kubo node on your local machine in several ways: 32 | 33 | - [IPFS Desktop](https://github.com/ipfs-shipyard/ipfs-desktop) installs and manages a local node for you, as well as offering an easy, convenient user interface for managing files and peers. 34 | - If you're comfortable with the command line and don't need the convenience of the IPFS Desktop UI, follow the directions in the [command line quick-start guide](command-line-quick-start.md). 35 | - Docker fans can run and use Kubo from [inside a Docker container](https://github.com/ipfs/kubo#running-ipfs-inside-docker). 36 | 37 | -------------------------------------------------------------------------------- /docs/how-to/companion-x-ipfs-path-header.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Using x-ipfs-path 3 | description: Learn more about how to use "x-ipfs-path" headers in IPFS Companion. 4 | --- 5 | 6 | # Support for `x-ipfs-path` headers in IPFS Companion 7 | 8 | IPFS Companion can redirect traditional HTTP requests to IPFS if the `x-ipfs-path` response header is provided. 9 | 10 | Additionally, some browser vendors may display an **Open using IPFS** button on the address bar when this header is returned for the root document in the current tab. 11 | 12 | ## Overview 13 | 14 | IPFS HTTP gateways can return an `x-ipfs-path` header with each response. The value of the header is the IPFS path of the returned payload. 15 | 16 | ```shell 17 | curl -sI https://en.wikipedia-on-ipfs.org | grep x-ipfs-path 18 | 19 | > x-ipfs-path: /ipns/en.wikipedia-on-ipfs.org/ 20 | ``` 21 | 22 | ```shell 23 | curl -sI https://dweb.link/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi | grep x-ipfs-path 24 | 25 | > x-ipfs-path: /ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi 26 | ``` 27 | 28 | The WebExtension API [onHeadersReceived](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onHeadersReceived) can cancel and redirect the HTTP request as soon as the response headers arrive. This means the client can drop the initial request, avoiding duplicate downloads of the content. 29 | 30 | Detection of the `x-ipfs-path` header can be disabled in the _Preferences_ screen (but is enabled by default). 31 | 32 | ## Use cases 33 | 34 | ### Fallback for edge cases where the IPFS path is not present in the URL 35 | 36 | A website owner can have the HTTP gateway behind a reverse-proxy, but configure it to expose `/ipfs//` under `/`, in which case path-based IPFS detection by IPFS Companion (see [onBeforeRequest](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest/onBeforeRequest)) won't work. 37 | 38 | Thanks to the `x-ipfs-path` header, we have a reliable fallback for these configurations. 39 | 40 | ### Hinting DNSLink lookups 41 | 42 | The presence of an `x-ipfs-path` header is a clear indicator that a website uses IPFS. 43 | 44 | There is a "best-effort" [DNSLink policy](dnslink-companion.md) enabled by default to execute blocking DNS TXT lookups for FQDNs that returned the header. 45 | 46 | Note that `x-ipfs-path` values starting with `/ipns/` will be ignored if [DNSLink policy](dnslink-companion.md) is "off" or the DNS TXT record is missing. 47 | 48 | ### Other resources 49 | 50 | - An overview of the `onBeforeRequest` and `onHeadersReceived` listeners can be found in the [WebExtensions API: webRequest](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) documentation 51 | -------------------------------------------------------------------------------- /docs/how-to/configure-node.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Configure a node 3 | description: IPFS nodes can be customized using the configuration file. The default values should be fine for most use-cases. However, you may want to make some changes if you are running a specialized IPFS node, or simply want to tweak things to your liking. 4 | --- 5 | 6 | # Configure a node 7 | 8 | Node configuration varies between implementations. 9 | 10 | - For Kubo, see [config.md](https://github.com/ipfs/kubo/blob/master/docs/config.md). 11 | - For Helia, see the [HeliaInit](https://ipfs.github.io/helia/interfaces/helia.HeliaInit.html) document. Note that, unlike the deprecated js-ipfs implementation, you must configure your node directly - see the [Helia example](https://github.com/ipfs/helia/wiki/Migrating-from-js-IPFS#config). 12 | 13 | -------------------------------------------------------------------------------- /docs/how-to/create-simple-chat-app/app-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/create-simple-chat-app/app-diagram.png -------------------------------------------------------------------------------- /docs/how-to/create-simple-chat-app/discovery-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/create-simple-chat-app/discovery-diagram.png -------------------------------------------------------------------------------- /docs/how-to/create-simple-chat-app/example-animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/create-simple-chat-app/example-animation.gif -------------------------------------------------------------------------------- /docs/how-to/dnslink-companion.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: DNSLink support 3 | description: Details of DNSLink support in IPFS Companion. 4 | --- 5 | 6 | # Support for DNSLink in IPFS Companion 7 | 8 | DNSLink maps a domain name to an IPFS address using DNS TXT records. Read the [DNSLink guide](../concepts/dnslink.md) for full details, including how to set it up on your website. 9 | 10 | ## Lookup cache 11 | 12 | Results of DNS TXT lookups are stored in a [Least Recently Used (LRU)](https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used) cache of size 1000 and max-age 12h. The cache is in-memory and does not persist between restarts. 13 | 14 | ## DNS TXT lookup policies 15 | 16 | ### Off (disabled) 17 | 18 | There are no DNS TXT lookups when this policy is selected. It means DNSLink support is disabled. 19 | 20 | ### Check after HTTP request ("best-effort") 21 | 22 | This policy is the most efficient lookup strategy, but in rare cases, it may yield false negatives on the first load. 23 | 24 | DNSLink redirect is enabled and happens before the HTTP request if DNSLink is already in cache. If not in the cache, the DNS TXT lookup is executed and cached in the background without blocking the page load. 25 | 26 | Blocking lookups are executed only for domains that return an HTTP response with [x-ipfs-path header](companion-x-ipfs-path-header.md)) or return a connection error. 27 | 28 | ### Check before HTTP request (enabled) 29 | 30 | The DNS TXT lookup is executed for every hostname before any HTTP request is made. No false negatives occur under this scenario. 31 | 32 | This method removes the need for sending HTTP requests to a remote server if DNSLink is present but may impact browser performance. Every request to a new domain name gets blocked until the TXT lookup finishes. 33 | 34 | There is room for improvement in this approach. Web browsers do not expose an efficient DNS TXT lookup API [yet](https://bugzilla.mozilla.org/show_bug.cgi?id=1449171). HTTP-based lookups via `/api/v0/dns/${fqdn}` with userland caching are used as a fallback. 35 | 36 | ## Further resources 37 | 38 | - [`x-ipfs-path` header support in IPFS Companion](companion-x-ipfs-path-header.md) 39 | - [Bugzilla bug 1449171: Add DNS TXT resolution to dns.resolve WebExtensions API](https://bugzilla.mozilla.org/show_bug.cgi?id=1449171) 40 | -------------------------------------------------------------------------------- /docs/how-to/host-git-repo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Host a Git-style repo 3 | legacyUrl: https://docs.ipfs.io/guides/examples/git/ 4 | description: Learn how to serve a static Git repository worldwide using IPFS. 5 | --- 6 | 7 | # Host a Git repo 8 | 9 | Have you ever said to yourself: "Man, my Git server isn't distributed enough" or "I wish I had an easy way to serve a static Git repository worldwide"? Well, wish no more. 10 | 11 | In this guide, we discuss how to serve a Git repository through the IPFS network. The end result will be a `git clone`able URL served through IPFS! 12 | 13 | To start, select a Git repository you want to host, and do a bare clone of it: 14 | 15 | ```bash 16 | git clone --mirror git@myhost.io/myrepo 17 | ``` 18 | 19 | For those who aren't super Git-savvy, a bare repository means that it doesn't have a working tree, and can be used as a server. They have a slightly different format than your normal Git repository. 20 | 21 | Now, to get it ready to be cloned, you need to do the following: 22 | 23 | ```bash 24 | cd myrepo 25 | git update-server-info 26 | ``` 27 | 28 | Optionally, you can unpack all of Git's objects: 29 | 30 | ```bash 31 | mv objects/pack/*.pack . 32 | git unpack-objects < *.pack 33 | rm -f *.pack objects/pack/* 34 | ``` 35 | 36 | Doing this breaks up Git's large packfile into all of its individual objects. This will allow IPFS to deduplicate objects if you add multiple versions of this Git repository. 37 | 38 | Once you've done that, that repository is ready to be served. All that's left to do is to add it to IPFS: 39 | 40 | ```bash 41 | $ pwd 42 | /code/myrepo 43 | $ ipfs add -r . 44 | ... 45 | ... 46 | ... 47 | added QmX679gmfyaRkKMvPA4WGNWXj9PtpvKWGPgtXaF18etC95 . 48 | ``` 49 | 50 | Now, try cloning it: 51 | 52 | ```bash 53 | $ cd /tmp 54 | $ git clone http://QmX679gmfyaRkKMvPA4WGNWXj9PtpvKWGPgtXaF18etC95.ipfs.localhost:8080/ myrepo 55 | ``` 56 | 57 | Note: make sure to change out that hash for yours. 58 | 59 | Now, you may be asking, "Well, what good is a Git repository that I can't change anything on?" Here's one use case. Say you program in Go. For those who don't know, Go uses version control paths for its imports, i.e: 60 | 61 | ```go 62 | import ( 63 | "github.com/whyrusleeping/mycoollibrary" 64 | ) 65 | ``` 66 | 67 | This is a really nice feature, and solves a lot of problems — but often times, it's possible to run into 68 | the issue where you're using someone's library, and they change the API, and it breaks your code. 69 | Using what we've done above, you could clone the library, and add it into IPFS, so your import 70 | paths will now look something like: 71 | 72 | ```go 73 | import ( 74 | mylib "gateway.ipfs.io/ipfs/QmX679gmfyaRkKMvPA4WGNWXj9PtpvKWGPgtXaF18etC95" 75 | ) 76 | ``` 77 | 78 | And you will be guaranteed to have the same code every time! 79 | 80 | Note: Since Go doesn't allow the usage of localhost for import paths, we use the public HTTP gateways. This provides no security guarantees, as a man-in-the-middle attack could ship you bad code. You could use a domain name that redirects to the localhost instead to avoid the issue. 81 | -------------------------------------------------------------------------------- /docs/how-to/images/command-line-quick-start/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/command-line-quick-start/apple-icon.png -------------------------------------------------------------------------------- /docs/how-to/images/command-line-quick-start/linux-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/command-line-quick-start/linux-icon.png -------------------------------------------------------------------------------- /docs/how-to/images/command-line-quick-start/webui-connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/command-line-quick-start/webui-connection.png -------------------------------------------------------------------------------- /docs/how-to/images/command-line-quick-start/windows-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/command-line-quick-start/windows-icon.png -------------------------------------------------------------------------------- /docs/how-to/images/companion-permissions-bulk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/companion-permissions-bulk.png -------------------------------------------------------------------------------- /docs/how-to/images/companion-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/companion-permissions.png -------------------------------------------------------------------------------- /docs/how-to/images/ipfs-command-line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/ipfs-command-line.png -------------------------------------------------------------------------------- /docs/how-to/images/ipfs-companion-install-chrome-dev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/ipfs-companion-install-chrome-dev.gif -------------------------------------------------------------------------------- /docs/how-to/images/ipfs-companion-install-firefox-dev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/ipfs-companion-install-firefox-dev.gif -------------------------------------------------------------------------------- /docs/how-to/images/ipfs-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/ipfs-desktop.png -------------------------------------------------------------------------------- /docs/how-to/images/ipfs-webui-config-connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/ipfs-webui-config-connected.png -------------------------------------------------------------------------------- /docs/how-to/images/ipfs-webui-config-domain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/ipfs-webui-config-domain.png -------------------------------------------------------------------------------- /docs/how-to/images/ipfs-webui-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/ipfs-webui-config.png -------------------------------------------------------------------------------- /docs/how-to/images/node-type-switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/node-type-switch.png -------------------------------------------------------------------------------- /docs/how-to/images/pinata-api-key-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/pinata-api-key-permissions.png -------------------------------------------------------------------------------- /docs/how-to/images/work-with-pinning-services/add-service-custom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/work-with-pinning-services/add-service-custom.jpg -------------------------------------------------------------------------------- /docs/how-to/images/work-with-pinning-services/add-service-filebase-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/work-with-pinning-services/add-service-filebase-token.png -------------------------------------------------------------------------------- /docs/how-to/images/work-with-pinning-services/add-service-picker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/work-with-pinning-services/add-service-picker.jpg -------------------------------------------------------------------------------- /docs/how-to/images/work-with-pinning-services/add-service-pinata-token.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/work-with-pinning-services/add-service-pinata-token.jpg -------------------------------------------------------------------------------- /docs/how-to/images/work-with-pinning-services/add-service-pinata.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/work-with-pinning-services/add-service-pinata.jpg -------------------------------------------------------------------------------- /docs/how-to/images/work-with-pinning-services/add-service.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/work-with-pinning-services/add-service.jpg -------------------------------------------------------------------------------- /docs/how-to/images/work-with-pinning-services/added-service.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/work-with-pinning-services/added-service.jpg -------------------------------------------------------------------------------- /docs/how-to/images/work-with-pinning-services/set-pinning.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/images/work-with-pinning-services/set-pinning.jpg -------------------------------------------------------------------------------- /docs/how-to/kubo-garbage-collection.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Using garbage collection 3 | sidebarDepth: 0 4 | --- 5 | 6 | # Using garbage collection in Kubo 7 | 8 | In IPFS Kubo, the IPFS garbage collector is configured in the `Datastore`section of [the Kubo config file](https://github.com/ipfs/kubo/blob/master/docs/config.md). The important settings related to the garbage collector are: 9 | 10 | - `StorageGCWatermark`: The percentage of the `StorageMax` value at which a garbage collection will be triggered automatically, if the daemon is running with automatic garbage collection enabled. The default is 90`. 11 | 12 | - `GCPeriod`: Specify how frequently garbage collection should run. Only used if automatic garbage collection is enabled. The default is 1 hour. 13 | 14 | To manually start garbage collection, [run `ipfs repo gc`](../reference/kubo/cli.md#ipfs-repo-gc): 15 | 16 | ```bash 17 | ipfs repo gc 18 | 19 | > removed QmPZhyTu8D7NqR5NvgkgNYsSYD4CNjnyuFejB8i23itJvA 20 | > removed QmSYQFVAZgEnpa6NxiW5agyj3XU9VR4CbERShXiLhuPPPE 21 | > removed QmS6SJXApoi59hqD8Naktgakc6UNHK1XDhqhtMg9sBhY8g 22 | ``` 23 | 24 | To enable automatic garbage collection use `--enable-gc` when starting the IPFS daemon: 25 | 26 | ```bash 27 | ipfs daemon --enable-gc 28 | 29 | > Initializing daemon... 30 | > Kubo version: 0.9.0 31 | > Repo version: 10 32 | > ... 33 | ``` 34 | 35 | ::: tip 36 | If you use IPFS Desktop, you can trigger garbage collection by clicking on the taskbar icon of the IPFS Desktop application and selecting **Advanced** → **Run Garbage Collector**. 37 | ::: -------------------------------------------------------------------------------- /docs/how-to/modify-bootstrap-list.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Modify the bootstrap list 3 | description: Learn how to modify the IPFS bootstrap peers list to create a personal IPFS network. 4 | --- 5 | 6 | # Modify the bootstrap peers list 7 | 8 | The IPFS bootstrap list is a list of peers with which the IPFS daemon learns about other peers on the network. IPFS comes with a default list of trusted peers, but you are free to modify the list to suit your needs. One popular use for a custom bootstrap list is to create a personal IPFS network. 9 | 10 | First, let's list your node's bootstrap list: 11 | 12 | ```bash 13 | ipfs bootstrap list 14 | > /dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN 15 | > /dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa 16 | > /dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb 17 | > /dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt 18 | > /ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ 19 | ``` 20 | 21 | The lines listed above are the addresses of the default IPFS bootstrap nodes — they are run by the IPFS development team. The addresses listed are fully resolved and specified in [multiaddr](https://github.com/multiformats/multiaddr) format, which makes every protocol explicit. This way, your node knows exactly where to reach the bootstrap nodes — the location is unambiguous. 22 | 23 | Don't change this list unless you understand what it means to do so. Bootstrapping is an important security point of failure in distributed systems: malicious bootstrap peers could only introduce you to other malicious peers. It is recommended to keep the default list provided by the IPFS dev team, or — in the case of setting up private networks — a list of nodes you control. Don't add peers to this list that you don't trust. 24 | 25 | Here, we add a new peer to the bootstrap list: 26 | 27 | ```bash 28 | > ipfs bootstrap add /ip4/25.196.147.100/tcp/4001/p2p/QmaMqSwWShsPg2RbredZtoneFjXhim7AQkqbLxib45Lx4S 29 | ``` 30 | 31 | Here, we remove a node from the bootstrap list: 32 | 33 | ```bash 34 | > ipfs bootstrap rm /ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ 35 | ``` 36 | 37 | Let's say we want to create a backup of our new bootstrap list. We can easily do this by redirecting stdout of `ipfs bootstrap list` to a file: 38 | 39 | ```bash 40 | > ipfs bootstrap list >save 41 | ``` 42 | 43 | If we ever want to start from scratch, we can delete the entire bootstrap list at once: 44 | 45 | ```bash 46 | > ipfs bootstrap rm --all 47 | ``` 48 | 49 | With an empty list, we can restore the default bootstrap list: 50 | 51 | ```bash 52 | > ipfs bootstrap add --default 53 | ``` 54 | 55 | Remove the entire bootstrap list again, and restore our saved one by piping the contents of the saved file to `ipfs bootstrap add`: 56 | 57 | ```bash 58 | > ipfs bootstrap rm --all 59 | > cat save | ipfs bootstrap add 60 | ``` 61 | -------------------------------------------------------------------------------- /docs/how-to/move-ipfs-installation/macos-advanced-options-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/move-ipfs-installation/macos-advanced-options-menu.png -------------------------------------------------------------------------------- /docs/how-to/move-ipfs-installation/macos-ipfs-tray-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/move-ipfs-installation/macos-ipfs-tray-icon.png -------------------------------------------------------------------------------- /docs/how-to/move-ipfs-installation/ubuntu-advanced-options-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/move-ipfs-installation/ubuntu-advanced-options-menu.png -------------------------------------------------------------------------------- /docs/how-to/move-ipfs-installation/ubuntu-ipfs-tray-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/move-ipfs-installation/ubuntu-ipfs-tray-icon.png -------------------------------------------------------------------------------- /docs/how-to/move-ipfs-installation/windows-advanced-options-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/move-ipfs-installation/windows-advanced-options-menu.png -------------------------------------------------------------------------------- /docs/how-to/move-ipfs-installation/windows-ipfs-tray-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/move-ipfs-installation/windows-ipfs-tray-icon.png -------------------------------------------------------------------------------- /docs/how-to/observe-peers.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Observe peers 3 | description: Learn the built-in IPFS commands that help you observe peers on the network. 4 | --- 5 | 6 | # Observe peers 7 | 8 | Included in IPFS are a useful set of commands to aid in observing the network. 9 | 10 | See who you're directly connected to: 11 | 12 | ```sh 13 | ipfs swarm peers 14 | ``` 15 | 16 | Manually connect to a specific peer. If the peer below doesn't work, choose one from the output of `ipfs swarm peers`. 17 | 18 | ```sh 19 | > ipfs swarm connect /dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN 20 | ``` 21 | 22 | Search for a given peer on the network: 23 | 24 | ```sh 25 | > ipfs routing findpeer QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/how-to/store-play-videos.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Store & play videos 3 | description: Learn how to store, play, and work with videos in IPFS, the InterPlanetary File System. 4 | --- 5 | 6 | # Store and play videos 7 | 8 | IPFS can be used to store and play videos. Suppose we add a video: 9 | 10 | ```bash 11 | ipfs add -q sintel.mp4 | tail -n1 12 | ``` 13 | 14 | You can view the resulting hash in a few different ways. 15 | 16 | On the command line: 17 | 18 | ```bash 19 | ipfs cat $video_hash | mplayer -vo xv - 20 | ``` 21 | 22 | Via local gateway (note that the gateway method works with most video players and browsers): 23 | 24 | ```bash 25 | mplayer http://localhost:8080/ipfs/$video_hash 26 | ``` 27 | 28 | Or open it up in a browser tab (in this example, Chrome): 29 | 30 | ```bash 31 | chromium http://localhost:8080/ipfs/$video_hash 32 | ``` 33 | -------------------------------------------------------------------------------- /docs/how-to/take-snapshot.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Take a snapshot 3 | description: Learn about how to take and use snapshots of files in IPFS, the InterPlanetary File System. 4 | --- 5 | 6 | # Take a snapshot 7 | 8 | Let's take a quick look at how IPFS can be used to take basic _snapshots_ of files — an action that enables you to access those files later in the same state as they were when you "snapshotted" them. 9 | 10 | Save your directory: 11 | 12 | ```bash 13 | ipfs add -r ~/code/myproject 14 | ``` 15 | 16 | Note the hash: 17 | 18 | ```bash 19 | echo $hash `date` >> snapshots 20 | ``` 21 | 22 | Or all at once: 23 | 24 | ```bash 25 | echo `ipfs add -q -r ~/code/myproject | tail -n1` `date` >> snapshots 26 | ``` 27 | 28 | (Note: the `-q` makes the output only contain the hashes, and piping through `tail -n1` ensures that only the hash of the top folder is output.) 29 | 30 | Make sure to have the placeholders for the mount points: 31 | 32 | ```bash 33 | sudo mkdir /ipfs /ipns 34 | sudo chown `whoami` /ipfs /ipns 35 | ``` 36 | 37 | You will need to have `FUSE` (Filesystem in Userspace) installed on your machine in order to be able to `mount` directories from the IPFS. You can find instructions for how to install `FUSE` [in the `kubo` docs](https://github.com/ipfs/kubo/blob/master/docs/fuse.md). 38 | 39 | View your snapshots live: 40 | 41 | ```bash 42 | ipfs mount 43 | ls /ipfs/$hash/ 44 | 45 | # Or 46 | 47 | cd /ipfs/$hash/ 48 | ls 49 | ``` 50 | 51 | Through the FUSE interface, you'll be able to access your files exactly as they were when you took the snapshot. 52 | -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/github-action/commit-status.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/github-action/commit-status.gif -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/github-action/commit-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/github-action/commit-status.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/github-action/pr-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/github-action/pr-comment.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/introducing-fleek/add-or-buy-domain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/introducing-fleek/add-or-buy-domain.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/introducing-fleek/deployment-information-window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/introducing-fleek/deployment-information-window.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/introducing-fleek/fleek-homepage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/introducing-fleek/fleek-homepage.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/introducing-fleek/fleek-showing-the-website-repo-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/introducing-fleek/fleek-showing-the-website-repo-options.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/introducing-fleek/github-repo-showing-a-few-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/introducing-fleek/github-repo-showing-a-few-files.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/dns-add-content-record.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/dns-add-content-record.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-add-content-record.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-add-content-record.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-add-records-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-add-records-icon.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-complete-registration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-complete-registration.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-content-record-pending.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-content-record-pending.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-domain-settings-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-domain-settings-page.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-metamask-complete-registration-transaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-metamask-complete-registration-transaction.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-metamask-confirm-request-to-register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-metamask-confirm-request-to-register.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-metamask-content-record-transaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-metamask-content-record-transaction.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-metamask-log-into-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-metamask-log-into-key.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-registration-transaction-pending.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-registration-transaction-pending.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-request-to-register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-request-to-register.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-search-for-domain-name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-search-for-domain-name.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-set-content-record-as-ipfs-cid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-set-content-record-as-ipfs-cid.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/link-a-domain/ens-wait-a-minute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/link-a-domain/ens-wait-a-minute.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/individual-files-within-multi-page-project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/individual-files-within-multi-page-project.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/ipfs-desktop-with-multi-page-folder-showing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/ipfs-desktop-with-multi-page-folder-showing.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/link-file.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/link-file.gif -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/link-folder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/link-folder.gif -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/moon-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/moon-logo.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/upload-about.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/upload-about.gif -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/upload-file.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/upload-file.gif -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/upload-folder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/upload-folder.gif -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/multipage-website/website-open-in-firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/multipage-website/website-open-in-firefox.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/add-ipfs-desktop-open-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/add-ipfs-desktop-open-file.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/add-ipfs-desktop-share-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/add-ipfs-desktop-share-files.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/apple-icon.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-dmg-file-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-dmg-file-link.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-drag-ipfs-drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-drag-ipfs-drag.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-force-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-force-open.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-ipfs-cannot-be-opened.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-ipfs-cannot-be-opened.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-ipfs-desktop-status-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-ipfs-desktop-status-bar.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-open-confirmation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-open-confirmation.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-save-dmg-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-macos-save-dmg-file.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-ubuntu-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-ubuntu-install.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-ubuntu-ipfs-running-status-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-ubuntu-ipfs-running-status-bar.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-ubuntu-search-window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-ubuntu-search-window.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-ubuntu-software-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-ubuntu-software-install.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-download-exe-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-download-exe-page.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-install-finish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-install-finish.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-install-location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-install-location.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-install-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-install-options.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-ipfs-desktop-status-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/install-windows-ipfs-desktop-status-bar.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/ipfs-desktop-showing-pinning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/ipfs-desktop-showing-pinning.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/ipfs-desktop-status-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/ipfs-desktop-status-page.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/linux-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/linux-icon.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/namecheap-source-url-redirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/namecheap-source-url-redirect.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/pinned-index-file-in-pinata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/pinned-index-file-in-pinata.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/pinned-random-planet-fact-website.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/pinned-random-planet-fact-website.png -------------------------------------------------------------------------------- /docs/how-to/websites-on-ipfs/images/single-page-website/windows-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/how-to/websites-on-ipfs/images/single-page-website/windows-icon.png -------------------------------------------------------------------------------- /docs/how-to/webtransport.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: WebTransport and Kubo 3 | description: Learn how your files are broken down into blocks in IPFS and how to work with them. 4 | --- 5 | 6 | # WebTransport and Kubo 7 | 8 | [WebTransport](https://docs.libp2p.io/concepts/transports/webtransport/), a new libp2p transport protocol, allows browsers to contact [Kubo](../install/command-line.md) nodes, so instead of serving requests for other system level application nodes, you can serve requests directly to a browser. This guide will explain how WebTransport works, Kubo-WebTransport integration use cases, and how to get started with WebTransport in Kubo. 9 | 10 | Kubo v0.16 introduced [optional support for WebTransport](https://github.com/ipfs/kubo/releases?q=0.16.0&expanded=true#-webtransport-new-experimental-transport), and Kubo v0.18 [enabled support by default](https://github.com/ipfs/kubo/blob/release-v0.18/docs/changelogs/v0.18.md#webtransport-enabled-by-default). 11 | 12 | ## How it works 13 | 14 | Conceptually, WebTransport is similar to [WebSocket](https://en.wikipedia.org/wiki/WebSocket). The browser can “upgrade” an [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2) or an [HTTP/3 connection](https://en.wikipedia.org/wiki/HTTP/3), which runs on top of [QUIC](https://en.wikipedia.org/wiki/QUIC), to a WebTransport session. A WebTransport session over HTTP/3 allows both endpoints to open very thinly wrapped QUIC streams to each other. This enables WebTransport to take advantage of QUIC's offerings: 15 | 16 | - Speedy time to connect using a fast handshake (one network roundtrip). 17 | - Native stream multiplexing without head-of-line blocking. 18 | - Advanced loss recovery and congestion control. 19 | - Low latency communication. 20 | 21 | ### Steps 22 | 23 | In a nutshell, WebTransport works with Kubo as follows: 24 | 25 | 1. The browser establishes a HTTP/3 connection to the Kubo node. 26 | 1. It then opens a new stream. 27 | 1. An Extended CONNECT request and proposed a WebTransport Session ID are sent. 28 | 29 | The server can accept the upgrade by sending a HTTP 200 OK response. Both endpoints can now open QUIC streams associated with this WebTransport session. 30 | 31 | ## Use cases 32 | 33 | WebTransport in Kubo unlocks many use cases, including those listed below. 34 | 35 | - Browser nodes or light clients can function as "full" peers in a decentralized network. 36 | - Browser nodes can gossip directly with their peers, meaning they can receive and submit messages directly without relying on centralized infrastructure or interfaces like an HTTP/GraphQL API. 37 | - Fetch data from the [DHT](../concepts/dht.md) by directly connecting to a DHT server node. 38 | - Upload data directly from the browser to long-term storage such as a [pinning service](../concepts/persistence.md). 39 | - Decentralized peer-to-peer video streaming as a dApp. 40 | 41 | ## Using WebTransport with Kubo 42 | 43 | To get started with using WebTransport with Kubo, you can use follow this GitHub example which will teach you [how to use the browser to fetch a file directly from Kubo](https://github.com/libp2p/js-libp2p-webtransport/tree/main/examples/fetch-file-from-kubo). You can also view the demo on [YouTube](https://youtu.be/Dt42Ss6X_Vk?feature=shared&t=145). 44 | 45 | ## Learn more 46 | 47 | You can learn more about WebTransport with the following resources: 48 | 49 | - [libp2p documentation: WebTransport](https://docs.libp2p.io/concepts/transports/webtransport/) 50 | - [connectivity.libp2p.io](https://connectivity.libp2p.io/#webtransport) 51 | - [WebTransport spec](https://github.com/libp2p/specs/tree/master/webtransport) 52 | -------------------------------------------------------------------------------- /docs/how-to/work-with-blocks.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Work with blocks 3 | description: Learn how your files are broken down into blocks in IPFS and how to work with them. 4 | --- 5 | 6 | # Work with blocks 7 | 8 | The `ipfs add` command will create a Merkle DAG out of the data in the files you specify. It follows the [UnixFS data format](https://github.com/ipfs/go-unixfs/blob/master/pb/unixfs.proto) when doing this. This means that your files are broken down into blocks, and then arranged in a tree-like structure using 'link nodes' to tie them together. A given file's 'hash' is actually the hash of the root (uppermost) node in the DAG. For a given DAG, you can easily view the sub-blocks under it with `ipfs ls`. 9 | 10 | For example: 11 | 12 | ```bash 13 | # Ensure this file is larger than 256k. 14 | ipfs add alargefile 15 | ipfs ls thathash 16 | ``` 17 | 18 | The above command should print out something like: 19 | 20 | ```bash 21 | ipfs@earth ~> ipfs ls qms2hjwx8qejwm4nmwu7ze6ndam2sfums3x6idwz5myzbn 22 | > qmv8ndh7ageh9b24zngaextmuhj7aiuw3scc8hkczvjkww 7866189 23 | > qmuvjja4s4cgyqyppozttssquvgcv2n2v8mae3gnkrxmol 7866189 24 | > qmrgjmlhlddhvxuieveuuwkeci4ygx8z7ujunikzpfzjuk 7866189 25 | > qmrolalcquyo5vu5v8bvqmgjcpzow16wukq3s3vrll2tdk 7866189 26 | > qmwk51jygpchgwr3srdnmhyerheqd22qw3vvyamb3emhuw 5244129 27 | ``` 28 | 29 | This shows all of the immediate sub-blocks of your file, as well as the size of them and their children on the disk. 30 | 31 | ## What to do with blocks 32 | 33 | If you feel adventurous, you can get a lot of different information out of these different blocks. You can use the sub-block hashes as input to `ipfs cat` to see only the data in any given sub-tree (the data of that block and its children). To see just the data of a given block and not its children, use `ipfs block get`. But be careful, as `ipfs block get` on an intermediate block will print out the raw binary data of its DAG structure to your screen. 34 | 35 | The command `ipfs block stat` will tell you the exact size of a given block (without its children), and `ipfs refs` will tell you all the children of that block. Similarly, `ipfs ls` or `ipfs object links` will show you all children and their sizes. `ipfs refs` is a more suitable command for scripting something to run on each child block of a given object. 36 | 37 | ## Blocks vs objects 38 | 39 | In IPFS, a block refers to a single unit of data, identified by its key (hash). A block can be any sort of data, and does not necessarily have any sort of format associated with it. An object, on the other hand, refers to a block that follows the Merkle DAG protobuf data format. It can be parsed and manipulated via the `ipfs object` command. Any given hash may represent an object or a block. 40 | 41 | ## Create a block from scratch 42 | 43 | Creating your own blocks is easy! Simply put your data in a file and run `ipfs block put ` on it. Or you can pipe your file data into `ipfs block put`, like so: 44 | 45 | ```bash 46 | echo "This is some data" | ipfs block put 47 | > QmfQ5QAjvg4GtA3wg3adpnDJug8ktA1BxurVqBD8rtgVjM 48 | 49 | ipfs block get QmfQ5QAjvg4GtA3wg3adpnDJug8ktA1BxurVqBD8rtgVjM 50 | > This is some data 51 | ``` 52 | 53 | Note: When making your own block data, you won't be able to read the data with `ipfs cat`. This is because you are inputting raw data without the UnixFS data format. To read raw blocks, use `ipfs block get` as shown in the example. 54 | -------------------------------------------------------------------------------- /docs/images/awesome-ipfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/images/awesome-ipfs.png -------------------------------------------------------------------------------- /docs/images/ipfs-companion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/images/ipfs-companion.png -------------------------------------------------------------------------------- /docs/images/ipfs-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/images/ipfs-desktop.png -------------------------------------------------------------------------------- /docs/images/ipld-explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/images/ipld-explorer.png -------------------------------------------------------------------------------- /docs/images/jsipfs-add-gateway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/images/jsipfs-add-gateway.png -------------------------------------------------------------------------------- /docs/images/jsipfs-add-webui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/images/jsipfs-add-webui.png -------------------------------------------------------------------------------- /docs/images/jsipfs-webui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/images/jsipfs-webui.png -------------------------------------------------------------------------------- /docs/install/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Get Started 3 | description: There are several different ways you can install and interact with IPFS. Find out which one best suits your needs here. 4 | --- 5 | 6 | # Get Started 7 | 8 | IPFS is a collection of protocols, packages, and specifications that allow computers to send and receive data. Because of this, users can interact with and use IPFS in many different ways. A developer building network applications will use a different set of tools to interact with IPFS than someone who wants to store files on IPFS. Pick the one that best suits what you're here to do. 9 | 10 | Looking for an easy and opinionated way to get started with IPFS [Mainnet](../concepts/glossary.md#mainnet)? Try any of the options listed below: 11 | 12 | ## Desktop Users 13 | 14 | ### IPFS Desktop 15 | 16 | Anyone can use IPFS to store files in a _decentralized_ way. The easiest way to get up and running is by installing the IPFS Desktop application. This app has a Kubo node built-in and lets you interact with the network through a simple user interface. [Check it out →](./ipfs-desktop.md) 17 | 18 | ### IPFS Companion 19 | 20 | If your browser doesn't support IPFS yet, you can install an IPFS companion extension that will let you view decentralized web content! [Learn more →](./ipfs-companion.md) 21 | 22 | ### Deploy static sites to the IPFS network with a GitHub Action 23 | 24 | Do you want to quickly and easily automate the deployment of static websites to the IPFS network? See the [Deploy static sites to the IPFS network with GitHub Actions](../how-to/websites-on-ipfs/deploy-github-action.md), where you'll learn how to use [GitHub Actions](https://github.com/ipshipyard/ipfs-deploy-action) to automatically deploy static websites to the IPFS network. 25 | 26 | ## Infrastructure Tools 27 | 28 | ### Kubo 29 | 30 | Want to build decentralized applications and store your application data on IPFS? You'll likely want to install the command-line version of IPFS named Kubo. There's no GUI to deal with, just raw input and output through your terminal. [Find out more →](./command-line.md) 31 | 32 | ### IPFS Cluster 33 | 34 | Planning to set up several Kubo nodes within one network? You'll want to take a look at installing [IPFS Cluster](./server-infrastructure.md), which provides data orchestration across a swarm of IPFS daemons by allocating, replicating and tracking a global pinset distributed among multiple peers. 35 | 36 | ### Rainbow 37 | 38 | If you only want to run production-grade HTTP [Gateway](../concepts/glossary.md#gateway) service using the same software that is powering [public gateways](../concepts/public-utilities.md#public-ipfs-gateways), you may want to choose [Rainbow →](https://github.com/ipfs/rainbow/#readme). 39 | 40 | ### Someguy 41 | 42 | If you need to run your own [delegated routing](../concepts/glossary.md#delegated-routing) endpoint that hits both Amino DHT and IPNI, consider running [Someguy →](https://github.com/ipfs/someguy/#readme). 43 | 44 | ## Software Development 45 | 46 | ### Helia for TypeScript/JavaScript 47 | 48 | [Helia](https://github.com/ipfs/helia) is a new implementation of IPFS in JavaScript that is designed to be more modular and lightweight than the [deprecated js-ipfs project](https://github.com/ipfs/js-ipfs). 49 | 50 | To get started with a hands-on example, see [Helia 101](https://github.com/ipfs-examples/helia-examples/blob/main/examples/helia-101/README.md) in [ipfs-examples/helia-examples](https://github.com/ipfs-examples/helia-examples/tree/main). 51 | 52 | :::callout 53 | If you are looking for simple [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)-like API for use on the web, see [@helia/verified-fetch](https://www.npmjs.com/package/@helia/verified-fetch). 54 | ::: 55 | 56 | ### Boxo SDK for GO 57 | 58 | [Boxo](https://github.com/ipfs/boxo#readme) is a set of reference libraries for building IPFS applications and implementations in Go. 59 | 60 | To get started, see [boxo/examples](https://github.com/ipfs/boxo/tree/main/examples) or inspect how Boxo is used in [Kubo](https://github.com/ipfs/kubo), [Rainbow](https://github.com/ipfs/rainbow/), [Someguy](https://github.com/ipfs/someguy), [IPFS Cluster](https://github.com/ipfs-cluster/ipfs-cluster/), or non-Mainnet implementations like [Lotus](https://github.com/filecoin-project/lotus/). 61 | -------------------------------------------------------------------------------- /docs/install/images/command-line/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/command-line/apple-icon.png -------------------------------------------------------------------------------- /docs/install/images/command-line/linux-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/command-line/linux-icon.png -------------------------------------------------------------------------------- /docs/install/images/command-line/webui-connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/command-line/webui-connection.png -------------------------------------------------------------------------------- /docs/install/images/command-line/windows-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/command-line/windows-icon.png -------------------------------------------------------------------------------- /docs/install/images/command-line/wsl-running-ipfs-in-linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/command-line/wsl-running-ipfs-in-linux.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/apple-icon.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/desktop-explore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/desktop-explore.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/desktop-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/desktop-files.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/desktop-menubar-taskbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/desktop-menubar-taskbar.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/desktop-peers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/desktop-peers.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/desktop-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/desktop-settings.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/desktop-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/desktop-status.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-macos-dmg-file-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-macos-dmg-file-link.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-macos-drag-ipfs-drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-macos-drag-ipfs-drag.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-macos-force-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-macos-force-open.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-macos-ipfs-cannot-be-opened.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-macos-ipfs-cannot-be-opened.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-macos-ipfs-desktop-status-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-macos-ipfs-desktop-status-bar.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-macos-open-confirmation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-macos-open-confirmation.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-macos-save-dmg-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-macos-save-dmg-file.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-ubuntu-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-ubuntu-install.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-ubuntu-ipfs-running-status-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-ubuntu-ipfs-running-status-bar.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-ubuntu-search-window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-ubuntu-search-window.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-ubuntu-software-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-ubuntu-software-install.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-windows-download-exe-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-windows-download-exe-page.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-windows-install-finish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-windows-install-finish.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-windows-install-location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-windows-install-location.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-windows-install-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-windows-install-options.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/install-windows-ipfs-desktop-status-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/install-windows-ipfs-desktop-status-bar.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/linux-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/linux-icon.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/ubuntu-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/ubuntu-icon.png -------------------------------------------------------------------------------- /docs/install/images/ipfs-desktop/windows-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/install/images/ipfs-desktop/windows-icon.png -------------------------------------------------------------------------------- /docs/project/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Project 3 | description: Learn about the history, roadmap, current status and more for IPFS, the InterPlanetary File System. 4 | --- 5 | 6 | # The IPFS project 7 | 8 | Looking to get further involved with the vibrant IPFS community and ecosystem? Curious about how it all got started, or where we're headed? Learn how to get involved, the project history, and more. 9 | 10 | ## IPFS community and ecosystem 11 | 12 | :::callout 13 | The 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). Please contact [abuse@ipfs.tech](mailto:abuse@ipfs.tech) if you need to report a problem or address a grievance related to an abuse report. 14 | ::: 15 | 16 | The community and ecosystem around the IPFS project is large, diverse, and abounds with opportunities for involvement. Learn more in the [Community section](../community/README.md). 17 | 18 | ## History of IPFS 19 | 20 | Want to know how it all began? Learn the [history of the IPFS project](history.md). 21 | 22 | ## Repository guide 23 | 24 | IPFS is a big project, which means there are a lot of GitHub repos. If you're new to IPFS or just want a sense of what to check out first, use this quick guide to the most important and most frequently used [IPFS repositories](repository-guide.md). 25 | 26 | ## IPFS specifications 27 | 28 | [Technical specifications](https://github.com/ipfs/specs) for the IPFS protocol and its associated subsystems. 29 | 30 | ## Research 31 | 32 | Learn more about the exploratory research work and prototyping being done for inclusion in IPFS by exploring our [research repo on GitHub](https://github.com/ipfs/notes). 33 | 34 | ## Related projects 35 | 36 | IPFS is a highly modular project that is itself made out of many different protocols and tools. Learn more about the [IPFS-related projects](related-projects.md) under the overall support of Protocol Labs. 37 | 38 | ## Contribute to IPFS 39 | 40 | Thousands of people contribute to IPFS from all over the world — and that can include you! No matter your areas of interest or expertise, there are a number of ways that you can make an impact on the future of the Internet by [contributing to IPFS](../community/contribute/ways-to-contribute.md). 41 | -------------------------------------------------------------------------------- /docs/project/related-projects.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Related projects 3 | description: Learn about the modular projects that help make up IPFS, the InterPlanetary File System. 4 | --- 5 | 6 | # Related projects 7 | 8 | IPFS is a highly modular project that is itself made out of many different protocols and tools. Many of these exist as their own projects under the overall support of [Protocol Labs](https://protocol.ai). Learn more about them below. 9 | 10 | ## IPLD 11 | 12 | IPLD is the data model of the content-addressable web. It allows us to treat all hash-linked data structures as subsets of a unified information space, unifying all data models that link data with hashes as instances of IPLD. Learn more at [https://ipld.io/](https://ipld.io/). 13 | 14 | ## libp2p 15 | 16 | A modular network stack, libp2p enables you to run your network applications free from runtime and address services, independently of their location. Learn more at [http://libp2p.io/](http://libp2p.io/). 17 | 18 | ## IPFS Cluster 19 | 20 | IPFS Cluster provides data orchestration across a swarm of IPFS daemons by allocating, replicating and tracking a global pinset distributed among multiple peers. Learn more at [https://ipfscluster.io/](https://ipfscluster.io/). 21 | 22 | ## DNSLink 23 | 24 | DNSLink is a very simple protocol to link content and services directly from DNS, leveraging the powerful distributed architecture of DNS for a variety of systems that require internet-scale mutable names or pointers. Learn more at [http://dnslink.io/](http://dnslink.io/). 25 | 26 | ## Multiformats 27 | 28 | The Multiformats Project is a collection of protocols which aim to future-proof systems through self-describing format values that allow for interoperability and protocol agility. Learn more at [https://multiformats.io/](https://multiformats.io/). 29 | 30 | ## ProtoSchool 31 | 32 | Interactive tutorials on decentralized web protocols, designed to introduce you to decentralized web concepts, protocols, and tools. Complete code challenges right in your web browser and track your progress as you go. Learn more at [https://proto.school/](https://proto.school/). 33 | -------------------------------------------------------------------------------- /docs/quickstart/images/account-console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/quickstart/images/account-console.png -------------------------------------------------------------------------------- /docs/quickstart/images/gateway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/quickstart/images/gateway.png -------------------------------------------------------------------------------- /docs/quickstart/images/login-web3-storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/quickstart/images/login-web3-storage.png -------------------------------------------------------------------------------- /docs/quickstart/images/web3-file-after-upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/quickstart/images/web3-file-after-upload.png -------------------------------------------------------------------------------- /docs/quickstart/images/web3-file-uploaded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/quickstart/images/web3-file-uploaded.png -------------------------------------------------------------------------------- /docs/quickstart/images/web3-upload-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/quickstart/images/web3-upload-button.png -------------------------------------------------------------------------------- /docs/quickstart/images/web3-upload-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/quickstart/images/web3-upload-tab.png -------------------------------------------------------------------------------- /docs/quickstart/images/welcome-to-IPFS.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/docs/quickstart/images/welcome-to-IPFS.jpg -------------------------------------------------------------------------------- /docs/reference/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Reference 3 | description: Reference materials for IPFS tools and implementations 4 | --- 5 | 6 | # API & CLI reference 7 | 8 | Looking for user and developer references for IPFS? Find them here. 9 | 10 | ## HTTP Gateway 11 | 12 | The [Gateway API](http/gateway.md) provides implementation-agnostic HTTP interface for retrieving [content-addressed](../concepts/glossary.md#content-addressing) data from IPFS with regular HTTP clients and libraries. Use it for future-proofing your applications. 13 | 14 | ## Custom APIs 15 | 16 | Implementation and language specific interfaces can be used when [HTTP Gateway API](http/gateway.md) is not enough, or you need additional flexibility. 17 | 18 | ### Kubo 19 | 20 | Kubo is the earliest and most widely used implementation of IPFS, written in Go. 21 | 22 | Use it as: 23 | 24 | - **CLI tool** 25 | Working in the terminal? Here's where you'll find [Kubo's command-line interface (CLI) reference](kubo/cli.md). 26 | 27 | - **HTTP RPC endpoint** 28 | [RPC API v0 reference for Kubo](kubo/rpc.md) — control your node over HTTP using the same commands you can from the command line! 29 | 30 | - **Go library** 31 | See [Go API reference for Kubo](go/api.md), including the Go CoreAPI, the Go embedded client, and a Go client for interacting with Kubo over HTTP RPC API. 32 | 33 | 34 | ### Helia 35 | 36 | Helia is the next generation IPFS JavaScript implementation that applies lessons learned from [js-ipfs](https://github.com/ipfs/js-ipfs) to create a more modern, modular, and efficient codebase. 37 | 38 | Learn more about Helia in the [official GitHub repository](https://github.com/ipfs/helia). If you'd like to quickly get started developing with Helia, see the [Helia examples repository](https://github.com/ipfs-examples/helia-examples). 39 | 40 | :::warning 41 | ### js-ipfs project discontinued 42 | Development of the [js-ipfs project](https://github.com/ipfs/js-ipfs) has been discontinued in favor of [Helia](https://github.com/ipfs/helia). 43 | 44 | Because of this, js-ipfs content may be out of date, and will eventually be archived. 45 | 46 | ::: -------------------------------------------------------------------------------- /docs/reference/diagnostic-tools.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Diagnostic tools 3 | description: Diagnostic tools for debugging, troubleshooting, and developing with IPFS. 4 | --- 5 | 6 | # Diagnostic tools 7 | 8 | Here are several tools you can use to investigate and diagnose common issues with IPFS. 9 | 10 | ## IPLD Explorer 11 | 12 | [IPLD Explorer](https://explore.ipld.io/) allows you to visualize and explore the [IPLD](../concepts/glossary.md#ipld) [DAG](../concepts/glossary.md#dag) representing a given [CID](../concepts/glossary.md#cid) or [CAR](../concepts/glossary.md#car) file. 13 | 14 | ## IPFS check 15 | 16 | [IPFS Check](https://check.ipfs.network/) helps determine the retrievability of a CID from IPFS [Mainnet](../concepts/glossary.md#mainnet), either from a specific [peer](../concepts/glossary.md#peer) given a [multiaddress](../concepts/glossary.md#multiaddr), or from multiple providers. 17 | 18 | @[youtube](XeNOQDOrdC0) 19 | 20 | Each error type output by the tool can indicate a solution to your problem: 21 | 22 | - **Could not connect to the multiaddr** indicates that machines on the internet cannot talk to your machine. Fix your firewall, add port forwarding, or use a relay. 23 | - **Could not find address in the DHT** indicates that your machine is either not connected to the [Amino](../concepts/glossary.md#amino) DHT (even as a client), or it is not advertising the address that you are using to test. 24 | - **Multihash not advertised in the DHT** indicates that your machine has not advertised that it has the requested content in the Amino DHT. 25 | - **Peer has not responded that it has the CID** indicates that your node cannot find the block that you believe it has, or that there may be some other sort of network latency. 26 | 27 | ## CID inspector 28 | 29 | [CID inspector](http://cid.ipfs.tech/) breaks down a given CID into information that can be useful for understanding CIDs. Specifically, the tool provides: 30 | 31 | - A human-readable form of the CID 32 | - Information on the CID components 33 | - The length of the binary and Base32 encoded CID 34 | - The CIDv1 representation, if applicable 35 | 36 | :::callout 37 | Learn more about CID concepts, including components and versions in the [content addressing concepts guide](../concepts/content-addressing.md). 38 | ::: 39 | 40 | ## IPFS Gateway Checker 41 | 42 | :::warning 43 | Community-operated IPFS HTTP Gateways may be abused for phishing, which will generally raise a browser alert. Before using a community-operated gateway, you can inspect the URL with a tool like [Google's Safe Browsing site status](https://transparencyreport.google.com/safe-browsing/search). 44 | ::: 45 | 46 | IPFS [Gateway Checker](https://ipfs.github.io/public-gateway-checker/) provides status information for public IPFS gateways. This information is useful in deciding on which public gateway provider to use, or troubleshooting problems with your current public gateway provider. 47 | 48 | ## DAG builder visualiser 49 | 50 | [DAG builder visualiser](https://dag.ipfs.tech/) allows you to upload a CAR file and visualize it as a DAG. You can toggle parameters that determine how the DAG will be visualized, such as typ (Balanced, Trickle, Flat) and max amount of children. 51 | 52 | ## CAR Builder 53 | 54 | [CAR Builder](https://car.ipfs.io/) allows you to upload a data file and export it as an IPFS CAR file. The tool automatically chunks and hashes your files to automatically produce an IPFS compatible content-addressed archive. 55 | -------------------------------------------------------------------------------- /docs/reference/http/api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: HTTP APIs for IPFS 3 | description: HTTP APIs provided by IPFS implementations. 4 | --- 5 | 6 | # HTTP APIs 7 | 8 | 21 | 22 | - [HTTP Gateway](../../reference/http/gateway.md): implementation-agnostic interface for retrieving [content-addressed](../../concepts/glossary.md#content-addressing) data from IPFS 23 | - [Kubo RPC API v0](../../reference/kubo/rpc.md): RPC for managing Kubo IPFS nodes 24 | -------------------------------------------------------------------------------- /docs/reference/js/api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IPFS in JS 3 | description: Developer resources for working in JavaScript with IPFS, the InterPlanetary File System. 4 | --- 5 | 6 | # IPFS in JavaScript 7 | 8 | Developers can get started with IPFS in JavaScript (JS) using several options: 9 | 10 | - [IPFS Helia](https://helia.io): a lean, modular, and modern implementation of IPFS for the JS and browser environment 11 | - [@helia/verified-fetch](https://github.com/ipfs/helia-verified-fetch/tree/main/packages/verified-fetch): A [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)-like API for obtaining verified & trustless IPFS content on the web 12 | - [js-kubo-rpc-client](https://github.com/ipfs/js-kubo-rpc-client): A JS client library for the [Kubo RPC API](../kubo/rpc.md) 13 | 14 | ## Get started 15 | 16 | ### Helia 17 | 18 | New to IPFS Helia? The [Helia 101 example](https://github.com/ipfs-examples/helia-examples/tree/main/examples/helia-101) will walk you through spawning a Helia node, adding a file, and `cat`-ing the file CID both locally and through an IPFS gateway. More advanced Helia examples can be found [here](https://github.com/ipfs-examples/helia-examples/tree/main). 19 | 20 | ### js-kubo-rpc-client 21 | 22 | To get started with the js-kubo-rpc-client, do the following: 23 | 24 | 1. Ensure that you have [kubo](https://github.com/ipfs/kubo) running. Since we're working with Node.js, you can [install kubo using npm](https://www.npmjs.com/package/kubo). 25 | 1. Next, [install the client using `npm`, or load it as a browser script tag](https://github.com/ipfs/js-kubo-rpc-client#install). 26 | 1. Then, consult the [command reference](https://github.com/ipfs/js-kubo-rpc-client#usage) for usage information. 27 | -------------------------------------------------------------------------------- /docs/reference/kubo-rpc-cli.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Kubo RPC API clients 3 | description: List of Kubo RPC API clients. 4 | --- 5 | 6 | # Kubo RPC API clients 7 | 8 | When a Kubo IPFS node is running as a daemon, it exposes an HTTP RPC API that allows you to control the node and run the same commands you can from the command line. To learn more about the RPC API, see the [Kubo RPC API v0 reference](./kubo/rpc.md). 9 | 10 | RPC API clients are available in multiple languages, and are listed below. You can request that additional clients be added to this list by [opening an issue in ipfs/ipfs-docs](https://github.com/ipfs/ipfs-docs/issues/new?assignees=&labels=need%2Ftriage&projects=&template=open_an_issue.md&title=). 11 | 12 | 13 | | Language | Client library | Status | 14 | |---------------|-----------------------------------------------------------|---------------------| 15 | | Go | [ipfs/kubo/client/rpc](https://pkg.go.dev/github.com/ipfs/kubo/client/rpc) | Active | 16 | | JavaScript | [ipfs/js-kubo-rpc-client](https://www.npmjs.com/package/kubo-rpc-client) | Active | 17 | | Java | [ipfs-shipyard/java-ipfs-http-client](https://github.com/ipfs-shipyard/java-ipfs-http-client) | Active | 18 | | Python | [ipfs-shipyard/py-ipfs-http-client](https://github.com/ipfs-shipyard/py-ipfs-http-client) | Active | 19 | | | [aioipfs](https://gitlab.com/cipres/aioipfs) | Active | 20 | | Scala | [ipfs-shipyard/scala-ipfs-api](https://github.com/ipfs-shipyard/scala-ipfs-api) | Inactive | 21 | | Clojure | [keorn/clj-ipfs-http-client](https://github.com/keorn/clj-ipfs-http-client) | Inactive | 22 | | Clojurescript | [district0x/cljs-ipfs-http-client](https://github.com/district0x/cljs-ipfs-http-client) | Inactive | 23 | | Haskell | [davidar/hs-ipfs-api](https://github.com/davidar/hs-ipfs-api) | Inactive | 24 | | Swift | [ipfs-shipyard/swift-ipfs-http-client](https://github.com/ipfs-shipyard/swift-ipfs-http-client) | Inactive | 25 | | CommonLisp | [WeMeetAgain/cl-ipfs-api](https://github.com/WeMeetAgain/cl-ipfs-api) | Inactive | 26 | | Rust | [ferristseng/rust-ipfs-api](https://github.com/ferristseng/rust-ipfs-api) | Inactive | 27 | | | [gkbrk/rust-ipfs-api](https://github.com/gkbrk/rust-ipfs-api) | Inactive | 28 | | | [rmnoff/rust-ipfs-api](https://github.com/rmnoff/rust-ipfs-api) | Inactive | 29 | | | [rschulman/rust-ipfs-api](https://github.com/rschulman/rust-ipfs-api) | Inactive | 30 | | Ruby | [Fryie/ipfs-ruby](https://github.com/Fryie/ipfs-ruby) | Inactive | 31 | | | [tbenett/ruby-ipfs-http-client](https://github.com/tbenett/ruby-ipfs-http-client) | Inactive | 32 | | Mac Automator | [NeoTeo/ipfs-osx-service](https://github.com/NeoTeo/ipfs-osx-service) | Inactive | 33 | | Pharo | [khinsen/ipfs-pharo](https://github.com/khinsen/ipfs-pharo) | Inactive | 34 | | PHP | [EdouardCourty/ipfs-php](https://github.com/EdouardCourty/ipfs-php) | Active | 35 | | C# | [ipfs-shipyard/net-ipfs-http-client](https://github.com/ipfs-shipyard/net-ipfs-http-client) | Active | 36 | | | [jeremy-ellis-tech/net-ipfs-http-client](https://github.com/jeremy-ellis-tech/net-ipfs-http-client) | Inactive | 37 | | | [richardschneider/net-ipfs-http-client](https://github.com/richardschneider/net-ipfs-http-client) | Inactive | 38 | | C++ | [vasild/cpp-ipfs-api](https://github.com/vasild/cpp-ipfs-api) | Active | 39 | | Erlang | [hendry19901990/erlang-ipfs-http-client](https://github.com/hendry19901990/erlang-ipfs-http-client) | Inactive | 40 | | Scheme | [siiky/ipfs.scm](https://git.sr.ht/~siiky/ipfs.scm) | Active | 41 | | Lua | [siiky/ipfs.lua](https://git.sr.ht/~siiky/ipfs.lua) | Active | 42 | | Elixir | [bahner/ex-ipfs](https://github.com/bahner/ex-ipfs) | Active | 43 | -------------------------------------------------------------------------------- /docs/reference/kubo/generate-cli-docs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Updates /docs/reference/kubo/cli.md from the locally installed kubo (go-ipfs). 3 | # TODO: Structure this around command groups (dag, object, files, etc.) 4 | 5 | exec &> ./cli.md 6 | 7 | VER="$(ipfs version -n)" 8 | echo "--- 9 | title: \"Kubo CLI\" 10 | description: API documentation for the Kubo command-line executable. 11 | --- 12 | 13 | # Kubo command-line 14 | 15 | ::: tip Generated on $(date +"%Y-%m-%d %T"), from kubo $VER 16 | This document was autogenerated from CLI help text in [kubo $VER](https://github.com/ipfs/kubo/releases/tag/v${VER}) 17 | For issues and support, check out the [generate-cli-docs.sh](https://github.com/ipfs/ipfs-docs/blob/main/docs/reference/kubo/generate-cli-docs.sh) script on GitHub. 18 | ::: 19 | 20 | 21 | 22 | IPFS can run in either _online_ or _offline_ mode. Online mode is when you have IPFS running separately as a daemon process. If you do not have an IPFS daemon running, you are in offline mode. Some commands, like \`ipfs swarm peers\`, are only supported when online. 23 | 24 | The [command-line quickstart guide](/how-to/command-line-quick-start/#take-your-node-online) explains how to start the IPFS daemon and take your node online. 25 | 26 | " 27 | 28 | echo " 29 | ### Alignment with Kubo RPC API 30 | 31 | Every command usable from the CLI is also available through the [RPC API v0](/reference/kubo/rpc). For example: 32 | 33 | \`\`\`sh 34 | > ipfs swarm peers 35 | /ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ 36 | /ip4/104.236.151.122/tcp/4001/p2p/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx 37 | /ip4/104.236.176.52/tcp/4001/p2p/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z 38 | 39 | > curl -X POST http://127.0.0.1:5001/api/v0/swarm/peers 40 | { 41 | \"Strings\": [ 42 | \"/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ\", 43 | \"/ip4/104.236.151.122/tcp/4001/p2p/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx\", 44 | \"/ip4/104.236.176.52/tcp/4001/p2p/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z\", 45 | ] 46 | } 47 | \`\`\` 48 | 49 | " 50 | printf "\n" 51 | ipfs commands | while read line ; do 52 | printf "## $line\n\n\`\`\`\n" 53 | $line --help 54 | printf "\`\`\`\n\n" 55 | done 56 | -------------------------------------------------------------------------------- /images/add-new-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/images/add-new-page.png -------------------------------------------------------------------------------- /images/add-new-section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/images/add-new-section.png -------------------------------------------------------------------------------- /images/basics-and-concepts-sections.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/images/basics-and-concepts-sections.png -------------------------------------------------------------------------------- /images/create-new-branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/images/create-new-branch.png -------------------------------------------------------------------------------- /images/ipfs-docs-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/images/ipfs-docs-header.png -------------------------------------------------------------------------------- /images/source-control.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ipfs/ipfs-docs/d6152c082d52b499efca2eb4a87f8c40ca1e46bc/images/source-control.png -------------------------------------------------------------------------------- /mlc_pull_req_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "httpHeaders": [ 3 | { 4 | "urls": ["https://github.com/", "https://guides.github.com/", "https://help.github.com/", "https://docs.github.com/"], 5 | "headers": { 6 | "Accept-Encoding": "zstd, br, gzip, deflate" 7 | } 8 | } 9 | ], 10 | "ignorePatterns": [ 11 | { 12 | "pattern": "^[^/]+$" 13 | } 14 | ], 15 | "aliveStatusCodes": [200, 206, 429] 16 | } 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ipfs-docs", 3 | "version": "2.0.0", 4 | "description": "IPFS Docs platform", 5 | "author": "cwaring", 6 | "license": "MIT", 7 | "devDependencies": { 8 | "@centerforopenscience/markdown-it-video": "^1.0.0", 9 | "@vuepress/plugin-active-header-links": "^1.9.10", 10 | "@vuepress/plugin-back-to-top": "^1.9.10", 11 | "@vuepress/plugin-google-analytics": "^1.9.10", 12 | "@vuepress/plugin-html-redirect": "^0.2.1", 13 | "@vuepress/plugin-last-updated": "^1.9.8", 14 | "@vuepress/plugin-search": "^1.9.8", 15 | "husky": "^8.0.3", 16 | "lint-staged": "^14.0.1", 17 | "markdown-it-deflist": "^2.1.0", 18 | "markdown-it-footnote": "^3.0.3", 19 | "markdown-it-image-lazy-loading": "^1.2.0", 20 | "markdown-it-imsize": "^2.0.1", 21 | "markdown-it-task-lists": "^2.1.1", 22 | "markdown-it-video": "^0.6.3", 23 | "prettier": "^3.0.3", 24 | "stylus-supremacy": "^2.17.3", 25 | "vuepress": "^1.9.10", 26 | "vuepress-plugin-canonical": "^1.0.0", 27 | "vuepress-plugin-chunkload-redirect": "^1.0.3", 28 | "vuepress-plugin-clean-urls": "^1.1.2", 29 | "vuepress-plugin-ipfs": "^1.0.2", 30 | "vuepress-plugin-mermaidjs": "^1.9.1", 31 | "vuepress-plugin-robots": "^1.0.1", 32 | "vuepress-plugin-seo": "^0.2.0", 33 | "vuepress-plugin-sitemap": "^2.3.1" 34 | }, 35 | "prettier": { 36 | "arrowParens": "avoid", 37 | "bracketSpacing": true, 38 | "jsxBracketSameLine": true, 39 | "jsxSingleQuote": false, 40 | "printWidth": 80, 41 | "quoteProps": "as-needed", 42 | "semi": false, 43 | "singleQuote": true, 44 | "tabWidth": 2, 45 | "trailingComma": "none", 46 | "useTabs": false 47 | }, 48 | "lint-staged": { 49 | "*.{js,json,css,less,scss,html,md,vue}": [ 50 | "prettier --write" 51 | ], 52 | "*.styl": [ 53 | "stylus-supremacy format --replace" 54 | ] 55 | }, 56 | "husky": { 57 | "hooks": { 58 | "pre-commit": "lint-staged" 59 | } 60 | }, 61 | "scripts": { 62 | "start": "NODE_OPTIONS=--openssl-legacy-provider npm run docs:dev", 63 | "test": "echo \"Error: no test specified\" && exit 1", 64 | "format:styles": "stylus-supremacy format ./docs/.vuepress/**/*.styl --replace", 65 | "docs:dev": "vuepress dev docs", 66 | "docs:build": "NODE_OPTIONS=--openssl-legacy-provider vuepress build docs" 67 | }, 68 | "dependencies": { 69 | "@adamdehaven/vuepress-plugin-custom-tooltip": "^1.4.3", 70 | "vue-tabs-component": "^1.5.0", 71 | "vuepress-plugin-tabs": "^0.3.0" 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /tools/http-api-docs/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Hector Sanjuan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /tools/http-api-docs/Makefile: -------------------------------------------------------------------------------- 1 | all: install 2 | install: 3 | GO111MODULE=on go install ./http-api-docs 4 | -------------------------------------------------------------------------------- /tools/http-api-docs/README.md: -------------------------------------------------------------------------------- 1 | # http-api-docs 2 | 3 | [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) 4 | [![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech/) 5 | [![standard-readme compliant](https://img.shields.io/badge/standard--readme-OK-green.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) 6 | [![Build Status](https://travis-ci.com/ipfs/http-api-docs.svg?branch=master)](https://travis-ci.org/ipfs/http-api-docs) 7 | 8 | > A generator for Kubo (go-ipfs) RPC `/api/v0` endpoints documentation. 9 | 10 | Note: This is just the generator for the docs that are available on https://docs.ipfs.tech/reference/kubo/rpc/ 11 | 12 | The original docs are written in Markdown format and are available for community contributions here: https://github.com/ipfs/ipfs-docs 13 | 14 | # Table of Contents 15 | 16 | - [http-api-docs](#http-api-docs) 17 | - [Table of Contents](#table-of-contents) 18 | - [Install](#install) 19 | - [Usage](#usage) 20 | - [Captain](#captain) 21 | - [Contribute](#contribute) 22 | - [License](#license) 23 | 24 | ## Install 25 | 26 | In order to build this project, you need to first install Go, clone this repo, and finally run `make install`: 27 | 28 | ```sh 29 | > git clone https://github.com/ipfs/http-api-docs "$(go env GOPATH)/src/github.com/ipfs/http-api-docs" 30 | > cd "$(go env GOPATH)/src/github.com/ipfs/http-api-docs" 31 | > make install 32 | ``` 33 | 34 | ## Usage 35 | 36 | After installing you can run: 37 | 38 | ``` 39 | > http-api-docs 40 | ``` 41 | 42 | This should spit out a Markdown document. This is exactly the `rpc.md` documentation at https://github.com/ipfs/ipfs-docs/blob/master/docs/reference/kubo/rpc.md, so you can redirect the output to just overwrite that file. 43 | 44 | ## Captain 45 | 46 | This project is captained by @hsanjuan. 47 | 48 | ## Contribute 49 | 50 | PRs accepted. 51 | 52 | Small note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. 53 | 54 | ## License 55 | 56 | MIT (C) Protocol Labs, Inc. 57 | -------------------------------------------------------------------------------- /tools/http-api-docs/endpoints_test.go: -------------------------------------------------------------------------------- 1 | package docs 2 | 3 | import "testing" 4 | 5 | func TestEndpoints(t *testing.T) { 6 | AllEndpoints() 7 | } 8 | -------------------------------------------------------------------------------- /tools/http-api-docs/formatter.go: -------------------------------------------------------------------------------- 1 | package docs 2 | 3 | import ( 4 | "bytes" 5 | 6 | cmds "github.com/ipfs/go-ipfs-cmds" 7 | ) 8 | 9 | // Formatter allows to implement generation of docs in different formats. 10 | type Formatter interface { 11 | GenerateIntro() string 12 | GenerateStatusIntro(status cmds.Status) string 13 | GenerateIndex(endp []*Endpoint) string 14 | GenerateEndpointBlock(endp *Endpoint) string 15 | GenerateArgumentsBlock(args []*Argument, opts []*Argument) string 16 | GenerateBodyBlock(args []*Argument) string 17 | GenerateResponseBlock(response string) string 18 | GenerateExampleBlock(endp *Endpoint) string 19 | } 20 | 21 | // GenerateDocs uses a formatter to generate documentation for every endpoint 22 | func GenerateDocs(api []*Endpoint, formatter Formatter) string { 23 | buf := new(bytes.Buffer) 24 | buf.WriteString(formatter.GenerateIntro()) 25 | 26 | for _, status := range []cmds.Status{cmds.Active, cmds.Experimental, cmds.Deprecated, cmds.Removed} { 27 | endpoints := InStatus(api, status) 28 | if len(endpoints) == 0 { 29 | continue 30 | } 31 | buf.WriteString(formatter.GenerateStatusIntro(status)) 32 | for _, endp := range endpoints { 33 | buf.WriteString(formatter.GenerateEndpointBlock(endp)) 34 | buf.WriteString(formatter.GenerateArgumentsBlock(endp.Arguments, endp.Options)) 35 | buf.WriteString(formatter.GenerateBodyBlock(endp.Arguments)) 36 | buf.WriteString(formatter.GenerateResponseBlock(endp.Response)) 37 | buf.WriteString(formatter.GenerateExampleBlock(endp)) 38 | } 39 | } 40 | return buf.String() 41 | } 42 | -------------------------------------------------------------------------------- /tools/http-api-docs/http-api-docs/main.go: -------------------------------------------------------------------------------- 1 | // This is an utility to generate documentation from go-ipfs commands 2 | package main 3 | 4 | import ( 5 | "fmt" 6 | 7 | docs "http-api-docs" 8 | ) 9 | 10 | func main() { 11 | endpoints := docs.AllEndpoints() 12 | formatter := new(docs.MarkdownFormatter) 13 | fmt.Println(docs.GenerateDocs(endpoints, formatter)) 14 | } 15 | -------------------------------------------------------------------------------- /tools/http-api-docs/http-api-docs/main_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "testing" 4 | 5 | func TestMain(t *testing.T) { 6 | main() 7 | } 8 | -------------------------------------------------------------------------------- /tools/http-api-docs/markdown_test.go: -------------------------------------------------------------------------------- 1 | package docs 2 | 3 | import "testing" 4 | 5 | func TestMarkdown(t *testing.T) { 6 | endpoints := AllEndpoints() 7 | formatter := new(MarkdownFormatter) 8 | GenerateDocs(endpoints, formatter) 9 | } 10 | --------------------------------------------------------------------------------