# go-ipfs crash course
- Normally used as a binary that runs on your machine with CLI + HTTP API interfaces
- More advanced usage by utilizing go-ipfs as a library or build go plugins is possible
- Doing a walkthrough with the CLI, but almost anything you can do with the CLI can also be done with the HTTP API
## Terminals
- Start up two terminals
- `ipfs id`, we're running a libp2p node here are stats
- `ipfs add/get/cat/ls`
- `ipfs add file.txt` + `ipfs cat Qm...`
- `ipfs add file.txt --chunker=buzhash` + `ipfs cat Qm...` same results
- Gateway, showing 127.0.0.1:8080/ipfs/Qm...
- `ipfs add -r dir`
- `ipfs ls Qm...`
- show on gateway
- `ipfs pin`
- `ipfs pin ls`
- `ipfs get bafy...`
- `ipfs pin ls` unchanged
- `ipfs pin add bafy... --offline` (i.e. no network since we already have it)
- `ipfs pin ls` shows data
- `ipfs swarm connect /p2p/peer...` p2p DNS
- `ipfs pubsub`
- If Time:
- `ipfs dag`
- `ipfs dag put/get`
- `ipfs dag import/export`
- DNSLink teaser
- IPNS