# 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 Embedded Client
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 Kubo as a separate process, you should use the Kubo RPC Client (opens new window) to work with it via RPC.
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).