A cross-platform intranet-based file sharing application built with Flutter, GoLang, and MinIO.
Repository Links β₯ Back to top
- Main Repository: OpenLake
- This Project Repository: File Sharing Application
- Discord Discord
About the Project β₯ Back to top
We often need to transfer files between mobile and desktop devices. Typically, this is done using WhatsApp, Telegram, or other internet-based apps, which is inefficient for local transfers.
This project enables direct file sharing over an intranet without requiring internet connectivity.
- Cross-platform intranet file sharing between multiple devices.
- End-to-End Encryption with AES-256-GCM for secure file transfers.
- Client-side encryption and decryption for maximum security.
- File integrity verification with SHA-256 hashing.
- Powered by MinIO (object storage server) for efficient file handling.
- Tech Stack:
- Frontend: Flutter
- Backend: GoLang
- File Storage: MinIO
- Encryption: AES-256-GCM with ECDH key exchange support
Docker Setup β₯ Back to top
This project includes Docker support to easily run the entire stack with a single command.
- Docker and Docker Compose installed
-
Clone the repository:
git clone https://github.com/OpenLake/File-Sharing-App.git cd File-Sharing-App
-
Start all services:
docker-compose up
-
Access the application:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- MinIO Console: http://localhost:9001
The setup uses these default environment variables:
ACCESS_KEY=minioadmin
SECRET_KEY=minioadmin123
LOCAL_IP=minio:9000
Getting Started β₯ Back to top
For local development without Docker, you'll need to set up each service manually. Please refer to the individual service directories for specific setup instructions. go run file-uploader.go
##### οΏ½ Setting up Frontend (Flutter)
1. Navigate to the Flutter directory:
```bash
cd filesharing
-
Install dependencies:
flutter pub get
-
Run the application:
# For web flutter run -d web-server --web-port 3000 # For mobile (requires device/emulator) flutter run
Usage β₯ Back to top
Once the setup is complete:
- Upload files from one device via the Flutter app.
- Files are automatically encrypted client-side using AES-256-GCM before upload.
- Files are stored securely in MinIO over your intranet.
- Download files seamlessly on other connected devices.
- Files are automatically decrypted client-side after download with integrity verification.
- Client-side encryption: Files are encrypted before leaving your device
- AES-256-GCM: Industry-standard encryption algorithm
- Integrity verification: SHA-256 hashing ensures files haven't been tampered with
- Unique keys: Each file gets a unique encryption key
- See ENCRYPTION.md for detailed security documentation
-
Start the application stack:
docker-compose up -d
-
Open your web browser and navigate to http://localhost:3000
-
Upload and share files across your network!
Example (start backend in one terminal):
cd Go
go run file-uploader.go
And then run the frontend Flutter app:
cd filesharing
flutter run -d web-server --web-port 3000
Troubleshooting β₯ Back to top
- Port conflicts: If ports 3000, 8000, 9000, or 9001 are in use, modify the port mappings in
docker-compose.yml
- Build failures: Ensure Docker has enough memory allocated (recommended: 4GB+)
- Permission issues: On Linux, you may need to run Docker commands with
sudo
- Frontend can't connect to backend: Verify the
API_BASE_URL
is correctly set - MinIO connection fails: Check if MinIO service is running and accessible
- File upload fails: Ensure proper CORS headers and file size limits
# View all service logs
docker-compose logs
# View specific service logs
docker-compose logs backend
docker-compose logs frontend
docker-compose logs minio
# Follow logs in real-time
docker-compose logs -f
Contributing β₯ Back to top
We welcome contributions from the community! π
Please read CONTRIBUTING.md for guidelines before submitting a pull request.
Maintainers β₯ Back to top
- π€ Ashish Kumar Dash
@ashish-kumar-dash - π€ Sri Varshith
@Sri-Varshith
See MAINTAINERS.md for the full list.
License β₯ Back to top
Distributed under the MIT License.
See LICENSE for details.