IPFS in 2026: Content-Addressed Storage That Actually Works
Why IPFS still matters in 2026
The web still runs on location-based addressing: you ask a DNS name for a server, and that server must be online. When AWS us-east-1 has a bad day, half the internet disappears. Governments still block domains at the DNS or IP level. IPFS flips this — you request content by its cryptographic hash (a CID), and any peer that has it can serve it. No single server, no single point of censorship.
What changed since 2022: the protocol stabilized, the Go implementation (now called Kubo) added QUIC transport, CIDv1 is default, HTTP gateway semantics are standardized, and a commercial pinning ecosystem makes persistence practical without running your own 24/7 node.
Core concepts (updated)
Content identifiers (CIDs) — CIDv1 is now default
Every piece of content gets a CID: a self-describing hash that includes the multicodec (content type), multihash algorithm, and version. Since Kubo 0.17 (2022), CIDv1 is the default. It looks like:
bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
That base32-encoded string tells you: bafy = CIDv1, be = raw binary / dag-pb, g = SHA-256, dyrz... = the hash. You can inspect any CID:
ipfs cid info bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
UnixFS and chunking — 256 KiB blocks, HAMT directories
Files larger than 256 KiB are split into 256 KiB blocks (configurable via --chunker=size-<N>), each gets its own CID, and a root CID links them via a Merkle DAG. Directories use HAMT (Hash Array Mapped Trie) sharding — introduced in go-ipfs 0.7.0 (2020) — which scales to millions of entries without a single giant metadata block. The UnixFS specification version does not directly map to this feature release.
IPNS — mutable pointers, now usable
IPNS (InterPlanetary Naming System) lets you publish a mutable pointer to a CID. Since Kubo 0.18, IPNS over PubSub can resolve in seconds instead of minutes, though performance varies by network conditions and PubSub was experimental for several releases. The --enable-pubsub-experiment flag may no longer be required in current Kubo versions (PubSub is enabled by default in recent releases). Publish a site:
ipfs name publish --key=my-site /ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
# Resolve later:
ipfs name resolve /ipns/k51qzi5uqu5dk... # or use the peer ID
Bitswap and QUIC — faster retrieval
Bitswap (the block-exchange protocol) now runs over libp2p QUIC by default (Kubo 0.24+), reducing handshake latency and improving NAT traversal. You'll see /ip4/.../udp/.../quic-v1 in ipfs swarm peers.
Running a node today: Kubo (go-ipfs)
The reference implementation is Kubo (formerly go-ipfs). Current stable: check the releases page for the latest version. Install (example command — replace with the current version from the releases page):
# Linux/macOS (official binary — check https://github.com/ipfs/kubo/releases for latest)
wget https://dist.ipfs.tech/kubo/v0.32.0/kubo_v0.32.0_linux-amd64.tar.gz
# or: brew install ipfs
tar -xzf kubo_v0.32.0_linux-amd64.tar.gz
cd kubo
sudo bash install.sh
ipfs init --profile=server # or 'badgerds' for low-memory
ipfs daemon --enable-gc
Key daemon flags for 2026:
- --enable-gc — automatic datastore garbage collection (essential)
- --routing=dhtclient — lighter than full DHT server mode
- --migration — auto-migrates legacy repos
Low-resource profile (Raspberry Pi, VPS with 1 GB RAM):
ipfs init --profile=badgerds,server
# badgerds uses BadgerDB instead of leveldb; ~40% less RAM
Pinning: keeping data available
The 2022 article's biggest gap: IPFS does not replicate automatically. If you add a file and your node goes offline, the content disappears unless someone else pinned it. In 2026 you have three practical options:
| Approach | Persistence guarantee | Best for |
|---|---|---|
| Self-hosted + pinning service | You control it | Personal archives, backups |
| Managed pinning (Pinata, Web3.Storage, Filebase, Crust) | SLA-backed, multi-region | Apps, NFTs, static sites |
| Filecoin deals via Lotus / Boost | Cryptoeconomic, verifiable | Long-term archival, audit trails |
Quick start: pin to a service via CLI
Pinata (requires prior service configuration):
# First, configure the remote pinning service (one-time setup)
ipfs pin remote service add pinata https://api.pinata.cloud/psa <JWT_TOKEN>
# Then pin
ipfs pin remote add --service=pinata --name=my-backup /ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
Web3.Storage (free tier, UCAN auth):
npx @web3-storage/w3cli space create
npx @web3-storage/w3cli upload ./my-folder
Verify a pin
ipfs pin remote ls --service=pinata
# or check via gateway:
curl -I "https://gateway.pinata.cloud/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"
Gateways: how users actually fetch content
Most users don't run a node. They use HTTP gateways. In 2026, three gateway patterns exist:
| Pattern | Example | Trust model |
|---|---|---|
| Path gateway | https://ipfs.io/ipfs/<CID> |
Trust the gateway operator |
| Subdomain gateway | https://<CID>.ipfs.dweb.link/ |
Origin isolation, CSP-friendly |
| Trustless gateway (Helia/JS-IPFS in browser) | https://<CID>.ipfs.w3s.link/ |
Client verifies blocks via CID — requires Helia in the browser for trustless verification |
Recommended public gateways (2026):
- https://ipfs.io — Protocol Labs, rate-limited
- https://dweb.link — Protocol Labs, subdomain style
- https://gateway.pinata.cloud — Pinata, generous free tier
- https://cloudflare-ipfs.com — Cloudflare, fast, path-style
- https://ipfs.filebase.io — Filebase, S3-compatible
Run your own gateway (for privacy, no rate limits):
ipfs gateway --port 8080 --subdomains
# Then: http://localhost:8080/ipfs/<CID>
Filecoin: the incentive layer (actually works now)
Filecoin launched mainnet in 2020; it stores multiple exbibytes of data according to Filecoin network stats. It's a separate blockchain that uses IPFS's content addressing (CIDs) but adds storage proofs (PoRep/PoSt) and a retrieval market. You don't need Filecoin to use IPFS, but it's the only way to get cryptoeconomically enforced persistence.
Make a storage deal (using Boost / Lotus client)
The Boost CLI syntax evolves; consult the current documentation rather than using a potentially stale inline command:
# Install Boost CLI (Filecoin's modern deal-making client)
# See: https://github.com/filecoin-project/boost
# and: https://docs.filecoin.io/
# Example workflow (commands may differ by version):
boostd init
boostd wallet import <key>
# Refer to current docs for deal-making syntax
Simpler: use a pinning service that also makes Filecoin deals (Web3.Storage, Filebase, Lighthouse, Estuary). They handle the deal pipeline; you just pin.
Practical workflows for 2026
Publish a static site (IPNS + pinning)
# 1. Build your site
npm run build # outputs ./dist
# 2. Add to IPFS
CID=$(ipfs add -r -Q ./dist)
# 3. Pin to a service (configure service first: ipfs pin remote service add ...)
ipfs pin remote add --service=pinata --name=my-site "$CID"
# 4. Publish to IPNS (create key once: ipfs key gen --type=ed25519 my-site)
ipfs name publish --key=my-site "/ipfs/$CID"
# 5. Access via gateway
# https://<peer-id>.ipfs.dweb.link/ (subdomain gateway resolves IPNS automatically)
Share a large dataset with verification
# Add with raw leaves (better for verification)
ipfs add --raw-leaves --cid-version=1 ./dataset/
# Returns root CID
# Generate a CAR file (portable archive)
ipfs dag export <ROOT_CID> > dataset.car
# Recipient verifies:
ipfs dag import dataset.car
# Then: ipfs get <ROOT_CID> -o ./dataset-verified
Private / encrypted content
IPFS is public by default. For private data:
- Encrypt before adding (age, GPG, or ipfs-encrypt)
- Private DHT (--routing=none + manual peer exchange)
- IPFS over libp2p noise — transport encryption is on by default; content is still public unless encrypted
# Encrypt with age (modern, simple)
age -r <recipient-pubkey> -o secret.tar.age secret.tar
ipfs add secret.tar.age
What's different from the 2022 article
| 2022 claim | 2026 reality |
|---|---|
| "IPFS objects store up to 256 KB" | Still true for UnixFS blocks, but HAMT sharding (since go-ipfs 0.7.0) makes directories scalable; raw leaves and CIDv1 are default |
| "FileCoin creates a strong incentive" | Filecoin works, but most users use pinning services; Filecoin deals are for archival, not hot storage |
| "No good alternative to centralization" | IPFS + pinning + gateways is production-ready for static sites, NFTs, backups, datasets; not yet for dynamic apps |
| "Versioning via commit objects" | MFS (Mutable File System) and IPNS over PubSub are the practical versioning tools; ipfs files write /path /ipfs/<CID> |
Checklist: ship something on IPFS this week
- [ ] Install Kubo (latest from releases page) and run
ipfs init --profile=server - [ ] Add a test file:
ipfs add ./test.txt→ note the CID - [ ] Fetch it via a public gateway:
curl https://dweb.link/ipfs/<CID> - [ ] Create a Pinata/Web3.Storage account and configure remote pinning:
ipfs pin remote service add ... - [ ] Pin that CID remotely
- [ ] Publish an IPNS name:
ipfs key gen --type=ed25519 my-project && ipfs name publish --key=my-project /ipfs/<CID> - [ ] Verify subdomain gateway resolution:
https://<peer-id>.ipfs.dweb.link/ - [ ] Set up a cron to re-pin weekly (or use a pinning service API)
- [ ] For archival: evaluate Filecoin via Web3.Storage or Boost (check current docs)
FAQ
Do I need to run an IPFS node to use IPFS?
No. Most users fetch content via public HTTP gateways (e.g., dweb.link, ipfs.io) and pin data using managed services like Pinata or Web3.Storage. Running a node gives you more control and helps the network.
Is IPFS anonymous?
Not by default. Your peer ID and IP addresses are visible to peers you connect to. For stronger privacy, use a VPN/Tor, run a private DHT, or use trustless gateways with Helia in the browser.
Can IPFS replace my cloud storage (Dropbox, Google Drive)?
For personal backups and file sharing, yes — if you pin reliably. For collaboration, real-time sync, and permissions, IPFS lacks native tooling; consider projects like Fission or Ceramic for that layer.
What's the difference between IPFS and Filecoin?
IPFS is a content-addressed P2P protocol for routing and transferring data. Filecoin is a separate blockchain that adds storage proofs and a token-incentivized market for persistent storage. They share CIDs and libp2p but are independent networks.
How do I update content on IPFS?
Content is immutable (CID never changes). Use IPNS (mutable pointer) or MFS (Mutable File System) to publish updates under a stable name. IPNS over PubSub resolves in seconds on modern Kubo.
Is IPFS suitable for video streaming?
For static video files, yes — chunked via UnixFS and served via gateways or range requests. For live streaming or adaptive bitrate, IPFS isn't designed; look at Livepeer or VideoCoin (separate protocols) for that use case.
Sources
- Kubo (go-ipfs) Releases
- IPFS Specifications (CID, UnixFS, Bitswap, IPNS)
- IPFS HTTP Gateway Specification
- Filecoin Documentation — Boost and Storage Deals
- Pinata API Documentation
- Web3.Storage Documentation
- Helia — Modular IPFS for JavaScript
- libp2p QUIC Transport Specification
- Filecoin Network Statistics (Filfox)