{"id":15152881,"url":"https://github.com/ipfs/interop","last_synced_at":"2025-09-30T01:31:21.506Z","repository":{"id":9355110,"uuid":"60432923","full_name":"ipfs/interop","owner":"ipfs","description":"Interoperability tests for IPFS Implementations (on-the-wire interop)","archived":true,"fork":false,"pushed_at":"2023-08-01T20:44:13.000Z","size":16206,"stargazers_count":32,"open_issues_count":29,"forks_count":15,"subscribers_count":31,"default_branch":"master","last_synced_at":"2024-10-29T11:00:27.840Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipfs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-04T22:28:55.000Z","updated_at":"2023-10-11T23:45:03.000Z","dependencies_parsed_at":"2024-06-18T18:41:21.020Z","dependency_job_id":"ab57cd16-b1dc-4853-be66-7bc99768ef59","html_url":"https://github.com/ipfs/interop","commit_stats":{"total_commits":223,"total_committers":28,"mean_commits":7.964285714285714,"dds":0.5291479820627802,"last_synced_commit":"69045952de574d2c1ab7d0a9ef0cfa0a2981c0b4"},"previous_names":[],"tags_count":54,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Finterop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Finterop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Finterop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Finterop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipfs","download_url":"https://codeload.github.com/ipfs/interop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222045243,"owners_count":16921940,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-26T16:40:58.871Z","updated_at":"2025-09-30T01:31:16.079Z","avatar_url":"https://github.com/ipfs.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ⚠️ This package is outdated and no longer maintained. ⚠️\n\nThis package contains tests between `{Kubo,js-ipfs} \u003c-\u003e {Kubo,js-ipfs}`.\n\n[Js-ipfs is no longer being maintained](https://github.com/ipfs/js-ipfs/issues/4336) and therefore Kubo \u003c-\u003e Helia [interop](https://github.com/ipfs/helia/tree/main/packages/interop) tests are used instead both within Helia and [within Kubo](https://github.com/ipfs/kubo/issues/10013) CI testing.\n\n# ipfs-interop \u003c!-- omit in toc --\u003e\n\n[![ipfs.io](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io)\n[![IRC](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)\n[![Discord](https://img.shields.io/discord/806902334369824788?style=flat-square)](https://discord.gg/ipfs)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/interop.svg?style=flat-square)](https://codecov.io/gh/ipfs/interop)\n[![CI](https://img.shields.io/github/workflow/status/ipfs/interop/test%20\u0026%20maybe%20release/master?style=flat-square)](https://github.com/ipfs/interop/actions/workflows/js-test-and-release.yml)\n\n\u003e Interoperability Tests for IPFS\n\n## Table of contents \u003c!-- omit in toc --\u003e\n\n- [Install](#install)\n- [Usage](#usage)\n  - [Run the tests](#run-the-tests)\n  - [Run a particular test locally](#run-a-particular-test-locally)\n- [Testing with different versions of go/js IPFS](#testing-with-different-versions-of-gojs-ipfs)\n  - [As a project](#as-a-project)\n  - [As environmental variables](#as-environmental-variables)\n  - [As a custom runtime](#as-a-custom-runtime)\n- [Releasing a new version](#releasing-a-new-version)\n- [Interop release process for when breaking changes are introduced](#interop-release-process-for-when-breaking-changes-are-introduced)\n- [License](#license)\n- [Contribute](#contribute)\n\n## Install\n\n```console\n$ npm i ipfs-interop\n```\n\nThis repository will be used for interop tests. Please jump into the issues if you'd like to help out setting this up!\n\n## Usage\n\n### Run the tests\n\n```console\n$ ipfs-interop\n```\n\n### Run a particular test locally\n\n```console\n$ node bin/ipfs-interop.js -- -t node --grep {substring-test-name}\n```\n\n## Testing with different versions of go/js IPFS\n\n### As a project\n\nThis module declares peer dependencies of `ipfs`, `ipfs-http-client`, `kubo-rpc-client` and `go-ipfs` so if you have `ipfs-interop` as a dependecy of your project, simply add the extra IPFS dependencies:\n\n```json\n{\n  \"name\": \"my-project\",\n  \"scripts\": {\n    \"interop\": \"ipfs-interop\"\n  },\n  \"dependencies\": {\n    \"go-ipfs\": \"...\",\n    \"ipfs\": \"...\",\n    \"ipfs-http-client\": \"...\",\n    \"ipfs-interop\": \"...\",\n    \"kubo-rpc-client\": \"...\"\n  }\n}\n```\n\nThen run:\n\n```console\n$ npm run interop\n```\n\n### As environmental variables\n\nSpecify the following environmental variables to control which versions of IPFS ipfs-interop uses when installed globally:\n\n- `IPFS_GO_EXEC` A path to a go-IPFS binary\n- `IPFS_JS_EXEC` A path to `/src/cli.js` inside a js-IPFS install\n- `IPFS_JS_MODULE` A path to a js-IPFS install\n- `IPFS_JS_HTTP_MODULE` A path to a ipfs-http-client install (optional)\n- `KUBO_RPC_MODULE` A path to a kubo-rpc-client install (optional)\n\nThen run:\n\n```console\n$ npm install -g ipfs-interop\n$ IPFS_GO_EXEC=/path IPFS_JS_EXEC=/path IPFS_JS_MODULE=/path IPFS_JS_HTTP_MODULE=/path ipfs-interop\n```\n\n### As a custom runtime\n\nIf you want to run interop on CI against specific repo and git revision of\ngo-ipfs or js-ipfs\\* then set everything up in `./scripts/custom-runtime.sh`\nand enable it by uncommenting `env:` `IPFS_(..)` definitions in `.github/workflows/test.yml`\n\nIf you want to test against unrelased things locally, make sure the same env\nvariables are set on your machine.\n\nFor example, to run pubsub tests against go-ipfs and js-ipfs revision defined\nin `./scripts/custom-runtime.sh`, one can:\n\n    export IPFS_GO_EXEC=/tmp/go-ipfs/cmd/ipfs/ipfs\n    export IPFS_JS_EXEC=/tmp/js-ipfs/packages/ipfs/src/cli.js\n    export IPFS_JS_MODULE=/tmp/js-ipfs/packages/ipfs/src/index.js\n    export IPFS_JS_HTTP_MODULE=/tmp/js-ipfs/packages/ipfs-http-client/src/index.js\n    export KUBO_RPC_MODULE=/tmp/kubo-rpc-client/src/index.js\n    ./scripts/custom-runtime.sh\n    node bin/ipfs-interop.js -- -t node --grep \"pubsub\"\n\n## Releasing a new version\n\nThis repo does not use aegir for releases.\nUse `npm` directly  and publish entire root (CI in go-ipfs requires it).\n\n    npm version [major|minor|patch]\n    npm publish\n    npm push origin \u0026\u0026 npm push origin v[N.N.N]\n\n## Interop release process for when breaking changes are introduced\n\n1. Get branches of go-ipfs and js-ipfs working together in interop locally using environment variables to point at the local versions\n2. In this repo make a branch containing the interop changes as well as setting the go/js-ipfs commit hashes to be used by CI. Merge to master.\n3. Update go-ipfs and js-ipfs branches to use interop/master instead of whatever is released\n4. Release go and js-ipfs (not necessarily together) and after each is released (or RC'd) bump interop to use the release instead of the commit hash\n5. Release interop\n6. Bump go and js-ipfs to use released interop instead of master\n\n## License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT ([LICENSE-MIT](LICENSE-MIT) / \u003chttp://opensource.org/licenses/MIT\u003e)\n\n## Contribute\n\nFeel free to join in. All welcome. Open an [issue](https://github.com/ipfs/js-ipfs-unixfs-importer/issues)!\n\nThis repository falls under the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs%2Finterop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipfs%2Finterop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs%2Finterop/lists"}