# Advanced Kubo Usage
# Working with Go
Kubo (go-ipfs) is the oldest implementation of IPFS. It is a command-line application, but can also be used as a library in other Go programs.
For more about using Kubo, see any of the following reference documents:
- Configuration reference (opens new window)
- Installing command completion (opens new window)
- Mounting IPFS with FUSE (opens new window)
- Installing plugins (opens new window)
For more technical information about building, debugging or using the API, see:
- Performance Debugging Guidelines (opens new window)
- IPFS API Implementation (opens new window)
- Connecting with Websockets (opens new window)
- Building on Windows (opens new window)
- Additional guides (opens new window)
If you plan to use Kubo as a package in your own Go application, you can take any of three main approaches:
- Use kubo (opens new window) to run Kubo IPFS directly in your own process.
- Use kubo RPC client (opens new window) to communicate with a Kubo IPFS daemon in a separate process via its HTTP RPC API (this is what Kubo does if a daemon is already running).
- Use other Go packages to communicate with the HTTP RPC API directly. See the RPC API reference.
# Go CoreAPI
CoreAPI interfaces (opens new window) for go-ipfs. Package iface defines IPFS Core API, which is a set of interfaces used to interact with IPFS nodes.
# Go embedded client
Package coreapi (opens new window) provides direct access to the core commands in IPFS. If you are embedding IPFS directly in your Go program, this package is the public interface you should use to read and write files or otherwise control IPFS. This package is experimental and subject to change.
If you are running IPFS as a separate process, you should use
go-ipfs-api to work with it via RPC. As we finalize the interfaces in this embedded client,
go-ipfs-api will transparently adopt them so you can use the same code with either package.
# Go HTTP clients
CoreAPI implementation using HTTP API (opens new window). This package is experimental and subject to change. For an old but stable Go HTTP client, use CoreAPI interfaces (opens new window).
This table is generated using the module
package-table(opens new window) with
Listing of the main go packages in the IPFS ecosystem:
# 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 your spin up and test environments quickly. Check them out → (opens new window).
A good starting place is the Use kubo as a library to spawn a node and add a file (opens new window).