# IPFS in Go

# Boxo SDK

Boxo (opens new window) is the Go SDK for building IPFS applications and custom implementations. It provides reusable building blocks that can be composed to fit your needs.

# Key packages

Content retrieval and exchange:

Data and storage:

Naming and resolution:

Network setup:

# Other Go packages in the IPFS ecosystem

Name Go Reference Description
Libp2p
go-libp2p (opens new window) Go Reference (opens new window) p2p networking library
go-libp2p-pubsub (opens new window) Go Reference (opens new window) pubsub built on libp2p
go-libp2p-kad-dht (opens new window) Go Reference (opens new window) dht-backed router
Multiformats
go-cid (opens new window) Go Reference (opens new window) CID implementation
go-multiaddr (opens new window) Go Reference (opens new window) multiaddr implementation
go-multihash (opens new window) Go Reference (opens new window) multihash implementation
go-multibase (opens new window) Go Reference (opens new window) multibase implementation
IPLD
go-block-format (opens new window) Go Reference (opens new window) block interfaces and implementations
go-ipld-format (opens new window) Go Reference (opens new window) IPLD interfaces
Datastores
go-datastore (opens new window) Go Reference (opens new window) datastore interfaces, adapters, and basic implementations
go-ds-flatfs (opens new window) Go Reference (opens new window) a filesystem-based datastore
go-ds-leveldb (opens new window) Go Reference (opens new window) a leveldb based datastore
go-ds-pebble (opens new window) Go Reference (opens new window) a pebble based datastore
Other
go-ipfs-cmds (opens new window) Go Reference (opens new window) CLI & HTTP commands library
go-log (opens new window) Go Reference (opens new window) logging framework

# Kubo RPC Client

If you have a running Kubo (opens new window) node, you can control it from Go using its /api/v0 HTTP RPC endpoint. This is the same interface used by the ipfs CLI when a daemon is already running.

Looking for an embedded/in-process IPFS API?

If you're considering embedding Kubo directly in your Go application via its internal CoreAPI, look at using the Boxo SDK instead. Boxo provides modern, modular building blocks that replace Kubo's internal CoreAPI for most use cases.

# Kubo reference docs

For more about configuring and running Kubo:

# Hands-on examples

There are use-case examples in the ipfs/kubo GitHub repository (opens new window). They're all self-contained projects that let you spin up and test environments quickly. Check them out (opens new window).

A good starting place is Use Kubo as a library to spawn a node and add a file (opens new window).