• Stars
    star
    148
  • Rank 249,983 (Top 5 %)
  • Language
    Go
  • License
    Other
  • Created almost 2 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A set of reference libraries for building IPFS applications and implementations in Go.


Boxo logo
BOXO: IPFS SDK for GO

A set of libraries for building IPFS applications and implementations in GO.

Official Part of IPFS Project Discourse Forum Matrix ci coverage GitHub release godoc reference


About

Boxo is a component library for building IPFS applications and implementations in Go.

Some scenarios in which you may find Boxo helpful:

  • You are building an application that interacts with the IPFS network
  • You are building an IPFS implementation
  • You want to reuse some components of IPFS such as its Kademlia DHT, Bitswap, data encoding, etc.
  • You want to experiment with IPFS

Boxo powers Kubo, which is the most popular IPFS implementation, so its code has been battle-tested on the IPFS network for years, and is well-understood by the community.

Motivation

TL;DR The goal of this repo is to help people build things. Previously users struggled to find existing useful code or to figure out how to use what they did find. We observed many running Kubo and using its HTTP RPC API. This repo aims to do better. We're taking the libraries that many were already effectively relying on in production and making them more easily discoverable and usable.

The maintainers primarily aim to help people trying to build with IPFS in Go that were previously either giving up or relying on the Kubo HTTP RPC API. Some of these people will end up being better served by IPFS tooling in other languages (e.g., Javascript, Rust, Java, Python), but for those who are either looking to write in Go or to leverage the set of IPFS tooling we already have in Go we’d like to make their lives easier.

We’d also like to make life easier on ourselves as the maintainers by reducing the maintenance burden that comes from being the owners on many repos and then use that time to contribute more to the community in the form of easier to use libraries, better implementations, improved protocols, new protocols, etc.

Boxo is not exhaustive nor comprehensive--there are plenty of useful IPFS protocols, specs, libraries, etc. that are not in Boxo. The goal of Boxo is to provide cohesive and well-maintained components for common IPFS use cases.

More details can also be found in the Rationale FAQ.

Scope

What kind of components does Boxo have?

Boxo includes high-quality components useful for interacting with IPFS protocols, public and private IPFS networks, and content-addressed data, such as:

  • Content routing (DHT, delegated content routing, providing)
  • Data transfer (gateways, Bitswap, incremental verification)
  • Naming and mutability (name resolution, IPNS)
  • Interacting with public and private IPFS networks
  • Working with content-addressed data

Boxo aims to provide a cohesive interface into these components. Note that not all of the underlying components necessarily reside in this respository.

Does Boxo == IPFS?

No. This repo houses some IPFS functionality written in Go that has been useful in practice, and is maintained by a group that has long term commitments to the IPFS project

Is everything related to IPFS in the Go ecosystem in this repo?

No. Not everything related to IPFS is intended to be in Boxo. View it as a starter toolbox (potentially among multiple). If you’d like to build an IPFS implementation with Go, here are some tools you might want that are maintained by a group that has long term commitments to the IPFS project. There are certainly repos that others maintain that aren't included here (e.g., ipfs/go-car) which are still useful to IPFS implementations. It's expected and fine for new IPFS functionality to be developed that won't be part of Boxo.

Consuming

Getting started

See examples.

If you are migrating to Boxo, see Migrating to Boxo.

Migrating to Boxo

Many Go modules under github.com/ipfs have moved here. Boxo provides a tool to ease this migration, which does most of the work for you:

  • cd into the root directory of your module (where the go.mod file is)
  • Run: go run github.com/ipfs/boxo/cmd/boxo-migrate@latest update-imports
    • This will upgrade your module to Boxo v0.8.0 and rewrite your import paths
  • Run: go run github.com/ipfs/boxo/cmd/boxo-migrate@latest check-dependencies
    • This will print unmaintained dependencies you still have
    • These aren't necessarily an immediate problem, but you should eventually get them out of your dependency graph

This tool only upgrades your module to Boxo v0.8.0, to minimize backwards-incompatible changes. Depending on the versions of IPFS modules before the upgrade, your code may require additional changes to build.

We recommend upgrading to v0.8.0 first, and then upgrading to the latest Boxo release.

