Unlimited cloud storage using Discord webhooks
Discord Cloud transforms Discord webhooks into a powerful, unlimited cloud storage solution. Upload any file type, organize with folders, sync local directories, and access your data from any device.
- Unlimited Storage - No storage limits, only Discord's file size restrictions
- Multi-Platform - Windows, Android, iOS, and Web support
- Multi-Webhook Redundancy - Upload to multiple Discord servers for backup
- End-to-End Encryption - Optional AES-256 encryption for sensitive files
- Folder Sync - Automatically sync local folders to the cloud
- File Preview - View images, videos, code, and documents in-app
- Share Links - Generate secure download links (without exposing webhooks)
- Bandwidth Control - Limit upload/download speeds to avoid saturating your connection
| Home Screen | File Viewer | Settings |
|---|---|---|
| Browse and manage files | Preview any file type | Configure all options |
- Download the latest release from Releases
- Extract
discord_cloud.zip - Run
discord_cloud.exe
# Clone the repository
git clone https://github.com/yourusername/discord_cloud.git
cd discord_cloud
# Install dependencies
flutter pub get
# Build for Windows
flutter build windows --release
# Build for Android
flutter build apk --release
# Build for Web
flutter build web --release- Open Discord and go to your server
- Click Server Settings > Integrations > Webhooks
- Click New Webhook
- Give it a name (e.g., "Cloud Storage")
- Copy the webhook URL
- Paste it in Discord Cloud's setup screen
For redundancy, you can add multiple webhooks from different servers:
| Mode | Description | Webhooks Used |
|---|---|---|
| Quick | Fastest upload, no redundancy | 1 webhook |
| Balanced | Good balance of speed and safety | 2 webhooks |
| Redundant | Maximum safety, slowest | All webhooks |
- Upload Files - Drag & drop or use the file picker
- Create Folders - Organize your files with nested folders
- Bulk Operations - Select multiple files for download/delete
- Search - Find files by name or content
Discord has file size limits:
- Free users: 10 MB per file
- Nitro users: 100 MB per file
Discord Cloud automatically splits larger files into chunks and reassembles them on download.
Files are compressed with gzip before upload to:
- Reduce upload time
- Save Discord storage space
- Faster downloads
Compression level is configurable (1-9).
Three security modes:
| Mode | Description |
|---|---|
| Standard | No encryption, fastest |
| Obfuscated | Headers modified to prevent Discord scanning |
| Encrypted | Full AES-256 encryption (most secure) |
Warning: If you lose your encryption key, files cannot be recovered!
Automatically sync local folders to the cloud:
- Go to Sync screen
- Add a folder to sync
- Configure options:
- Include Subfolders - Sync nested directories
- Ignore Errors - Continue if some files fail
- Auto-Sync - Periodic automatic sync
- Priority - Order of sync operations
Control upload/download speeds:
| Mode | Description |
|---|---|
| Unlimited | Maximum speed |
| Limited | Custom MB/s limit |
| Auto 50% | Test connection, use half the speed |
Generate secure download links:
discloud://eyJuIjoibXlmaWxlLnppcCIsInMiOjEwMjQwMCwiYyI6WyJodHRwczovL2Nkbi5kaXNjb3JkLmNvbS8uLi4iXX0=
These links contain:
- File name and size
- Chunk download URLs (public CDN)
- Encryption key (if encrypted)
Important: Links do NOT contain your webhook URL, so they're safe to share!
Access your files from any device:
- Export Index - Saves file list to Discord
- Import Index - Restores file list on another device
Your files remain on Discord; only the index is synced.
lib/
├── main.dart # App entry point
├── models/
│ ├── cloud_file.dart # File model with multi-webhook support
│ └── webhook_config.dart # Webhook configuration
├── providers/
│ ├── cloud_provider.dart # Main state management
│ ├── theme_provider.dart # Theme (light/dark/system)
│ └── webhook_provider.dart # Webhook state
├── screens/
│ ├── home_screen.dart # File browser with selection mode
│ ├── setup_screen.dart # Initial webhook setup
│ ├── webhooks_screen.dart # Manage multiple webhooks
│ ├── sync_screen.dart # Folder sync configuration
│ ├── settings_screen.dart # App settings
│ ├── search_screen.dart # File search
│ ├── downloads_screen.dart # Download queue
│ └── file_viewer_screen.dart # File preview router
├── services/
│ ├── discord_service.dart # Discord API communication
│ ├── multi_webhook_service.dart # Multi-webhook upload/download
│ ├── file_system_service.dart # Virtual filesystem
│ ├── encryption_service.dart # AES-256 encryption
│ ├── sync_service.dart # Folder sync logic
│ ├── download_manager.dart # Download queue management
│ ├── bandwidth_service.dart # Speed limiting
│ ├── share_link_service.dart # Share link generation
│ ├── cloud_index_service.dart # Index export/import
│ └── auto_sync_service.dart # Background sync
└── widgets/
├── code_viewer.dart # Code editor with syntax highlighting
├── text_viewer.dart # Text editor
├── image_viewer.dart # Image viewer with zoom
└── media_player.dart # Audio/video player
Each uploaded file is stored as:
- Metadata message - JSON with file info (embedded in Discord message)
- Data chunks - Binary attachments (9MB or 95MB each)
[4 bytes: metadata length][JSON metadata][compressed data]
{
"n": "filename.ext",
"s": 1024000,
"c": "md5hash",
"t": 3,
"i": 0,
"z": true,
"d": 1705312800000
}| Field | Description |
|---|---|
n |
Original filename |
s |
Original size (bytes) |
c |
MD5 checksum |
t |
Total chunks |
i |
Chunk index |
z |
Is compressed |
d |
Created timestamp |
Files can be uploaded to multiple webhooks:
{
"webhookChunks": {
"webhook1_id": ["url1", "url2", "url3"],
"webhook2_id": ["url1", "url2", "url3"]
}
}Download attempts each webhook in order until one succeeds.
| Shortcut | Action |
|---|---|
Ctrl+Z |
Undo |
Ctrl+Y |
Redo |
Ctrl+S |
Save |
Ctrl+F |
Search |
- File Size: Discord limits individual uploads (10MB free, 100MB Nitro)
- Rate Limits: Discord may throttle rapid uploads
- URL Expiry: Discord CDN URLs may expire after some time
- No Versioning: Overwriting a file deletes the old version
- Check your internet connection
- Verify webhook URL is valid
- Try adding more webhooks for redundancy
- Enable "Ignore Errors" in sync settings
- Ensure folder path exists
- Check file permissions
- Try manual sync first
- Enable compression
- Use bandwidth limiting to avoid rate limits
- Check your internet speed
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
This project is not affiliated with Discord. Use responsibly and respect Discord's Terms of Service. The developers are not responsible for any data loss or account actions resulting from use of this software.
- Flutter team for the amazing framework
- Discord for providing the webhook API
- All contributors and testers
Made with ❤️ and Flutter
