A C++ tool and library for piping files to Pinata's IPFS pinning service. Upload files, retrieve content, list pins, and delete pins with progress tracking and retries.
- Single/batch uploads with metadata and grouping
- Fetch IPFS content by hash
- List/delete pinned files
- Upload progress (speed, ETA)
- Error handling with retries
- Thread-safe CURL ops
- Config via
config.json
- Clone:
git clone https://github.com/genyleap/pinatapipe.git cd pinatapipe - Install deps:
- Ubuntu:
sudo apt install libcurl4-openssl-dev libjsoncpp-dev - macOS:
brew install curl jsoncpp
- Ubuntu:
- Build with PT:
mkdir build && cd build cmake .. -DUSE_JSON=true -DUSE_CURL=true make
Add config.json in the working directory:
{
"pinataApiKey": "your_pinata_api_key",
"pinataSecret": "your_pinata_secret_api_key"
}Note: Add config.json to .gitignore.
./pinatapipe <command> [args] [--verbose]- Upload:
./pinatapipe upload <file> [--group <name>] [--metadata '{"key":"value"}'] - Batch:
./pinatapipe batch <file1> <file2> ... [--group <name>] [--metadata '{"key":"value"}'] - Get:
./pinatapipe get <ipfs_hash> - List:
./pinatapipe list [--group <name>] - Delete:
./pinatapipe delete <ipfs_hash> - Options:
--verbose,--group
./pinatapipe upload file.txt --group mygroup --verbose
./pinatapipe batch img1.jpg img2.png --metadata '{"desc":"pics"}'
./pinatapipe get ipfs://QmHash#include "ipfs_client.hpp"
int main() {
auto config = Config::load();
if (!config) return 1;
IPFSClient client(*config);
auto result = client.upload({"file.txt"}, Json::Value());
if (result) std::cout << (*result)[0] << "\n";
return 0;
}Fork, branch (feature/yourfeature), commit, push, PR.