If you encounter any challenges, please open an issue and Boxo maintainers will help you.

Deprecations & Breaking Changes

See RELEASE.md.

Development

Should I add my IPFS component to Boxo?

We happily accept external contributions! However, Boxo maintains a high quality bar, so code accepted into Boxo must meet some minimum maintenance criteria:

  • Actively maintained
    • Must be actively used by, or will be included in software that is actively used by, a significant number of users or production systems. Code that is not actively used cannot be properly maintained.
    • Must have multiple engineers who are willing and able to maintain the relevant code in Boxo for a long period of time.
    • If either of these changes, Boxo maintainers will consider removing the component from Boxo.
  • Adequately tested
    • At least with unit tests
    • Ideally also including integration tests with other components
  • Adequately documented
    • Godocs at minimum
    • Complex components should have their own doc.go or README.md describing the component, its use cases, tradeoffs, design rationale, etc.
  • If the maintainers are not Boxo maintainers, then the component must include a CODEOWNERS file with at least two code owners who can commit to reviewing PRs

If you have some experimental component that you think would benefit the IPFS community, we suggest you build the component in your own repository until it's clear that there's community demand for it, and then open an issue/PR in this repository to discuss including it in Boxo.

Release Process

See RELEASE.md.

Why is the code coverage so bad?

The code coverage of this repo is not currently representative of the actual test coverage of this code. Much of the code in this repo is currently covered by integration tests in Kubo. We are in the process of moving those tests here, and as that continues the code coverage will significantly increase.

General

Help

If you have questions, feel free to open an issue. You can also find the Boxo maintainers in Filecoin Slack at #Boxo-maintainers. (If you would like to engage via IPFS Discord or ipfs.io Matrix, please drop into the #ipfs-implementers channel/room or file an issue, and we'll get bridging from #Boxo-maintainers to these other chat platforms.)

What is the response time for issues or PRs filed?

New issues and PRs to this repo are usually looked at on a weekly basis as part of Kubo triage. However, the response time may vary.

What are some projects that depend on this project?

The exhaustive list is https://github.com/ipfs/boxo/network/dependents. Some notable projects include:

  1. Kubo, an IPFS implementation in Go
  2. Lotus, a Filecoin implementation in Go
  3. rainbow, a specialized IPFS gateway
  4. ipfs-check, checks IPFS data availability
  5. someguy, a dedicated Delegated Routing V1 server and client
  6. Bifrost Gateway, a dedicated IPFS Gateway daemon backed by a remote datastore

Governance and Access

See CODEOWNERS for the current maintainers list. Governance for graduating additional maintainers hasn't been established. Repo permissions are all managed through ipfs/github-mgmt.

Why is this named "Boxo"?

See #215.

Additional Docs & FAQs

See the wiki.

License

SPDX-License-Identifier: Apache-2.0 OR MIT

More Repositories

1

ipfs

Peer-to-peer hypermedia protocol
22,646
star
2

kubo

An IPFS implementation in Go
Go
15,905
star
3

js-ipfs

IPFS implementation in JavaScript
JavaScript
7,438
star
4

ipfs-desktop

An unobtrusive and user-friendly desktop application for IPFS on Windows, Mac and Linux.
JavaScript
5,842
star
5

awesome-ipfs

Community list of awesome projects, apps, tools, pinning services and more related to IPFS.
JavaScript
4,307
star
6

ipfs-companion

Browser extension that simplifies access to IPFS resources on the web
JavaScript
2,010
star
7

public-gateway-checker

Checks which public gateways are online or not
TypeScript
1,697
star
8

ipfs-webui

A frontend for an IPFS node.
JavaScript
1,470
star
9

specs

Technical specifications for the IPFS protocol stack
HTML
1,107
star
10

distributed-wikipedia-mirror

Putting Wikipedia Snapshots on IPFS
TypeScript
621
star
11

helia

An implementation of IPFS in JavaScript
TypeScript
568
star
12

go-ipfs-api

The go interface to ipfs's HTTP API
Go
452
star
13

community

Discussion and documentation on community practices
Shell
416
star
14

notes

IPFS Collaborative Notebook for Research
402
star
15

go-ds-crdt

