{"id":20747317,"url":"https://github.com/ether1project/go-ipfs","last_synced_at":"2026-04-16T15:03:19.999Z","repository":{"id":101311929,"uuid":"163698870","full_name":"Ether1Project/go-ipfs","owner":"Ether1Project","description":"(ethoFS Version - GO Deps)","archived":false,"fork":false,"pushed_at":"2019-01-01T04:56:58.000Z","size":27552,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-18T03:09:38.091Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ether1Project.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-31T21:41:23.000Z","updated_at":"2019-03-12T04:24:21.000Z","dependencies_parsed_at":"2023-07-27T01:47:15.486Z","dependency_job_id":null,"html_url":"https://github.com/Ether1Project/go-ipfs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ether1Project%2Fgo-ipfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ether1Project%2Fgo-ipfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ether1Project%2Fgo-ipfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ether1Project%2Fgo-ipfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ether1Project","download_url":"https://codeload.github.com/Ether1Project/go-ipfs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243043540,"owners_count":20226839,"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-11-17T08:12:41.849Z","updated_at":"2026-04-16T15:03:19.732Z","avatar_url":"https://github.com/Ether1Project.png","language":"Go","readme":"# Ungx-ed fork of go-ipfs\n\n[![GoDoc](https://godoc.org/github.com/ipsn/go-ipfs?status.svg)](https://godoc.org/github.com/ipsn/go-ipfs)\n\nThis repository is an unofficial fork of github.com/ipfs/go-ipfs, converted from a [`gx`](https://github.com/whyrusleeping/gx) based project to a plain Go project. The goal is to act as an IPFS library that can be imported and used from Go apps without the need of switching all dependency management over to `gx`. *As a bonus, this fork is [compatible with GoDoc](https://godoc.org/github.com/ipsn/go-ipfs)!*\n\nFor a rundown of why `gx` is not the best solution at the moment, please see the rationale section behind the [`ungx`](https://github.com/karalabe/ungx#why) project.\n\n## Differences from upstream\n\nUpstream [`go-ipfs`](github.com/ipfs/go-ipfs) is both a `gx` based project, as well as depends on many third party `gx` based packages. To use it in plain Go projects, all `gx` packages need to be resolved into their original canonical versions, or need to be converted into non-gx ones.\n\nThis fork uses the following logic to `ungx` go-ipfs:\n\n * If a dependency has a plain Go canonical version (e.g. `golang.org/x/net`), the dependency is converted from an IPFS multihash into its canonical path and vendored into the standard `vendor` folder. This ensures they play nice with the usual package managers.\n * If a dependency is *only* available as a `gx` project (e.g. `github.com/libp2p/go-libp2p`), the dependency is converted from an IPFS multihash into its canonical path, but is moved into the `gxlibs` folder within the main repository. This ensures external packages can import them.\n\nTwo caveats were also needed to enable this fork:\n\n * If multiple versions of the same plain Go dependency is found, these cannot be vendored in. In such cases, all clashing dependencies are embedded into the `gxlibs/gx/ipfs` folder with their original IPFS multihashes. This retains the original behavior whilst still permitting imports.\n * If an embedded dependency contains canonical path constraints (e.g. `golang.org/x/sys/unix`), these constraints are blindly deleted from the dependency sources. Unfortunately this is the only way to allow external code to import them without Go failing the build.\n\nThe ungx-ing process is done automatically for the `master` branch in a nightly Travis cron job from the [`ungx`](https://github.com/ipsn/go-ipfs/tree/ungx) branch in this repository. Upstream releases (i.e. tags) are not yet ungx-ed to prevent having to re-tag versions if a bug in `ungx` is discovered. Those will be added and tagged when the process is deemed reliable enough.\n\n## Demo\n\nThe *hello-world* of IPFS is retrieving the official welcome page from the network. With the IPFS command line client this looks something like:\n\n```\n$ ipfs cat QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB\nHello and Welcome to IPFS!\n\n██╗██████╗ ███████╗███████╗\n██║██╔══██╗██╔════╝██╔════╝\n██║██████╔╝█████╗  ███████╗\n██║██╔═══╝ ██╔══╝  ╚════██║\n██║██║     ██║     ███████║\n╚═╝╚═╝     ╚═╝     ╚══════╝\n[...]\n```\n\nDoing the same thing from Go is a bit more involved as it entails creating an ephemeral in-process IPFS node and using that as a gateway to retrieve the welcome page:\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\n\t\"github.com/ipsn/go-ipfs/core\"\n\t\"github.com/ipsn/go-ipfs/core/coreapi\"\n\t\"github.com/ipsn/go-ipfs/core/coreapi/interface\"\n)\n\nfunc main() {\n\t// Create a new IPFS network node\n\tnode, err := core.NewNode(context.TODO(), \u0026core.BuildCfg{Online: true})\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to start IPFS node: %v\", err)\n\t}\n\tpath, _ := iface.ParsePath(\"QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB\")\n\n\t// Resolve the IPFS welcome page\n\treader, err := coreapi.NewCoreAPI(node).Unixfs().Get(context.TODO(), path)\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to look up IPFS welcome page: %v\", err)\n\t}\n\t// Retrieve and print the welcome page\n\tblob, err := ioutil.ReadAll(reader)\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to retrieve IPFS welcome page: %v\", err)\n\t}\n\tfmt.Println(string(blob))\n}\n```\n\nHowever, after the dependencies are met, our pure Go IPFS code works flawlessly:\n\n```\n$ go get -v github.com/ipsn/go-ipfs/core\n$ go run ipfs.go\nHello and Welcome to IPFS!\n\n██╗██████╗ ███████╗███████╗\n██║██╔══██╗██╔════╝██╔════╝\n██║██████╔╝█████╗  ███████╗\n██║██╔═══╝ ██╔══╝  ╚════██║\n██║██║     ██║     ███████║\n╚═╝╚═╝     ╚═╝     ╚══════╝\n[...]\n```\n\n### Proper dependencies\n\nAlthough the above demo works correctly, running `go get -v github.com/ipsn/go-ipfs/core` is not for the faint of heart. It will place about 1193 packages into you `GOPATH` :scream:. A much better solution is to use your favorite dependency manager!\n\nDemo with `govendor`:\n\n```\n$ go get -u github.com/kardianos/govendor\n$ govendor init\n$ govendor fetch -v +missing\n$ go run ipfs.go\n[...]\n```\n\n## Credits\n\nThis repository is maintained by Péter Szilágyi ([@karalabe](https://github.com/karalabe)), but authorship of all code contained inside belongs to the upstream [go-ipfs](https://github.com/ipfs/go-ipfs) project.\n\n## License\n\n[Same as upstream](https://github.com/ipfs/go-ipfs#license) (MIT).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fether1project%2Fgo-ipfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fether1project%2Fgo-ipfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fether1project%2Fgo-ipfs/lists"}