https://github.com/jxoesneon/ipfs
Production-ready IPFS implementation in Dart with full protocol support, P2P networking, Gateway mode, and offline capabilities. Supports mobile (Flutter) and web platforms.
https://github.com/jxoesneon/ipfs
bitswap content-addressable dart decentralized dht distributed-systems flutter github-sponsors ipfs libp2p p2p
Last synced: 29 days ago
JSON representation
Production-ready IPFS implementation in Dart with full protocol support, P2P networking, Gateway mode, and offline capabilities. Supports mobile (Flutter) and web platforms.
- Host: GitHub
- URL: https://github.com/jxoesneon/ipfs
- Owner: jxoesneon
- License: mit
- Created: 2024-10-20T02:53:33.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2026-05-14T19:47:24.000Z (about 1 month ago)
- Last Synced: 2026-05-14T20:30:14.145Z (about 1 month ago)
- Topics: bitswap, content-addressable, dart, decentralized, dht, distributed-systems, flutter, github-sponsors, ipfs, libp2p, p2p
- Language: Dart
- Homepage: https://pub.dev/packages/dart_ipfs
- Size: 82.6 MB
- Stars: 10
- Watchers: 5
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Security: SECURITY.md
- Roadmap: ROADMAP.md
Awesome Lists containing this project
README
# dart_ipfs
A complete, production-ready IPFS (InterPlanetary File System) implementation in Dart, supporting offline, gateway, and full P2P modes. Built for a seamless multi-platform experience.
[](https://pub.dev/packages/dart_ipfs)
[](https://dart.dev/)
[](https://opensource.org/licenses/MIT)
> **TL;DR**: A pure-Dart IPFS node supporting Dart VM (Windows, macOS, Linux) and Web (Chrome, Firefox, Safari). The `IpfsPlatform` abstraction automatically handles storage (File System vs. IndexedDB) and networking based on the target platform.
---
## 🌍 Multi-Platform Support
| Platform | Runtime | Storage | Networking |
|----------|---------|---------|------------|
| **Windows** | Dart VM | File System | TCP / UDP / QUIC |
| **macOS** | Dart VM | File System | TCP / UDP / QUIC |
| **Linux** | Dart VM | File System | TCP / UDP / QUIC |
| **Web** | JS / Wasm | IndexedDB | WebSocket / WebRTC |
---
## 📚 Documentation
- **[Architecture Guide](doc/ARCHITECTURE.md)** — Deep dive into the Manager-Handler pattern
- **[Wiki](https://github.com/jxoesneon/IPFS/wiki)** — Guides, Installation, Architecture
- **[API Reference](https://jxoesneon.github.io/IPFS/)** — Auto-generated Dart docs
---
## Table of Contents
- [What's New in v1.10](#-whats-new-in-v110)
- [Features](#features)
- [Quick Start](#quick-start)
- [Configuration](#configuration)
- [Use Cases](#use-cases)
- [Architecture](#architecture)
- [Security](#-security)
- [Performance](#performance)
- [Troubleshooting](#troubleshooting)
- [Examples](#examples)
- [Contributing](#contributing)
- [Roadmap](#roadmap)
- [License](#license)
---
## 🚀 What's New in v1.10
### Major Features
| Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| **IpfsPlatform** | Unified abstraction shielding core logic from platform differences. |
| **IndexedDB Storage** | Production-ready persistent storage for Web browsers. |
| **SecurityManager** | Multi-platform encrypted keystore for secure identity management.|
| **Standardization** | 100% compliance with Kubo (go-ipfs) protocol standards. |
| **Browser Testing** | Full CI/CD integration for Chrome and Firefox. |
---
## Features
### ✅ Core IPFS Functionality
- **Content-Addressable Storage**: CID v0 and v1 support
- **UnixFS**: Full file system implementation with chunking
- **DAG-PB**: MerkleDAG operations and IPLD traversal
- **CAR Files**: Import/export support
- **Pinning**: Content persistence management
### ✅ Networking & NAT Traversal
- **Bitswap 1.2.0**: Efficient block exchange with wantlist management
- **Kademlia DHT**: Distributed hash table for peer/content routing
- **AutoNAT**: Automatic NAT type detection
- Direct connectivity testing
- Symmetric NAT detection
- Periodic dialback verification
- **UPnP/NAT-PMP**: Automatic port mapping via `NatTraversalService`
- **Circuit Relay v2**: Hole-punching via relay peers
- HOP protocol (relay serving)
- STOP protocol (connection handling)
- RESERVE protocol (relay reservations)
- **libp2p Core**: Native TCP/Noise transport for standard P2P networking
- **PubSub**: Real-time messaging (Gossipsub)
- **mDNS**: Local peer discovery
- **Bootstrap Peers**: Network connectivity initialization
### ✅ Services
- **HTTP Gateway**: Read-only and writable modes
- **RPC API**: Compatible with go-ipfs API
- **IPNS**: Mutable naming system with Ed25519 signatures
- **DNSLink**: Domain-based content resolution
- **GraphSync**: Efficient graph synchronization protocol
- **Metrics**: Prometheus-compatible monitoring
### ✅ Security
- **Production Cryptography**
- secp256k1 key exchange (128-bit security)
- ChaCha20-Poly1305 AEAD encryption
- SHA-256 content hashing
- Ed25519 IPNS signatures
- **Encrypted Keystore (SEC-008)**
- AES-256-GCM encryption
- PBKDF2 key derivation
- Automatic key rotation
- Memory zeroing on lock
- **Sybil Protection (SEC-005)**
- S/Kademlia Proof-of-Work for PeerId verification
- Configurable difficulty via `SecurityConfig.dhtDifficulty`
- **Rate Limiting**
- Per-client authentication throttling
- DHT provider announcement limits
- **Content Verification**
- Automatic CID validation
- Merkle tree verification
- Block integrity checks
### ✅ Web Platform
- **`IPFSWebNode`**: Browser-compatible implementation
- **IndexedDB Storage**: Persistent local storage
- **WebSocket Transport**: Networking via secure relays
- **Bitswap & PubSub**: Full protocol support in browsers
---
## Quick Start
### Installation
Add to your `pubspec.yaml`:
```yaml
dependencies:
dart_ipfs: ^1.10.0
```
Or from Git for latest development:
```yaml
dependencies:
dart_ipfs:
git:
url: https://github.com/jxoesneon/IPFS.git
```
Then run:
```bash
dart pub get
```
### Windows Setup
**Important**: On Windows, P2P networking requires `libsodium` for cryptography.
**✅ Automatic Setup**: dart_ipfs automatically detects and installs libsodium via `winget` on first run.
**Manual Installation** (if auto-install fails):
```powershell
# Via winget (recommended)
winget install jedisct1.libsodium
# Or use offline mode (no P2P)
IPFSConfig(offline: true)
```
### Basic Usage
#### Offline Mode (Local Storage)
```dart
import 'package:dart_ipfs/dart_ipfs.dart';
void main() async {
final node = await IPFSNode.create(
IPFSConfig(
dataDir: './ipfs_data',
offline: true, // No P2P networking
),
);
await node.start();
// Add content
final cid = await node.add('Hello, IPFS!');
print('Added with CID: $cid');
// Retrieve content
final retrieved = await node.cat(cid);
print('Retrieved: $retrieved');
await node.stop();
}
```
#### Gateway Mode (HTTP Server)
```dart
final node = await IPFSNode.create(
IPFSConfig(
dataDir: './gateway_data',
offline: true,
gateway: GatewayConfig(
enabled: true,
port: 8080,
),
),
);
await node.start();
print('Gateway running at http://localhost:8080');
// Access content at: `http://localhost:8080/ipfs/`
```
#### P2P Network Mode (Full Node)
```dart
final node = await IPFSNode.create(
IPFSConfig(
dataDir: './p2p_data',
offline: false, // Enable P2P networking
network: NetworkConfig(
bootstrapPeers: [
'/dnsaddr/bootstrap.libp2p.io/p2p/...',
],
enableNatTraversal: true, // UPnP/NAT-PMP
),
),
);
await node.start();
print('P2P Node ID: ${node.peerID}');
// Node participates in DHT, Bitswap, PubSub
```
#### Web Platform (Browser)
```dart
import 'package:dart_ipfs/src/core/ipfs_node/ipfs_web_node.dart';
void main() async {
final node = IPFSWebNode(
bootstrapPeers: ['wss://relay.node.address/p2p/...'],
);
await node.start();
final cid = await node.add(Uint8List.fromList('Hello Web!'.codeUnits));
print('Added: $cid');
final data = await node.get(cid.encode());
print('Retrieved: ${String.fromCharCodes(data!)}');
}
```
---
## Configuration
### Full Configuration Reference
```dart
IPFSConfig(
// Storage
dataDir: './ipfs_data',
// Networking
offline: false,
network: NetworkConfig(
bootstrapPeers: [...],
listenAddresses: ['/ip4/0.0.0.0/tcp/4001'],
enableNatTraversal: true, // UPnP/NAT-PMP port mapping
),
// Gateway
gateway: GatewayConfig(
enabled: true,
port: 8080,
writable: false,
cacheSize: 1024 * 1024 * 1024, // 1GB
),
// RPC API
rpc: RPCConfig(
enabled: true,
port: 5001,
),
// DHT
dht: DHTConfig(
mode: DHTMode.server, // client, server, or auto
bucketSize: 20,
),
// Security
security: SecurityConfig(
dhtDifficulty: 16, // S/Kademlia PoW difficulty
rateLimitWindow: Duration(minutes: 1),
maxAuthAttempts: 5,
keyRotationInterval: Duration(days: 30),
),
// Logging
debug: false,
verboseLogging: false,
)
```
---
## Use Cases
### 1. Decentralized Storage
```dart
final file = File('document.pdf');
final bytes = await file.readAsBytes();
final cid = await node.addBytes(bytes);
print('Document CID: $cid');
// Content is permanently addressable
```
### 2. Content Distribution Network
```dart
final config = IPFSConfig(
gateway: GatewayConfig(
enabled: true,
port: 8080,
cacheSize: 1024 * 1024 * 1024,
),
);
```
### 3. Peer-to-Peer Applications
```dart
// PubSub messaging
await node.pubsub.subscribe('my-topic', (message) {
print('Received: $message');
});
await node.pubsub.publish('my-topic', 'Hello, peers!');
```
### 4. Decentralized Websites
```dart
final websiteDir = Directory('./my-website');
final rootCID = await node.addDirectory(websiteDir);
// Access via: `http://gateway/ipfs//index.html`
```
---
## Architecture
`dart_ipfs` follows a **Manager-Handler** pattern, coordinated by a `LifecycleManager`. This architecture ensures modularity, where each major responsibility (Content, Network, Protocol, Security, Storage) is handled by a specialized manager.
The **`IpfsPlatform`** abstraction layer shields the core logic from platform-specific differences, automatically switching between `dart:io` (for Desktop/Server) and `dart:html`/`idb_shim` (for Web) implementations.
```
┌─────────────────────────────────────┐
│ Application Layer │
│ (Your Dart/Flutter Application) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ dart_ipfs Public API │
│ (IPFSNode Facade & IpfsPlatform) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Service Layer │
│ (Managers: Content, Network, etc.) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Protocol Layer │
│ Bitswap │ DHT │ GraphSync │ Relay │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Transport Layer │
│ P2P (Native libp2p) │
│ AutoNAT │ Circuit Relay v2 │
│ Crypto (Ed25519 + Noise) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Storage Layer │
│ (Providers: FileStore vs IndexedDB) │
└─────────────────────────────────────┘
```
For more details, see the **[Architecture Guide](doc/ARCHITECTURE.md)**.
---
## 🛡️ Security
> **IMPORTANT**: Production use requires strict sandboxing.
> See `docker-compose.yml` for a secure reference implementation.
### Recommended Deployment
1. **Immutable Filesystem**: Run with a read-only root
2. **Non-Root Execution**: Use UID > 1000 (e.g., `10001`)
3. **Network Isolation**: Bind ports to localhost (`127.0.0.1`) only
4. **IP Diversity Limits**: Max 5 peers/IP to prevent routing table poisoning
### Encrypted Keystore
```dart
// Unlock keystore with password
await node.securityManager.unlockKeystore('your-password');
// Keys are encrypted at rest with AES-256-GCM
// Master key derived via PBKDF2
// Automatic memory zeroing on lock
```
### S/Kademlia PoW
```dart
// Enable Sybil protection in DHT
SecurityConfig(
dhtDifficulty: 16, // Require 16-bit PoW prefix
)
// Peers with insufficient PoW are rejected from routing table
```
---
## Performance
| Metric | Value |
| --------------- | ----------------------- |
| Content Hashing | ~50 MB/s (SHA-256) |
| Block Storage | ~1000 ops/sec (Hive) |
| Gateway Latency | <10ms (local cache hit) |
| P2P Handshake | <100ms (secp256k1 ECDH) |
| Memory Baseline | ~50MB + content cache |
---
## Known Limitations
None.
---
## Troubleshooting
### Node Won't Start (Windows)
**Symptom**: Hangs during startup
**Solution**: Install libsodium:
```powershell
winget install jedisct1.libsodium
```
### AutoNAT Reports "Symmetric"
**Symptom**: Peers can't connect to you
**Solution**: Enable port mapping:
```dart
NetworkConfig(enableNatTraversal: true)
```
### DHT Queries Slow
**Symptom**: `findProviders` takes >30s
**Solution**: Ensure bootstrap peers are reachable and check `dhtDifficulty` isn't too high.
### Gateway Returns 404
**Symptom**: Content not found even though added
**Solution**: Check if content is pinned:
```dart
await node.pin(cid);
```
---
## Examples
See the `example/` directory for full applications:
- **[📱 Premium Dashboard](example/ipfs_dashboard)**: Flutter desktop app with glassmorphism UI
- **[📟 CLI Dashboard](example/cli_dashboard)**: Matrix-style terminal interface
Other examples:
- [Basic Usage](example/dart_ipfs_example.dart)
- [Offline Blog](example/blog_use_case.dart)
- [P2P Networking](example/online_test.dart)
- [HTTP Gateway](example/gateway_example.dart)
- [Full Node](example/full_node_example.dart)
- [Keystore Unlock](example/keystore_unlock_example.dart)
- [libp2p Bridge Verification](example/verify_bridge.dart)
Run examples:
```bash
dart run example/blog_use_case.dart
dart run example/online_test.dart
```
---
## Testing
```bash
# Run all tests (VM)
dart test
# Run tests in Chrome (Web)
dart test -p chrome
# Run with verbose output
dart test -r expanded
# Static analysis
dart analyze
```
Expected results:
- ✅ 0 errors
- ✅ 0 warnings
- ✅ 2326 tests pass
---
## Contributing
Contributions welcome! Please:
1. Fork the repository
2. Create a feature branch
3. Write tests for new features
4. Ensure `dart analyze` and `dart test` pass
5. Submit a pull request
---
## Roadmap
### ✅ Done
- Core IPFS protocols (Bitswap, DHT, PubSub)
- Offline, Gateway, and P2P modes
- Production cryptography
- Web platform support
- WebSocket, WebRTC, and WebTransport
- WebRTC-Direct for browser-to-browser P2P
- libp2p core migration
- Circuit Relay v2
- AutoNAT
- Encrypted keystore
- S/Kademlia PoW
- 95%+ Router Coverage
### 🔄 In Progress
- Mobile optimization (Flutter performance)
- Native QUIC transport (Desktop/Server)
### 📋 Planned
- Filecoin integration
- IPFS Pinning Service API (Remote Pinning)
---
## Comparison with go-ipfs
| Feature | dart_ipfs | go-ipfs (Kubo) |
| ---------------- | ----------- | -------------- |
| Content Storage | ✅ | ✅ |
| UnixFS | ✅ | ✅ |
| CID v0/v1 | ✅ | ✅ |
| Bitswap 1.2.0 | ✅ | ✅ |
| Kademlia DHT | ✅ | ✅ |
| HTTP Gateway | ✅ | ✅ |
| RPC API | ✅ | ✅ |
| PubSub | ✅ | ✅ |
| IPNS | ✅ | ✅ |
| GraphSync | ✅ | ✅ |
| Circuit Relay v2 | ✅ | ✅ |
| AutoNAT | ✅ | ✅ |
| Language | Dart | Go |
| Mobile Support | ✅ Flutter | ❌ |
| Web Support | ✅ Dart Web | ❌ |
---
## License
MIT License — see [LICENSE](LICENSE) file for details
---
## Credits
Built with:
- [dart_libp2p](https://pub.dev/packages/dart_libp2p) — Native P2P networking
- [pointycastle](https://pub.dev/packages/pointycastle) — Cryptography
- [hive](https://pub.dev/packages/hive) — Storage
- [protobuf](https://pub.dev/packages/protobuf) — Protocol buffers
Inspired by:
- [go-ipfs (Kubo)](https://github.com/ipfs/kubo) — Reference implementation
- [js-ipfs](https://github.com/ipfs/js-ipfs) — JavaScript implementation
---
## Support
- **Issues**: [GitHub Issues](https://github.com/jxoesneon/IPFS/issues)
- **Discussions**: [GitHub Discussions](https://github.com/jxoesneon/IPFS/discussions)
- **IPFS Docs**: [docs.ipfs.tech](https://docs.ipfs.tech/)
---
**Ready to build decentralized applications? Get started with dart_ipfs today!** 🚀