Sharing in Grove
Overview
Grove sharing is peer-to-peer and cryptographic. When you share a file, you create a signed grant that gives the recipient permission to decrypt and access it. No central server involved.
How It Works
Sharing a File
1. You select a file in the Files tab and click ๐ Share
2. A modal shows your friend peers (non-friends can't receive shares)
3. Select recipients and click Share
4. For each recipient, Grove:
- Creates a ShareGrant containing:
- Manifest hash (identifies the file)
- Encrypted file key (only this recipient can decrypt)
- Your Ed25519 signature (proves you authorized the share)
- File metadata (name, size, type)
- Pushes the grant to the recipient's cell via
POST /api/receive-grant
- Pushes the manifest and chunks so they're available
Receiving a Shared File
1. Grant arrives at your cell and is verified (Ed25519 signature check)
2. File appears in your Feed tab
3. If chunks are already on your cell โ file is immediately viewable
4. If not โ shows as "โ๏ธ Remote" with a ๐ก Fetch button
5. Click Fetch to download chunks from the sharer (or any peer holding them)
Unsharing
1. Click ๐ Unshare on a shared file
2. Select which peers to revoke
3. Grant is deleted from their cell via POST /api/revoke-grant
4. They lose access (though they may retain already-downloaded chunks)
Folder Sharing
Auto-Share Folders
When sharing a folder, you can enable auto-share:
- Any new file added to that folder is automatically shared with the same recipients
- Configured via
shared_folders in config
- Toggle per share action (checkbox in share modal)
Batch Sharing
Select multiple files with checkboxes โ batch share to same recipients.
Grant Structure
{
"manifest_hash": "sha256_of_manifest_content",
"filename": "vacation.jpg",
"file_type": "image",
"total_size": 4521984,
"encrypted_file_key": "base64_encrypted_key",
"creator_pubkey": "base64_ed25519_pubkey",
"recipient_pubkey": "base64_ed25519_pubkey",
"signature": "base64_ed25519_signature",
"granted_at": "2026-03-28T15:00:00",
"thumbnail": "base64_jpeg_thumbnail_or_null",
"source_peers": ["pubkey1", "pubkey2"]
}
Verification
- Signature is verified with creator's Ed25519 public key
- Only grants with valid signatures are shown in Feed
- Tampered grants are rejected
Feed Views
Gallery View (default)
- Images displayed as grid thumbnails
- Click to open lightbox with โ โถ navigation
- Remote images show thumbnail with โ๏ธ overlay
- Videos get ๐ฌ tiles, audio gets ๐ต tiles
List View
- Detailed list with file name, size, sender, status
- Inline preview for images/video/audio
- Download button for available files
Toggle between views with ๐ผ๏ธ / ๐ buttons. Preference saved.
Security Notes
- File key encryption: The file's decryption key is encrypted specifically for each recipient using their X25519 public key. Even other peers who store the chunks can't decrypt without the grant.
- Revocation: Unsharing deletes the grant, but if the recipient already downloaded and decrypted the file, they retain that copy. This is inherent to any sharing system โ once data is shared, you can't un-see it.
- Verification: The ๐ badge means the grant's Ed25519 signature verified successfully. โ ๏ธ means verification failed or wasn't possible.
Tips
- Share with friends only: You must add someone as a friend (๐ฅ) before sharing
- Check Feed regularly: shared files appear as soon as grants arrive
- Gallery for photos: Toggle to ๐ผ๏ธ view for the best photo sharing experience
- Auto-share for albums: Watch a folder + auto-share = automatic photo album for friends