A distributed go-datastore implementation using Merkle-CRDTs.
Go
378
star
16

ipget

Retrieve files over IPFS and save them locally.
Shell
353
star
17

in-web-browsers

Tracking the endeavor towards getting web browsers to natively support IPFS and content-addressing
345
star
18

camp

🏕 IPFS Camp is a 3 day hacker retreat designed for the builders of the Distributed Web.
JavaScript
313
star
19

ipfs-docs

📚IPFS documentation platform
Go
299
star
20

roadmap

IPFS Project && Working Group Roadmaps Repo
296
star
21

team-mgmt

IPFS Team Planning, Management & Coordination threads
JavaScript
267
star
22

go-ds-s3

An s3 datastore implementation
Go
236
star
23

go-datastore

key-value datastore interfaces
Go
219
star
24

go-bitswap

The golang implementation of the bitswap protocol
Go
214
star
25

devgrants

The IPFS Grant platform connects funding organizations with builders and researchers in the IPFS community.
165
star
26

iptb

InterPlanetary TestBed 🌌🛌
Go
161
star
27

go-cid

Content ID v1 implemented in go
Go
156
star
28

js-ipfsd-ctl

Control an IPFS daemon (go-ipfs or js-ipfs) using JavaScript!
TypeScript
149
star
29

papers

IPFS Papers (not specs)
TeX
145
star
30

ipfs-update

An updater tool for Kubo IPFS binary
Go
136
star
31

infra

Tools and systems for the IPFS community
Shell
129
star
32

go-ipfs-http-client

[archived] Legacy Kubo RPC client, use kubo/client/rpc instead.
Go
108
star
33

go-unixfs

Implementation of a unix-like filesystem on top of an ipld merkledag
Go
107
star
34

ipfs-gui

Creating standards and patterns for IPFS that are simple, accessible, reusable, and beautiful
104
star
35

go-graphsync

Initial Implementation Of GraphSync Wire Protocol
Go
100
star
36

pinning-services-api-spec

Standalone, vendor-agnostic Pinning Service API for IPFS ecosystem
Makefile
99
star
37

aegir

AEgir - Automated JavaScript project building
JavaScript
93
star
38

js-dag-service

Library for storing and replicating hash-linked data over the IPFS network.
TypeScript
93
star
39

js-ipfs-unixfs

JavaScript implementation of IPFS' unixfs (a Unix FileSystem representation on top of a MerkleDAG)
TypeScript
85
star
40

go-merkledag

The go-ipfs merkledag 'service' implementation
Go
81
star
41

js-ipfs-repo

Implementation of the IPFS Repo spec in JavaScript
JavaScript
79
star
42

js-ipns

Utilities for creating, parsing, and validating IPNS records
TypeScript
74
star
43

js-datastore-s3

Datastore implementation with S3 backend
TypeScript
72
star
44

js-ipfs-bitswap

JavaScript implementation of Bitswap 'data exchange' protocol used by IPFS
TypeScript
65
star
45

go-ipld-format

IPLD Node and Resolver interfaces in Go
Go
61
star
46

apps

Coordinating writing apps on top of ipfs, and their concerns.
59
star
47

go-log

A logging library used by go-ipfs
Go
56
star
48

go-ipld-git

ipld handlers for git objects
Go
54
star
49

fs-repo-migrations

Migrations for the filesystem repository of ipfs clients
Go
54
star
50

go-dnslink

dnslink resolution in go-ipfs
Go
53
star
51

go-ds-badger

Datastore implementation using badger as backend.
Go
53
star
52

go-ipfs-blockstore

[ARCHIVED] This module provides a thin wrapper over a datastore and provides caching strategies.
Go
49
star
53

ipfs-blog

IPFS Blog & News
Vue
48
star
54

distributions

Legacy dist.ipfs.tech website and artifact build tools. Currently only used for notarizing builds of Kubo and IPFS Cluster.
Less
48
star
55

go-ipfs-cmds

IPFS commands package
Go
47
star
56

go-mfs

An in memory model of a mutable IPFS filesystem
Go
46
star
57

local-offline-collab

Local Offline Collaboration Special Interest Group
46
star
58

newsletter

Prepare and store the IPFS Newsletter
44
star
59

