Overview
BunnyDrive is a browser web app for storing files on IPFS (InterPlanetary File System). Think of it like a simple Drive UI: pick a file, optionally lock it with a password, pin it to IPFS, keep a local library of CIDs, and open or preview content via a gateway.
What lives on IPFS
File bytes (or encrypted ciphertext). Identified forever by a CID.
What lives in the browser
Your Library list (names, sizes, CIDs). Secrets are never stored.
No account server
There is no BunnyDrive backend. The app talks to an IPFS API you configure.
Optional encryption
AES-256-GCM with a password you choose. Encrypt before upload if you want privacy.
Upload flow
- You open Upload from the library and pick one or more files.
- Optionally enable Encrypt before upload and enter a secret.
- The browser reads the file (and encrypts it if enabled).
- Bytes are sent as multipart form data to
POST {apiUrl}/api/v0/add?pin=true&cid-version=0|1 - IPFS returns a CID (content identifier).
- BunnyDrive saves a Library entry in localStorage and shows it under Library.
Library (how we know your files)
IPFS does not tell BunnyDrive "which files this user owns." There is no login. Instead, after each successful upload the app stores a small metadata record in the browser:
localStorage key: "bunnydrive.files"
[
{
"id": "uuid",
"name": "photo.png",
"size": 12345,
"mimeType": "image/png",
"cid": "bafkrei... or Qm...",
"encrypted": false,
"uploadedAt": "2026-08-09T..."
}
]Delete in Library
Only removes the local row. It does not unpin or delete content from IPFS.
Clearing browser data
Wipes the Library. File bytes may still exist on IPFS if you still have the CID.
Encryption
Encryption is optional and happens entirely in the browser with the Web Crypto API before upload.
- Key derivation: PBKDF2, SHA-256, 250,000 iterations, random 16-byte salt
- Cipher: AES-256-GCM with a random 12-byte IV
- Payload format:
magic "BDVE" | salt | iv | ciphertext+tag - Secret handling: never uploaded, never saved in localStorage or backups
Settings
Open the gear icon in the header. Settings are stored under bunnydrive.ipfs-config.
| Setting | Purpose | Default |
|---|---|---|
| IPFS API URL | Upload / pin endpoint (Kubo HTTP API) | https://ipfs-gateway.bunnyboard.xyz |
| Gateway URL | Open / preview content by CID | https://ipfs-gateway.bunnyboard.xyz/ipfs |
| CID version | CIDv1 (baf...) or CIDv0 (Qm...) | CIDv1 |
Browsers enforce CORS. A local Kubo node must allow origins like http://localhost:3000, or uploads from the web app will fail.
Library backup and restore
Because the Library is only in this browser, use Backup library on the library header to download a JSON file of your index.
{
"app": "bunnydrive",
"version": 1,
"exportedAt": "...",
"files": [ /* FileEntry list */ ]
}- Backup downloads metadata only (not file bytes).
- Restore replaces the current Library with the backup file.
- Encryption secrets are never included in the backup.
Important limits
- No multi-device sync unless you backup/restore the library JSON yourself.
- No remote pin management UI (unpin, listing all remote pins, folders).
- Content availability on public IPFS depends on pins and the network, not on BunnyDrive alone.
- Very large files need enough browser memory (file is read fully before upload / encrypt).