go-ds-flatfs

A datastore implementation using sharded directories and flat files to store data
Go
44
star
60

go-ipld-eth

Plugin of the Go IPFS Client for Ethereum Blockchain IPLD objects
Go
43
star
61

dht-node

[ARCHIVED] Run just an ipfs dht node (Or many nodes at once!)
Go
41
star
62

npm-kubo

Install Kubo (go-ipfs) from NPM
JavaScript
40
star
63

go-ipns

Utilities for creating, parsing, and validating IPNS records
Go
39
star
64

interface-go-ipfs-core

[ARCHIVED] this interface is now part of boxo and kubo/client/rpc
Go
38
star
65

dir-index-html

Directory listing HTML for go-ipfs gateways
HTML
38
star
66

rainbow

A specialized IPFS HTTP gateway
Go
37
star
67

go-ds-leveldb

An implementation of go-datastore using leveldb
Go
35
star
68

go-ipfs-files

An old files library, please migrate to `github.com/ipfs/go-libipfs/files` instead.
Go
33
star
69

interop

Interoperability tests for IPFS Implementations (on-the-wire interop)
JavaScript
32
star
70

ipfs-website

Official IPFS Project website
Vue
32
star
71

protons

Protocol Buffers for Node.js and the browser without eval
TypeScript
32
star
72

go-ipld-cbor

A cbor implementation of the go-ipld-format
Go
31
star
73

go-ds-sql

An implementation of ipfs/go-datastore that can be backed by any SQL database.
Go
31
star
74

go-ipfs-chunker

go-ipfs-chunkers provides Splitter implementations for data before being ingested to IPFS
Go
31
star
75

go-blockservice

The go 'blockservice' implementation, combines local and remote storage seamlessly
Go
27
star
76

service-worker-gateway

[WIP EXPERIMENT] IPFS Gateway implemented in Service Worker
TypeScript
25
star
77

go-ipld-eth-import

🌐 Bring Ethereum to IPFS 🌐
Go
25
star
78

ipld-explorer-components

React components for https://explore.ipld.io and ipfs-webui
TypeScript
24
star
79

interface-datastore

datastore interface
JavaScript
22
star
80

js-ipfs-utils

IPFS utils
JavaScript
22
star
81

metrics

Regularly collect and publish metrics about the IPFS ecosystem
JavaScript
21
star
82

js-ipfs-merkle-dag

[DEPRECATED]
JavaScript
20
star
83

js-datastore-level

Datastore implementation with level(up/down) backend
TypeScript
19
star
84

go-ipfs-example-plugin

Demo plugin for Kubo IPFS daemon
Go
19
star
85

benchmarks

Benchmarking for IPFS
JavaScript
19
star
86

ipfs-ds-convert

Command-line tool for converting datastores (e.g. from FlatFS to Badger)
Go
18
star
87

go-ipfs-provider

Go
17
star
88

js-kubo-rpc-client

A client library for the Kubo RPC API
JavaScript
17
star
89

go-pinning-service-http-client

An IPFS Pinning Service HTTP Client
Go
17
star
90

go-ipfs-gateway

Go implementation of the HTTP-to-IPFS gateway -- currently lives in go-ipfs
16
star
91

go-ipld-zcash

An implementation of the zcash block and transaction datastructures for ipld
Go
16
star
92

ipfs-camp-2022

Conference content and other resources for IPFS Camp 2022 in Lisbon, Portugal
16
star
93

go-ipfs-config

[ARCHIVED] config is now part of go-ipfs repo
Go
16
star
94

mobile-design-guidelines

Making IPFS work for mobile
15
star
95

js-datastore-core

Contains various implementations of the API contract described in interface-datastore
TypeScript
15
star
96

ecosystem-directory

Interactive showcase of projects and products built using IPFS, the InterPlanetary File System.
HTML
15
star
97

js-datastore-fs

Datastore implementation with file system backend
TypeScript
14
star
98

go-namesys

go-namesys provides publish and resolution support for the /ipns/ namespace in go-ipfs
Go
14
star
99

helia-unixfs

UnixFS commands for helia
TypeScript
14
star
100

js-stores

TypeScript interfaces used by IPFS internals
TypeScript
14
star